ai-agents-for-beginners

生产中的 AI 代理:可观察性和评估

AI Agents in Production

随着 AI 代理从实验性原型走向实际应用,理解其行为、监控其性能并系统地评估其输出的能力变得至关重要。

学习目标

完成本课程后,您将了解如何/理解

目标是让您掌握知识,将您的“黑盒”代理转化为透明、可管理和可靠的系统。

注意: 部署安全可靠的 AI 代理非常重要。另请查看构建可信 AI 代理课程。

跟踪和跨度

可观察性工具,例如 LangfuseAzure AI Foundry,通常将代理运行表示为跟踪和跨度。

Trace tree in Langfuse

如果没有可观察性,AI 代理可能感觉像一个“黑盒”——其内部状态和推理是不透明的,这使得诊断问题或优化性能变得困难。有了可观察性,代理就变成了“玻璃盒”,提供了透明度,这对于建立信任和确保它们按预期运行至关重要。

为什么可观察性在生产环境中很重要

将 AI 代理过渡到生产环境带来了一系列新的挑战和要求。可观察性不再是“锦上添花”,而是一项关键能力

要跟踪的关键指标

为了监控和理解代理行为,应该跟踪一系列指标和信号。虽然具体指标可能因代理目的而异,但有些指标是普遍重要的。

以下是可观察性工具监控的一些最常见指标

延迟: 代理响应速度如何?漫长的等待时间会对用户体验产生负面影响。您应该通过跟踪代理运行来测量任务和单个步骤的延迟。例如,一个所有模型调用都花费 20 秒的代理可以通过使用更快的模型或并行运行模型调用来加速。

成本: 每次代理运行的费用是多少?AI 代理依赖于按令牌计费的 LLM 调用或外部 API。频繁的工具使用或多个提示会迅速增加成本。例如,如果代理为了边际质量改进而调用 LLM 五次,则您必须评估成本是否合理,或者您是否可以减少调用次数或使用更便宜的模型。实时监控还可以帮助识别意外峰值(例如,导致过多 API 循环的错误)。

请求错误: 代理失败了多少个请求?这可以包括 API 错误或失败的工具调用。为了使您的代理在生产中更健壮地应对这些问题,您可以设置回退或重试。例如,如果 LLM 提供商 A 宕机,您将切换到 LLM 提供商 B 作为备份。

用户反馈: 实施直接用户评估可提供有价值的见解。这可以包括明确的评级(👍赞/👎踩,⭐1-5 星)或文本评论。持续的负面反馈应该提醒您,因为这表明代理没有按预期工作。

隐式用户反馈: 即使没有明确评级,用户行为也会提供间接反馈。这可以包括立即重新措辞问题、重复查询或单击重试按钮。例如,如果您看到用户反复提出相同的问题,这表明代理没有按预期工作。

准确性: 代理生成正确或理想输出的频率如何?准确性定义因情况而异(例如,问题解决正确性、信息检索准确性、用户满意度)。第一步是定义您的代理的成功是什么样的。您可以通过自动化检查、评估分数或任务完成标签来跟踪准确性。例如,将跟踪标记为“成功”或“失败”。

自动化评估指标: 您还可以设置自动化评估。例如,您可以使用 LLM 对代理的输出进行评分,例如它是否有用、准确与否。还有几个开源库可以帮助您对代理的不同方面进行评分。例如,用于 RAG 代理的 RAGAS 或用于检测有害语言或提示注入的 LLM Guard

实际上,这些指标的组合可以最好地覆盖 AI 代理的健康状况。在本章的示例笔记本中,我们将向您展示这些指标在实际示例中的样子,但首先,我们将学习典型的评估工作流程是什么样子的。

检测您的代理

要收集跟踪数据,您需要检测您的代码。目标是检测代理代码以发出可以由可观察性平台捕获、处理和可视化的跟踪和指标。

OpenTelemetry (OTel): OpenTelemetry 已成为 LLM 可观察性的行业标准。它提供了一套用于生成、收集和导出遥测数据的 API、SDK 和工具。

有许多检测库包装了现有的代理框架,使其易于将 OpenTelemetry 跨度导出到可观察性工具。下面是一个使用 OpenLit 检测库检测 AutoGen 代理的示例

import openlit

openlit.init(tracer = langfuse._otel_tracer, disable_batch = True)

本章的示例笔记本将演示如何检测您的 AutoGen 代理。

手动创建跨度: 虽然检测库提供了良好的基线,但通常需要更详细或自定义的信息。您可以手动创建跨度以添加自定义应用程序逻辑。更重要的是,它们可以通过自定义属性(也称为标签或元数据)丰富自动或手动创建的跨度。这些属性可以包括业务特定数据、中间计算或任何可能对调试或分析有用的上下文,例如 user_idsession_idmodel_version

使用 Langfuse Python SDK 手动创建跟踪和跨度的示例

from langfuse import get_client
 
langfuse = get_client()
 
span = langfuse.start_span(name="my-span")
 
span.end()

代理评估

可观察性为我们提供了指标,但评估是分析数据(并执行测试)以确定 AI 代理的运行情况以及如何改进的过程。换句话说,一旦您有了这些跟踪和指标,您如何使用它们来判断代理并做出决策?

定期评估很重要,因为 AI 代理通常是非确定性的,并且可以演变(通过更新或漂移的模型行为)——如果没有评估,您将不知道您的“智能代理”是否真的做得很好,或者它是否已经退化。

AI 代理的评估分为两类:在线评估离线评估。两者都很有价值,并且相辅相成。我们通常从离线评估开始,因为这是部署任何代理之前最必要的步骤。

离线评估

Dataset items in Langfuse

这涉及在受控环境中评估代理,通常使用测试数据集,而不是实时用户查询。您使用经过筛选的数据集,其中您知道预期的输出或正确的行为是什么,然后在该数据集上运行您的代理。

例如,如果您构建了一个数学应用题代理,您可能有一个包含已知答案的 100 个问题的测试数据集。离线评估通常在开发期间进行(并且可以是 CI/CD 管道的一部分),以检查改进或防止回归。好处是它可重复,并且您可以获得清晰的准确性指标,因为您拥有真实数据。您还可以模拟用户查询并根据理想答案测量代理的响应,或使用上述自动化指标。

离线评估的关键挑战是确保您的测试数据集全面且保持相关性——代理在固定的测试集上可能表现良好,但在生产中可能会遇到非常不同的查询。因此,您应该使用反映实际场景的新边缘情况和示例来更新测试集。小规模的“冒烟测试”用例和大型评估集的混合很有用:小规模集用于快速检查,大型集用于更广泛的性能指标。

在线评估

Observability metrics overview

这指的是在实时、真实世界环境中评估代理,即在生产中的实际使用期间。在线评估涉及监控代理在真实用户交互中的性能并持续分析结果。

例如,您可能会跟踪实时流量的成功率、用户满意度分数或其他指标。在线评估的优势在于它捕获了您在实验室环境中可能无法预料到的事情——您可以观察模型随时间的漂移(如果代理的效率随着输入模式的变化而降低),并捕获测试数据中没有的意外查询或情况。它提供了代理在实际环境中行为的真实情况。

在线评估通常涉及收集隐式和显式用户反馈,如上所述,并可能运行影子测试或 A/B 测试(其中代理的新版本并行运行以与旧版本进行比较)。挑战在于,获取实时交互的可靠标签或分数可能很棘手——您可能依赖用户反馈或下游指标(例如用户是否点击了结果)。

将两者结合起来

在线和离线评估并非相互排斥;它们高度互补。来自在线监控的洞察(例如,代理表现不佳的新类型用户查询)可用于增强和改进离线测试数据集。反过来,在离线测试中表现良好的代理可以更自信地部署和在线监控。

事实上,许多团队采用了一个循环

离线评估 -> 部署 -> 在线监控 -> 收集新的失败案例 -> 添加到离线数据集 -> 优化代理 -> 重复.

常见问题

当您将 AI 代理部署到生产环境时,您可能会遇到各种挑战。以下是一些常见问题及其潜在解决方案

问题 潜在解决方案
AI 代理无法持续执行任务 - 优化提供给 AI 代理的提示;明确目标。
- 确定将任务分解为子任务并由多个代理处理何时会有帮助。
AI 代理陷入连续循环 - 确保您有明确的终止条款和条件,以便代理知道何时停止该过程。
- 对于需要推理和规划的复杂任务,使用专门用于推理任务的更大模型。
AI 代理工具调用表现不佳 - 在代理系统之外测试和验证工具的输出。
- 优化定义的参数、提示和工具命名。
多代理系统无法持续执行 - 优化提供给每个代理的提示,以确保它们具体且彼此不同。
- 使用“路由”或控制器代理构建一个分层系统,以确定哪个代理是正确的代理。

通过部署可观察性,可以更有效地识别许多这些问题。我们之前讨论的跟踪和指标有助于精确定位代理工作流程中出现问题的位置,从而使调试和优化更加高效。

管理成本

以下是一些管理将 AI 代理部署到生产环境成本的策略

使用更小的模型: 小型语言模型 (SLM) 可以在某些代理用例中表现良好,并将显著降低成本。如前所述,建立一个评估系统来确定和比较性能与更大的模型是了解 SLM 在您的用例中表现如何的最佳方式。考虑将 SLM 用于意图分类或参数提取等更简单的任务,而将更大的模型用于复杂推理。

使用路由器模型: 类似的策略是使用不同类型和大小的模型。您可以使用 LLM/SLM 或无服务器功能,根据复杂性将请求路由到最合适的模型。这还将有助于降低成本,同时确保在正确任务上的性能。例如,将简单查询路由到更小、更快的模型,并且仅将昂贵的大模型用于复杂推理任务。

缓存响应: 识别常见请求和任务,并在它们通过您的代理系统之前提供响应,是减少类似请求数量的好方法。您甚至可以实施一个流程,使用更基本的 AI 模型来识别请求与缓存请求的相似程度。此策略可以显著降低常见问题或常见工作流程的成本。

让我们看看这在实践中是如何工作的

在本节的示例笔记本中,我们将看到如何使用可观察性工具来监控和评估我们的代理的示例。

对生产中的 AI 代理有更多疑问?

加入 Azure AI Foundry Discord,与其他学习者交流,参加办公时间,并获得您的 AI Agent 问题解答。

上一课

元认知设计模式

下一课

代理协议