概览

当您在 Agno 中运行一个团队时,您收到的响应(TeamRunResponse)会包含有关此次运行的详细指标。这些指标可帮助您了解跨团队领导者和团队成员的资源使用情况(例如 token 使用量时间)、性能以及模型和工具调用的其他方面。 指标可在多个级别上获取:
  • 每个消息:每个消息(助手、工具等)都有自己的指标。
  • 每次工具调用:每次工具执行都有自己的指标。
  • 每个成员运行:每个团队成员的运行都有自己的指标。
  • 团队级别TeamRunResponse 会聚合团队领导者消息的指标。
  • 会话级别:跨会话中所有运行的聚合指标,包括团队领导者和所有团队成员。
指标的存储位置
  • TeamRunResponse.metrics: 团队领导者运行的聚合指标,以字典形式存储。
  • TeamRunResponse.member_responses: 包含各自指标的各个成员响应。
  • ToolExecution.metrics: 每个工具调用的指标。
  • Message.metrics: 每个消息(助手、工具等)的指标。
  • Team.session_metrics: 团队领导者会话级别的指标。
  • Team.full_team_session_metrics: 会话级别的指标,包括所有团队成员的指标。

示例用法

假设您有一个执行某些任务的团队,并且您想在运行后分析指标。以下是访问和打印指标的方法:
from typing import Iterator

from agno.agent import Agent, RunResponse
from agno.models.openai import OpenAIChat
from agno.team.team import Team
from agno.tools.yfinance import YFinanceTools
from agno.utils.pprint import pprint_run_response
from rich.pretty import pprint

# 创建团队成员
stock_searcher = Agent(
    name="Stock Searcher",
    model=OpenAIChat("gpt-4o"),
    role="Searches the web for information on a stock.",
    tools=[YFinanceTools()],
)

# 创建团队
team = Team(
    name="Stock Research Team",
    model=OpenAIChat("gpt-4o"),
    members=[stock_searcher],
    markdown=True,
)

# 运行团队
run_stream: Iterator[RunResponse] = team.run(
    "What is the stock price of NVDA", stream=True
)
pprint_run_response(run_stream, markdown=True)

# 打印团队领导者消息指标
print("---" * 5, "Team Leader Message Metrics", "---" * 5)
if team.run_response.messages:
    for message in team.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, "Aggregated Metrics of Team Agent", "---" * 5)
pprint(team.run_response.metrics)

# 打印团队领导者会话指标
print("---" * 5, "Session Metrics", "---" * 5)
pprint(team.session_metrics)

# 打印团队成员消息指标
print("---" * 5, "Team Member Message Metrics", "---" * 5)
if team.run_response.member_responses:
    for member_response in team.run_response.member_responses:
        if member_response.messages:
            for message in member_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, "Full Team Session Metrics", "---" * 5)
pprint(team.full_team_session_metrics)

团队领导者指标

团队领导者消息指标

本节提供团队领导者每次消息响应的指标。所有“助手”响应都将具有此类指标,帮助您了解消息级别的性能和资源使用情况。 Team Leader Message Metrics

聚合团队领导者指标

聚合指标提供了团队领导者运行的全面视图。这包括所有消息和工具调用的摘要,让您对团队领导者的性能和资源使用情况有一个总体印象。 Aggregated Team Leader Metrics

团队成员指标

单个成员指标

每个团队成员都有自己的指标,可以从 team.run_response.member_responses 访问。这使您可以分析各个团队成员的性能。 Team Member Message Metrics

成员响应结构

每个成员响应包含:
  • messages: 包含单个指标的消息列表
  • metrics: 该成员运行的聚合指标
  • tools: 各自包含指标的工具执行

会话级别指标

团队领导者会话指标

team.session_metrics 提供团队领导者在会话中所有运行的聚合指标。 Team Leader Session Metrics

完整团队会话指标

team.full_team_session_metrics 提供全面的指标,包括会话中所有运行的团队领导者和所有团队成员的指标。 Full Team Session Metrics

指标如何聚合

团队领导者级别

  • 每个消息:每个消息(助手、工具等)都有自己的指标对象。
  • 运行级别TeamRunResponse.metrics 是一个字典,其中每个键(例如 input_tokens)映射到运行中所有助手消息值的列表。
  • 会话级别team.session_metrics 聚合会话中所有团队领导者运行的指标。

团队成员级别

  • 每个成员:每个团队成员都有自己单独跟踪的指标。
  • 成员聚合:单个成员的指标在其各自的 RunResponse 对象中进行聚合。
  • 完整团队聚合team.full_team_session_metrics 结合了团队领导者和所有团队成员的指标。

跨成员聚合

  • 会话级别team.full_team_session_metrics 提供了整个团队所有 token 使用量和性能指标的完整视图。

以编程方式访问成员指标

您可以通过多种方式访问单个成员指标:
# 访问特定成员的指标
for member_response in team.run_response.member_responses:
    print(f"Member: {member_response.member_id}")
    print(f"Member metrics: {member_response.metrics}")
    
    # 访问单个消息
    for message in member_response.messages:
        if message.role == "assistant":
            print(f"Message metrics: {message.metrics}")

指标比较

指标级别访问方法描述
团队领导者运行team.run_response.metrics当前运行的聚合指标
团队领导者会话team.session_metrics所有团队领导者运行的聚合指标
单个成员member_response.metrics特定团队成员运行的指标
完整团队会话team.full_team_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 直到所需的时间(秒)。
注意:并非所有字段都始终存在;具体取决于模型/工具和运行情况。

SessionMetrics 参数

字段描述
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 的时间(以秒为单位)。
注意:并非所有字段都始终存在;这取决于模型/工具和运行。