news 2026/9/13 2:11:16

eino 推理内容全链路:从 reasoning_content 字段定义到生产调试的 3 步实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
eino 推理内容全链路:从 reasoning_content 字段定义到生产调试的 3 步实战

eino 推理内容全链路:从 reasoning_content 字段定义到生产调试的 3 步实战

【免费下载链接】einoThe ultimate LLM/AI application development framework in Go.项目地址: https://gitcode.com/GitHub_Trending/ei/eino

为什么模型答了,你却不知道它为什么这么答

用 eino 开发 Agent 时,最常见的卡点是:模型直接回了答案,但你不知道它为什么这么回。是理解错了题意,还是推理走错了分支?事后只能靠猜。eino 的reasoning_content字段把模型每一轮的思考过程都记了下来,让你在生产环境直接核对决策链路 🔍

一图看懂 eino reasoning_content 的流转

图里 ChatModel 和 Tools 通过 action / observation 构成循环,模型每轮输出最终被包装成 AgentEvents 发出。ReasoningContent字段就挂在循环中流转的 Message 上,模型每思考一次,这段内容就随消息多出一截,方便你逐轮回溯。

拆解推理内容的三段链路

看数据层怎么定义推理字段

在 消息结构定义 中,Message结构体给每条 assistant 消息留了一个专门的字段:

// ReasoningContent is the thinking process of the model ReasoningContent string `json:"reasoning_content,omitempty"`

白话:每条模型回复消息都能携带一段"思考过程",JSON 序列化时如果为空会自动省略,不占传输和存储空间。

旁边的TokenUsage.CompletionTokensDetails.ReasoningTokens还会单独统计思考消耗的 token 数,让你知道这部分输出花了多少成本。

看运行时怎么合并流式推理片段

ChatModel 的输出通常是流式的,每个 chunk 只带一小段推理文本,框架的ConcatMessages负责把它们拼回完整内容:

if msg.ReasoningContent != "" { reasoningContents = append(reasoningContents, msg.ReasoningContent) reasoningContentLen += len(msg.ReasoningContent) }

白话:流式输出的每一块思考碎片都被逐个收集,函数最后按顺序拼成完整字符串写回最终 Message 的 ReasoningContent 字段。

部分模型(如 OpenAI 协议)的推理内容会包在ReasoningExtension里、按 Index 分片,schema/openai/extension.go 中的ConcatReasoningExtensions会先按索引排序再拼接,保证顺序不乱。

看合并后的思考怎么被读取和消费

消息合并完成后,有两处会直接消费这段内容。第一处是消息的调试渲染:

if len(m.ReasoningContent) > 0 { sb.WriteString("\nreasoning content:\n") sb.WriteString(m.ReasoningContent) }

白话:你打印或记录消息时,只要带了思考过程,就会单独输出一段 "reasoning content",日志里一眼就能定位模型当时在想什么。

第二处在 摘要中间件:它估算消息 token 数时,把ReasoningContent的长度和正文一起计入,长对话压缩历史时不会漏算思考部分的开销。

3 步跑通 eino 推理内容读取 🚀

  1. 克隆代码到本地:git clone https://gitcode.com/GitHub_Trending/ei/eino
  2. 打开 schema/message.go,找到ReasoningContent字段定义,确认它的序列化行为
  3. 跑一遍相关测试,验证流式合并逻辑:go test ./schema/ ./schema/openai/
  4. 在自己的项目里,模型调用返回后直接读取msg.ReasoningContent并打印,即可拿到完整思考过程

避坑 & 进阶

  • omitempty 的"没值"要区分清楚:字段缺失通常意味着模型或供应商这一轮根本没返回思考内容,别误判为合并出 bug,先确认模型侧是否支持。
  • 流式分片有顺序要求:OpenAI 协议的推理块带 Index 分片,自己手写拼接逻辑时不排序就会把思考顺序打乱,参考ConcatReasoningExtensions按索引聚合。
  • 思考过程也算 token 成本:摘要中间件估算长度时已包含这部分,长对话里思考文本常占大头,压缩历史或估算费用时要把它算进去。

掌握 reasoning_content 后,模型下次答错,你能直接翻它的思考日志,一眼看出卡在哪一步 🎯

【免费下载链接】einoThe ultimate LLM/AI application development framework in Go.项目地址: https://gitcode.com/GitHub_Trending/ei/eino

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 2:09:15

π型滤波器实战:从截止频率公式到传导EMI调试经验

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

作者头像 李华
网站建设 2026/9/13 2:08:01

DBeaver 执行计划避坑指南:3 步把 5 秒慢查询压到 0.1 秒

DBeaver 执行计划避坑指南:3 步把 5 秒慢查询压到 0.1 秒 【免费下载链接】dbeaver Free universal database tool and SQL client 项目地址: https://gitcode.com/GitHub_Trending/db/dbeaver 周五下午,一条 JOIN 跑了 8 分钟,DBA 在…

作者头像 李华
网站建设 2026/9/13 2:07:05

硬件出海EMC翻车实录:从源头设计到认证整改全指南

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

作者头像 李华
网站建设 2026/9/13 2:04:05

PyTorch CNN花卉图像识别实战:从数据增强到模型调优全流程

简介:面向计算机视觉课程设计与期末大作业的基于卷积神经网络的花卉图像识别项目,已通过导师指导并获得九十九分评价,适合计算机相关专业学生用于毕业设计、课程设计或期末项目,也适合希望快速上手图像分类实战的学习者参考。整套…

作者头像 李华