RubyLLM: Framework Ruby LLM Cho Mọi Nhà Cung Cấp
RubyLLM cho developer Ruby một API chat duy nhất để gọi OpenAI, Anthropic, Gemini, xAI, Bedrock, Ollama và nhiều nhà cung cấp khác, nên đổi model chỉ là đổi một chuỗi ký tự thay vì viết lại code client. RubyLLM còn có gọi tool, agent, structured output, và embeddings, xây trên đúng ba dependency: Faraday, Zeitwerk và Marcel. Hãy dùng trong một app Ruby hoặc Rails muốn sự linh hoạt đó; bỏ qua nếu stack của bạn không phải Ruby.
RubyLLM là gì?
RubyLLM là một framework và gem Ruby để xây dựng các tính năng AI — chat, agent, tool, và workflow nhiều bước — đằng sau một interface duy nhất thay vì một client riêng cho từng nhà cung cấp. Theo README, RubyLLM giao tiếp với OpenAI, xAI, Anthropic, Gemini, VertexAI, Bedrock, DeepSeek, Mistral, Ollama, OpenRouter, Perplexity, GPUStack, và bất kỳ endpoint nào tương thích OpenAI, cùng tích hợp acts_as_chat cho Rails để lưu hội thoại.
Năng lực cốt lõi
- ✓API chat thống nhất — RubyLLM.chat và chat.ask — hoạt động giống nhau trên OpenAI, xAI, Anthropic, Gemini, VertexAI, Bedrock, DeepSeek, Mistral, Ollama, OpenRouter, Perplexity, GPUStack, và bất kỳ endpoint tương thích OpenAI nào, theo README.
- ✓Input multimodal qua tuỳ chọn with: trên chat.ask, nhận ảnh, video, audio, PDF, file code, hoặc một mảng nhiều file trong cùng một lần gọi.
- ✓Streaming response bằng cách truyền một block vào chat.ask và in chunk.content khi từng phần trả về.
- ✓Gọi tool: subclass RubyLLM::Tool, định nghĩa method execute, rồi gắn vào bằng chat.with_tools(YourTool).
- ✓Agent: các subclass của RubyLLM::Agent gói một model, instructions, và danh sách tool vào một class assistant dùng lại được.
- ✓Structured output: subclass RubyLLM::Schema khai báo field (string, number, array), rồi chat.with_schema(YourSchema).ask trả về JSON đúng cấu trúc đó.
- ✓Các lệnh tạo nội dung độc lập — RubyLLM.paint để tạo ảnh, RubyLLM.animate để tạo video, RubyLLM.embed để tạo embeddings, RubyLLM.transcribe và RubyLLM.speak cho audio, RubyLLM.ocr để chuyển tài liệu thành markdown, và RubyLLM.moderate để kiểm duyệt nội dung.
- ✓Tích hợp Rails qua acts_as_chat trên một model ActiveRecord, cùng các generator để cài đặt, chạy migration, nạp model registry, và một chat UI tuỳ chọn.
Ứng dụng AI thực tế
- •Thêm tính năng chat vào app Rails bằng acts_as_chat trên một model ActiveRecord, để hội thoại được lưu lại mà không phải tự viết lớp lưu trữ.
- •Xây dựng agent biết dùng tool — chính ví dụ trong README nối một tool Weather vào agent WeatherAssistant, gọi một API HTTP thật qua RubyLLM::Tool#execute.
- •Chạy phân tích multimodal bằng cách đưa thẳng ảnh, video, audio, PDF, hoặc file code vào chat.ask qua tuỳ chọn with: thay vì viết code trích xuất riêng.
- •Tạo embeddings bằng RubyLLM.embed để tìm kiếm hoặc tra cứu kiểu retrieval trên cùng nhà cung cấp bạn đã dùng cho chat.
- •Trích xuất JSON có cấu trúc từ input phi cấu trúc bằng cách định nghĩa một RubyLLM::Schema rồi gọi chat.with_schema(...).ask trên một tài liệu hoặc file.
- •Chạy các job lớn với chi phí thấp hơn qua RubyLLM.batch, được README mô tả là xử lý batch phía nhà cung cấp với giá bằng một nửa.
Bắt đầu với RubyLLM
RubyLLM cài đặt như mọi gem khác: thêm gem 'ruby_llm' vào Gemfile rồi chạy bundle install. Cấu hình API key của nhà cung cấp trong một initializer — ví dụ trong README là config/initializers/ruby_llm.rb với RubyLLM.configure { |config| config.openai_api_key = ENV['OPENAI_API_KEY'] }. Trong app Rails, README thêm một bước generator: bin/rails generate ruby_llm:install, rồi bin/rails db:migrate, rồi bin/rails ruby_llm:load_models (README ghi chú có từ v1.13+) để nạp model registry; generator tuỳ chọn bin/rails generate ruby_llm:chat_ui dựng sẵn một giao diện chat truy cập tại /chats. Tài liệu đầy đủ nằm ở rubyllm.com; bản thân README không nêu phiên bản Ruby hay Rails tối thiểu.
Ví dụ code với RubyLLM
Mẫu cơ bản là chat = RubyLLM.chat, rồi chat.ask "your question". Phân tích file dùng cùng tuỳ chọn with: — chat.ask "What's in this image?", with: "photo.jpg" — và README cho thấy nó cũng nhận video, audio, PDF, file code, hoặc một mảng nhiều file cùng lúc. Streaming thay lệnh gọi thường bằng một block: chat.ask("Tell me a story") { |chunk| print chunk.content }. Gọi tool nghĩa là subclass RubyLLM::Tool với một description và method execute, rồi gọi chat.with_tools(YourTool).ask(...); RubyLLM::Agent gói một model, instructions, và tool vào một class mà bạn khởi tạo rồi hỏi trực tiếp, như ví dụ WeatherAssistant trong README. Structured output hoạt động bằng cách subclass RubyLLM::Schema để khai báo field, rồi gọi chat.with_schema(YourSchema).ask(...) để nhận response đúng cấu trúc đó. Các lệnh độc lập phủ phần còn lại: RubyLLM.paint cho ảnh, RubyLLM.animate cho video, RubyLLM.embed cho embeddings, RubyLLM.transcribe và RubyLLM.speak cho audio, RubyLLM.ocr để chuyển tài liệu thành markdown, và RubyLLM.moderate để kiểm tra an toàn nội dung.
Điểm mạnh
- ✓Một interface chat duy nhất — RubyLLM.chat, chat.ask — hoạt động giống nhau trên OpenAI, Anthropic, Gemini, xAI, Bedrock, Ollama, và các nhà cung cấp còn lại được liệt kê, theo README.
- ✓Chỉ ba dependency lúc runtime (Faraday, Zeitwerk, Marcel), nên thêm RubyLLM vào không kéo theo một cây dependency lớn.
- ✓Input và tạo nội dung multimodal vượt xa văn bản thuần: ảnh, video, audio, PDF, và file code làm input chat, cộng thêm RubyLLM.paint, RubyLLM.animate, RubyLLM.transcribe, RubyLLM.speak, và RubyLLM.ocr như các lệnh độc lập.
- ✓Tích hợp Rails là một đường dẫn chính thức — acts_as_chat cùng các generator để cài đặt, migration, nạp model, và một chat UI tuỳ chọn, chứ không phải thứ gắn thêm sau.
- ✓Giấy phép MIT, nên không có ràng buộc copyleft hay khoá vendor nào đến từ bản thân framework.
Những điều cần cân nhắc với RubyLLM
- △README không nêu phiên bản Ruby hay Rails tối thiểu, nên khả năng tương thích với một app cũ là điều bạn không thể xác nhận nếu chưa thử.
- △Generator bin/rails ruby_llm:load_models được README ghi chú là 'v1.13+', nhưng README không cho một số phiên bản hiện tại tổng quát nào để bạn đối chiếu bản cài đặt của mình.
- △Hỗ trợ async chỉ xuất hiện dưới dạng 'Fiber-based concurrency' trong danh sách tính năng; README không nói nó phụ thuộc runtime hay scheduler nào, hay cách bật nó lên.
- △RubyLLM.batch được mô tả là chạy 'với giá bằng một nửa', nhưng README không nói nhà cung cấp nào trong danh sách thực sự hỗ trợ xử lý batch phía nhà cung cấp.
- △Tài liệu sử dụng chi tiết nằm ngoài repo, ở rubyllm.com — bản thân README chỉ nêu phần cơ bản, nên bất cứ điều gì ngoài API cốt lõi đều phải rời khỏi GitHub để tìm.
- △Người dùng production duy nhất được nêu tên trong README là chatwithwork.com; không có danh sách adopter rộng hơn hay số liệu quy mô nào để đánh giá độ trưởng thành trong production.
Các lựa chọn AI khác cho Ruby
Câu hỏi thường gặp
README của RubyLLM liệt kê OpenAI, xAI, Anthropic, Gemini, VertexAI, Bedrock, DeepSeek, Mistral, Ollama, OpenRouter, Perplexity, GPUStack, và bất kỳ API nào tương thích OpenAI là các nhà cung cấp được hỗ trợ.
RubyLLM có sẵn các generator riêng cho Rails — bin/rails generate ruby_llm:install thêm phần tích hợp, còn acts_as_chat trên một model ActiveRecord lưu lại hội thoại, kèm một generator chat UI tuỳ chọn.
RubyLLM được phát hành theo giấy phép MIT, như được liệt kê trên repository GitHub của nó.
RubyLLM liệt kê Ollama trong số các nhà cung cấp được hỗ trợ ở README, nên model chạy local qua Ollama vẫn dùng chung interface RubyLLM.chat như các nhà cung cấp hosted.
chat.ask của RubyLLM nhận ảnh, video, audio, PDF, và file code qua tuỳ chọn with:, còn các lệnh riêng phủ thêm tạo ảnh (RubyLLM.paint), tạo video (RubyLLM.animate), chuyển giọng nói thành văn bản (RubyLLM.transcribe), và văn bản thành giọng nói (RubyLLM.speak).
RubyLLM có method RubyLLM.moderate, được liệt kê trong danh sách tính năng của README như một cách kiểm tra nội dung có an toàn hay không.
Vấn đề RubyLLM giải quyết
Mỗi nhà cung cấp AI phát hành client Ruby riêng với cấu trúc request, định dạng response, và cơ chế streaming riêng, nên một app Rails đã xây dựng dựa trên OpenAI phải viết lại toàn bộ lớp tích hợp — không chỉ đổi tên model — nếu muốn thử Claude. README của RubyLLM đóng khung lý do tồn tại của dự án quanh đúng vấn đề đó: một interface duy nhất — RubyLLM.chat, chat.ask, chat.with_tools — hoạt động giống nhau dù backend là GPT, Claude, hay một model Ollama chạy local, nên đổi nhà cung cấp trở thành một thay đổi cấu hình thay vì viết lại code.
Ai nên dùng — và ai nên bỏ qua
Hãy thử RubyLLM nếu bạn đang xây dựng trong một app Ruby hoặc Rails và muốn một interface duy nhất cho chat, tool, agent, và các lệnh gọi multimodal trên nhiều nhà cung cấp như OpenAI, Anthropic, và Gemini thay vì tự viết client cho từng bên. Bỏ qua nếu stack của bạn không phải Ruby — toàn bộ giá trị của RubyLLM là đưa các lệnh gọi AI vào đúng phong cách Ruby và Rails, nên nó không có gì cho một project Python hay Node — hoặc nếu bạn cần tài liệu sử dụng chi tiết nằm ngay trong repo, vì README dồn phần chi tiết sang rubyllm.com.
Repo liên quan
Vẫn đang phân vân về ruby_llm?
Một cú bấm sẽ gửi câu hỏi kèm trang này cho AI — xem AI nói gì về ruby_llm.
