Agent.run() 函数运行 agent 并生成响应,响应可以是一个 RunResponse 对象,也可以是 RunResponse 对象流。

我们的许多示例都使用了 agent.print_response(),这是一个用于在终端中打印响应的辅助工具。它底层调用的是 agent.run()

运行你的 Agent

以下是运行 agent 的方法。响应会捕获在 response 变量中。

from typing import Iterator
from agno.agent import Agent, RunResponse
from agno.models.openai import OpenAIChat
from agno.utils.pprint import pprint_run_response

agent = Agent(model=OpenAIChat(id="gpt-4o-mini"))

# 运行 agent 并将响应作为变量返回
response: RunResponse = agent.run("给我讲一个关于机器人的 5 秒钟短故事")

# 以 markdown 格式打印响应
pprint_run_response(response, markdown=True)

RunResponse

在不使用流式传输时,Agent.run() 函数会返回一个 RunResponse 对象。它具有以下属性:

理解指标

有关指标如何收集和使用的详细说明,请参阅 指标文档

请参阅 RunResponse 文档中的详细说明。

流式响应

要启用流式传输,请在调用 run() 时设置 stream=True。这将返回一个 RunResponseEvent 对象迭代器,而不是单个响应。

agno 版本 1.6.0 开始,Agent.run() 函数返回的是 RunResponseEvent 的迭代器,而不是 RunResponse 对象。

from typing import Iterator
from agno.agent import Agent, RunResponseEvent
from agno.models.openai import OpenAIChat
from agno.utils.pprint import pprint_run_response

agent = Agent(model=OpenAIChat(id="gpt-4-mini"))

# 运行 agent 并将响应作为流返回
response_stream: Iterator[RunResponseEvent] = agent.run(
    "给我讲一个关于狮子的 5 秒钟短故事",
    stream=True
)

# 以 markdown 格式打印响应流
pprint_run_response(response_stream, markdown=True)

流式传输中间步骤

为了获得更详细的流式输出,可以通过设置 stream_intermediate_steps=True 来启用中间步骤。这将提供关于 agent 内部过程的实时更新。

# 流式传输中间步骤
response_stream: Iterator[RunResponseEvent] = agent.run(
    "给我讲一个关于狮子的 5 秒钟短故事",
    stream=True,
    stream_intermediate_steps=True
)

处理事件

您可以通过迭代响应流来处理即将到来的事件:

response_stream = agent.run("你的 prompt", stream=True, stream_intermediate_steps=True)

for event in response_stream:
    if event.event == "RunResponseContent":
        print(f"内容: {event.content}")
    elif event.event == "ToolCallStarted":
        print(f"工具调用开始: {event.tool}")
    elif event.event == "ReasoningStep":
        print(f"推理步骤: {event.content}")
    ...

您可以在我们的 Playground 中看到此行为的实际应用。

存储事件

您可以将运行过程中发生的所有事件存储在 RunResponse 对象上。

from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.utils.pprint import pprint_run_response

agent = Agent(model=OpenAIChat(id="gpt-4o-mini"), store_events=True)

response = agent.run("给我讲一个关于狮子的 5 秒钟短故事", stream=True, stream_intermediate_steps=True)
pprint_run_response(response)

for event in agent.run_response.events:
    print(event.event)

默认情况下不存储 RunResponseContentEvent 事件。您可以通过设置 events_to_skip 参数来修改要跳过的事件。

例如:

agent = Agent(model=OpenAIChat(id="gpt-4o-mini"), store_events=True, events_to_skip=[RunEvent.run_started.value])

事件类型

根据 agent 的配置,以下事件会由 Agent.run()Agent.arun() 函数生成:

核心事件

事件类型描述
RunStarted表示运行开始
RunResponseContent包含模型响应文本的各个块
RunCompleted标志着运行成功完成
RunError表示运行期间发生错误
RunCancelled标志着运行已被取消

控制流事件

事件类型描述
RunPaused表示运行已暂停
RunContinued标志着暂停的运行已继续

工具事件

事件类型描述
ToolCallStarted表示工具调用开始
ToolCallCompleted标志着工具调用完成,包括工具调用结果

推理事件

事件类型描述
ReasoningStarted表示 agent 推理过程开始
ReasoningStep包含推理过程的单个步骤
ReasoningCompleted标志着推理过程完成

记忆事件

事件类型描述
MemoryUpdateStarted表示 agent 正在更新其记忆
MemoryUpdateCompleted标志着记忆更新完成

请参阅 RunResponseEvent 文档中的详细说明。