
agno Agent 输入输出实用指南6 个机制控制它说什么、怎么说【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agnoagno 是一个用 Python 构建、运行和管理 Agent 平台的框架。实际用起来你会发现光让 Agent 能跑远远不够回复格式不可控、输入只是一段没法校验的字符串、输出是纯文本而下游却要结构化数据。本文从 agno Agent 输入输出的四个痛点切入——约束格式、校验输入、拿结构化结果、落盘与流式消费每个场景都给出可直接运行的最小代码。读完你会清楚每种需求该配哪个Agent参数。如何约束 Agent 回复格式expected_output 指定成品规格 一句话机制expected_output用一句自然语言告诉模型最终回复长什么样它管的是成品形态而行为规则仍然归instructions管。from agno.agent import Agent from agno.models.openai import OpenAIResponses agent Agent( modelOpenAIResponses(idgpt-5.2), # 给模型一个交付物规格恰好 5 条每条含标题 一句话描述 expected_outputA numbered list of exactly 5 items, each with a title and one-sentence description., markdownTrue, ) if __name__ __main__: agent.print_response(What are the most important principles of clean code?, streamTrue)这段代码做的事很直白模型回答什么内容由问题决定但必须编号列表、恰好 5 条、每条一句由expected_output钉死。markdownTrue则让输出按 Markdown 渲染。实际跑下来它只影响回复结构不增加额外模型调用。 什么时候用只关心长什么样、不关心内容怎么来的场景。需要约束行为逻辑时请改用instructions。如何传入结构化输入消息字典与 Pydantic 校验图文等多模态内容直接拼进消息字典print_response的第一个参数除了字符串还可以直接传消息字典。这样就能在代码里组装文本 图片的混合输入if __name__ __main__: agent.print_response( { role: user, content: [ {type: text, text: Whats in this image?}, {type: image_url, image_url: {url: https://example.com/photo.jpg}}, ], }, streamTrue, markdownTrue, )不用在提示词里绕弯说请看这张图直接把多段content塞进字典模型同时拿到文字和图片。解析层开销极低适合程序化拼接的多模态场景。用 Pydantic 模型给输入定契约input_schema接收一个 Pydantic 模型类Agent 会把传入的字典按这个契约做校验和归一化from typing import List from agno.agent import Agent from agno.models.openai import OpenAIResponses from agno.tools.hackernews import HackerNewsTools from pydantic import BaseModel, Field class ResearchTopic(BaseModel): topic: str focus_areas: List[str] Field(descriptionSpecific areas to focus on) target_audience: str sources_required: int Field(default5) hackernews_agent Agent( nameHackernews Agent, modelOpenAIResponses(idgpt-5-mini), tools[HackerNewsTools()], input_schemaResearchTopic, ) if __name__ __main__: # 传字典即可内部按 ResearchTopic 校验也可以直接传 Pydantic 实例 hackernews_agent.print_response( input{ topic: AI, focus_areas: [AI, Machine Learning], target_audience: Developers, sources_required: 5, } )字典进来规范化后出去无论字段顺序、类型怎么变比如数字写成字符串Pydantic 的宽松转换都会兜住Agent 内部只见到符合契约的数据。这个示例挂了HackerNewsTools所以实际执行是多轮工具推理跑起来比单次生成明显慢。 注意input_schema只接受 Pydantic 模型类不支持用裸字典定义。结构化输出三条路径schema、parser_model、output_model让模型直接吐出 Pydantic 对象output_schemaoutput_schema支持 Pydantic 模型类和 JSON Schema 字典两种写法配好后run.content直接就是结构化对象不再是字符串from typing import List from agno.agent import Agent, RunOutput from agno.models.openai import OpenAIResponses from pydantic import BaseModel, Field from rich.pretty import pprint class BreakingNewsSummary(BaseModel): topic: str summary: str key_updates: List[str] overall_sentiment: str agent Agent( modelOpenAIResponses(idgpt-5.2), descriptionYou summarize current events into clean structured outputs., output_schemaBreakingNewsSummary, ) if __name__ __main__: run: RunOutput agent.run(Latest news from France?) pprint(run.content) # 拿到的是 BreakingNewsSummary 实例字段可直接取下游拿到run.content就能按字段取值省掉一切从文本里抠 JSON的脏活。让第二个模型负责解析parser_model主模型照常推理、调工具另一个parser_model专门把结果转成目标结构agent Agent( modelOpenAIResponses(idgpt-5.2), descriptionYou help people plan amazing national park adventures., output_schemaNationalParkAdventure, # 11 个字段可用 Field(ge..., le...) 约束数值范围 parser_modelOpenAIResponses(idgpt-5.2), ) if __name__ __main__: run: RunOutput agent.run(Yosemite National Park)主模型只管内容格式遵循交给解析模型适合主模型输出不可控或本身弱于格式约束的情况。结构化 JSON 输出建议改用 parser_model而不是让主模型硬扛格式。代价是多一次模型调用耗时会相应变长。让第二个模型重写最终回复output_modeloutput_model接收同一轮对话并自己生成回复直接替换主模型输出。典型玩法是便宜模型做推理和工具调用强模型做最终润色agent Agent( modelOpenAIResponses(idgpt-5-mini), descriptionYou are a helpful chef that provides detailed recipe information., output_modelOpenAIResponses(idgpt-5.2), output_model_promptRewrite the recipe with vivid descriptions and elegant formatting., ) if __name__ __main__: run: RunOutput agent.run(Give me a recipe for pad thai.)这是内容精修而非结构抽取需要 JSON 时请走output_schema/parser_modeloutput_model负责的是把答案写得更好。响应落盘与流式消费save_response_to_file 自动落盘配置一个路径Agent 每次运行完就把回复写进该文件import os from agno.agent import Agent from agno.models.openai import OpenAIResponses agent Agent( modelOpenAIResponses(idgpt-5.2), save_response_to_filetmp/agent_output.md, ) if __name__ __main__: os.makedirs(tmp, exist_okTrue) # 父目录需要自己保证存在 agent.print_response(Write a brief guide on Python virtual environments., streamTrue)跑完终端照常流式显示文件里同时留了一份存档适合结果需要归档或人工复核的场景。 注意目录不存在会写失败示例里显式os.makedirs就是在处理这一点。run() 捕获变量与事件流print_response面向人眼程序化处理要改用run()# 整个 RunOutput 进变量后续随便取字段 run: RunOutput agent.run(What is the stock price of NVDA) # 加 streamTrue 后返回事件迭代器逐个消费 for event in agent.run(What is the stock price of NVDA, streamTrue): print(event)前者把完整运行结果含结构化 content、元数据交到手里后者返回事件流配合streamTrue可逐事件处理是生产集成里做前端推送、日志打点的标准姿势。参数速查表参数作用默认行为适用场景expected_output自然语言描述回复成品的形态不设置模型自由发挥只约束格式条数、列表、标题不要求程序取值input_schema用 Pydantic 模型类校验并归一化输入输入即字符串无校验调用方传参需要字段契约与类型兜底output_schema把输出限定为结构化对象支持模型类或 JSON Schema 字典输出为纯文本下游需要直接按字段消费parser_model指定独立解析模型承担结构化抽取由主模型自己输出主模型输出不可控、弱于格式遵循output_model第二模型重写最终回复并替换主模型输出主模型输出即最终版便宜模型推理 强模型精修的分工save_response_to_file运行结束自动把回复写入指定文件不落盘结果需要归档、审计跑起来按 cookbook/02_agents/02_input_output/ 的前置说明配置好环境变量与 demo 环境后逐文件复现.venvs/demo/bin/python cookbook/02_agents/02_input_output/streaming.py 下一步建议先定输出要什么形态。只要文本就用expected_output收个尾要字典就加output_schema主模型跟不上格式再叠parser_model。同目录下的 followup_suggestions.py 还演示了followups追问建议的生成方式值得接着看。【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agno创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考