Skip to content

运行智能体

您可以通过Runner类来运行智能体,共有三种运行方式:

  1. Runner.run():异步运行方法,返回RunResult
  2. Runner.run_sync():同步运行方法,底层实际调用的是.run()
  3. Runner.run_streamed():异步流式运行方法,返回RunResultStreaming。该方法以大模型流式模式调用,并实时将接收到的流事件推送给您
from agents import Agent, Runner

async def main():
    agent = Agent(name="Assistant", instructions="You are a helpful assistant")

    result = await Runner.run(agent, "Write a haiku about recursion in programming.")
    print(result.final_output)
    # Code within the code,
    # Functions calling themselves,
    # Infinite loop's dance.

更多细节请参阅结果指南

智能体运行循环

当使用Runner中的运行方法时,您需要传入初始智能体和输入参数。输入可以是字符串(视为用户消息),也可以是OpenAI Responses API中的输入项列表。

运行器会执行以下循环流程:

  1. 使用当前输入调用当前智能体的大模型
  2. 大模型生成输出结果:
    1. 如果返回final_output,则循环终止并返回最终结果
    2. 如果执行了交接(handoff),则更新当前智能体和输入参数,重新开始循环
    3. 如果产生了工具调用,则执行这些工具调用,将结果追加后重新开始循环
  3. 如果超过传入的max_turns限制,则抛出MaxTurnsExceeded异常

注意

判断大模型输出是否为"最终输出"的规则是:输出符合预期类型的文本内容且不包含任何工具调用。

流式处理

流式运行允许您在大模型执行过程中实时接收流事件。流式处理完成后,RunResultStreaming会包含完整的运行信息(包括所有新生成的输出)。您可以通过.stream_events()获取流事件详情,详见流式指南

运行配置

run_config参数支持配置智能体运行的全局设置:

对话/聊天线程

调用任何运行方法都可能涉及一个或多个智能体的执行(即多次大模型调用),但代表的是聊天对话中的单个逻辑轮次。例如:

  1. 用户轮次:用户输入文本
  2. 运行器执行:第一个智能体调用大模型→执行工具→交接给第二个智能体→第二个智能体执行更多工具→最终生成输出

在智能体运行结束后,您可以选择向用户展示的内容。例如可以展示智能体生成的每个新条目,或仅显示最终输出。无论采用哪种方式,用户都可能提出后续问题,此时您可以再次调用运行方法。

使用基础方法RunResultBase.to_input_list()可获取下一轮次的输入参数。

async def main():
    agent = Agent(name="Assistant", instructions="Reply very concisely.")

    with trace(workflow_name="Conversation", group_id=thread_id):
        # First turn
        result = await Runner.run(agent, "What city is the Golden Gate Bridge in?")
        print(result.final_output)
        # San Francisco

        # Second turn
        new_input = result.to_input_list() + [{"role": "user", "content": "What state is it in?"}]
        result = await Runner.run(agent, new_input)
        print(result.final_output)
        # California

异常处理

SDK在特定情况下会抛出异常,完整列表见agents.exceptions。主要包含: