使用 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

註冊登入 發表評論

© . This site is unofficial and not affiliated with Hugging Face, Inc.