开发与工程 ruby-librarymcp-clienta2a-clientragtool-executionmulti-providerstructured-outputsstreaming

llm.rb

面向 CRuby 的智能体 AI 运行时:统一 API 覆盖 14+ 提供商,默认零运行时依赖,支持并发工具执行。

FollowAgents 评估 · FARS-2.1
不推荐
59/ 100 五分制 3.0 / 5
1 2 3 4 5 6
1信任安全14 / 29 · 2.4/5

证据显示:MCP工具白名单、Guard钩子(可拦截策略/配额)、Transformers可脱敏、零运行时默认依赖、fork隔离;扣分点:`confirm` 仅作为选项名出现,无用户确认默认行为文档;内置shell/文件系统工具(LLM::Tool::Exec等)的默认权限与同意机制未见说明;无回滚/撤销机制描述;发布者未经注册表验证,仅能确认作者署名(Robert Gleeson)。

2可靠稳定8 / 14 · 2.9/5

证据显示:默认Guard::Loop防死循环、重试预算、超时与取消(LLM::Interrupt)、CI多Ruby版本多JSON解析器矩阵;扣分点:README存在拼写错误(Aftter/providied),错误消息与失败路径的具体行为仅部分提及(未知set键报错、Interrupt),未展示完整错误语义。

3适用触发10 / 18 · 2.8/5

证据显示:14+提供商、多并发策略、多传输层、数据库集成、CLI与控制台,适用场景描述充分;扣分点:技能/工具触发精度(何时调用什么)缺乏判据文档,README未给出边界/不适配场景。

4规范维护13 / 18 · 3.6/5

证据显示:README结构清晰(安装、快速开始、可折叠专题)、MIT全文许可、大量可运行示例、可选依赖安装说明、CI工作流存在;扣分点:无CHANGELOG或版本历史、无已知限制章节(仅零散提及compactor默认关闭、部分并发策略需opt-in依赖)。

5有效结果9 / 13 · 3.5/5

证据显示:单API覆盖多提供商、结构化输出、Schema、持久化、CLI开箱即用,对构建代理应用具有明确边际价值;扣分点:成本收益仅部分可查(registry按价格排序、tool_budget/retry_budget提及但无示例),无可量化的成本控制证据。

6证据核验5 / 8 · 3.1/5

证据显示:README链接自托管API文档、CI配置与README声明的可选依赖(curb、pg)相互印证、models.dev来源标注;扣分点:API文档与r.uby.dev聊天机器人自证性引用较多,无第三方独立佐证,功能声明(如DeepSeek SVG生成)无法静态核实。

证据充分度: 评估于 2026年9月9日 审查版本 472b3a6e8dce
上游仓库在本次评估后已有新提交;当前评分仍对应所示审查版本,可能尚未覆盖最新改动。
使用前请注意
  • 内置Exec/文件系统工具的默认权限边界未见文档,生产部署前必须自行配置Guard并验证确认机制(confirm)的实际行为。
  • 发布者身份未经企业注册表验证,功能声明(如DeepSeek扩展能力)均来自自托管文档,需独立核实。
  • 无CHANGELOG与已知限制说明,升级前应审查diff并锁定版本。
评估证据 [1][2][3]
查看完整评分方法 →

这个 Agent 能做什么,适合哪些场景?

llm.rb(仓库 r-uby-dev/llm)是一个构建在 CRuby 上的智能体应用运行时,默认零运行时依赖,用同一套连贯的 API 覆盖 14+ 个模型提供商(Anthropic、OpenAI、DeepSeek、Google、Ollama、llama.cpp 等)。核心接口 LLM::Agent 自动管理工具执行、防止无限循环并维护对话状态;LLM::Stream 提供内容、推理、工具调用、压缩等结构化回调。运行时内置 MCP 与 A2A 协议的一等支持、LLM::Schema 结构化输出、LLM::Guard 工具调用策略钩子、LLM::Transformer 消息改写、LLM::Compactor 上下文压缩以及 OpenTelemetry 可观测性。持久化方面支持文件 JSON、ActiveRecord 与 Sequel(含 PostgreSQL b 优化),并附带一个基于 curses 的交互式控制台和 llm.rb CLI。项目采用 MIT 许可证,同时镜像到 Radicle 网络。

通过 gem install llm.rb 安装后,开发者用类工厂方法(如 LLM.deepseek、LLM.openai)创建提供商实例,交给 LLM::Agent 并调用 agent.talk 完成对话。智能体可执行:LLM::Tool 子类形式的 Ruby 工具(含内置文件系统、搜索、shell 工具目录,支持 :async/:thread/:fiber/:fork/:ractor/:sequential 六种并发策略);Markdown 定义的 Skills(生成一次性子智能体);LLM::MCP.stdio/.http 挂载的 MCP 服务器工具;LLM::A2A.rest 调用的远程 A2A 智能体技能。LLM::Schema 产生经校验的 JSON 结构化输出,LLM::Guard 可拦截/代答工具调用(默认启用 Loop 防循环保护),LLM::Transformer 在消息发出前改写内容,LLM::Compactor::Truncate 控制上下文窗口,429 与超时按 retry_budget(默认 5 次)自动重试。LLM::Agent#interrupt! 可从任意线程中止流式请求并中断运行中的工具。Embedding API(llm.embed)配合 sqlite-vec/pgvector 支持 RAG,OpenAI、Google、xAI、DeepInfra 支持图像生成,DeepSeek 可通过文本模型生成 SVG。

  1. Ruby/Rails 开发者需要在现有应用中集成多个 LLM 提供商,希望一行代码切换而不改动调用代码。
  2. 需要构建带文件系统、shell 或搜索工具的自动化智能体,并要求工具并发或并行执行的团队。
  3. 已有 ActiveRecord/Sequel 数据栈的团队想为聊天机器人做数据库持久化(如 r.uby.dev 聊天机器人使用 acts_as_agent 与 b)。
  4. 需要将远程 MCP 服务器或 A2A 智能体的能力以工具形式接入本地智能体的集成场景。
  5. 预算有限、希望用 DeepSeek 等廉价模型并获得结构化输出与图像(SVG)生成等增强能力的个人开发者。
  6. 需要通过 curses 控制台或 llm.rb CLI 在终端交互式调试、测试工具和会话的开发者。

这个 Agent 有哪些优点和局限?

优点
  • 默认零运行时依赖,单套 API 覆盖 14+ 提供商,切换提供商只需改一行工厂方法。
  • 六种并发策略(含 :fork/:ractor 真并行)与 interrupt!/cancel! 中断机制,工具执行控制粒度细。
  • MCP 与 A2A 一等支持,工具、技能、压缩、守卫、追踪器均可在 curses 控制台中调试。
  • ActiveRecord/Sequel 一列持久化加文件 JSON 持久化,同一套序列化机制。
  • 内置模型注册表(来自 models.dev),含目录、价格、上下文窗口与模态信息,可按价格排序。
局限
  • 部分并发策略需要额外依赖::async 需 async gem,:fork 需 xchan.rb gem,:fiber 需自行提供 Fiber.scheduler。
  • 文档较新的特性(如 Skills、A2A)依赖维护者个人项目生态(r.uby.dev、roda-llm),主要维护者为一人,巴士因子风险存在。
  • 多语言/多运行时支持受限:针对 CRuby,README 另提到独立的 mruby-llm 运行时需单独回移改动。
  • 默认 :sequential 串行执行工具,并行需显式选择并承担相应依赖成本。
  • DeepSeek 的图像生成仅限 SVG 矢量图形,且结构化输出是运行时模拟而非官方 API 能力。

如何安装或部署这个 Agent?

安装 gem:

gem install llm.rb

如需完整控制台体验,可另装可选依赖:

gem install unicode-display_width curses kramdown xchan.rb test-cmd.rb

设置环境变量中的 API 密钥(如 DEEPSEEK_API_KEY、OPENAI_API_KEY、ANTHROPIC_API_KEY 等),本地模型(Ollama、llama.cpp)通常无需密钥。

如何使用这个 Agent?

最小示例:

require "llm"
llm = LLM.deepseek(key: ENV["KEY"])
agent = LLM::Agent.new(llm, stream: $stdout)
agent.talk "hello world"

添加自定义工具:定义 LLM::Tool 子类(name/description/parameter/required,实现 call)并传入 tools:。持久化:LLM::Agent.new(llm, path: "session.") 自动保存/恢复会话。数据库持久化:require "llm/active_record" 后在模型上使用 acts_as_agent(format: :b)。CLI:安装后运行 llm.rb(自动检测环境变量中的提供商),llm.rb -p openai 指定提供商,llm.rb -t 使用临时会话,会话存储于 ~/.llm.rb/。MCP:mcp = LLM::MCP.stdio(argv: ["ruby", "server.rb"]) 后将 mcp.tools 传入 Agent。

这个 Agent 与同类方案有什么区别?

README 未直接列出竞品,但从定位看,llm.rb 相当于 Ruby 生态中的智能体运行时,与 Python 生态的 LLM 智能体框架对标;其差异化在于零依赖、CRuby 原生并发(fiber/ractor/fork)以及 MCP/A2A 内置支持。

常见问题

它支持哪些模型提供商?
14+ 个:Anthropic、Google、OpenAI、DeepSeek、DeepInfra、xAI、Z.ai、Moonshot(Kimi)、OpenRouter、Alibaba(Qwen3)、Mistral、AWS Bedrock、Ollama、llama.cpp,全部通过 LLM 上的类工厂方法创建,API 一致。
能否在本地/自托管模型上运行?
可以。Ollama 和 llama.cpp 提供商可连接你自托管(自硬件)的模型,README 称其测试尚可但不是主要驱动场景。
并发工具执行有什么前提?
默认 :sequential 串行。:async 需要 async gem,:fork 需要 xchan.rb gem,:ractor 是 CRuby 原生,:fiber 需要 Fiber.scheduler,:thread 无额外要求。
如何处理限流和超时?
429 与连接/读取超时默认自动重试,最多 retry_budget 次(默认 5 次)并使用递增退避;设 retry_budget: 0 可禁用。
会话持久化怎么实现?
设置 path: 即可文件持久化(启动恢复、每轮保存);数据库持久化通过 ActiveRecord 或 Sequel 集成,将 LLM::Context/LLM::Agent 序列化为 JSON 存入单列(PostgreSQL 可用 b)。

对比同类 Agent

用同一套 FARS 评审,横向比较这个 Agent 所属的短名单。

相关 Agents