ruby_llm-tribunal
Alqemist-labs/ruby_llm-tribunal加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
凌晨两点,你开发的客服 RAG 系统向用户返回了一条看起来逻辑通顺、语气专业的回答——客户连声道谢。然而第二天,你发现这条回答里引用的数据完全是 AI 凭空编造的:这就是 AI 领域的"幻觉"(Hallucination)问题,也是让无数 AI 应用开发者夜不能寐的难题。
RubyLLM::Tribunal 正是为解决这一痛点而生的。它是一个专为 Ruby 生态设计的 LLM 质量评估框架,可以系统化地对 AI 输出进行"法庭式审判"——检测幻觉、验证忠诚度、评估相关性、排查有害内容,让 AI 的每一次回答都有一份可信的质量报告。
Tribunal 的设计灵感来源于 georgeguimaraes/tribunal(Elixir 语言),由独立开发者 Florian(Alqemist Labs)用 Ruby 实现,并依托 RubyLLM 库与各大 LLM 提供商通信。Ruby 虽然以 Web 开发闻名(Ruby on Rails),但在 AI 工程化领域的工具链相对薄弱,Tribunal 填补了这一空白——它是目前 Ruby 生态中功能最完整的 LLM 评估方案。
Tribunal 的评估体系分为三层,由浅入深覆盖不同需求:
无需调用 LLM API,完全基于规则在本地即时执行,速度快、零成本。包括字符串包含、正则匹配、JSON 格式验证、Levenshtein 编辑距离、URL/Email 格式校验、Token 数量限制等 15 种断言类型。例如:
# 验证回答包含关键词
assert_contains response, "30 days"
# 验证 JSON 格式有效
assert_json output
# 验证回答字数范围
assert_word_count output, min: 5, max: 100
这类断言适合在 CI/CD 流程中频繁运行,既不消耗 API 配额,又能快速捕捉明显的格式问题。
这是 Tribunal 最具价值的核心能力。当确定性规则无法判断回答质量时,Tribunal 会调用 LLM(如 GPT-4o-mini)作为"法官",对回答进行主观评估。支持以下裁判维度:
| 裁判类型 | 含义 | 阈值建议 |
|---|---|---|
faithful | 回答是否忠实于提供的上下文 | ≥ 0.8 |
hallucination | 是否有幻觉/捏造内容 | ≤ 0.2(越低越好) |
relevant | 回答是否切题 | ≥ 0.8 |
correctness | 与标准答案的匹配度 | ≥ 0.9 |
refusal | 是否正确拒绝危险请求 | 通过 |
test_case = RubyLLM::Tribunal.test_case(
input: "What's the return policy?",
actual_output: "You can return items within 30 days with a receipt.",
context: ["Returns are accepted within 30 days of purchase with a valid receipt."]
)
assertions = [
[:contains, { value: "30 days" }], # 确定性
[:faithful, { threshold: 0.8 }], # LLM 裁判
[:hallucination, { threshold: 0.8 }] # LLM 裁判
]
results = RubyLLM::Tribunal.evaluate(test_case, assertions)
Tribunal 还内置了红队攻击生成器,可以自动构造对抗性提示词来测试 LLM 的安全防线。支持的攻击类别包括:Base64 编码、角色扮演越狱( DAN/STAN 模式)、系统提示词提取、指令注入等。这对于需要上线 AI 系统的企业来说,是进行安全合规评估的重要工具。
Tribunal 的一大亮点是与 RSpec 和 Minitest 的深度集成。对于已有 Ruby on Rails 测试套件的团队,可以直接在现有测试文件中添加 LLM 评估,而无需引入新的测试工具:
RSpec.describe "RAG Quality", type: :llm_eval do
it "response is faithful to context" do
response = MyApp::RAG.query("What's the return policy?")
assert_faithful response, context: ["Returns within 30 days with receipt."]
refute_hallucination response, context: ["Returns within 30 days with receipt."]
end
end
Tribunal 支持 Console、JSON、HTML、JUnit XML、GitHub Actions annotations 五种输出格式,可以灵活接入各种工作流程:
# 输出到 GitHub Actions(直接在代码行显示注解)
bundle exec rake tribunal:eval -- --format=github --strict
# 输出 HTML 报告
bundle exec rake tribunal:eval -- --format=html --output=report.html
配合 GitHub Actions 的 tribunal:eval Rake 任务,可以在每次 PR 提交时自动运行 LLM 评估,确保新增的 AI 功能不会降低系统质量。
Tribunal 的代码结构清晰,采用模块化设计:
assertions/:断言引擎,分为 deterministic(确定性规则)、judge(LLM 裁判)、embedding(向量相似度)三个子模块judges/:LLM 裁判的具体 prompt 模板(faithful、hallucination、bias、toxicity、harmful、jailbreak、PII 等)reporters/:多格式输出(Console、HTML、GitHub)red_team.rb:对抗性提示词生成器dataset.rb:数据集管理(支持 JSON/YAML 格式的批量测试用例)依赖关系简洁:ruby_llm ~> 1.0 作为核心运行时依赖,可选 neighbor(向量相似度)和 parallel(并发评估)。
| 维度 | 评估 |
|---|---|
| 安装难度 | ⭐ 极简(gem install 或 Gemfile 一行) |
| 配置复杂度 | ⭐ 需配置 API Key,但文档清晰 |
| Ruby 基础要求 | ⭐⭐ 需熟悉 Ruby 语法和 RSpec/Minitest |
| LLM API 成本 | ⭐⭐ 确定性断言免费,LLM 裁判按次计费(推荐 gpt-4o-mini) |
| 无 Web UI | 纯代码库,需阅读文档 |
随着 LLM 应用从原型走向生产环境,AI 质量保证(AI Quality Assurance) 正在成为与代码测试同等重要的工程实践。Tribunal 的出现标志着 Ruby 生态正式加入这一趋势,为 Rails 社区的 AI 开发者提供了与 LangChain、PromptFlow 等主流框架对应的本地化选择。随着 Ruby 3.2+ 对 YJIT 编译器的持续优化,Ruby 在脚本和工具类场景的性能表现也在提升,Tribunal 这样的专业工具将进一步扩展 Ruby 在 AI 工程领域的影响力。
一句话总结:如果你在 Ruby 项目中使用 RubyLLM 构建 AI 功能,Tribunal 就是你质量保证的必备搭档;如果你的团队不使用 Ruby,它的模块化架构和 LLM-as-Judge 理念同样值得参考借鉴。