使用 Arize Phoenix 追踪和评估您的智能体

发布于 2025 年 2 月 28 日
在 GitHub 上更新

您已经构建了智能体。它接收输入和工具,处理它们,并生成响应。也许它正在做决策、检索信息、自主执行任务,或者三者兼有。但现在最大的问题来了——它的表现有多有效?更重要的是,您怎么知道?

构建智能体是一回事;理解其行为是另一回事。这就是追踪和评估发挥作用的地方。追踪允许您一步步地精确查看智能体正在做什么——它接收到什么输入,如何处理信息,以及如何得出最终输出。可以把它想象成您智能体决策过程的 X 光片。同时,评估帮助您衡量性能,确保您的智能体不仅功能正常,而且实际上有效。它是否产生了正确的答案?其在每个步骤中的发现有多相关?智能体的响应制作得如何?它是否符合您的目标?

Arize Phoenix 提供了一个集中式平台,可以实时追踪、评估和调试您的智能体决策——所有这些都在一个地方。我们将深入探讨如何实施这些功能来完善和优化您的智能体。因为构建只是开始——真正的智能来自于准确了解幕后发生的一切。

为此,让我们确保我们有一个智能体设置!您可以按照以下步骤进行操作,或者使用您自己的智能体。

构建智能体

步骤 1:安装所需的库

pip install -q smolagents

步骤 2:导入所有必要的构建块

现在,让我们引入将要使用的类和工具

from smolagents import (
   CodeAgent,
   DuckDuckGoSearchTool,
   VisitWebpageTool,
   HfApiModel,
)

步骤 3:设置我们的基础模型

我们将创建一个由 Hugging Face Hub 无服务器 API 提供支持的模型实例

hf_model = HfApiModel()

步骤 4:创建工具调用智能体

agent = CodeAgent(
    tools=[DuckDuckGoSearchTool(), VisitWebpageTool()],
    model=hf_model,
    add_base_tools=True
)

步骤 5:运行智能体

现在是神奇时刻——让我们看看我们的智能体是如何运作的。我们向智能体提出的问题是
“获取 Google 从 2020 年到 2024 年的股价,并从中创建一个折线图?”

agent.run("fetch the share price of google from 2020 to 2024, and create a line graph from it?")

您的智能体现在将:

  1. 使用 DuckDuckGoSearchTool 搜索 Google 的历史股价。
  2. 可能使用 VisitWebpageTool 访问页面以查找该数据。
  3. 尝试收集信息并生成或描述如何创建折线图。

追踪您的智能体

一旦您的智能体运行起来,下一个挑战就是理解其内部工作流程。追踪可以帮助您跟踪智能体采取的每一步——从调用工具到处理输入和生成响应——使您能够调试问题、优化性能并确保其行为符合预期。

为了启用追踪,我们将使用 Arize Phoenix 进行可视化,并使用 OpenTelemetry + OpenInference 进行仪器化。

从 smolagents 安装 telemetry 模块

pip install -q 'smolagents[telemetry]'

您可以通过多种方式运行 Phoenix。此命令将在您的机器上运行 Phoenix 的本地实例

python -m phoenix.server.main serve

对于 Phoenix 的其他托管选项,您可以创建一个免费的在线 Phoenix 实例在本地自托管应用程序,或在 Hugging Face Spaces 上托管应用程序

启动后,我们注册一个追踪器提供程序,指向我们的 Phoenix 实例。

from phoenix.otel import register
from openinference.instrumentation.smolagents import SmolagentsInstrumentor

tracer_provider = register(project_name="my-smolagents-app") # creates a tracer provider to capture OTEL traces
SmolagentsInstrumentor().instrument(tracer_provider=tracer_provider) # automatically captures any smolagents calls as traces

现在,对 smolagents 的所有调用都将通过我们的 Phoenix 实例发送。

现在追踪已启用,让我们用一个简单的查询来测试它

agent.run("What time is it in Tokyo right now?")

一旦 OpenInference 与 SmolAgents 设置好,每次智能体调用都将在 Phoenix 中自动追踪。

评估您的智能体

一旦您的智能体启动并运行受到监控,下一步就是评估其性能。评估(evals)有助于确定您的智能体在检索、处理和呈现信息方面的表现如何。

您可以运行多种类型的评估,例如响应相关性、事实准确性、延迟等等。查看 Phoenix 文档,深入了解不同的评估技术。

在此示例中,我们将重点评估智能体使用的 DuckDuckGo 搜索工具。我们将使用大型语言模型(LLM)作为判断者——特别是 OpenAI 的 GPT-4o——来衡量其搜索结果的相关性。

步骤 1:安装 OpenAI

首先,安装必要的软件包

pip install -q openai

我们将使用 GPT-4o 评估搜索工具的响应是否相关。
这种方法,称为“LLM 作为判断者”,利用语言模型对响应进行分类和评分。

步骤 2:检索工具执行跨度

为了评估 DuckDuckGo 检索信息的表现,我们首先需要提取调用该工具的执行轨迹。

from phoenix.trace.dsl import SpanQuery
import phoenix as px
import json

query = SpanQuery().where(
    "name == 'DuckDuckGoSearchTool'",
).select(
    input="input.value", # this parameter must be named input to work with the RAG_RELEVANCY_PROMPT_TEMPLATE
    reference="output.value", # this parameter must be named reference to work with the RAG_RELEVANCY_PROMPT_TEMPLATE
)

# The Phoenix Client can take this query and return the dataframe.
tool_spans = px.Client().query_spans(query, project_name="my-smolagents-app")

tool_spans["input"] = tool_spans["input"].apply(lambda x: json.loads(x).get("kwargs", {}).get("query", ""))
tool_spans.head()

步骤 3:导入提示模板

接下来,我们加载 RAG 相关性提示模板,它将帮助 LLM 分类搜索结果是否相关。

from phoenix.evals import (
    RAG_RELEVANCY_PROMPT_RAILS_MAP,
    RAG_RELEVANCY_PROMPT_TEMPLATE,
    OpenAIModel,
    llm_classify
)
import nest_asyncio
nest_asyncio.apply()

print(RAG_RELEVANCY_PROMPT_TEMPLATE)

步骤 4:运行评估

现在,我们使用 GPT-4o 作为判断者运行评估

from phoenix.evals import (
    llm_classify,
    OpenAIModel,
    RAG_RELEVANCY_PROMPT_TEMPLATE,
)

eval_model = OpenAIModel(model="gpt-4o")

eval_results = llm_classify(
    dataframe=tool_spans,
    model=eval_model,
    template=RAG_RELEVANCY_PROMPT_TEMPLATE,
    rails=["relevant", "unrelated"],
    concurrency=10,
    provide_explanation=True,
)
eval_results["score"] = eval_results["explanation"].apply(lambda x: 1 if "relevant" in x else 0)

这里发生了什么?

  • 我们使用 GPT-4o 分析搜索查询(输入)和搜索结果(输出)。
  • LLM 根据提示将结果分类为相关或不相关。
  • 我们分配一个二进制分数(1 = 相关,0 = 不相关)以进行进一步分析。

查看您的结果

eval_results.head()

步骤 5:将评估结果发送到 Phoenix

from phoenix.trace import SpanEvaluations

px.Client().log_evaluations(SpanEvaluations(eval_name="DuckDuckGoSearchTool Relevancy", dataframe=eval_results))

通过此设置,我们现在可以系统地评估 DuckDuckGo 搜索工具在我们的智能体中的有效性。使用 LLM 作为判断者,我们可以确保我们的智能体检索到准确和相关的信息,从而提高性能。
使用本教程可以轻松设置任何评估——只需将 RAG_RELEVANCY_PROMPT_TEMPLATE 替换为适合您需求的另一个提示模板即可。Phoenix 提供了各种预先编写和预先测试的评估模板,涵盖了忠实度、响应连贯性、事实准确性等领域。查看 Phoenix 文档以探索完整列表,并为您的智能体找到最佳选择!

评估模板 适用的智能体类型
幻觉检测 RAG 智能体 普通聊天机器人 知识型助手
检索数据问答 RAG 智能体 研究助理 文档搜索工具
RAG 相关性 RAG 智能体 基于搜索的 AI 助手
摘要 摘要工具 文档摘要器 会议笔记生成器
代码生成 代码助手 AI 编程机器人
毒性检测 内容审核机器人 内容过滤 AI
AI vs. 人类(真实情况) 评估和基准测试工具 AI 生成内容验证器
参考(引用)链接 研究助理 引用工具 学术写作辅助工具
SQL 生成评估 数据库查询智能体 SQL 自动化工具
智能体函数调用评估 多步推理智能体 API 调用 AI 任务自动化机器人

社区

📻 🎙️ 嘿,我为这篇博文生成了一个 AI 播客,快来听听看吧!

此播客通过 ngxson/kokoro-podcast-generator 生成,使用 DeepSeek-R1Kokoro-TTS

注册登录 发表评论