Skip to main content
推理 Token 暴露了高级模型(如 OpenAI 的 o1/o3 和 Anthropic 的 Claude 扩展思考)的内部思考过程。这些模型产生结构化的内容块,将推理与最终答案分开,让你构建展示模型如何得出回复的 UI。

什么是推理 Token?

当具有推理能力的模型处理提示词时,它们生成两种不同类型的内容:
  1. 推理块:模型的内部思维链、问题分解和逐步分析
  2. 文本块:呈现给用户的最终、精炼的回复
这些以类型化的内容块形式在 AIMessage 中传递,可通过 contentBlocks 属性访问:
并非所有模型都会产生推理 Token。此模式专门适用于支持扩展思考或思维链输出的模型。标准聊天模型只返回文本块。

用例

  • 透明度:向用户展示模型的推理过程,以建立对其答案的信任
  • 调试:检查模型的思考过程,找出它出错的地方
  • 教育工具:通过展示 AI 如何处理问题来教学生解决问题
  • 决策支持:让领域专家验证推荐背后的推理
  • 质量保证:在受监管行业中审计推理链以确保合规

提取推理和文本块

AIMessage 上的 contentBlocks 数组按生成顺序包含所有块。按 type 过滤以将推理与文本分开:
单条消息可能包含多个推理块(例如模型暂停推理、产生部分文本,然后继续推理)。将它们合并即可获得完整的思考过程。

useStream 访问消息

定义一个与你的智能体状态 schema 匹配的 TypeScript 接口,并将其作为类型参数传递给 useStream,以获得类型安全的状态值访问。在以下示例中,将 typeof myAgent 替换为你的接口名称:

构建 ThinkingBubble 组件

ThinkingBubble 在视觉上独特的可折叠容器中呈现推理 Token。用户可以展开查看完整的思考过程,或折叠以专注于最终答案。

为 ThinkingBubble 设置样式

使用独特的视觉处理来区分推理块和常规消息:

推理的流式指示器

当模型仍在生成推理 Token 时,显示动画指示器来传达思考正在进行中:
流式输出期间,默认保持 ThinkingBubble 折叠,只显示加载动画。在流式输出期间展开可能会因为新 Token 到达而导致布局抖动。让用户在推理阶段完成后再展开。

渲染完整的 AI 回复

ThinkingBubble 和标准文本气泡组合成一个 AIResponse 组件:

处理边界情况

没有推理的消息

并非每条 AI 消息都包含推理块。当 contentBlocks 只有文本块时,渲染标准消息气泡而不显示 ThinkingBubble。

空推理块

某些模型会产生空的推理块作为占位符。过滤掉它们:

多个推理-文本循环

单条消息可以在推理和文本块之间交替。如果你需要保留这种交错模式,按顺序遍历 contentBlocks 而不是按类型分组:

最佳实践

  • 默认折叠:按需显示推理,而非默认展示
  • 显示字符数:让用户快速了解回复背后有多少思考
  • 视觉上做区分:使用不同的颜色、边框或背景,使推理永远不会与实际答案混淆
  • 添加过渡动画:平滑的展开/折叠动画提升感知质量
  • 考虑无障碍性:在切换按钮上使用正确的 ARIA 属性(aria-expandedaria-controls
  • 在预览中截断:折叠时显示推理的简短预览,让用户决定是否展开