资讯动态

Agno × Claude 扩展思考实战:reasoning_model 配置、思考预算与推理流式事件详解

发布时间:2026/9/10 6:33:03 来源:尧图企业网站定制
Agno × Claude 扩展思考实战reasoning_model 配置、思考预算与推理流式事件详解【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agno本文基于 agno 仓库中cookbook/10_reasoning/models/anthropic/目录的官方示例讲解如何在 Agno 的 Agent 框架中为 Anthropic Claude 模型启用扩展思考Extended Thinking从reasoning_model与thinking参数的配置方式到推理内容的程序化访问response.reasoning_content再到同步/异步两种流式输出下RunEvent推理事件的捕获方式。读完后你可以直接复制示例代码在自己项目中实现“先思考、后作答”的 Claude 推理 Agent并实时消费思考过程的增量事件。目录定位三个示例覆盖三种用法cookbook/10_reasoning/models/anthropic/README.md将本目录定义为 “Anthropic Claude reasoning examples and streaming demos”并列出三个示例脚本分别对应三档使用深度示例文件场景cookbook/10_reasoning/models/anthropic/basic_reasoning.py对比“无推理”与“扩展思考”两种 Agent并展示如何访问推理内容cookbook/10_reasoning/models/anthropic/basic_reasoning_stream.py同步流式输出推理过程捕获RunEvent事件cookbook/10_reasoning/models/anthropic/async_reasoning_stream.py异步版本aprint_response/arun流式推理该目录的cookbook/10_reasoning/models/anthropic/TEST_LOG.md记录了对basic_reasoning_stream.py的结构验证与运行结果“Thinking and response panels stream and the answer is correct.”即思考面板与回答面板均可正常流式输出且答案正确可作为示例可运行性的佐证。核心机制reasoning_model 与 thinking 参数Agno 区分“主模型”model与“推理模型”reasoning_model。在 Agent 源码 中reasoning_model是一个独立字段注释明确写道# Enable reasoning by providing a reasoning_model (must be a native reasoning model). reasoning_model: Optional[Model] None也就是说开启推理的方式不是给主模型加一个开关而是为 Agent 额外挂载一个原生推理模型实例。以 basic_reasoning.py 为例对比 Agent 的构造方式from agno.agent import Agent from agno.models.anthropic import Claude from rich.console import Console # 普通 Agent直接作答不启用扩展思考 regular_agent Agent( modelClaude(idclaude-sonnet-4-5), markdownTrue, ) # 推理 Agent通过 reasoning_model 挂载启用了 extended thinking 的 Claude reasoning_agent Agent( modelClaude(idclaude-sonnet-4-5), reasoning_modelClaude( idclaude-sonnet-4-5, thinking{type: enabled, budget_tokens: 1024}, ), markdownTrue, ) task 9.11 and 9.9 -- which is bigger? Explain your reasoning step by step. regular_agent.print_response(task, streamTrue) reasoning_agent.print_response(task, streamTrue, show_full_reasoningTrue)两个关键点thinking参数结构这是一个字典示例中为{type: enabled, budget_tokens: 1024}。其中type控制思考开关budget_tokens指定思考阶段可用的 token 预算示例统一取 1024属于较小的演示预算生产环境可按任务复杂度调大。show_full_reasoningTrueprint_response的该参数让终端在流式输出时同时展示完整思考内容而非只显示最终回答。源码级印证thinking 参数的解析与校验深入 Claude 模型实现 可以看到thinking的完整处理链路字段定义thinking: Optional[Dict[str, Any]] Noneclaude.py 第 135 行即模型字段层面接受任意结构的 thinking 配置字典。创建时即校验模型实例创建时会调用_validate_thinking_support()claude.py 第 185-187 行若当前模型 id 命中内置的NON_THINKING_MODELS黑名单Claude Haiku 3 / Haiku 3.5 家族见 第 103-109 行会立即抛出ValueError并提示“其余 Claude 模型默认支持扩展思考”。这解释了为什么示例中选用claude-sonnet-4-5这类较新的 Sonnet 系列模型。request_params覆盖机制_thinking_enabled()第 271-278 行说明request_params在get_request_params中最后应用并覆盖顶层thinking字段——即若同时在request_params中传入thinking以后者为准。历史消息约束当思考开启时源码会将append_trailing_user_message置为 True第 195-198 行因为 Anthropic 要求在 thinking 模式下、且历史以 assistant 轮次结尾时必须补一条 user 轮次否则请求会被拒绝。这是多轮会话中启用 extended thinking 时容易被忽略的边界条件。访问推理内容response.reasoning_contentbasic_reasoning.py的后半段展示了如何在非流式运行后程序化读取思考内容response reasoning_agent.run(task, streamFalse) if response.reasoning_content: console.print( f[dim]Reasoning tokens used: {len(response.reasoning_content.split())}[/dim] ) console.print( f\n[bold]First 300 chars of reasoning:[/bold]\n{response.reasoning_content[:300]}... )其底层来源在 Claude 模型的响应解析中当 API 返回的 content block 类型为thinking时模型会把block.thinking写入model_response.reasoning_contentclaude.py 第 1036-1037 行redacted_thinking被安全策略隐去的思考块也会被单独识别处理而非常规文本。同步流式RunEvent 推理事件流basic_reasoning_stream.py 演示流式场景。最简写法只有一行from agno.agent import Agent from agno.models.anthropic import Claude agent Agent( reasoning_modelClaude( idclaude-sonnet-4-5, thinking{type: enabled, budget_tokens: 1024}, ), instructionsThink step by step about the problem., ) prompt What is 25 * 37? Show your reasoning. agent.print_response(prompt, streamTrue, stream_eventsTrue)stream_eventsTrue会同时开启事件流。若需要逐事件处理可按源码中注释给出的完整模式自行捕获from agno.run.agent import RunEvent for run_output_event in agent.run(prompt, streamTrue, stream_eventsTrue): if run_output_event.event RunEvent.run_started: print(f\nEVENT: {run_output_event.event}) elif run_output_event.event RunEvent.reasoning_started: print(Reasoning started...\n) elif run_output_event.event RunEvent.reasoning_content_delta: # 思考内容的增量流边生成边输出 print(run_output_event.reasoning_content, end, flushTrue) elif run_output_event.event RunEvent.run_content: if run_output_event.content: print(run_output_event.content, end, flushTrue) elif run_output_event.event RunEvent.run_completed: print(f\n\nEVENT: {run_output_event.event})这些事件在 RunEvent 定义 中是框架级的一等公民不依赖具体模型reasoning_started ReasoningStarted reasoning_content_delta ReasoningContentDelta reasoning_completed ReasoningCompleted并且与具体的事件负载对象一一映射ReasoningStartedEvent/ReasoningContentDeltaEvent/ReasoningCompletedEvent见 run/agent.py 第 584-587 行。对 Anthropic 侧Claude 模型在流式解析时专门处理thinking_delta增量claude.py 第 1151-1152 行将其转成框架层的ReasoningContentDeltaEvent。因此你写的事件处理逻辑对任何原生推理模型都通用这是 agno 推理层解耦设计的直接体现。异步流式arun 与 aprint_responseasync_reasoning_stream.py 与同步版本几乎一一对应差别仅在于所有调用换成 async APIimport asyncio from agno.agent import Agent from agno.models.anthropic import Claude async def streaming_reasoning(): agent Agent( reasoning_modelClaude( idclaude-sonnet-4-5, thinking{type: enabled, budget_tokens: 1024}, ), instructionsThink step by step about the problem., ) prompt What is 25 * 37? Show your reasoning. # 最简单的异步流式打印 await agent.aprint_response(prompt, streamTrue, stream_eventsTrue) # 或逐事件处理 # async for run_output_event in agent.arun(prompt, streamTrue, stream_eventsTrue): # if run_output_event.event RunEvent.reasoning_started: # print(Reasoning started...\n) # elif run_output_event.event RunEvent.reasoning_content_delta: # print(run_output_event.reasoning_content, end, flushTrue) # elif run_output_event.event RunEvent.run_completed: # print(done) if __name__ __main__: asyncio.run(streaming_reasoning())适用前提注意两点一是运行环境需要ANTHROPIC_API_KEY示例依赖agno与rich包二是thinking只适用于支持扩展思考的 Claude 模型创建模型时若误用 Haiku 3/3.5 旧家族会直接抛出带黑名单清单的ValueError便于提前定位配置问题。小结参数速查配置项位置说明reasoning_modelAgent(...)挂载原生推理模型实例是启用 agno 推理层的核心字段见 agent.py 第 207 行thinkingClaude(...){type: enabled, budget_tokens: N}创建时校验模型支持性支持被request_params覆盖show_full_reasoningprint_response(...)终端流式打印时展示完整思考面板stream_eventsTruerun/aprint_response开启ReasoningStarted/ReasoningContentDelta/ReasoningCompleted等事件流response.reasoning_content非流式run()返回程序化读取完整思考文本可用于审计、展示或二次加工以上路径与行号均对应当前仓库实际内容模型行为以 libs/agno/agno/models/anthropic/claude.py 为准事件模型以 libs/agno/agno/run/agent.py 为准可直接作为二次开发与问题排查的入口。【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agno创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价