什么是推理令牌?
当具备推理能力的模型处理提示时,它们会生成两种不同类型的内容:- 推理区块:模型的内部思维链、问题分解以及逐步分析过程
- 文本区块:呈现给用户的最终、精炼的响应
AIMessage 中传递,可通过 contentBlocks 属性访问:
并非所有模型都会产生推理令牌。此模式专门适用于支持扩展思考或思维链输出的模型。标准聊天模型仅返回文本区块。
使用场景
- 透明度:向用户展示模型的推理过程,以建立对其答案的信任
- 调试:检查模型的思维过程,以识别其出错之处
- 教育工具:通过揭示 AI 如何解决问题来教授学生问题解决技巧
- 决策支持:让领域专家验证建议背后的推理过程
- 质量保证:在受监管行业中审核推理链以确保合规性
提取推理和文本区块
AIMessage 上的 contentBlocks 数组包含按生成顺序排列的所有区块。通过 type 过滤它们,可以将推理与文本分离:
从 useStream 访问消息
定义一个与你的智能体状态模式匹配的 TypeScript 接口,并将其作为类型参数传递给 useStream,以便以类型安全的方式访问状态值。在下面的示例中,将 typeof myAgent 替换为你的接口名称:
构建 ThinkingBubble 组件
ThinkingBubble 在一个视觉上独特、可折叠的容器中呈现推理令牌。用户可以展开它以查看完整的思维过程,或折叠它以专注于最终答案。
样式化 ThinkingBubble
通过独特的视觉处理方式,将推理区块与常规消息区分开来:推理过程的流式指示器
当模型仍在生成推理令牌时,显示一个动画指示器以传达思考正在进行中:渲染完整的 AI 响应
将ThinkingBubble 和标准文本气泡组合成一个 AIResponse 组件:
处理边界情况
不含推理的消息
并非每个 AI 消息都包含推理区块。当contentBlocks 仅包含文本区块时,渲染一个标准消息气泡,而不显示 ThinkingBubble。
空的推理区块
某些模型会生成空的推理区块作为占位符。过滤掉这些:多个推理-文本循环
单个消息可能在推理和文本区块之间交替。如果需要保留这种交错顺序,请按顺序迭代contentBlocks,而不是按类型分组:
最佳实践
- 默认折叠:按需显示推理过程,而非默认展开
- 显示字符数:让用户快速了解响应背后有多少思考量
- 视觉区分:使用不同的颜色、边框或背景,确保推理过程永远不会与实际答案混淆
- 动画过渡:平滑的展开/折叠动画可以提升感知质量
- 考虑可访问性:在切换按钮上使用适当的 ARIA 属性(
aria-expanded、aria-controls) - 在预览中截断:在折叠状态下显示推理过程的简短预览,以便用户决定是否展开
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

