From 8252d45f8955802308d7793612985098bb192690 Mon Sep 17 00:00:00 2001 From: hex2077 Date: Mon, 1 Dec 2025 15:06:50 +0800 Subject: [PATCH] =?UTF-8?q?fix(converter):=20=E6=B8=85=E7=90=86OpenAI?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E8=BD=AC=E6=8D=A2=E4=B8=AD=E7=9A=84=E7=A9=BA?= =?UTF-8?q?=E7=99=BD=E5=AD=97=E7=AC=A6=20final=20assistant=20content=20can?= =?UTF-8?q?not=20end=20with=20trailing=20whitespace?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移除消息内容中的前后空白字符,包括普通消息和最后一条assistant消息的尾部空白,确保转换后的数据更整洁 --- src/converters/strategies/OpenAIConverter.js | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/converters/strategies/OpenAIConverter.js b/src/converters/strategies/OpenAIConverter.js index fafeab4..522caa6 100644 --- a/src/converters/strategies/OpenAIConverter.js +++ b/src/converters/strategies/OpenAIConverter.js @@ -138,7 +138,7 @@ export class OpenAIConverter extends BaseConverter { // 普通消息 if (typeof message.content === 'string') { if (message.content) { - content.push({ type: 'text', text: message.content }); + content.push({ type: 'text', text: message.content.trim() }); } } else if (Array.isArray(message.content)) { message.content.forEach(item => { @@ -146,7 +146,7 @@ export class OpenAIConverter extends BaseConverter { switch (item.type) { case 'text': if (item.text) { - content.push({ type: 'text', text: item.text }); + content.push({ type: 'text', text: item.text.trim() }); } break; case 'image_url': @@ -205,6 +205,22 @@ export class OpenAIConverter extends BaseConverter { } } + // 清理最后一条 assistant 消息的尾部空白 + if (mergedClaudeMessages.length > 0) { + const lastMessage = mergedClaudeMessages[mergedClaudeMessages.length - 1]; + if (lastMessage.role === 'assistant' && Array.isArray(lastMessage.content)) { + // 从后往前找到最后一个 text 类型的内容块 + for (let i = lastMessage.content.length - 1; i >= 0; i--) { + const contentBlock = lastMessage.content[i]; + if (contentBlock.type === 'text' && contentBlock.text) { + // 移除尾部空白字符 + contentBlock.text = contentBlock.text.trimEnd(); + break; + } + } + } + } + const claudeRequest = { model: openaiRequest.model,