在本地部署 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 模型返回的推理过程。