所以,你已经构建了你的智能体。它接收输入和工具,处理它们,并生成响应。也许它在做决策、检索信息、自主执行任务,或者三者兼具。但现在出现了一个大问题——它的表现如何?更重要的是,你如何知道?
构建智能体是一回事,理解其行为又是另一回事。这就是追踪和评估的用武之地。追踪可以让你一步一步地看到智能体到底在做什么——它接收了什么输入,如何处理信息,以及如何得出最终输出。可以把它想象成给智能体的决策过程拍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?")
你的智能体现在将:
追踪你的智能体
一旦你的智能体开始运行,下一个挑战就是理解其内部工作流程。追踪可以帮助你跟踪智能体采取的每一步——从调用工具到处理输入和生成响应——使你能够调试问题、优化性能,并确保其行为符合预期。
为了启用追踪,我们将使用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)
这里发生了什么?
要查看结果:
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提供了各种预先编写和预先测试的评估模板,涵盖了忠实性、响应连贯性、事实准确性等多个方面。