跳到主要内容

Tracing Agno

Agno Tracing via autolog

Agno 是一个灵活的代理框架,用于将 LLM、推理步骤、工具和内存编排到统一的管道中。

MLflow Tracing 为 Agno 提供了自动跟踪功能。通过调用 mlflow.agno.autolog() 函数启用 Agno 的自动跟踪,MLflow 将捕获 Agent 调用踪迹并将其记录到活动的 MLflow 实验中。

import mlflow

mlflow.agno.autolog()

MLflow trace 会自动捕获有关 Agentic 调用的以下信息

  • 提示和完成响应
  • 延迟
  • 关于不同 Agent 的元数据,例如函数名称
  • Token 使用量和成本
  • 缓存命中
  • 如果抛出任何异常

基本示例

安装示例的依赖项

pip install 'mlflow>=3.3' agno anthropic yfinance

运行一个启用了 mlflow.agno.autolog() 的简单 Agent

from agno.agent import Agent
from agno.models.anthropic import Claude
from agno.tools.yfinance import YFinanceTools

agent = Agent(
model=Claude(id="claude-sonnet-4-20250514"),
tools=[YFinanceTools(stock_price=True)],
instructions="Use tables to display data. Don't include any other text.",
markdown=True,
)
agent.print_response("What is the stock price of Apple?", stream=False)

多 Agentic(Agent 之间的交互)交互

使用 Agno API 的非流式端点时,MLflow 现在可以更轻松地跟踪多个 AI Agent 如何协同工作。它会自动记录 Agent 之间的每一次交接、它们交换的消息以及任何函数或工具的详细信息——例如输入、输出以及耗时。这为您提供了完整的流程视图,使您更容易排除故障、衡量性能并重现结果。

多 Agent 示例

import mlflow

from agno.agent import Agent
from agno.models.anthropic import Claude
from agno.models.openai import OpenAIChat
from agno.team.team import Team
from agno.tools.duckduckgo import DuckDuckGoTools
from agno.tools.reasoning import ReasoningTools
from agno.tools.yfinance import YFinanceTools

# Enable auto tracing for Agno
mlflow.agno.autolog()


web_agent = Agent(
name="Web Search Agent",
role="Handle web search requests and general research",
model=OpenAIChat(id="gpt-4.1"),
tools=[DuckDuckGoTools()],
instructions="Always include sources",
add_datetime_to_instructions=True,
)

finance_agent = Agent(
name="Finance Agent",
role="Handle financial data requests and market analysis",
model=OpenAIChat(id="gpt-4.1"),
tools=[
YFinanceTools(
stock_price=True,
stock_fundamentals=True,
analyst_recommendations=True,
company_info=True,
)
],
instructions=[
"Use tables to display stock prices, fundamentals (P/E, Market Cap), and recommendations.",
"Clearly state the company name and ticker symbol.",
"Focus on delivering actionable financial insights.",
],
add_datetime_to_instructions=True,
)

reasoning_finance_team = Team(
name="Reasoning Finance Team",
mode="coordinate",
model=Claude(id="claude-sonnet-4-20250514"),
members=[web_agent, finance_agent],
tools=[ReasoningTools(add_instructions=True)],
instructions=[
"Collaborate to provide comprehensive financial and investment insights",
"Consider both fundamental analysis and market sentiment",
"Use tables and charts to display data clearly and professionally",
"Present findings in a structured, easy-to-follow format",
"Only output the final consolidated analysis, not individual agent responses",
],
markdown=True,
show_members_responses=True,
enable_agentic_context=True,
add_datetime_to_instructions=True,
success_criteria="The team has provided a complete financial analysis with data, visualizations, risk assessment, and actionable investment recommendations supported by quantitative analysis and market research.",
)

reasoning_finance_team.print_response(
"""Compare the tech sector giants (AAPL, GOOGL, MSFT) performance:
1. Get financial data for all three companies
2. Analyze recent news affecting the tech sector
3. Calculate comparative metrics and correlations
4. Recommend portfolio allocation weights""",
show_full_reasoning=True,
)
Agno Tracing via autolog

Token 用量

MLflow >= 3.3.0 支持 Agno 的 Token 使用量跟踪。每个 Agent 调用的 Token 使用量将记录在 mlflow.chat.tokenUsage 属性中。整个 Trace 的总 Token 使用量可在 Trace 信息对象的 token_usage 字段中找到。

# Get the trace object just created
last_trace_id = mlflow.get_last_active_trace_id()
trace = mlflow.get_trace(trace_id=last_trace_id)

# Print the token usage
total_usage = trace.info.token_usage
print("== Total token usage: ==")
print(f" Input tokens: {total_usage['input_tokens']}")
print(f" Output tokens: {total_usage['output_tokens']}")
print(f" Total tokens: {total_usage['total_tokens']}")

# Print the token usage for each LLM call
print("\n== Detailed usage for each LLM call: ==")
for span in trace.data.spans:
if usage := span.get_attribute("mlflow.chat.tokenUsage"):
print(f"{span.name}:")
print(f" Input tokens: {usage['input_tokens']}")
print(f" Output tokens: {usage['output_tokens']}")
print(f" Total tokens: {usage['total_tokens']}")
== Total token usage: ==
Input tokens: 45710
Output tokens: 3844
Total tokens: 49554

== Detailed usage for each LLM call: ==
Team.run:
Input tokens: 45710
Output tokens: 3844
Total tokens: 49554

... (other modules)

禁用自动跟踪

可以通过调用 mlflow.agno.autolog(disable=True)mlflow.autolog(disable=True) 来全局禁用 LiteLLM 的自动跟踪。