使用 <think> 标签解析 DeepSeek 模型的推理过程

在本地部署 DeepSeek 模型并调用其推理能力时,模型的推理过程通常以流的形式返回。为了清晰地记录和展示这些推理过程,我们可以使用 parse-reasoning 这个 npm 包来解析返回的内容,并将推理过程用 <think> 标签包裹。以下是具体的实现方法。


1. 安装 parse-reasoning

首先,确保你已经安装了 parse-reasoning 包。可以通过以下命令安装:

bash 复制代码
npm install parse-reasoning

2. 调用模型并解析推理过程

在调用 DeepSeek 模型时,模型的返回内容会以流的形式传输。我们可以使用parse-reasoning包来解析这些内容,并根据type字段区分推理过程和主内容。

以下是代码示例:

javascript 复制代码
import parseReasoning from 'parse-reasoning';
// or const parseReasoning = require('parse-reasoning')

/**
 * 解析包含推理标签的文本内容,将文本分割为普通文本和推理内容块
 * @param {string} text - 需要解析的原始文本,可能包含<think>/<reason>等推理标签
 * @returns {Array} 返回解析后的内容数组,每个元素是以下格式的对象:
 *                 - type: "text" | "reasoning" 内容类型
 *                 - content: 对应的文本内容
 *                 - reasoning_running?: 当type为text时可能存在,表示后续是否还有推理内容
 * 当解析出错时,会返回包含原始文本的默认数组
 */
parseReasoning(text).map((e,i) => {
    if(e.type === 'reasoning' && e.content) {
        return (
            ...
            // reasoning过程中的内容,可以用Collapse包裹。
        )
    } else {
        return (
            ...
            // ai模型返回的主内容
        )
    }
})

3. 解析结果示例

parse-reasoning 包会将模型返回的内容解析为一个数组,数组中的每个对象包含 type 和 content 字段。例如:

css 复制代码
[  { "type": "reasoning", "content": "模型正在分析输入..." },  { "type": "text", "content": "这是模型返回的主内容。" },  { "type": "reasoning", "content": "模型正在生成最终答案..." }]

4. 结合 UI 组件展示

jsx 复制代码
import React from 'react';
import { Collapse } from 'antd'; // 假设使用 Ant Design 的 Collapse 组件
const { Panel } = Collapse;

function ModelResponse({ parsedResults }) {
  return (
    <div>
      {parsedResults.map((e, i) => {
        if (e.type === 'reasoning' && e.content) {
          return (
            <Collapse key={i}>
              <Panel header="推理过程" key={i}>
                <think>{e.content}</think>
              </Panel>
            </Collapse>
          );
        } else if (e.type === 'text' && e.content) {
          return <p key={i}>{e.content}</p>;
        }
        return null;
      })}
    </div>
  );
}

5. 总结

通过 parse-reasoning 包,我们可以轻松解析 DeepSeek 模型返回的推理过程。

相关推荐
子兮曰7 小时前
async/await高级模式:async迭代器、错误边界与并发控制
前端·javascript·github
恋猫de小郭7 小时前
2026 Flutter VS React Native ,同时在 AI 时代 VS Native 开发,你没见过的版本
android·前端·flutter
GIS之路9 小时前
ArcGIS Pro 中的 Notebooks 入门
前端
IT_陈寒11 小时前
React状态管理终极对决:Redux vs Context API谁更胜一筹?
前端·人工智能·后端
Kagol12 小时前
TinyVue 支持 Skills 啦!现在你可以让 AI 使用 TinyVue 组件搭建项目
前端·agent·ai编程
柳杉12 小时前
从零打造 AI 全球趋势监测大屏
前端·javascript·aigc
simple_lau12 小时前
Cursor配置MasterGo MCP:一键读取设计稿生成高还原度前端代码
前端·javascript·vue.js
睡不着先生12 小时前
如何设计一个真正可扩展的表单生成器?
前端·javascript·vue.js
天蓝色的鱼鱼12 小时前
模块化与组件化:90%的前端开发者都没搞懂的本质区别
前端·架构·代码规范
明君8799712 小时前
Flutter 如何给图片添加多行文字水印
前端·flutter