- RubyLLM ช่วยให้สร้างเวิร์กโฟลว์ AI เช่น แชตบอต, AI agent, RAG และการสร้างคอนเทนต์ในแอป Ruby ได้ภายใต้เฟรมเวิร์กเดียว
- รองรับ GPT, Claude และ Ollama แบบโลคัลผ่านอินเทอร์เฟซเดียวกัน โดยจำกัด dependency ไว้เพียง 3 ตัวคือ Faraday, Zeitwerk และ Marcel
- ครอบคลุมไม่ใช่แค่แชต แต่รวมถึงการวิเคราะห์ภาพและวิดีโอ, การถอดเสียงเสียงพูด, การประมวลผลเอกสาร, การสร้างภาพ, embeddings, moderation, การเรียกใช้ tools, structured output และ streaming
- บน Rails มี
acts_as_chat, การโหลดโมเดล และตัวสร้าง UI แชตแบบเลือกติดตั้ง พร้อมเปิดใช้อินเทอร์เฟซแชตได้ทันทีที่http://localhost:3000/chats - รองรับ OpenAI, xAI, Anthropic, Gemini, VertexAI, Bedrock, DeepSeek, Mistral, Ollama, OpenRouter, Perplexity, GPUStack และ OpenAI-compatible API
เฟรมเวิร์ก AI แบบรวมศูนย์สำหรับ Ruby
- RubyLLM เป็นเครื่องมือสำหรับใช้งานผู้ให้บริการ AI รายใหญ่ผ่านเฟรมเวิร์ก Ruby เดียว
- มุ่งเป้าสำหรับการสร้างแชตบอต, AI agent, แอปพลิเคชัน RAG, ตัวสร้างคอนเทนต์ และเวิร์กโฟลว์ AI อื่น ๆ
- มีการใช้งานจริงอยู่ใน Chat with Work
อินเทอร์เฟซที่ซ่อนความต่างของ API แต่ละผู้ให้บริการ
- มุ่งลดปัญหาที่แต่ละผู้ให้บริการ AI มี client, API, รูปแบบการตอบกลับ และแนวปฏิบัติที่ต่างกัน
- ใช้งาน GPT, Claude และ Ollama แบบโลคัลได้ผ่าน อินเทอร์เฟซเดียวกัน
- ใช้ dependency เพียง 3 ตัวคือ Faraday, Zeitwerk และ Marcel
วิธีใช้งานพื้นฐาน
- คำถามง่าย ๆ ใช้
RubyLLM.chatเพื่อสร้างอ็อบเจ็กต์แชต และรันด้วยchat.ask- ตัวอย่าง:
chat.ask "What's the best way to learn Ruby?"
- ตัวอย่าง:
- การวิเคราะห์ไฟล์ใช้วิธีส่งไฟล์ผ่านออปชัน
with:- รูปภาพ:
ruby_conf.jpg - วิดีโอ:
video.mp4 - เสียง:
meeting.wav - PDF:
contract.pdf - โค้ด:
app.rb
- รูปภาพ:
- หลายไฟล์สามารถส่งเป็นอาร์เรย์เพื่อวิเคราะห์พร้อมกันได้
- ตัวอย่าง:
with: ["diagram.png", "report.pdf", "notes.txt"]
- ตัวอย่าง:
- Streaming response ส่งบล็อกเข้าไปเพื่อจัดการ
chunk.content
ขอบเขตความสามารถด้าน AI
- ใช้
RubyLLM.paintเพื่อ สร้างภาพ - ใช้
RubyLLM.embedเพื่อสร้าง embeddings ของข้อความ - ใช้
RubyLLM.transcribeเพื่อถอดเสียงเป็นข้อความ - ใช้
RubyLLM.moderateเพื่อตรวจสอบความปลอดภัยของคอนเทนต์ - สามารถให้ AI เรียกเมธอด Ruby ได้ด้วยคลาสที่สืบทอดจาก
RubyLLM::Tool- ตัวอย่าง tool
Weatherรับละติจูดและลองจิจูด แล้วดึงข้อมูลสภาพอากาศปัจจุบันจาก Open-Meteo API
- ตัวอย่าง tool
- สามารถนิยาม agent ที่นำกลับมาใช้ซ้ำได้พร้อมคำสั่งและ tools ด้วย
RubyLLM::Agent- ตัวอย่าง
WeatherAssistantใช้โมเดลgpt-5-nano, คำสั่งให้ตอบแบบกระชับ และ toolWeather
- ตัวอย่าง
- สามารถกำหนดสคีมาของ structured output ด้วย
RubyLLM::Schema- ตัวอย่าง
ProductSchemaกำหนดฟิลด์name,price,features
- ตัวอย่าง
รายการความสามารถและการรองรับผู้ให้บริการ
- ความสามารถหลักมีดังนี้
- Chat: AI แบบโต้ตอบผ่าน
RubyLLM.chat - Vision: วิเคราะห์ภาพและวิดีโอ
- Audio: การถอดเสียงและทำความเข้าใจเสียงผ่าน
RubyLLM.transcribe - Documents: ดึงข้อมูลจากไฟล์ประเภท PDF, CSV, JSON เป็นต้น
- Image generation: สร้างภาพผ่าน
RubyLLM.paint - Embeddings: สร้าง embeddings ผ่าน
RubyLLM.embed - Moderation: ตรวจสอบความปลอดภัยของคอนเทนต์ผ่าน
RubyLLM.moderate - Tools: ให้ AI เรียกเมธอด Ruby
- Agents: ผู้ช่วยที่นำกลับมาใช้ซ้ำได้ผ่าน
RubyLLM::Agent - Structured output: เอาต์พุตแบบมีโครงสร้างตาม JSON schema
- Streaming: การตอบกลับแบบเรียลไทม์ด้วยบล็อก
- Rails: การเชื่อมกับ ActiveRecord ผ่าน
acts_as_chat - Async: concurrency แบบ Fiber
- Model registry: โมเดลมากกว่า 800 รายการ พร้อมการตรวจจับความสามารถและข้อมูลราคา
- Extended thinking: ควบคุม, ดู และบันทึกกระบวนการคิดของโมเดล
- Chat: AI แบบโต้ตอบผ่าน
- ผู้ให้บริการที่รองรับได้แก่ OpenAI, xAI, Anthropic, Gemini, VertexAI, Bedrock, DeepSeek, Mistral, Ollama, OpenRouter, Perplexity, GPUStack และ OpenAI-compatible API
การติดตั้งและการเชื่อมกับ Rails
- ติดตั้งโดยเพิ่ม
gem 'ruby_llm'ลงใน Gemfile แล้วรันbundle install - ตั้งค่า API key ใน
config/initializers/ruby_llm.rb- ตัวอย่าง:
config.openai_api_key = ENV['OPENAI_API_KEY']
- ตัวอย่าง:
- การเชื่อมกับ Rails ติดตั้งด้วยคำสั่งต่อไปนี้
bin/rails generate ruby_llm:installbin/rails db:migratebin/rails ruby_llm:load_models # v1.13+
- สามารถเพิ่ม UI แชตได้แบบเลือกติดตั้ง
bin/rails generate ruby_llm:chat_ui
- หากประกาศ
acts_as_chatใน Rails model ก็จะใช้แชตที่อิงกับ ActiveRecord ได้- โมเดลตัวอย่างประกาศ
acts_as_chatในChat < ApplicationRecord - สามารถสร้างแชตด้วย
Chat.create! model: "claude-sonnet-4"และส่งไฟล์เพื่อถามคำถามได้
- โมเดลตัวอย่างประกาศ
- อินเทอร์เฟซแชตที่เตรียมไว้สามารถเปิดได้ที่
http://localhost:3000/chats
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
RubyLLM ดีเกินคาด และในแง่การใช้งานก็ใกล้เคียงกับ AI framework ของ Vercel
มันพยายามหาสมดุลระหว่างความสะดวกแบบใช้งานได้ทันทีและความยืดหยุ่น ซึ่งก็มีความยากอยู่ แต่โดยรวมถือว่าดี
ปัญหาใหญ่ที่เจอจริงคือแคชทำงานไม่สม่ำเสมอ เช่น xAI รองรับแค่ completions API และคืน thought signature ผิด ทำให้เกิดปัญหา
https://github.com/crmne/ruby_llm/blob/main/lib/ruby_llm/pro...
มี gem โอเพนซอร์สชื่อ Raix ที่สร้างอยู่บน abstraction ของ RubyLLM และมีคนใช้อยู่พอสมควร
https://github.com/OlympiaAI/raix
ผมใช้ RubyLLM ในโปรดักชันอยู่และชอบมาก เป็นเฟรมเวิร์กที่ยอดเยี่ยมและใช้งานง่าย
การที่ Responses API ยังไม่รองรับในตัวก็ทำให้น่าหงุดหงิดอย่างที่คนอื่นว่าไว้ และดูเหมือนเป็นช่องโหว่ใหญ่พอสมควร แม้จะมีคอนเน็กเตอร์ที่นักพัฒนาคนอื่นทำไว้ แต่ก็มีบั๊กและคุณภาพไม่เท่า gem หลัก
รอติดตามการพัฒนาต่อจากนี้ โดยเฉพาะ 2.0 ตอนนี้ถ้ามี Responses API แบบเนทีฟแล้ว ผมตั้งใจจะกลับไปดูแน่นอน
แต่ OpenAI มีโปรโตคอลอยู่ 2 แบบที่ความสามารถต่างกัน และถ้าจะเข้าถึงทุกโมเดลของ VertexAI ก็ต้องรองรับหลายโปรโตคอลภายใต้ผู้ให้บริการเดียว ทำให้สมมติฐานนี้ใช้ไม่ได้อีกต่อไป
เลยจำเป็นต้องรีแฟกเตอร์ครั้งใหญ่เพื่อแยก Protocols ออกจาก Providers และทำ routing แบบโปร่งใสไปยัง Protocol ที่ต่างกันตามโมเดล แม้อยู่ภายใต้ Provider เดียวกัน งานนี้จะรวมอยู่ใน RubyLLM 2.0
ถ้าสนใจ นี่คือคอมมิตที่น่าดู: https://github.com/crmne/ruby_llm/commit/d398354da493570b050...
https://github.com/crmne/ruby_llm/commit/0875ce2dfeae9d28a3a...
RubyLLM ใช้งานง่ายมาก ผมใช้มันเยอะในโปรเจ็กต์หนึ่งเมื่อปีที่แล้ว
ข้อเสียคือวัดผลและใส่ instrumentation เพื่อให้ได้ observability สำหรับการติดตาม แบบจริงจังค่อนข้างยาก และยังมีแพตเทิร์นที่ลบโมเดลภายในตอน retry ทำให้ประวัติที่เห็นดูสะอาด แต่ไม่ค่อยเหมาะถ้าจะดูลำดับการเรียก API จริงอย่างแม่นยำ
https://rubyllm.com/instrumentation/
ผมกำลังทำบางอย่างที่มุ่งใช้ Claude อย่างเดียว และไม่มีแผนจะออกจาก ecosystem ของ Anthropic เลย เลยสงสัยว่าแม้ในกรณีนี้ RubyLLM ยังมีข้อดีกว่าการใช้ Ruby SDK ของ Anthropic โดยตรงหรือไม่
พูดอีกแบบคือ มันใกล้กับการเลือกระหว่าง Fog กับ aws-sdk-s3 หรือใกล้กับการเลือกระหว่าง Active Storage กับ aws-sdk-s3 มากกว่ากัน
จุดเด่นของ RubyLLM คือ DSL ที่ chain เมธอดได้แบบ ActiveRecord, โครงสร้างสำหรับจัดการเอเจนต์ เครื่องมือ และพรอมป์ต์ รวมถึงความสามารถในการย้ายไปมาหรือทดสอบจาก Anthropic ไป DeepSeek ได้ง่าย ซึ่งเคยช่วยลดต้นทุนได้มากกว่า 90%
การมี ActiveRecord integration ที่ทำให้บันทึกแต่ละแชตลงฐานข้อมูลได้ด้วยแค่
bin/rails generate ruby_llm:installก็ดีมากเหมือนกัน การดึงประวัติแชตที่บันทึกไว้เป็นระยะแล้วป้อนให้ claude code เพื่อช่วยปรับแต่งคำสั่งของเอเจนต์ก็มีประโยชน์มากแค่ในมุมการรับมือเหตุขัดข้อง ก็ต้องคิดแล้วว่าถ้าวันสำคัญที่ต้องใช้บริการพอดี Anthropic API ล่มขึ้นมาจะทำอย่างไร
ผมใช้ RubyLLM ใน side project และมันยอดเยี่ยมมาก
น่าสนใจที่สิ่งซึ่งเคยถูกพูดถึงในช่วงถามตอบและคอมเมนต์ของงาน SF Ruby conf เมื่อปีที่แล้ว ได้ออกมาเป็นฟีเจอร์ของ ecosystem แล้ว: https://youtu.be/y535u1EWqAg?si=rbyv52T035apKwQk
เมื่อหลายเดือนก่อนผมลองใช้ RubyLLM แบบค่อนข้างลึก และรู้สึกว่าทั้งการออกแบบและการติดตั้งทำได้ดีมาก
ผมมี LLM client ที่ทำเองในภาษา Lisp หลายตัว ถึงขนาดเคยคิดจะหยิบบางส่วนของการออกแบบ RubyLLM ไปใช้เลย การเลียนแบบคือคำชม
ขอบคุณที่พา Ruby เข้ามาในชุมชน AI และทำงานนี้แบบโอเพนซอร์ส
ภาษาที่ดีควรได้รับการสำรวจและความสนใจมากกว่านี้
Laravel ก็มีไลบรารีคล้ายกัน
https://laravel.com/docs/13.x/ai-sdk
ผมก็ใช้ RubyLLM ในโปรดักชันเหมือนกัน และมันเป็น ไลบรารีที่สง่างามที่สุด ในกลุ่มไลบรารีแนวนี้เท่าที่เคยเห็นมา
ผมยังชอบวิธีดูแล issue tracker ของมันด้วย ถ้าเลือก “Feature Request” ระบบจะให้คุณอธิบายว่าลองหาวิธีอ้อมไว้ยังไงบ้าง และทำไมถึงคิดว่าควรอยู่ใน RubyLLM ซึ่งช่วยกันไม่ให้ขอบเขตของโปรเจ็กต์บานปลายไม่รู้จบ