DeepSeek-R1 think 标签 markdown 渲染

DeepSeek-R1 思考部分返回:<think>xxx</think>

通过 rehype-raw 自定义渲染 think 标签为 blockquote

yarn add rehype-raw

但 think 中返回的数据可能并不是标准的 blockquote 格式,因此需要对其中的内容做转换。

const processedValue = useMemo(() => {
	return value.replace(/<think>([\s\S]*?)<\/think>/g, (_, content) => {
	    const lines = content.trim().split('\n');
	    const quotedLines = lines.map((line: string) => `> ${line}`).join('\n');
	    return quotedLines;
	  });
}, [value]);

完整代码:

import ReactMarkdown from 'react-markdown';
import remarkGfm from 'remark-gfm';
import './index.less';
import { useMemo } from 'react';
import rehypeRaw from 'rehype-raw';

export interface MarkDwonProps {
  value: string;
}

function MarkDwon(props: MarkDwonProps) {
  let { value } = props;

  const components = useMemo<any>(
    () => ({
      think: 'blockquote',
    }),
    [],
  );

  const processedValue = useMemo(() => {
    return value.replace(/<think>([\s\S]*?)<\/think>/g, (_, content) => {
      const lines = content.trim().split('\n');
      const quotedLines = lines.map((line: string) => `> ${line}`).join('\n');
      return quotedLines;
    });
  }, [value]);

  return (
    <div className="markdown-wrapper">
      <ReactMarkdown
        remarkPlugins={[remarkGfm]}
        rehypePlugins={[rehypeRaw]}
        linkTarget={'_blank'}
        components={components}
      >
        {processedValue}
      </ReactMarkdown>
    </div>
  );
}

export default MarkDwon;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值