1 điểm bởi GN⁺ 4 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • RubyLLM cho phép xây dựng các quy trình AI như chatbot, AI agent, RAG và tạo nội dung trong ứng dụng Ruby bằng một framework duy nhất
  • Có thể làm việc với GPT, Claude, Ollama cục bộ và nhiều dịch vụ khác qua cùng một giao diện, với số phụ thuộc được giới hạn ở 3 thư viện: Faraday, Zeitwerk và Marcel
  • Không chỉ trò chuyện mà còn bao quát phân tích hình ảnh·video, chép lời âm thanh, xử lý tài liệu, tạo ảnh, embedding, moderation, gọi công cụ, đầu ra có cấu trúc và streaming
  • Trên Rails, cung cấp acts_as_chat, tải model và trình tạo UI chat tùy chọn, đồng thời có thể mở ngay giao diện chat sẵn dùng tại http://localhost:3000/chats
  • Hỗ trợ OpenAI, xAI, Anthropic, Gemini, VertexAI, Bedrock, DeepSeek, Mistral, Ollama, OpenRouter, Perplexity, GPUStack và API tương thích OpenAI

Một framework AI thống nhất cho Ruby

  • RubyLLM là công cụ nhằm xử lý các nhà cung cấp AI lớn trong một framework Ruby duy nhất
  • Hướng đến việc xây dựng chatbot, AI agent, ứng dụng RAG, trình tạo nội dung và các quy trình AI khác
  • Đang được sử dụng thực tế tại Chat with Work

Giao diện che giấu khác biệt API giữa các nhà cung cấp

  • Tập trung vào việc giảm bớt vấn đề khi mỗi nhà cung cấp AI có client, API, định dạng phản hồi và quy ước khác nhau
  • Có thể sử dụng GPT, Claude và Ollama cục bộ bằng cùng một giao diện
  • Chỉ dùng 3 phụ thuộc là Faraday, ZeitwerkMarcel

Cách sử dụng cơ bản

  • Với câu hỏi đơn giản, tạo đối tượng chat bằng RubyLLM.chat rồi thực thi bằng chat.ask
    • Ví dụ: chat.ask "What's the best way to learn Ruby?"
  • Phân tích tệp bằng cách truyền tệp vào tùy chọn with:
    • Hình ảnh: ruby_conf.jpg
    • Video: video.mp4
    • Âm thanh: meeting.wav
    • PDF: contract.pdf
    • Mã nguồn: app.rb
  • Có thể truyền nhiều tệp dưới dạng mảng để phân tích cùng lúc
    • Ví dụ: with: ["diagram.png", "report.pdf", "notes.txt"]
  • Với phản hồi streaming, truyền block để xử lý chunk.content

Phạm vi tính năng AI

  • Dùng RubyLLM.paint để tạo ảnh
  • Dùng RubyLLM.embed để tạo embedding văn bản
  • Dùng RubyLLM.transcribe để chép lời âm thanh thành văn bản
  • Dùng RubyLLM.moderate để kiểm tra độ an toàn của nội dung
  • Có thể cho AI gọi phương thức Ruby bằng lớp kế thừa RubyLLM::Tool
    • Ví dụ, công cụ Weather nhận vĩ độ và kinh độ rồi lấy dữ liệu thời tiết hiện tại từ API Open-Meteo
  • Có thể định nghĩa agent tái sử dụng với chỉ thị và công cụ bằng RubyLLM::Agent
    • Ví dụ, WeatherAssistant sử dụng model gpt-5-nano, chỉ thị trả lời ngắn gọn và công cụ Weather
  • Có thể định nghĩa schema đầu ra có cấu trúc bằng RubyLLM::Schema
    • Ví dụ, ProductSchema định nghĩa các trường name, price, features

Danh sách tính năng và hỗ trợ nhà cung cấp

  • Các tính năng chính gồm có
    • Chat: AI hội thoại dựa trên RubyLLM.chat
    • Vision: phân tích hình ảnh và video
    • Audio: chép lời và hiểu âm thanh dựa trên RubyLLM.transcribe
    • Documents: trích xuất từ các loại tệp như PDF, CSV, JSON
    • Image generation: tạo ảnh dựa trên RubyLLM.paint
    • Embeddings: tạo embedding dựa trên RubyLLM.embed
    • Moderation: kiểm tra độ an toàn nội dung dựa trên RubyLLM.moderate
    • Tools: AI gọi phương thức Ruby
    • Agents: trợ lý tái sử dụng dựa trên RubyLLM::Agent
    • Structured output: đầu ra có cấu trúc dựa trên JSON schema
    • Streaming: phản hồi thời gian thực dựa trên block
    • Rails: tích hợp ActiveRecord dựa trên acts_as_chat
    • Async: đồng thời dựa trên Fiber
    • Model registry: hơn 800 model kèm phát hiện tính năng và thông tin giá
    • Extended thinking: điều khiển, xem và lưu quá trình suy luận của model
  • Các nhà cung cấp được hỗ trợ là OpenAI, xAI, Anthropic, Gemini, VertexAI, Bedrock, DeepSeek, Mistral, Ollama, OpenRouter, Perplexity, GPUStack và API tương thích OpenAI

Cài đặt và tích hợp Rails

  • Để cài đặt, thêm gem 'ruby_llm' vào Gemfile rồi chạy bundle install
  • Khóa API được thiết lập trong config/initializers/ruby_llm.rb
    • Ví dụ: config.openai_api_key = ENV['OPENAI_API_KEY']
  • Tích hợp Rails được cài bằng các lệnh sau
    • bin/rails generate ruby_llm:install
    • bin/rails db:migrate
    • bin/rails ruby_llm:load_models # v1.13+
  • Có thể thêm UI chat một cách tùy chọn
    • bin/rails generate ruby_llm:chat_ui
  • Nếu khai báo acts_as_chat trong model Rails, có thể dùng chat dựa trên ActiveRecord
    • Model ví dụ khai báo acts_as_chat trong Chat < ApplicationRecord
    • Có thể tạo chat bằng Chat.create! model: "claude-sonnet-4" rồi truyền tệp để đặt câu hỏi
  • Giao diện chat dựng sẵn có thể mở tại http://localhost:3000/chats

1 bình luận

 
Ý kiến trên Hacker News
  • RubyLLM hóa ra khá tốt, về mặt khả năng sử dụng thì gần với framework AI của Vercel
    Nó cố gắng cân bằng giữa sự tiện lợi chạy được ngay và tính linh hoạt; điều đó cũng khiến bài toán khó hơn, nhưng nhìn chung vẫn ổn
    Bất tiện lớn thực sự tôi gặp phải là cache không phải lúc nào cũng hoạt động. Ví dụ, xAI chỉ hỗ trợ completions API và trả về thought signature sai nên phát sinh vấn đề

  • Có gem mã nguồn mở Raix được xây trên lớp trừu tượng của RubyLLM và được dùng khá nhiều
    https://github.com/OlympiaAI/raix

  • Tôi đang dùng RubyLLM trong production và rất thích nó. Đây là một framework xuất sắc và dễ dùng
    Việc Responses API không được hỗ trợ sẵn đúng là gây bực như người khác nói, và có vẻ là một thiếu sót lớn. Có connector do nhà phát triển khác làm, nhưng có bug và chất lượng không cao bằng gem chính
    Tôi rất mong chờ quá trình phát triển sắp tới, đặc biệt là 2.0. Giờ nếu Responses API đã được đưa vào native thì tôi nhất định sẽ xem lại

    • Lý do RubyLLM 1.x chưa triển khai Responses API là vì nội bộ của nó trên thực tế đã ngầm giả định rằng provider và protocol có quan hệ 1:1
      OpenAI có 2 protocol với các tính năng khác nhau, và để truy cập mọi model của VertexAI thì cần hỗ trợ nhiều protocol dưới một provider duy nhất, nên giả định đó không còn đúng nữa
      Vì vậy cần một đợt refactor lớn để tách Protocols và Providers, đồng thời định tuyến minh bạch theo từng model sang các Protocol khác nhau ngay cả dưới cùng một Provider. Công việc này sẽ được đưa vào RubyLLM 2.0
      Nếu tò mò thì đây là các commit đáng tham khảo: https://github.com/crmne/ruby_llm/commit/d398354da493570b050...
      https://github.com/crmne/ruby_llm/commit/0875ce2dfeae9d28a3a...
  • RubyLLM rất dễ dùng. Tôi đã tận dụng nó nhiều trong một dự án năm ngoái
    Điểm trừ là khá khó instrument để có khả năng quan sát truy vết thực sự, và nó có kiểu xóa model nội bộ khi retry, nên lịch sử hiển thị thì gọn gàng nhưng không thật sự phù hợp nếu muốn xem chính xác thứ tự gọi API ngoài thực tế

  • Tôi đang xây một thứ chỉ nhắm tới Claude và không có kế hoạch rời khỏi hệ sinh thái Anthropic. Trong trường hợp này, tôi tò mò không biết RubyLLM có còn lợi thế gì so với việc dùng trực tiếp Ruby SDK của Anthropic hay không
    Nói cách khác, lựa chọn này giống chọn giữa Fog và aws-sdk-s3 hơn, hay giống chọn giữa Active Storage và aws-sdk-s3 hơn

    • Tôi nghĩ nó gần với quan hệ giữa Active Storage và aws-sdk-s3 hơn
      Điểm hay của RubyLLM là DSL cho phép chain method theo kiểu ActiveRecord, cấu trúc để tổ chức agent, tool và prompt, cùng tính di động giúp dễ thử nghiệm và chuyển từ Anthropic sang DeepSeek để cắt hơn 90% chi phí
      Tích hợp ActiveRecord cho phép lưu từng cuộc chat vào cơ sở dữ liệu chỉ với bin/rails generate ruby_llm:install cũng rất hay. Việc định kỳ tải lịch sử chat đã lưu xuống rồi đưa cho claude code để tinh chỉnh chỉ dẫn cho agent cũng cực kỳ hữu ích
    • Khi đã có một công cụ cho phép sau này chọn bất kỳ provider nào, tôi không hiểu tại sao lại cố tình xây theo hướng phụ thuộc chặt vào một provider
      Chỉ riêng chuyện ứng phó sự cố thôi cũng phải nghĩ xem sẽ làm gì nếu đúng ngày bạn thật sự cần dịch vụ thì API của Anthropic lại bị sập
  • Tôi dùng RubyLLM cho một side project và thấy nó rất xuất sắc
    Điều thú vị là những thứ từng xuất hiện trong phần hỏi đáp và bình luận ở SF Ruby conf năm ngoái nay đã được phát hành thành tính năng của hệ sinh thái: https://youtu.be/y535u1EWqAg?si=rbyv52T035apKwQk

  • Vài tháng trước tôi đã dùng RubyLLM khá sâu, và thiết kế cùng cách triển khai của nó rất tốt
    Tôi có client LLM tự làm bằng vài ngôn ngữ Lisp, đến mức từng nghĩ sẽ mang một phần thiết kế của RubyLLM sang. Bắt chước là một lời khen

  • Cảm ơn vì đã mang Ruby đến với cộng đồng AI và làm việc này theo hướng mã nguồn mở
    Một ngôn ngữ tốt xứng đáng được khám phá và chú ý nhiều hơn

    • Tôi thích việc mỗi khi nói về Ruby thì Hacker News lại có không khí MINASWAN
  • Laravel cũng có một thư viện tương tự
    https://laravel.com/docs/13.x/ai-sdk

  • Tôi cũng đang dùng RubyLLM trong production, và đây là thư viện thanh lịch nhất trong lĩnh vực này mà tôi từng thấy
    Tôi cũng thích cách họ vận hành issue tracker. Khi chọn “Feature Request”, bạn phải giải thích mình đã thử tìm workaround như thế nào và vì sao nó nên có trong RubyLLM, nhờ vậy tránh được việc phạm vi cứ phình ra vô tận