AI News HubLIVE
站内改写

使用 AWS 上的 LangSmith 评估深度智能体

本文结合 LangChain 评估深度智能体的经验和 Anthropic 的 AI 智能体评估指南,提供了实用指南。您将学习如何应用五种评估模式、使用 pytest 和 LangSmith 构建离线评估,以及配置生产环境的在线监控。文中以文本到 SQL 的深度智能体为例,使用 Amazon Bedrock 覆盖从开发到生产的完整生命周期。

文章情报

工程师进阶

要点

  • 深度智能体的评估面临非确定性、错误传播和创造性解决方案等挑战。
  • 介绍了代码基础、模型基础和人工三种评估器,并推荐组合使用。
  • 通过 pytest 和 LangSmith 实现离线评估,并支持生产环境在线监控。
  • 针对深度智能体提出了自定义测试逻辑、单步评估和完整轨迹评估等模式。

为什么重要

这条新闻值得关注,因为深度智能体的评估面临非确定性、错误传播和创造性解决方案等挑战。

技术影响

可能影响模型选型、推理成本、产品能力和评测基准。

本文由 LangChain 合作伙伴负责人 Karan Singh 共同撰写。

验证 AI 智能体在生产前的行为是应用 AI 中最棘手的问题之一。智能体是非确定性的、多步骤的,早期步骤的错误可能会影响下游结果。一次错误工具调用可能导致整个工作流出现问题。AWS 上的 LangSmith 提供了评估框架,帮助提前发现这些问题、在生产中跟踪它们,并在整个生命周期中持续改进智能体的可靠性。

本文结合了 LangChain 在评估深度智能体方面的工作和 Anthropic 关于揭秘 AI 智能体评估的指南,形成了一篇实用教程。您将学习:1)应用五种深度智能体评估模式;2)使用 pytest 和 LangSmith 构建离线评估;3)为生产配置在线监控。示例中使用基于 Amazon Bedrock 的文本到 SQL 深度智能体,覆盖从开发到生产的完整生命周期。

Amazon Nova 2 Lite 模型

Amazon Nova 2 Lite 是 Amazon Bedrock 中提供的一种快速、高性价比的推理模型。它支持可配置预算级别(低、中、高)的扩展思考,可接受文本、图像、视频和文档输入,上下文窗口达 100 万 token。Nova 2 Lite 在指令遵循、函数调用和代码生成方面表现出色,非常适合本文中文本到 SQL 智能体这样的智能体工作负载。

智能体评估的结构

评估是对 AI 系统的测试:给 AI 输入,应用评分逻辑对其输出进行评分,并衡量成功与否。对于大语言模型(LLM)调用,这很直接。对于智能体,每个组件都变得更加复杂。

**关键术语**:

  • **任务**:具有定义输入和成功标准的单个测试。例如,“有多少客户来自加拿大?”期望答案是 8。
  • **试验**:对任务的单次尝试。由于模型输出是非确定性的,每个任务运行多次试验可产生更可靠的结果。
  • **评分器**:对智能体表现的某些方面进行评分的逻辑。一个任务可以有多个评分器,每个评估不同维度。
  • **记录**:试验的完整记录,包括工具调用、推理步骤、中间结果和交互。在 LangSmith 中,这是完整轨迹,可用于调试。
  • **结果**:试验结束时环境的最终状态。智能体可能说“答案是 8”,但结果是它是否真的对数据库执行了正确的 SQL 查询。
  • **评估框架**:端到端运行评估的基础设施。它提供指令和工具,并发运行任务,记录步骤,对输出评分,并聚合结果。
  • **评估套件**:旨在衡量特定能力或行为的任务集合。

为什么智能体评估更难

三个特性使智能体评估与直接评估 LLM 输出有本质不同:

  • **非确定性**:智能体行为在不同运行间变化。同一任务可能 90% 成功、10% 失败。单一的通过/失败结果提供的信息有限。需要多次试验来估计实际性能。两个有用指标:pass@k(衡量 k 次尝试中至少一次成功的概率)和 pass^k(所有 k 次试验都成功的概率)。当一次成功足够时使用 pass@k;当一致性重要时使用 pass^k。
  • **错误传播**:在多步骤智能体中,第 3 步的错误可能级联到后续步骤。文本到 SQL 智能体如果早期错误识别了 Schema,将构建错误的 JOIN,导致最终答案错误。仅评估最终输出会遗漏问题发生的位置。
  • **创造性解决方案**:前沿模型有时会找到评估设计者未曾预料到的有效方法。

可评估的内容

对于智能体运行,有三个可测试的类别:

  • **轨迹**:调用的工具序列和生成的参数。是否探索了 Schema?是否在执行前使用了 sql_db_query_checker?
  • **最终响应**:返回给用户的最终输出。答案是否正确?格式是否良好?
  • **其他状态**:智能体产生的其他工件,如写入的文件、创建的 TODO 计划、保存的中间结果。

AI 智能体的评估模式

智能体评估通常组合三种类型的评分器,有效设计的关键是为用例选择正确的组合。

**代码基础评分器**:使用确定性逻辑验证特定条件:字符串匹配、正则表达式、二进制通过/失败测试、静态分析、工具调用验证、记录分析(轮次、token 使用)。优点:快速、廉价、客观、可重复、易于调试。缺点:对于与预期模式不完全匹配的变化可能过于严格。

示例:验证是否调用了工具:

tool_names = [tc["name"] for tc in tool_calls]
assert "sql_db_query" in tool_names, "Agent must execute sql_db_query"

**模型基础评分器(LLM 作为裁判)**:使用另一个 LLM 评估智能体的输出。方法包括基于规则的评分、自然语言断言、成对比较、多裁判共识。优点:灵活、可扩展、捕捉细微差别,处理开放式任务和自由格式输出。缺点:非确定性、比代码更昂贵,需要与人类评分器校准。

示例:对复杂分析答案评分:

rubric = """Score the agent's answer on these dimensions (0.0 to 1.0):
1. correctness: Does it identify the right top employee? (Jane Peacock)
2. completeness: Does it include revenue broken down by country?
3. clarity: Is the answer well-formatted and easy to understand?
Return JSON: {"correctness": float, "completeness": float, "clarity": float}"""
judge_response = model.invoke(rubric.format(answer=answer))
scores = json.loads(judge_response.content)

LangSmith 的 Align Evaluator 功能可帮助将 LLM 作为裁判的评估器与人类专家反馈进行校准,可用于数据集上的离线评估或在线评估。

**人工评分器**:人类评分器(主题专家评审、众包判断、抽样检查)通常被视为主观质量评估的金标准。但相比程序化评估,成本高、速度慢,但对于校准模型基础评分器至关重要。建议:最初用专家人工判断校准 LLM 裁判规则,然后定期进行人工审查,确保自动评分器没有漂移。

**组合评分器的实际建议**:尽可能使用确定性评分器,在需要细微差别时使用 LLM 评分器,使用人类评分器进行校准。对于文本到 SQL 智能体:代码基础评分器检查是否调用了 sql_db_query、答案是否包含“8”、是否执行了 DML 语句(INSERT, DELETE);LLM 作为裁判处理复杂查询(分析是否正确、完整、结构良好);人类评分器进行定期抽查。

能力评估与回归评估

并非所有评估目的相同:

  • **能力评估**:问“这个智能体擅长什么?”应针对当前困难的任务,为团队提供进步阶梯。从较低通过率开始,逐步提高。
  • **回归评估**:问“智能体还能处理以前的任务吗?”应接近 100% 通过率。下降表示出了问题。

随着智能体成熟,达到高通过率的能力评估可以升级为回归评估。曾经衡量“能否做到”的任务现在衡量“是否还能可靠地做到”。

评估深度智能体

深度智能体(使用规划、工具使用、文件系统后端和渐进式上下文加载来处理复杂多步骤任务的系统)打破了传统假设:每个测试用例可通过相同应用逻辑运行并由相同评估器评分。LangChain 在过去几个月中发布了四个基于深度智能体架构的应用,并识别了四种广泛适用的模式。

**模式 1:每个数据点的自定义测试逻辑** 传统 LLM 评估对每个数据点相同对待:通过相同应用运行,由相同评估器评分。深度智能体打破了这一假设。每个测试用例可能有自己的成功标准,这些标准可能涉及对智能体轨迹和状态的具体断言,而不仅仅是最终消息。

考虑文本到 SQL 智能体:“有多少客户来自加拿大?”只有一个正确答案(8),可通过字符串匹配检查。但“哪个员工创造了最多收入,来自哪些国家?”需要 LLM 裁判评估正确性、完整性和清晰度,因为有效答案的格式差异很大。

LangSmith 的 Pytest 集成支持此模式。可以对每个测试用例的智能体轨迹、最终消息和状态做出不同断言:

@pytest.mark.langsmith
def test_canada_customer_count(sql_agent):
    result = sql_agent.invoke({"messages": [{"role": "user", "content": "How many customers are from Canada?"}]})
    answer = result["messages"][-1].content
    assert "8" in answer

@pytest.mark.langsmith
def test_revenue_by_employee(sql_agent, model):
    result = sql_agent.invoke({"messages": [{"role": "user", "content": "Which employee generated the most revenue?"}]})
    scores = llm_judge(model, result["messages"][-1].content)
    assert scores["correctness"] >= 0.5

**模式 2:单步评估** LangChain 大约一半的深度智能体测试用例是单步评估:智能体在特定输入后立即决定做什么?这对于验证单个决策点特别有用。是否调用了正确的工具和参数?回归通常发生在单个决策点,而非整个执行序列。对于文本到 SQL 智能体,单步评估可能验证智能体的第一个动作是探索数据库 Schema(调用 sql_db_list_tables 或 sql_db_schema),而不是直接编写查询。

@pytest.mark.langsmith
def test_agent_calls_sql_tools_first(sql_agent):
    result = sql_agent.invoke({"messages": [{"role": "user", "content": "How many customers are from Canada?"}]})
    tool_calls = extract_tool_calls(result["messages"])
    tool_names = [tc["name"] for tc in tool_calls]
    sql_tools = {"sql_db_list_tables", "sql_db_schema", "sql_db_query", "sql_db_query_checker"}
    assert sql_tools & set(tool_names), "Agent must use SQL tools"

单步评估类似于单元测试:快速、聚焦、token 高效。

**模式 3:完整智能体回合** 单步评估测试单个决策,而完整智能体回合显示整体情况。在单个输入上端到端运行智能体并进行评估。

(原文截断,但上述内容已涵盖主要模式。)

通过结合这些模式,团队可以构建可靠的评估流程,确保深度智能体在生产中表现稳定。