介绍 LLM-as-a-Judge 架构,用廉价快速的小模型验证主模型输出的正确性,并开源 Python CLI 工具 Crilio,可集成进 GitHub Actions。
如果你是做 AI 功能的,可能经历过这样的噩梦:
你只改了系统提示词里一行,来修复一个小边界情况。在 OpenAI Playground 里测了两遍,看起来很完美。发布上线。
第二天你发现,你那个"无害的"小改动导致 LLM 幻觉出了一个 60 天退款政策(本来是 30 天),还开始泄露竞品名称。
传统的单元测试(assert output == "精确字符串")对 LLM 不起作用,因为 LLM 的输出是非确定性的。你只好在每次部署前手动测试 20 个边界情况,心里祈祷没有破坏其他功能。
这就是 Prompt Regression(提示词退化),也是阻碍 AI 应用快速迭代最大的瓶颈。
本文将展示如何利用一种叫 LLM-as-a-Judge 的架构来自动测试 AI 输出,同时介绍我开源的 Python CLI 工具 Crilio,它可以直接集成到 GitHub Actions 中。
TL;DR 问题:LLM 是非确定性的,传统测试会失败。解决方案:用快速、便宜的模型(如 GPT-4o-mini)来"评判"主模型的输出是否符合严格规则。工具:Crilio 是一个免费的开源 CLI,在 CI/CD 中自动化这一流程。
既然无法对生成式 AI 做精确字符串匹配,就必须对输出进行语义评估。
"LLM-as-a-Judge"模式使用一个快速、便宜的 LLM 来为你的主 LLM 的输出打分。
你不用写 Python 代码检查字符串是否包含某个词,而是用自然语言写一条规则:
"Must mention the 30-day return window."
"Must NOT mention competitor names like Amazon or Walmart."
你把 Target LLM 的回复和规则发送给 Judge LLM。Judge 返回一个严格的 JSON 对象:{"rule_passed": false, "reason": "Mentioned Amazon"}。
如果 Judge 说规则没通过,你的 CI/CD 流水线就会失败。
每次 git push 之前我都要手动测试提示词,简直要把我逼疯了。所以我写了 Crilio,一个轻量的 Python CLI,扮演的就是 LLM 提示词的 Jest 角色。
它使用 BYOK(Bring Your Own Key)模式,所以你可以用自己的 OpenAI 或 Anthropic API 密钥,运行成本低到几乎可以忽略。
下面教你在 2 分钟内完成配置。
通过 PyPI 安装 CLI:
pip install crilio
crilio init
打开 crilio.yaml 文件,编写测试提示词和 AI 必须遵守的严格规则:
crilio.yaml
tests:
- name: "Refund Policy Check"
prompt: "How long do I have to return a product?"
rules:
- "Must mention the 30-day return window."
- "Must NOT mention competitor names like Amazon or Walmart."
- "Tone must be polite and professional."
将你的 API 密钥添加到环境变量:
export OPENAI_API_KEY="sk-..."
crilio run
Crilio 会调用你的 Target LLM(如 GPT-4o),捕获回复,然后发送给 Judge LLM(GPT-4o-mini)。如果 AI 违反规则,Crilio 会在终端打印一个漂亮的红色 ❌ 报告并以错误码退出。
真正的魔力在于把它放进 CI/CD 流水线。在你的仓库中创建文件 .github/workflows/crilio.yml:
name: Crilio AI Tests
on: [pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.10'
- run: pip install crilio
- run: crilio run
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
现在,每当开发者创建 Pull Request 时,GitHub 会自动运行 Crilio。如果他们的提示词改动导致 AI 幻觉或违反规则,GitHub Action 就会失败,PR 无法合并。
你刚刚把非确定性的 AI 变成了一个可测试的、可靠的软件组件。
捕获连锁故障: 你可能修复了一个退款 bug,但不小心破坏了配送政策。Judge 能同时捕获两者。
零基础设施: 因为 Crilio 使用 BYOK 模式,你不需要托管数据库或评估服务器。它完全运行在你的 GitHub Actions runner 里。
开发者体验: 开发者不需要学习复杂的可观测性平台。他们只需要写一个 YAML 文件。
Crilio 完全免费且开源(AGPL)。目前支持 OpenAI 和 Anthropic,在终端和 CI/CD 中运行都很完美。
下一步是构建云端仪表盘,让团队可以查看历史退化数据(那将是付费功能)。
如果你厌倦了在 AI 提示词上玩打地鼠游戏,我很想让你试试 Crilio,并给我你的真实反馈。
GitHub Repo: https://github.com/mukundzha/crilio
PyPI: pip install crilio
如果你觉得有用,在仓库上点个 ⭐——这能帮助其他开发者找到它!在评论区告诉我你目前是如何在 CI/CD 流水线中处理提示词测试的,也请给我一些关于后续功能的建议。