
agno Agent 输入输出完整指南9 个实战示例讲透结构化输入输出【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agno本文以 agno 的 9 个官方示例为线索一次讲清 agno Agent 输入输出机制如何用 expected_output 与 input_schema 约束输入如何用 agno 结构化输出参数 output_schema、parser_model、output_model 管住答案外加流式输出、变量捕获与响应落盘三种运行方式。先说问题Agent 的输入输出到底失控在哪把 Agent 用到生产链路里通常会撞上四堵墙回复格式不可控要求恰好 5 条编号列表模型回了一段自由散文下游展示层没法渲染输出无法结构化run.content是一段字符串后续代码想取主题情感倾向这些字段只能再写正则硬解析成本与质量难兼得全程用旗舰模型账单扛不住换小模型产出又得人工返工输入自由度过高一个调研任务只传一句自然语言模型只能靠猜来理解范围与受众。好消息是agno 把解法都收敛到了Agent构造器的少数几个字段上源码位于libs/agno/agno/agent/agent.py。cookbook/02_agents/02_input_output/目录下的 9 个示例在 2026-02-13 的测试中全部 PASSuntagged 层级本文按输入 → 输出 → 运行的顺序把它们重新组织了一遍。先跑起来环境准备与单文件运行方式按目录 README 的前置步骤操作即可用direnv allow加载环境变量包含OPENAI_API_KEY执行./scripts/demo_setup.sh创建 demo 虚拟环境单文件运行命令.venvs/demo/bin/python cookbook/02_agents/02_input_output/file.py个别示例依赖可选的本地服务如 pgvector或特定服务商的 API key按需准备。本文引用的基线数据来自同目录的TEST_LOG.md测试日期 2026-02-13环境.venvs/demo/bin/pythonpgvector 处于运行状态9 个示例状态均为 PASS。输入侧三种约束 Agent 输入的方法 按提示词级 → 消息级 → 契约级由浅入深对应expected_output、消息字典输入、input_schema三个手段。expected_output告诉模型答案该长什么样expected_output给 Agent 一个回复成品的形态规格源码 agent.py L252声明为Optional[str]默认None。它和instructions的分工不同instructions管行为规则这个字段只管成品长什么样。agent Agent( modelOpenAIResponses(idgpt-5.2), expected_outputA numbered list of exactly 5 items, each with a title and one-sentence description., markdownTrue, ) agent.print_response(What are the most important principles of clean code?, streamTrue)易踩坑点描述越具体条数、是否带标题遵循率越高。实测该示例 4s PASS单次生成链路无任何额外调用只有回复形态被约束。消息字典输入文本和图片一起传print_response的入参不局限于字符串也可以传rolecontent列表的消息字典从而在程序侧直接拼装图文混合内容agent.print_response( { role: user, content: [ {type: text, text: Whats in this image?}, {type: image_url, image_url: {url: 图片 URL}}, ], }, streamTrue, markdownTrue, )细节示例里的Agent()甚至没有显式传 model说明结构化消息在解析层几乎零成本。实测 2s PASS是全套件耗时最短的一个。input_schema用 Pydantic 模型给输入上契约源码声明input_schema: Optional[Type[BaseModel]]agent.py L300只接受 Pydantic 模型类不支持裸字典定义运行时既可以传符合 schema 的字典也可以直接传模型实例。class ResearchTopic(BaseModel): topic: str focus_areas: List[str] target_audience: str sources_required: int 5 agent Agent( modelOpenAIResponses(idgpt-5-mini), tools[HackerNewsTools()], input_schemaResearchTopic, ) agent.print_response(input{topic: AI, focus_areas: [AI, Machine Learning], target_audience: Developers, sources_required: 5})易踩坑点字典写法里sources_required传的是字符串5字段类型却是int——靠 Pydantic 的宽松类型转换兜住了。实测 101s PASS全套件最慢因为挂了HackerNewsToolsAgent 会发起真实工具检索是多轮推理而非单次生成。输出侧agno 结构化输出的三条路径 ⚖️output_schema 用法让模型直接吐出结构化对象output_schema: Optional[Union[Type[BaseModel], Dict[str, Any]]]agent.py L303即 Pydantic 模型类与 JSON Schema 字典两种写法都认。class BreakingNewsSummary(BaseModel): topic: str summary: str key_updates: List[str] overall_sentiment: str agent Agent( modelOpenAIResponses(idgpt-5.2), output_schemaBreakingNewsSummary, ) run: RunOutput agent.run(Latest news from France?) pprint(run.content)跑完后run.content就是符合模型的实例按字段取用、不用二次解析。实测 18s PASS是输出侧三条路径里链路最轻的一条。output_schema 与 parser_model 怎么选把抽取交给第二个模型parser_model: Optional[Model]agent.py L305默认None改变的是分工主模型照常推理、照常调用工具输出不受结构约束另一次解析调用负责把结果整理成output_schema定义的结构。当主模型输出不稳定、或主模型格式遵循能力偏弱时就选这条路。agent Agent( modelOpenAIResponses(idgpt-5.2), output_schemaNationalParkAdventure, parser_modelOpenAIResponses(idgpt-5.2), ) run: RunOutput agent.run(national_parks[random.randint(0, len(national_parks) - 1)])示例中的NationalParkAdventure共 11 个字段还用Field(ge1, le5)与Field(ge1, le14)约束了难度评级和建议天数两个数值字段。实测 46s PASS。agno 双模型精修输出output_modeloutput_model: Optional[Model]agent.py L309拿到与主模型相同的对话自己生成一份回复并直接替换主模型输出。典型用法是便宜模型负责推理与工具调用强模型负责产出最终精修文案再用output_model_prompt指定改写风格。注意边界要的是结构化 JSON 时请改用parser_model别选output_model。agent Agent( modelOpenAIResponses(idgpt-5-mini), output_modelOpenAIResponses(idgpt-5.2), output_model_promptRewrite the recipe with vivid descriptions, pro tips, and elegant formatting., ) run: RunOutput agent.run(Give me a recipe for pad thai.) pprint(run.content)实测 49s PASS相对output_schema多出的秒数正来自主模型 输出模型两次调用的开销。三条路径选型速览你的场景推荐参数生成链路run.content 形态实测耗时模型格式遵循好追求最小成本output_schema主模型直接按结构作答结构化对象18s主模型输出不可控要稳定抽取parser_model主模型自由输出 → 第二模型按 schema 解析结构化对象46s要一份更好看的自然语言终稿output_model主模型推理 → 第二模型改写替换自然语言文本49s运行侧agno Agent 流式响应的三种消费方式逐 token 输出streamTruestreaming.py是 agno Agent 流式响应的最小示例核心只有一个参数agent Agent(modelOpenAIResponses(idgpt-5.2), markdownTrue) agent.print_response(Explain the difference between concurrency and parallelism., streamTrue)print_response内部完成富文本渲染与逐 token 打印适合交互式演示。实测 9s PASS。捕获为变量run() 拿回完整 RunOutput需要程序化处理结果时把print_response换成run即可拿到完整RunOutputrun_response: RunOutput agent.run(What is the stock price of NVDA) pprint(run_response)该示例的 agent 还配了YFinanceTools与markdownTrue流式变体run(..., streamTrue)返回Iterator[RunOutputEvent]可自行迭代消费每个事件。实测 12s PASS。自动落盘save_response_to_file字段声明为save_response_to_file: Optional[str]agent.py L320默认None不落盘配置后每次运行结束都会把响应写入指定文件。agent Agent( modelOpenAIResponses(idgpt-5.2), save_response_to_filetmp/agent_output.md, markdownTrue, ) os.makedirs(tmp, exist_okTrue) agent.print_response(Write a brief guide on Python virtual environments., streamTrue) print(f\nResponse saved to: {agent.save_response_to_file})易踩坑点框架不会替你创建父目录示例里显式os.makedirs(tmp, exist_okTrue)就是为此。实测 10s PASS。参数速查源码里的 I/O 字段一表看完参数源码声明agent.py默认值对应示例一句话作用expected_outputOptional[str]· L252Noneexpected_output.py用自然语言描述回复成品的形态input_schemaOptional[Type[BaseModel]]· L300Noneinput_schema.py用 Pydantic 模型校验并规整输入output_schemaOptional[Union[Type[BaseModel], Dict[str, Any]]]· L303Noneoutput_schema.py / parser_model.py让输出成为结构化对象模型类或 JSON Schema 字典parser_modelOptional[Model]· L305Noneparser_model.py由独立解析模型完成结构化抽取output_modelOptional[Model]· L309Noneoutput_model.py用第二模型替换主模型输出做精修save_response_to_fileOptional[str]· L320Nonesave_to_file.py响应自动写入指定文件耗时数据的边界与延伸阅读上表耗时均为 2026-02-13 在.venvs/demo/bin/python pgvector 环境下的单次实测随模型版本与网络状态浮动只宜作链路复杂度的相对参考不构成性能承诺测试日志覆盖的是 9 个示例目录里还有未纳入日志的followup_suggestions.py与followup_suggestions_streaming.py前者用followupsTrue开启追问建议num_followups默认 3源码校验必须 ≥1见 agent.py L648-L650主回复之后会追加一次模型调用生成建议可作为延伸阅读一句话收束输入侧靠形态、字典、契约三层递进喂好问题输出侧按成本与可控性在三条路径中选型运行侧用流式、变量、落盘三种方式消费结果——这套 agno Agent 输入输出机制到这里就闭环了。【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agno创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考