← 返回博客
跳至主要内容

企业工作流程中的评估和护栏(第 2 部分)

·阅读需 10 分钟
Deepti Naidu

Evals and Guardrails in enterprise workflows — Part 2

第一部分 中,我们介绍了基础知识:为什么 evals 和 guardrails 对于企业级 AI 系统至关重要。我们探讨了忽略 AI 集成的公司将如何落后于竞争对手。我们走过了实际案例——交易算法、物流优化和欺诈检测——展示了 AI 代理在实践中的工作方式。我们还讨论了使这些 AI 系统可靠所需的安全措施:过滤输入和输出的 guardrails,衡量性能的评估以及跟踪幕后发生情况的 traces。我们确定了主要风险——AI 行为可能无法预测——以及为什么建立信任至关重要。现在是时候付诸实践了。本文向您展示了如何实际构建这些系统。

Guardrails 是实时守门员;它们阻止、编辑和约束输入和输出,以防止危害。Evals 是计分卡;它们不阻止不良响应,但提供必要的日志记录和性能数据来了解系统行为、检测漂移并改进 guardrails。区分它们的作用对于创建强大的系统至关重要。Guardrails 是强制执行——模型输入前过滤器和模型输出后约束。Evals 是衡量——结构化评分、断言和 traces,告诉我们系统在实际工作负载下的表现如何。Evals 不会阻止不良输出;它们使失败可见且可比较,因此我们可以用证据而不是猜测来收紧策略。

最有效的企业级 AI 系统将这两种能力结合起来,以持续改进其实时保护机制。评估信号可以反馈到公司政策/指南中,应用程序可以使用这些政策/指南来编辑、阻止或升级到人工处理。这正是架构模式变得至关重要的原因。它们将静态规则转化为能够从错误中学习并随着需求变化而进化的自适应系统。在本文中,我们将探讨 LLM-as-Judge 模式,这是一种用于自动化、实时质量评估的强大设计。

LLM-as-Judge:质量控制器

LLM-as-Judge 是最通用的评估模式,能够实现实时质量评估和结果修正。一个单独的模型会根据明确的标准(例如,应用程序指南、公司政策和法规合规性)对每个模型输出进行评分。LLM judge 可以检测并触发纠正操作,因此,它可以充当 eval 系统和动态 guardrail。

Evals

让我们回到我们在第一部分中介绍的企业场景——评估多个信号并做出买卖决策的交易应用程序、路线运输的供应链物流以及标记可疑交易的欺诈检测。在每种情况下,LLM-as-Judge 都可以充当质量控制器:此交易建议是否符合我们的风险参数?在当前交通状况下,此路线优化是否现实?基于用户的交易模式,此欺诈警报是否有意义?LLM judge 不会取代特定领域的验证,但它增加了一层推理,可以捕获基于规则的系统可能遗漏的边缘情况。您不是在替换现有的验证——您的风险模型、路线优化器和欺诈规则仍然在完成繁重的工作。但 judge 添加了一个更像人类的合理性检查:“考虑到当前的波动性,此交易订单是否正确”或“在纸面上看,此路线很好,但考虑到今天的天气,它是否有意义?”

LLM judge 的评估标准完全由您在 prompt 上下文中编码的内容定义。您可以根据业务规则、品牌指南或客户体验标准定义“良好”的标准。对于交易系统,您可能专注于风险参数和市场波动性阈值。对于欺诈检测,您可以分析交易模式与已知签名。您可以通过示例、评分标准和特定领域的指南来塑造其评估逻辑。

实现示例

现在让我们转向 LLM-as-Judge 的实际实现代码示例。此示例演示了一个零售搜索应用程序,客户使用自然语言查询服装——“适合夏季婚礼宾客的漂亮衣服”或“开会时专业的西装”。Weaviate 处理 向量搜索,从目录中检索语义相似的产品。LLM judge 评估这些搜索结果是否符合客户的意图和要求。

Weaviate 是一个 ISO27001 认证的开源向量数据库,具有内置的混合搜索、高级过滤和开箱即用的 RAG 功能。功能包括灵活的即插即用模块、零停机时间备份、多租户、向量压缩和租户隔离,以实现安全、可扩展的机器学习应用程序。

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│ User query │ → │ Weaviate │ → │ Judge LLM │ → │ score, reason │
│ "summer wedding │ │ vector search │ │ evaluates │ │ pass │ fail |
│ guest" │ │ │ │ relevance │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘ └─────────────────┘

对于此实现,系统使用两个主要工具:LangChainWeights & Biases (W&B)。LangChain 提供了可组合的链,将 prompt 模板、judge 模型和输出解析连接在一起,形成一个干净、可测试的管道。将其视为一个装配线,可确保从输入到输出的一切顺利进行。Weights & Biases 处理 评估跟踪可观察性。它记录每次评估、衡量 judge 随时间表现如何,并提供每次决策发生情况的详细日志。这些工具的结合提供了试验不同评估方法的灵活性,同时保持对生产中一切表现的密切可见性。

Evals


先决条件

该示例使用 TypeScript 并假设您熟悉 prompt 工程和评估框架。如果您不熟悉这些工具中的任何一个,我们建议您先查看 LangChain 文档Weaviate 快速入门W&B 集成。在开始之前,请确保您已配置以下内容

API 密钥:设置您选择的 LLM 提供商(OpenAI、Anthropic 等)的身份验证并配置您环境中的 API 密钥

Weaviate 设置:按照 Weaviate 快速入门指南 设置 Weaviate 实例。使用 github 仓库 中提供的示例数据集创建包含商品描述、类别和元数据的商品集合。

Weights & Biases 帐户:请查看 此处 创建帐户以开始跟踪和评估。

Weights & Biases

Weave 在 Weights & Biases (W&B) 中提供自动实验跟踪和函数跟踪。初始化会创建一个项目命名空间,所有评估运行、模型调用和性能指标都记录在该命名空间中。这使得在仪表板上可见的可重现实验以及对您的评估迭代的全面可观察性成为可能。

weave.init('Retail-Search-Evaluation');

构建 LLM Judge 链

此函数使用 LangChain 的可组合管道创建 judge 链。我们传入 prompt 模板和模型名称,然后将它们链接在一起;prompt 模板编码了指导 judge 决策的业务规则和评估标准。

const buildJudgeChain = (promptTemplate: ChatPromptTemplate, modelName: string) => {

const llm = new ChatOpenAI({ model: modelName, temperature: 0 });
return promptTemplate.pipe(llm).pipe(new StringOutputParser()).pipe(parseJudgment);

};

parseJudement 接收 LLM 的原始输出,并确保我们使用 JSON 验证器获得结构化响应。在我们的示例中,我们指示 judge LLM 提供一个非常简单的分数以及评分原因。

const parseJudgment = (text: string) => {
const parsed = JSON.parse(text);
return {
score: Math.max(1, Math.min(5, parsed.score || 1)),
reason: parsed.reason || "No reason provided",
};
};

Weave Eval

evaluationModel 函数将流程连接在一起。对于每个用户查询,它运行 Weaviate 搜索,将搜索结果传递给 judge 链,并返回记录到 weave 的结构化评估数据。weave.op 包装器可实现自动日志记录、跟踪和性能监控。我们将在本文稍后在 W&B 的控制台中查看此数据。

const evaluationModel = weave.op(
async ({ datasetRow }) => {
const question = datasetRow.question;
const retrievedDocs = await vectorStore.hybridSearch(question, {limit: 1});

const judgment = await judgeChain.invoke({
question,
answer: retrievedDocs.map(doc => doc.pageContent).join('\n')
});

return {
question,
retrievedText: retrievedDocs.map(doc => doc.pageContent).join('\n'),
retrievedCount: retrievedDocs.length,
score: judgment.score,
reason: judgment.reason,
passed: judgment.score >= passThreshold
};
},
{ name: 'LLM-as-Judge' });

以下步骤在测试问题列表中运行上述评估模型并收集结果

const evaluation = new weave.Evaluation({
dataset,
scorers: [simpleScorer],
});

await evaluation.evaluate({ model: evaluationModel });

评分函数从 judge 的输出中提取关键指标进行汇总和报告。

const simpleScorer = weave.op(
({ modelOutput }) =>
({
score: modelOutput.score,
passed: modelOutput.passed
}),
{ name: 'simpleScore' }
);

定义 LLM Judge Prompt

提示模板定义了评估逻辑和标准,指导评判者的决策过程。此提示充当配置层,我们在此编码业务规则、评分标准和特定领域的示例,以确保跨不同查询的一致评估。

对于此零售搜索实现,提示优先考虑语义相关性和客户意图,而非精确的关键词匹配。我们包含评分示例和上下文指南,以帮助评判者理解什么是好的产品匹配。提示架构允许我们修改评估标准,而无需更改底层代码——从而可以使评判者的行为适应不同的产品类别、季节性需求或业务策略。

const LLM_AS_JUDGE_PROMPT = ChatPromptTemplate.fromMessages([
["system", `You are evaluating a retail product search system. Customers search for clothing items using natural language, and you need to determine if the retrieved products are relevant to their search intent.

IMPORTANT: Focus on search relevance, not perfect matches. A customer searching for "dress for party" should find cocktail dresses, evening dresses, etc. Consider synonyms, related items, and search intent.

Scoring Scale (1-5):
- 5: Excellent - The retrieved product perfectly matches or highly relates to the customer's search intent.
- 4: Good - The retrieved product is relevant with minor differences (e.g., slightly different style/color than ideal).
- 3: Fair - The retrieved product is somewhat relevant but may not fully meet the search intent.
- 2: Poor - The retrieved product has minimal relevance to the search query.
- 1: Unacceptable - The retrieved product is completely irrelevant to the customer's search.

Examples:
- Search: "black dress for evening" → Retrieved: "Elegant Black Cocktail Dress" → Score: 5 (Perfect match)
- Search: "warm sweater" → Retrieved: "Cozy Winter Wool Sweater" → Score: 5 (Excellent relevance)
- Search: "business attire" → Retrieved: "Professional Business Blazer" → Score: 5 (Highly relevant)
- Search: "casual shoes" → Retrieved: "Leather Ankle Boots" → Score: 3 (Somewhat relevant but more formal)

Return JSON with this exact structure:
{{
"score": <score_1_to_5>,
"reason": "<detailed_explanation>"
}}`],
["human", `Customer Search: {question}

Retrieved Product: {answer}

Evaluate if this product is relevant to what the customer is searching for. Consider search intent and natural language variations.`]
]);

测试零售问题

您可以用来测试评估流水线的一组示例客户查询。

const retailTestQuestions = [
"I need a black dress for a dinner party",
"Looking for comfortable shoes for running",
"Warm sweater for winter",
"Professional outfit for work meetings",
"Casual jeans for everyday wear",
"Something nice for a summer wedding",
"Comfortable t-shirt for the gym",
"Boots that go with everything",
"Business casual blazer",
"Winter ski jacket" // Edge case: Not in inventory
];

在评估流水线运行时,W&B 会自动捕获每个评判者决策的详细指标和跟踪信息。控制台提供了对评判者在不同查询类型、评分模式和潜在故障模式中表现的全面可见性。

以下截图显示了 LLM 评判者根据我们的零售搜索标准评估每个搜索结果。以 3 分为阈值,任何低于此分数的评估都将被记录为失败。请注意边缘情况,即库存中缺少滑雪夹克,而是返回了羊毛衫——评判者正确识别了此不匹配并使测试失败。每次评估都包括评判者的推理过程,展示了提示配置如何驱动跨不同场景的一致决策。

Evals

上述使用的完整工作代码和示例数据集可在此 GitHub 仓库中找到。

总结

LLM-as-Judge 将评估从静态规则转变为自适应推理。模块化架构——提示配置、执行链和全面的可观察性——为生产就绪的 AI 安全性提供了基础。

在第 3 部分中,我们将探讨一种不同的模式:行为塑造。我们将展示如何检测幻觉,并使用可观察性平台来改进检索增强生成 (RAG) 系统。这解决了企业 AI 中的一个关键问题——确保系统不仅能正确工作,还能从错误中学习并随着时间的推移而变得更好。


准备开始构建了吗?

请查看 快速入门教程,或使用 Weaviate Cloud (WCD) 的免费试用版构建令人惊叹的应用程序。

不想错过另一篇博文?

注册我们的双周时事通讯以保持更新!


提交后,我同意 服务条款 隐私政策.