使用 Arize Phoenix 追踪和评估您的智能体
您已经构建了智能体。它接收输入和工具,处理它们,并生成响应。也许它正在做决策、检索信息、自主执行任务,或者三者兼有。但现在最大的问题来了——它的表现有多有效?更重要的是,您怎么知道?
构建智能体是一回事;理解其行为是另一回事。这就是追踪和评估发挥作用的地方。追踪允许您一步步地精确查看智能体正在做什么——它接收到什么输入,如何处理信息,以及如何得出最终输出。可以把它想象成您智能体决策过程的 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?")
您的智能体现在将:
- 使用 DuckDuckGoSearchTool 搜索 Google 的历史股价。
- 可能使用 VisitWebpageTool 访问页面以查找该数据。
- 尝试收集信息并生成或描述如何创建折线图。
追踪您的智能体
一旦您的智能体运行起来,下一个挑战就是理解其内部工作流程。追踪可以帮助您跟踪智能体采取的每一步——从调用工具到处理输入和生成响应——使您能够调试问题、优化性能并确保其行为符合预期。
为了启用追踪,我们将使用 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 任务自动化机器人 |
