尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
openai-agents-python REPL 实用工具:用 run_demo_loop 在终端中交互式调试你的 Agent
openai-agents-python REPL 实用工具用 run_demo_loop 在终端中交互式调试你的 Agent【免费下载链接】openai-agents-pythonA lightweight, powerful framework for multi-agent workflows项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-pythonrun_demo_loop是 openai-agents-python SDK 内置的 REPLRead-Eval-Print Loop调试工具让你无需编写额外的 Web 界面或测试脚手架直接在终端里以多轮对话的方式快速验证 Agent 的行为。读完本文你将掌握run_demo_loop的完整用法、全部参数含义、底层流式事件处理机制以及如何用它调试工具调用、Handoff 等复杂场景。一、什么是 run_demo_loopSDK 在 src/agents/repl.py 中提供了run_demo_loop官方文档 docs/repl.md 将其定位为「直接在终端中快速、交互式地测试 Agent 行为」的实用工具。它本质上是一个基于asyncio的死循环不断提示用户输入 → 交给 Runner 执行 → 打印模型输出 → 继续等待下一条输入直到用户主动退出。该函数通过 src/agents/init.py 导出为公开 APIfrom agents import run_demo_loop并收录在 docs/ref/repl.md 的 API 参考中属于稳定的公开接口。二、最小可运行示例官方文档给出的入门示例见 docs/repl.md如下import asyncio from agents import Agent, run_demo_loop async def main() - None: agent Agent(nameAssistant, instructionsYou are a helpful assistant.) await run_demo_loop(agent) if __name__ __main__: asyncio.run(main())将上述代码保存为demo.py在项目目录下运行python demo.py注意运行前需要设置OPENAI_API_KEY环境变量或配置其他模型提供商并确保已安装openai-agents及其依赖。之后run_demo_loop会启动一个交互式聊天会话终端出现提示符等待你输入。三、交互行为详解从 docs/repl.md 的说明和 src/agents/repl.py 的实现来看这个循环具备以下核心行为1. 多轮对话历史自动保留每一轮用户输入都会被追加到input_items列表中并在下一轮执行时作为完整的输入历史传给 Runner。具体来说每轮循环结束时current_agent result.last_agent input_items result.to_input_list()result.to_input_list()会把当前轮的所有输入项用户消息、模型响应、工具调用等序列化为可继续传递的输入列表从而实现跨轮记忆result.last_agent用于处理 Handoff 场景如果 Agent 在对话中把控制权交给了另一个 Agent下一轮对话会自动从新的 Agent 继续此时终端会打印[Agent updated: 新Agent名]提示。因此Agent 能记住整个会话期间讨论过的内容实现真正的多轮上下文。2. 退出方式结束聊天会话有三种方式实现见 src/agents/repl.py方式说明输入quit并按 Enter触发退出不区分大小写QUIT同样有效输入exit并按 Enter同上按Ctrl-DEOF或Ctrl-CKeyboardInterrupt捕获EOFError/KeyboardInterrupt后正常退出并打印一个空行收尾3. 空输入自动跳过如果直接按 Enter 提交空字符串循环会continue跳过该轮不会调用模型、不会产生多余的对话轮次对应测试见 tests/test_repl.py 中的test_run_demo_loop_skips_empty_input。四、完整函数签名与参数说明run_demo_loop的完整签名源码见 src/agents/repl.pyasync def run_demo_loop( agent: Agent[Any], *, stream: bool True, context: TContext | None None, max_turns: int | None DEFAULT_MAX_TURNS, ) - None:参数类型默认值作用agentAgent[Any]必填起始 Agent即对话开始时执行的那个 AgentstreamboolTrue是否流式输出模型结果True时边生成边打印contextTContextNone传递给 Runner 的额外上下文对象可携带会话级状态max_turnsint \| NoneDEFAULT_MAX_TURNS单次运行的最大轮数上限传None表示不限制其中DEFAULT_MAX_TURNS定义在 src/agents/run_config.py默认值为10。这里的「turn」指一次模型调用可能包含若干工具调用注意它是针对单次 Runner 执行的限制而 REPL 的每一条用户输入都会触发一次新的 Runner 执行所以多轮对话总体不受该值限制。关闭流式输出若把stream设为False循环会走非流式路径等待完整结果后一次性打印final_output见 src/agents/repl.pyawait run_demo_loop(agent, streamFalse)这在输出稳定、不需要实时反馈的场景下更省资源。五、流式模式底层机制事件驱动的实时输出当streamTrue默认时run_demo_loop调用Runner.run_streamed(...)然后遍历result.stream_events()产生的事件流按事件类型分别处理见 src/agents/repl.py。事件类型定义于 src/agents/stream_events.py主要包括三类1. RawResponsesStreamEvent原始模型流事件if isinstance(event, RawResponsesStreamEvent): if isinstance(event.data, ResponseTextDeltaEvent): print(event.data.delta, end, flushTrue)这是 LLM 直接透传的原始事件。其中ResponseTextDeltaEvent携带文本增量delta代码用end和flushTrue实现逐字流式打印——这正是「模型输出边生成边实时显示」的原理。2. RunItemStreamEvent语义级运行项事件当 Agent 调用工具时会触发工具调用与工具输出事件REPL 用[tool called]/[tool output: ...]标记打印elif isinstance(event, RunItemStreamEvent): if event.item.type tool_call_item: print(\n[tool called], flushTrue) elif event.item.type tool_call_output_item: print(f\n[tool output: {event.item.output}], flushTrue)这让你在终端中就能实时观察到 Agent 正在调用什么工具、工具返回了什么结果非常适合调试工具链。3. AgentUpdatedStreamEventAgent 切换事件elif isinstance(event, AgentUpdatedStreamEvent): print(f\n[Agent updated: {event.new_agent.name}], flushTrue)当发生 HandoffAgent 把控制权移交给另一个 Agent时打印新 Agent 的名称让你清楚当前对话由谁在应答。上述三条分支在 tests/test_repl.py 的test_run_demo_loop_streaming中被完整覆盖该测试构造了一个单轮内依次触发「工具调用 → 工具输出 → Handoff → 文本回答」的模型脚本断言终端输出同时包含[tool called]、[tool output: tool_result]、[Agent updated: target]和all done。六、用 REPL 调试工具调用与多 Agent 场景流式事件机制让 REPL 成为调试复杂 Agent 的利器。例如一个带工具和 Handoff 的 Agentimport asyncio from agents import Agent, function_tool, run_demo_loop function_tool def get_weather(city: str) - str: 查询指定城市的天气 return f{city} 今天晴25℃ async def main() - None: weather_agent Agent( nameWeatherAgent, instructions使用天气工具回答用户问题。, tools[get_weather], ) research_agent Agent( nameResearchAgent, instructions你是研究助手复杂问题转交给 WeatherAgent。, handoffs[weather_agent], ) await run_demo_loop(research_agent, max_turns5) if __name__ __main__: asyncio.run(main())运行后你会看到典型的交互过程 北京天气如何 [tool called] [tool output: 北京 今天晴25℃] 北京今天天气晴朗气温 25℃。当问题触发 Handoff 时终端会先打印[Agent updated: WeatherAgent]随后由新 Agent 继续应答——相当于在终端里可视化整个多 Agent 协作链路。七、调试与测试保障仓库为run_demo_loop提供了系统性的单元测试见 tests/test_repl.py通过ScriptedModelsrc/agents/testing预置模型响应用monkeypatch模拟builtins.input从而无需真实 API 即可验证 REPL 的全部行为test_run_demo_loop_conversation验证多轮对话历史确实传递给了模型断言第二轮的输入包含第一轮的用户消息与模型回答test_run_demo_loop_streaming验证流式模式下工具调用、工具输出、Agent 切换三条打印分支test_run_demo_loop_exits_on_eof验证Ctrl-DEOF能干净退出且不触发任何模型调用test_run_demo_loop_skips_empty_input验证空输入被跳过、不污染对话历史。这些测试直接印证了上文描述的全部行为如果你想扩展 REPL例如自定义退出指令或增加彩色输出可以参考这些测试来保证新行为的正确性。八、使用建议与注意事项适合快速原型验证在编写正式 CLI、Web 应用或测试用例之前用run_demo_loop几分钟内验证 Agent 的指令、工具和 Handoff 是否符合预期是最快的反馈回路。max_turns限制的是单轮执行若 Agent 单个任务需要多轮工具调用注意DEFAULT_MAX_TURNS 10src/agents/run_config.py可能不够可显式调大或传None。context参数可注入会话状态如果你的工具依赖外部上下文如用户身份、数据库连接可通过context传入Runner 会将其包装进RunContextWrapper供工具访问相关机制见 src/agents/run_context.py。生产环境请自行封装run_demo_loop是面向终端调试的轻量工具生产环境的多轮对话建议使用 docs/sessions.md 中介绍的 Session 持久化方案或基于 Runner.run 构建自己的对话循环。总结run_demo_loop以约 60 行代码src/agents/repl.py实现了终端交互调试所需的全部要素多轮历史记忆、默认流式输出、工具调用可视化、Handoff 感知和三种退出方式。它既是快速上手 openai-agents-python 的入口也是日常开发中验证 Agent 行为最直接的工具。结合官方文档 docs/repl.md、API 参考 docs/ref/repl.md 与测试用例 tests/test_repl.py你可以放心地将它纳入自己的调试工作流。【免费下载链接】openai-agents-pythonA lightweight, powerful framework for multi-agent workflows项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-python创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

中文MBTI测评三大生死线:本土化、信效度与用户体验

中文MBTI测评三大生死线:本土化、信效度与用户体验

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/12 6:42:39
Golang核心特性与高并发实践指南

Golang核心特性与高并发实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/12 6:37:39
低代码平台DIY模块开发:uniapp+vue3实战解析

低代码平台DIY模块开发:uniapp+vue3实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/12 6:37:39
MORE NEWS

更多资讯

📰

MATLAB三角形单元有限元求解器实现原理与工程调试

简介:本资源是一套面向工程力学、计算力学初学者及MATLAB编程实践者的三角形有限元分析完整实现代码包,聚焦二维线性三角形单元(Tri3)的刚度矩阵构建、边界条件处理与系统求解全流程。包内共13个.m文件,涵盖几何建模&a…

📰

COMSOL仿真双层膜隔声结构:原理与应用

1. 项目概述:双层膜隔声结构的仿真价值在噪声控制领域,双层膜结构因其独特的隔声性能而备受关注。这种由两层弹性薄膜(或薄板)与中间空气层组成的结构,通过合理的参数设计可以实现传统单层材料难以达到的宽频带隔声效果…

📰

农产品微信小程序全栈开发与地理围栏推荐实践

1. 项目背景与核心价值去年帮农科院做扶贫项目时,我深刻体会到农产品上行渠道的痛点——老乡们种得出好果子,却常因信息不对称烂在地里。这个微信小程序毕设项目正是针对这个痛点设计的全栈解决方案,包含前后端完整代码、开发文档和毕设论文模…

📰

2026年WordPress多语言插件选型与优化指南

1. 为什么WordPress多语言插件如此重要?在2026年的今天,网站多语言支持已不再是锦上添花的功能,而是全球化数字营销的基本配置。根据最新的网站分析数据,提供母语访问体验的网站转化率平均提升47%,跳出率降低32%。对于…

📰

awesome-gpt-image-2:OpenAI图像生成实战资源与提示词工程指南

1. 这个项目到底在收集什么第一次看到 awesome-gpt-image-2 这个名字,熟悉开源社区的人应该会心一笑。awesome 前缀在 GitHub 上代表一类特殊的仓库——围绕某个主题精选高质量资源、工具、教程和项目案例的合集。把 awesome 和 gpt-image-2 放在一起,说…

📰

多帧图像处理实战:从堆栈降噪到超分辨率的完整指南

hyperframes这个词,我第一次看到是在一个摄影后期论坛里。有人拿着几十张连拍照片,问怎么合成一张比单张清晰数倍的图。底下回帖的人东一句西一句,有人说这是堆栈降噪,有人说是超分辨率,吵了半天也没个统一说法。后来我…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬