1 คะแนน โดย GN⁺ 4 시간 전 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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
  • สามารถนิยาม agent ที่นำกลับมาใช้ซ้ำได้พร้อมคำสั่งและ tools ด้วย RubyLLM::Agent
    • ตัวอย่าง WeatherAssistant ใช้โมเดล gpt-5-nano, คำสั่งให้ตอบแบบกระชับ และ tool Weather
  • สามารถกำหนดสคีมาของ 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: ควบคุม, ดู และบันทึกกระบวนการคิดของโมเดล
  • ผู้ให้บริการที่รองรับได้แก่ 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:install
    • bin/rails db:migrate
    • bin/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 ความคิดเห็น

 
GN⁺ 4 시간 전
ความคิดเห็นจาก Hacker News
  • RubyLLM ดีเกินคาด และในแง่การใช้งานก็ใกล้เคียงกับ AI framework ของ Vercel
    มันพยายามหาสมดุลระหว่างความสะดวกแบบใช้งานได้ทันทีและความยืดหยุ่น ซึ่งก็มีความยากอยู่ แต่โดยรวมถือว่าดี
    ปัญหาใหญ่ที่เจอจริงคือแคชทำงานไม่สม่ำเสมอ เช่น xAI รองรับแค่ completions API และคืน thought signature ผิด ทำให้เกิดปัญหา

  • มี gem โอเพนซอร์สชื่อ Raix ที่สร้างอยู่บน abstraction ของ RubyLLM และมีคนใช้อยู่พอสมควร
    https://github.com/OlympiaAI/raix

  • ผมใช้ RubyLLM ในโปรดักชันอยู่และชอบมาก เป็นเฟรมเวิร์กที่ยอดเยี่ยมและใช้งานง่าย
    การที่ Responses API ยังไม่รองรับในตัวก็ทำให้น่าหงุดหงิดอย่างที่คนอื่นว่าไว้ และดูเหมือนเป็นช่องโหว่ใหญ่พอสมควร แม้จะมีคอนเน็กเตอร์ที่นักพัฒนาคนอื่นทำไว้ แต่ก็มีบั๊กและคุณภาพไม่เท่า gem หลัก
    รอติดตามการพัฒนาต่อจากนี้ โดยเฉพาะ 2.0 ตอนนี้ถ้ามี Responses API แบบเนทีฟแล้ว ผมตั้งใจจะกลับไปดูแน่นอน

    • เหตุผลที่ RubyLLM 1.x ยังไม่ได้ทำ Responses API ก็เพราะภายในมันแทบจะตั้งสมมติฐานว่าผู้ให้บริการกับโปรโตคอลมีความสัมพันธ์แบบ 1:1
      แต่ 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 จริงอย่างแม่นยำ

  • ผมกำลังทำบางอย่างที่มุ่งใช้ Claude อย่างเดียว และไม่มีแผนจะออกจาก ecosystem ของ Anthropic เลย เลยสงสัยว่าแม้ในกรณีนี้ RubyLLM ยังมีข้อดีกว่าการใช้ Ruby SDK ของ Anthropic โดยตรงหรือไม่
    พูดอีกแบบคือ มันใกล้กับการเลือกระหว่าง Fog กับ aws-sdk-s3 หรือใกล้กับการเลือกระหว่าง Active Storage กับ 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 และทำงานนี้แบบโอเพนซอร์ส
    ภาษาที่ดีควรได้รับการสำรวจและความสนใจมากกว่านี้

    • เวลาคุยเรื่อง Ruby แล้ว Hacker News มีบรรยากาศแบบ MINASWAN นี่เป็นสิ่งที่ผมชอบ
  • Laravel ก็มีไลบรารีคล้ายกัน
    https://laravel.com/docs/13.x/ai-sdk

  • ผมก็ใช้ RubyLLM ในโปรดักชันเหมือนกัน และมันเป็น ไลบรารีที่สง่างามที่สุด ในกลุ่มไลบรารีแนวนี้เท่าที่เคยเห็นมา
    ผมยังชอบวิธีดูแล issue tracker ของมันด้วย ถ้าเลือก “Feature Request” ระบบจะให้คุณอธิบายว่าลองหาวิธีอ้อมไว้ยังไงบ้าง และทำไมถึงคิดว่าควรอยู่ใน RubyLLM ซึ่งช่วยกันไม่ให้ขอบเขตของโปรเจ็กต์บานปลายไม่รู้จบ