【指南】使用Arize Phoenix评估AI代理

2025年03月11日 由 alex 发表 3325 0

4


所以,你已经构建了你的智能体。它接收输入和工具,处理它们,并生成响应。也许它在做决策、检索信息、自主执行任务,或者三者兼具。但现在出现了一个大问题——它的表现如何?更重要的是,你如何知道?


构建智能体是一回事,理解其行为又是另一回事。这就是追踪和评估的用武之地。追踪可以让你一步一步地看到智能体到底在做什么——它接收了什么输入,如何处理信息,以及如何得出最终输出。可以把它想象成给智能体的决策过程拍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:运行智能体

现在,到了见证奇迹的时刻——让我们看看智能体的实际表现。我们向智能体提出的问题是:


“获取2020年至2024年谷歌的股价,并据此创建折线图?”


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


你的智能体现在将:

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


追踪你的智能体

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


为了启用追踪,我们将使用Arize Phoenix进行可视化,以及使用OpenTelemetry + OpenInference进行工具化。


从smolagents安装遥测模块:


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)有助于确定智能体在检索、处理和呈现信息方面的表现如何。你可以运行多种类型的评估,如响应相关性、事实准确性、延迟等。


在这个例子中,我们将重点评估智能体使用的DuckDuckGo搜索工具。我们将使用一个大型语言模型(LLM)作为评判标准来衡量其搜索结果的相关性——具体来说,就是OpenAI的GPT-4o。


步骤1:安装OpenAI

首先,安装必要的包:


pip install -q openai


我们将使用GPT-4o来评估搜索工具的响应是否相关。


这种方法被称为“将大型语言模型作为评判标准”,它利用语言模型对响应进行分类和评分。


步骤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(检索增强生成)相关性提示模板,该模板将帮助大型语言模型判断搜索结果是否相关。


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来分析搜索查询(输入)和搜索结果(输出)。
  • 大型语言模型根据提示将结果分类为相关或不相关。
  • 我们为进一步分析分配一个二进制分数(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搜索工具在智能体中的有效性。使用大型语言模型作为评判标准,我们可以确保智能体检索到准确且相关的信息,从而提高其性能。


使用本教程,设置任何评估都很容易——只需将RAG_RELEVANCY_PROMPT_TEMPLATE替换为适合你需求的提示模板即可。Phoenix提供了各种预先编写和预先测试的评估模板,涵盖了忠实性、响应连贯性、事实准确性等多个方面。


5

文章来源:https://medium.com/@amanatulla1606/evaluating-ai-agents-with-arize-phoenix-8ca60cc52f4a
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消