概览

当您在 Agno 中运行代理时,您收到的响应(RunResponse)会包含有关该运行的详细指标。这些指标可帮助您了解资源使用情况(例如令牌使用量时间)、性能以及模型和工具调用的其他方面。

指标可在多个层面获取:

  • 每个消息:每条消息(助手、工具等)都有自己的指标。
  • 每次工具调用:每次工具执行都有自己的指标。
  • 聚合RunResponse 会聚合运行中所有消息的指标。

指标的位置

  • RunResponse.metrics: 整个运行的聚合指标,以字典形式表示。
  • ToolExecution.metrics: 每次工具调用的指标。
  • Message.metrics: 每条消息的指标(助手、工具等)。

示例用法

假设您有一个执行某些任务的代理,并且想在运行后分析指标。以下是如何访问和打印指标的方法:

您运行以下代码来创建一个代理并使用以下配置运行它:

from typing import Iterator

from agno.agent import Agent, RunResponse
from agno.models.google import Gemini
from agno.tools.yfinance import YFinanceTools
from rich.pretty import pprint

agent = Agent(
    model=Gemini(id="gemini-2.0-flash-001"),
    tools=[YFinanceTools(stock_price=True)],
    markdown=True,
    show_tool_calls=True,
)

agent.print_response(
    "What is the stock price of NVDA", stream=True
)

# 按消息打印指标
if agent.run_response.messages:
    for message in agent.run_response.messages:
        if message.role == "assistant":
            if message.content:
                print(f"Message: {message.content}")
            elif message.tool_calls:
                print(f"Tool calls: {message.tool_calls}")
            print("---" * 5, "Metrics", "---" * 5)
            pprint(message.metrics)
            print("---" * 20)

# 打印整个运行的聚合指标
print("---" * 5, "Collected Metrics", "---" * 5)
pprint(agent.run_response.metrics)
# 打印整个会话的聚合指标
print("---" * 5, "Session Metrics", "---" * 5)
pprint(agent.session_metrics)

您将看到包含以下信息的输出:

工具执行指标

本节提供每次工具执行的指标。它包括有关各个工具调用资源使用情况和性能的详细信息。

Tool Run Message Metrics

消息指标

在这里,您可以查看代理每条消息响应的指标。所有“assistant”响应都将具有此类指标,帮助您了解消息级别的性能和资源使用情况。

Agent Run Message Metrics

聚合运行指标

聚合指标提供了整个运行的全面视图。它包括所有消息和工具调用的摘要,让您对代理的整体性能和资源使用情况有一个总体了解。

Aggregated Run Metrics

同样对于会话指标,您可以查看会话中所有运行的聚合指标,从而深入了解代理在多次运行中的整体性能和资源使用情况。

指标如何聚合

  • 每个消息:每条消息(助手、工具等)都有自己的指标对象。
  • 运行级别RunResponse.metrics 是一个字典,其中每个键(例如,input_tokens)映射到运行中所有助手消息的值列表。
  • 会话级别SessionMetrics(请参阅 agent.session_metrics)跨会话中的所有运行聚合指标。

MessageMetrics 参数

字段描述
input_tokens输入给模型的提示信息中的 token 数量。
output_tokens模型生成的输出中的 token 数量。
total_tokens使用的总 token 数量(输入 + 输出)。
prompt_tokens提示信息中的 token 数量(对于 OpenAI 来说,与 input_tokens 相同)。
completion_tokens完成信息中的 token 数量(对于 OpenAI 来说,与 output_tokens 相同)。
audio_tokens总音频 token 数量(如果使用了音频输入/输出)。
input_audio_tokens输入中的音频 token 数量。
output_audio_tokens输出中的音频 token 数量。
cached_tokens从缓存提供的 token 数量(如果使用了缓存)。
cache_write_tokens写入缓存的 token 数量。
reasoning_tokens用于推理步骤的 token 数量(如果已启用)。
prompt_tokens_details包含提示 token 详细细分的字典(由 OpenAI 使用)。
completion_tokens_details包含输出 token 详细细分的字典(由 OpenAI 使用)。
additional_metrics模型/工具提供的任何额外指标(例如,延迟、成本等)。
time生成消息所花费的时间(秒)。
time_to_first_token生成第一个 token 直到所需的时间(秒)。

注意:并非所有字段都始终存在;具体取决于模型/工具和运行情况。