autoevals
用 LLM-as-a-Judge 量化 AI 输出质量,双语言 SDK 开箱即用
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用 LLM-as-a-Judge 量化 AI 输出质量,双语言 SDK 开箱即用
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
当 GPT-4 发布时,全网沸腾;当 Claude 3 推出时,评测榜单被刷新;当国产大模型接连上线时,用户最常问的问题是:"哪个更好?"
但问题是:"好"的标准是什么?
传统软件开发中,单元测试、集成测试有明确的通过/失败标准。但 AI 生成的代码、一段对话回复、一篇摘要——它们没有标准答案。BLEU score 这种传统指标对开放式任务几乎失效,而靠人工逐一审核又贵又慢。
AutoEvals 正是为解决这个痛点而生:它用 AI 来评判 AI。

图1:AutoEvals 项目定位 —— 用模型评估模型输出的质量
AutoEvals 是由 Braintrust 团队开源的 AI 输出评估工具库,GitHub 星标数超过 9000 颗(数据截至分析时)。项目同时提供 Python 和 TypeScript 两套实现,通过统一的 Score 接口(name + score + metadata)输出评估结果,确保两种语言的评估行为完全一致。
从项目结构看,它采用了一种聪明的架构:核心评估逻辑以 YAML 模板文件(templates/*.yaml)的形式存在,Python 和 TypeScript 两侧共享同一套模板,真正做到了双语言一致性。

图2:Python + TypeScript 双语言并行,共享 YAML 模板
项目主页为 braintrust.dev,由 Braintrust 公司维护——这是一家专注于 AI 评估和可观测性的初创公司,其产品已被 Cursor、Vercel 等知名团队采用。
AutoEvals 提供了三类评估方法,从简单到复杂依次为:
对于有明确答案的场景,比如字符串精确匹配、LevenShtein 距离、JSON 结构验证,AutoEvals 提供了轻量级的启发式评分器:
from autoevals.string import Levenshtein
evaluator = Levenshtein()
result = evaluator.eval(output="Hello World", expected="Hello World")
# score = 1.0(完全匹配)
这类评估不需要调用 LLM API,速度快、成本低,适合结构化输出验证。
对于翻译、摘要等有参考标准的任务,AutoEvals 支持 BLEU 等传统统计指标(通过 scipy 可选依赖启用):
# pip install autoevals[scipy]
from autoevals.string import Bleu
evaluator = Bleu()
result = evaluator.eval(
output="The quick brown fox jumps",
expected="The quick brown fox leaps over"
)
这是 AutoEvals 的精髓。它利用一个 LLM 作为"裁判",来判断另一个模型输出的质量。系统内置了多种预置评判器:
| 评判器 | 适用场景 | 典型用法 |
|---|---|---|
Factuality | 事实准确性 | 评判回答是否与参考答案事实一致 |
Battle | 对比评估 | 两个回答哪个更好 |
ClosedQA | 问答正确性 | 答案是否正确回答了问题 |
Humor | 幽默程度 | 评判内容是否有幽默感 |
Security | 安全检测 | 检测有害内容 |
Summary | 摘要质量 | 评估摘要是否抓住了原文要义 |
Translation | 翻译质量 | 评判翻译准确性和流畅度 |
所有 LLM 评判器都基于 YAML 模板定义,核心逻辑统一。例如 Factuality 的评判逻辑如下(templates/factuality.yaml):
prompt: |-
You are comparing a submitted answer to an expert answer...
Compare the factual content of the submitted answer...
Answer by selecting one of the following options:
(A) 提交答案是参考答案的子集,完全一致
(B) 提交答案是参考答案的超集,完全一致
(C) 两个答案包含相同细节
(D) 答案与参考答案存在分歧
(E) 答案有差异但从事实角度看无关紧要
choice_scores:
"A": 0.4
"B": 0.6
"C": 1
"D": 0
"E": 1
这意味着评判结果不是简单的 0/1,而是一个 0-1 之间的分数,同时附带 metadata.rationale(裁判的推理过程),让开发者能理解为什么得这个分。
from autoevals.llm import Factuality
evaluator = Factuality()
result = evaluator.eval(
output="People's Republic of China",
expected="China",
input="Which country has the highest population?"
)
print(f"Factuality score: {result.score}") # 0.6 (B类:超集且一致)
print(f"Rationale: {result.metadata['rationale']}") # 裁判理由...
同时支持异步 API:
import asyncio
from autoevals.llm import Factuality
async def main():
evaluator = Factuality()
result = await evaluator.eval_async(
output="Paris is the capital of France",
expected="Paris",
input="What is the capital of France?"
)
print(result.score) # 1.0
asyncio.run(main())
AutoEvals 还集成了 RAGAS(RAG Assessment)框架的评估指标,专门用于评估 RAG(检索增强生成)系统的质量:
from autoevals.ragas import Faithfulness, AnswerRelevancy, ContextRelevancy
# 评估忠实度:回答是否忠实于检索到的上下文
evaluator = Faithfulness()
result = evaluator.eval(
output="模型生成的回答",
expected="参考答案(可选)",
input="用户问题",
context=["检索到的上下文片段"]
)

图3:AutoEvals 评估输出界面示例(score + rationale)
AutoEvals 的另一个设计亮点是对多提供商的支持。默认使用 OpenAI API(通过 OPENAI_API_KEY 环境变量),但同时支持:
OPENAI_BASE_URL)BRAINTRUST_AI_GATEWAY_URL),一键接入 Anthropic、Google、Mistral 等数十家提供商autoevals[litellm] 扩展),统一调用 100+ LLM APIfrom autoevals import init
from openai import AsyncOpenAI
# 通过 Braintrust Gateway 使用 Claude
client = AsyncOpenAI(
base_url="https://gateway.braintrust.dev",
api_key=os.getenv("BRAINTRUST_API_KEY"),
)
init(client=client, default_model="claude-3-5-sonnet-20241022")
# 之后所有评估自动使用 Claude
evaluator = Factuality() # 默认模型已切换为 Claude
这意味着你可以用同一个评估器,在不同模型之间横向对比——评估结果不受模型偏见影响(因为可以用更强的模型来评估更弱的模型)。
AutoEvals 追求的是"零学习成本接入,任意场景扩展"。
安装极简:
# Python
pip install autoevals
# TypeScript
npm install autoevals # 或 pnpm add autoevals
创建自定义评估器:
如果内置评判器不满足需求,可以轻松创建自己的 YAML 模板:
# templates/my_custom.yaml
prompt: |-
Evaluate the following response based on {criteria}:
[Input]: {input}
[Output]: {output}
Provide a score from 0 to 1 with reasoning.
choice_scores:
"excellent": 1
"good": 0.7
"fair": 0.4
"poor": 0
from autoevals.partial import ScorerWithPartial
import yaml
with open("templates/my_custom.yaml") as f:
template = yaml.safe_load(f)
evaluator = ScorerWithPartial(
name="MyCustom",
prompt_template=template['prompt'],
choice_scores=template['choice_scores'],
)
与 Braintrust 平台集成:
安装 braintrust 后,评估结果会自动上报到 Braintrust 平台,形成评估历史记录和趋势图:
pip install braintrust # 自动上报评估数据

图4:Braintrust 官方标识 —— AutoEvals 由 Braintrust 团队开发和维护
AutoEvals 并不是银弹,有几个需要注意的点:
1. LLM 评判本身的偏差问题
用 GPT-4 评判 GPT-3.5 的输出,天然存在"上级评分下级"的光环效应。LLM 评判器的 prompt 设计再好,也无法完全消除这种偏见。学术界对 LLM-as-a-Judge 的可靠性仍有争议。
2. 不适合所有场景
对于完全开放式的创意写作、情感分析(主观性极强的任务),任何自动化评估都只能提供参考,无法替代人工评估。
3. API 成本
LLM-as-a-Judge 每次评估都需要一次 LLM API 调用,成本不可忽视。Braintrust 团队建议在大规模评估时使用更小、更快的模型(如 GPT-4o-mini),而用强模型做抽检。
4. 缺乏本地模型支持
AutoEvals 面向的是通过 API 调用 LLM 的场景,暂无直接支持本地部署模型(如 Ollama)的接口(虽然理论上通过 OpenAI 兼容接口可以桥接)。
AutoEvals 的出现,反映了 AI 应用开发领域的一个根本性转变:从"模型为中心"到"评估为中心"。
传统的软件开发有 CI/CD 流程,每个 PR 都会跑测试。但 AI 应用呢?开发者往往凭感觉判断新模型是否比旧模型好。有了 AutoEvals 这类工具,就可以建立 AI 应用的"自动化质量门禁"——每次更新模型版本时,先跑一遍评估集,量化新版本的胜率。
Braintrust 公司本身也在推动 AI 评估的标准化。他们的 Braintrust 平台提供了评估数据集管理、评估结果可视化、多模型横向对比等功能,AutoEvals 是其开源侧的能力输出。
从趋势看,AI 评估工具正在快速演进:
这类工具的共同目标是:让 AI 应用的迭代,不再依赖"玄学"和"感觉",而是有数据支撑的工程化实践。
Python 版本:
pip install autoevals
export OPENAI_API_KEY=sk-...
python << 'EOF'
from autoevals.llm import Factuality
evaluator = Factuality()
result = evaluator.eval(
output="People's Republic of China",
expected="China",
input="Which country has the highest population?"
)
print(f"Score: {result.score}")
print(f"Rationale: {result.metadata.get('rationale', 'N/A')}")
EOF
TypeScript 版本:
npm install autoevals
export OPENAI_API_KEY=sk-...
npx tsx << 'EOF'
import { Factuality } from "autoevals";
const result = await Factuality({
output: "People's Republic of China",
expected: "China",
input: "Which country has the highest population?"
});
console.log(`Score: ${result.score}`);
EOF
图5:AutoEvals 由 Braintrust 团队开发和维护,Braintrust 专注于 AI 评估与可观测性领域
总结:AutoEvals 是一款设计精良的 AI 评估 SDK,通过 LLM-as-a-Judge 范式、YAML 模板系统和双语言实现,为 AI 应用的自动化质量评估提供了开箱即用的解决方案。其轻量、灵活、可扩展的特性,使其成为 AI 开发者工具箱中的有力补充。