Compare commits

...

2 Commits

Author SHA1 Message Date
wangyunfei 495e90f163 思考内容样式调整 2 months ago
wangyunfei 0e20be82f3 流式输出 完全响应 2 months ago

@ -110,26 +110,37 @@ export const callLocalChatAPI = async (prompt, onStreamData) => {
// 按行处理响应 // 按行处理响应
const lines = responseText.split(/\r?\n/) const lines = responseText.split(/\r?\n/)
console.log('总行数:', lines.length)
for (let i = 0; i < lines.length; i++) { for (let i = 0; i < lines.length; i++) {
const line = lines[i] const line = lines[i]
if (line.startsWith('event:')) { if (line.startsWith('event:')) {
currentEvent = line.substring(6).trim() currentEvent = line.substring(6).trim()
console.log(`${i}行 - 事件类型:`, currentEvent)
} else if (line.startsWith('data:')) { } else if (line.startsWith('data:')) {
const data = line.substring(5) const data = line.substring(5)
console.log(`${i}行 - 数据类型:${currentEvent}, 数据长度:${data.length}, 数据内容:${data.substring(0, 50)}...`) // console.log(`第${i}行 - 数据类型:${currentEvent}, 数据长度:${data.length}, 数据内容:${data.substring(0, 50)}...`)
if (currentEvent === 'thought') { if (currentEvent === 'thought') {
thoughtContent += data thoughtContent += data
} else if (currentEvent === 'message') { } else if (currentEvent === 'message') {
// 累加所有 message 数据,而不是只处理第一个 // 累加所有 message 数据,而不是只处理第一个
messageContent += data messageContent += data
console.log(`messageContent 当前长度: ${messageContent.length}`) // console.log(`messageContent 当前长度: ${messageContent.length}`)
} }
} }
else if (line.trim() && currentEvent === 'message') {
// 【新增】处理没有前缀但属于 message 的内容(后端格式问题)
// console.log(`第${i}行 - 无前缀但属于message, 内容长度:${line.length}, 内容:${line.substring(0, 50)}...`)
messageContent += line + '\n' // 添加换行符保持格式
// console.log(`messageContent 当前长度: ${messageContent.length}`)
} else if (line.trim() && currentEvent === 'thought') {
// 【新增】处理没有前缀但属于 thought 的内容(后端格式问题)
// console.log(`第${i}行 - 无前缀但属于thought, 内容长度:${line.length}, 内容:${line.substring(0, 50)}...`)
thoughtContent += line + '\n' // 添加换行符保持格式
// console.log(`thoughtContent 当前长度: ${thoughtContent.length}`)
}
} }
// 调试:打印解析结果 // 调试:打印解析结果

@ -135,8 +135,8 @@ const [currentStreamingMessageId, setCurrentStreamingMessageId] = useState(null)
} }
// 模拟流式效果 // 模拟流式效果
const simulateStreamingEffect = (fullContent, messageId) => { const simulateStreamingEffect = (fullContent, messageId, hasThoughtContent = false) => {
console.log('开始流式效果:', { fullContent: fullContent.substring(0, 100) + '...', messageId, length: fullContent.length }) console.log('开始流式效果:', { fullContent: fullContent.substring(0, 100) + '...', messageId, length: fullContent.length, hasThoughtContent })
setIsStreaming(true) setIsStreaming(true)
setStreamingContent('') setStreamingContent('')
setCurrentStreamingMessageId(messageId) setCurrentStreamingMessageId(messageId)
@ -242,12 +242,15 @@ const [currentStreamingMessageId, setCurrentStreamingMessageId] = useState(null)
console.log('Final content:', finalContent) console.log('Final content:', finalContent)
if (finalContent.trim()) { if (finalContent.trim()) {
// 预判断是否包含思考内容,避免样式闪烁
const hasThoughtContent = deepThinkingEnabled && finalContent.includes('\n\n')
// 先添加一个空的助手消息 // 先添加一个空的助手消息
const assistantMessageId = conversationStore.addMessage('assistant', '') const assistantMessageId = conversationStore.addMessage('assistant', '')
setCurrentStreamingMessageId(assistantMessageId) setCurrentStreamingMessageId(assistantMessageId)
// 开始模拟流式效果 // 开始模拟流式效果,传递预判断结果
simulateStreamingEffect(finalContent, assistantMessageId) simulateStreamingEffect(finalContent, assistantMessageId, hasThoughtContent)
} else { } else {
console.log('No content, adding fallback message') console.log('No content, adding fallback message')
conversationStore.addMessage('assistant', '抱歉,我无法生成回复内容。') conversationStore.addMessage('assistant', '抱歉,我无法生成回复内容。')
@ -400,7 +403,7 @@ const [currentStreamingMessageId, setCurrentStreamingMessageId] = useState(null)
<div className='ds-message-content'> <div className='ds-message-content'>
{displayContent ? ( {displayContent ? (
<div> <div>
{deepThinkingEnabled && displayContent.includes('\n\n') ? ( {deepThinkingEnabled && (displayContent.includes('\n\n') || (isStreaming && currentStreamingMessageId === msg.id)) ? (
// 当开启深度思考且有思考内容时,分别渲染 // 当开启深度思考且有思考内容时,分别渲染
(() => { (() => {
const parts = displayContent.split('\n\n') const parts = displayContent.split('\n\n')

Loading…
Cancel
Save