ruby-nano-bots
将AI Bot做成可分享单文件的框架,一行YAML配置即可切换8家LLM Provider
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
将AI Bot做成可分享单文件的框架,一行YAML配置即可切换8家LLM Provider
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
张明(化名)是一名 Ruby 开发者,最近需要在项目里接入 AI 能力。他先要集成 OpenAI 的 GPT-4 做文案生成,隔壁产品又要求接入 Claude 处理客服对话,老板还在比价想试试 Mistral……结果他光配置不同的 SDK、理解各自不同的 API 签名和参数格式,就花了整整三天。
"我只是想让 Bot 执行一个任务,为什么要懂七种 SDK?"——这个问题,催生了 Ruby Nano Bots。
Nano Bots 起源于 spec.nbots.io 定义的开放规范,其核心理念是:把一个 AI Bot 做成一个可分享的"单文件"。任何人都可以复制这个 YAML 文件,改改参数,立刻拥有自己的 Bot。不需要安装整个框架,不需要写代码,改配置就够了。
Ruby Nano Bots(icebaker/ruby-nano-bots)是该规范的 Ruby 语言实现,支持 OpenAI、Anthropic Claude、 Google Gemini、Cohere、Mistral AI、Maritaca AI、Ollama 等 8 家主流 LLM Provider,并提供统一的调用接口。
目前仓库有 125 颗 GitHub Stars、7 个 Open Issues、MIT 许可证,最近更新于 2024 年 6 月。
Nano Bots 采用了 Cartridge(弹匣) 这一巧妙比喻来组织 Bot 配置。每个 .yml 文件就是一个"弹匣",里面定义了:
ENV/XXX_API_KEY)用户不需要写 Ruby 代码,只需要写 YAML。加载 Bot 也只需要一行 Ruby:
bot = NanoBot.new(cartridge: 'my-bot.yml')
bot.eval('帮我翻译:Hello world') do |content, fragment, finished, meta|
print fragment unless fragment.nil?
end
这种"配置即 Bot"的设计,极大降低了 AI 集成的门槛——任何懂 YAML 的非程序员,都能拥有自己的 AI Bot。
从代码目录结构看,Ruby Nano Bots 采用了经典的 六层六端口(Ports & Controllers)架构:
| 层次 | 目录 | 职责 |
|---|---|---|
| Controllers | controllers/ | 接收外部请求,协调各组件(Cartridges、Session、Security) |
| Ports / DSL | ports/dsl | 对外暴露的 Ruby DSL 语法,即 NanoBot API |
| Logic | logic/ | 业务逻辑:Cartridge 解析、Provider 调度、Helper 工具 |
| Components | components/ | 核心组件:Adapter、Stream、Crypto、Embedding、Provider 适配器 |
| Providers | components/providers/ | 8 个 LLM Provider 的具体适配器(OpenAI、Claude、Gemini……) |
关键组件说明:
components/providers/*.rb):每个 Provider 一个文件,统一接口,内部处理各自 SDK 的差异。开发者想新增 Provider,只需新增一个适配器文件即可。这是一个纯 Ruby 项目(主语言标注为 Lua 是误判,实际代码几乎全为 Ruby),Gemfile 声明了以下关键依赖:
| 类别 | 依赖 | 说明 |
|---|---|---|
| LLM SDK | anthropic ruby-openai gemini-ai cohere-ai mistral-ai maritaca-ai ollama-ai | 各 Provider 官方 SDK |
| HTTP | faraday faraday-typhoeus typhoeus | HTTP 客户端,带并发请求支持 |
| 加密 | rbnacl | Libsodium Ruby 绑定,用于端到端加密 |
| 解析 | redcarpet | Markdown 渲染 |
| 调试 | pry | Ruby 交互式调试器 |
| 环境 | dotenv | 环境变量加载 |
Lua 出现在依赖 sweet-moon 中——这是一个 Ruby ↔ Lua 互操作的桥接库,用于在 Ruby 代码里执行 Lua 逻辑。
方式一:Gem 一键安装(推荐,10 分钟)
gem install nano-bots -v 3.4.0
nb --help # 查看 CLI 帮助
方式二:Docker Compose 一键容器化
仓库提供 docker-compose.example.yml,内置了所有 8 家 Provider 的环境变量配置。只需填入各自的 API Key,一行命令即可启动完整环境:
docker compose -f docker-compose.example.yml up
容器基于 ruby:3.3.3-slim-bookworm,安装依赖后内置 nb 命令。
硬件需求极低:不需要 GPU,1GB+ 内存、200MB 磁盘即可运行,是目前最容易部署的多 Provider AI Bot 框架之一。
安装好 gem 后,实际使用非常直观:
# 直接问 AI
nb -- eval "1+1等于几"
# 启动交互式 REPL
nb -- repl
# 从 YAML 文件加载 Bot 并执行
nb my-bot.yml - eval "翻译:Good morning"
甚至支持管道组合——把多个 Bot 串联起来,上一个 Bot 的输出直接成为下一个 Bot 的输入,实现工作流自动化:
cat article.txt | nb translator.yml - eval | nb summarizer.yml - eval
Ruby Nano Bots 背后折射出一个趋势:AI Bot 的民主化。传统做法是把 Bot 做成一整套服务(Microservice),Nano Bots 则把 Bot 做成了一个"配置文件"——可复制、可分享、可版本控制。
这种思路与 GitHub Gist 的哲学一脉相承:好东西应该可以"一键复制"走。
虽然项目本身活跃度有限,但 Nano Bots 规范(spec.nbots.io)是独立存在的,其他语言可以有不同实现。对于 Ruby 开发者来说,这是目前最轻量的多 LLM 集成方案之一。

图:Ruby Nano Bots 工作流程示意图,展示了从 Cartridge 配置到多 Provider 调用的完整路径