This commit is contained in:
hailin 2025-05-29 20:40:22 +08:00
parent b7941a45b9
commit e6164160ef
1 changed files with 36 additions and 39 deletions

View File

@ -36,6 +36,41 @@ interface MessageProps {
onSubmitEdit: (value: string, sequenceNumber: number) => void onSubmitEdit: (value: string, sequenceNumber: number) => void
} }
// ✅ 提取为组件,放在同文件中也没问题
const MessageContent: React.FC<{ content: string }> = ({ content }) => {
const [showThink, setShowThink] = useState(false)
const thinkMatch = content.match(/<think>([\s\S]*?)<\/think>/i)
const thinkContent = thinkMatch?.[1]?.trim() || ""
const visibleContent = thinkMatch
? content.replace(thinkMatch[0], "").trim()
: content.trim()
return (
<div className="space-y-2">
<MessageMarkdown content={visibleContent} />
{thinkMatch && thinkContent && (
<div className="mt-2 text-sm text-muted-foreground">
<button
className="text-blue-500 hover:underline"
onClick={() => setShowThink(prev => !prev)}
>
{showThink ? "隐藏思考过程 ▲" : "显示思考过程 ▼"}
</button>
{showThink && (
<div className="mt-2 rounded bg-gray-100 p-3 text-sm dark:bg-gray-800">
<MessageMarkdown content={thinkContent} />
</div>
)}
</div>
)}
</div>
)
}
export const Message: FC<MessageProps> = ({ export const Message: FC<MessageProps> = ({
message, message,
fileItems, fileItems,
@ -313,45 +348,7 @@ export const Message: FC<MessageProps> = ({
// <MessageMarkdown content={message.content} /> // <MessageMarkdown content={message.content} />
(() => { <MessageContent content={message.content} />
const [showThink, setShowThink] = useState(false)
// 动态提取 <think> 内容块
const thinkMatch = message.content.match(/<think>([\s\S]*?)<\/think>/i)
// 思考区域(如果匹配到了)
const thinkContent = thinkMatch?.[1]?.trim() || ""
// 可见区域 = 原始内容去除 <think> 区域
const visibleContent = thinkMatch
? message.content.replace(thinkMatch[0], "").trim()
: message.content.trim()
return (
<div className="space-y-2">
{/* 主内容显示 */}
<MessageMarkdown content={visibleContent} />
{/* 有 <think> 匹配时,才展示按钮 */}
{thinkMatch && thinkContent && (
<div className="mt-2 text-sm text-muted-foreground">
<button
className="text-blue-500 hover:underline"
onClick={() => setShowThink(prev => !prev)}
>
{showThink ? "隐藏思考过程 ▲" : "显示思考过程 ▼"}
</button>
{showThink && (
<div className="mt-2 rounded bg-gray-100 p-3 text-sm dark:bg-gray-800">
<MessageMarkdown content={thinkContent} />
</div>
)}
</div>
)}
</div>
)
})()