From db1ed11ac840e0414e07744fe9517eb666928ab8 Mon Sep 17 00:00:00 2001 From: nreger Date: Sat, 11 Apr 2026 13:03:37 +0800 Subject: [PATCH] =?UTF-8?q?feat(adapter):=20=E6=B7=BB=E5=8A=A0=20CozeCN=20?= =?UTF-8?q?V3=20=E6=B5=81=E5=BC=8F=E5=93=8D=E5=BA=94=E7=9A=84=E6=80=9D?= =?UTF-8?q?=E8=80=83=E5=86=85=E5=AE=B9=E6=94=AF=E6=8C=81=20&&=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=93=8D=E5=BA=94=E4=B8=BA=E7=A9=BA=E6=97=B6=E7=9A=84?= =?UTF-8?q?=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 ResponseDelta 结构中新增 ReasoningContent 字段用于存储思考内容 - 实现了对 Coze 工作流模式思考过程的支持和兼容处理 - 修复了角色判断逻辑,当响应内容为空时默认设置为 assistant 角色 - 统一了思考内容的字段映射,兼容 reasoning_content 和 thinking 字段 - 重构了 delta 构建逻辑以支持独立的 ReasoningContent 字段处理 --- pkg/adapter/cozecn_v3_openai.go | 26 ++++++++++++++----- .../cozecn_v3/streammode/response.go | 2 ++ pkg/openai/openai_response.go | 7 ++--- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/pkg/adapter/cozecn_v3_openai.go b/pkg/adapter/cozecn_v3_openai.go index d347d16..287d3dd 100644 --- a/pkg/adapter/cozecn_v3_openai.go +++ b/pkg/adapter/cozecn_v3_openai.go @@ -136,12 +136,27 @@ func CozecnV3ReponseToOpenAIResponse(resp *chat_message_list.MessageListResponse func CozecnV3ReponseToOpenAIResponseStream(resp *streammode.EventData) *myopenai.OpenAIStreamResponse { var choices []myopenai.OpenAIStreamResponseChoice + role := resp.Role + if resp.Content == "" { + role = "assistant" + } + + // 构建 delta:content 保持不变,reasoning_content 独立字段 + delta := myopenai.ResponseDelta{ + Role: role, + Content: resp.Content, + } + + // 如果存在思考内容,添加到 ReasoningContent 字段 + if resp.ReasoningContent != "" { + delta.ReasoningContent = resp.ReasoningContent + } else if resp.Thinking != "" { + delta.ReasoningContent = resp.Thinking + } + choices = append(choices, myopenai.OpenAIStreamResponseChoice{ Index: 0, - Delta: myopenai.ResponseDelta{ - Role: resp.Role, - Content: resp.Content, - }, + Delta: delta, }) usage := myopenai.Usage{ PromptTokens: resp.Usage.InputCount, @@ -153,8 +168,7 @@ func CozecnV3ReponseToOpenAIResponseStream(resp *streammode.EventData) *myopenai Object: "chat.completion.chunk", Created: time.Now().Unix(), Choices: choices, - //Error: errorDetail, - Usage: &usage, + Usage: &usage, } return nil } diff --git a/pkg/llm/devplatform/cozecn_v3/streammode/response.go b/pkg/llm/devplatform/cozecn_v3/streammode/response.go index a5929b9..2abbd2c 100644 --- a/pkg/llm/devplatform/cozecn_v3/streammode/response.go +++ b/pkg/llm/devplatform/cozecn_v3/streammode/response.go @@ -20,4 +20,6 @@ type EventData struct { OutputCount int `json:"output_count"` InputCount int `json:"input_count"` } `json:"usage"` + ReasoningContent string `json:"reasoning_content,omitempty"` // 工作流模式的思考过程(Coze字段) + Thinking string `json:"thinking,omitempty"` // 兼容字段(某些版本可能使用) } diff --git a/pkg/openai/openai_response.go b/pkg/openai/openai_response.go index 53a8932..111eb90 100644 --- a/pkg/openai/openai_response.go +++ b/pkg/openai/openai_response.go @@ -49,9 +49,10 @@ type ResponseMessage struct { // ResponseDelta Delta 定义了对话中的消息结构 type ResponseDelta struct { - Role string `json:"role"` - Content string `json:"content"` - ToolCalls []ToolCall `json:"tool_calls,omitempty"` + Role string `json:"role"` + Content string `json:"content,omitempty"` + ReasoningContent string `json:"reasoning_content,omitempty"` // 思考内容(兼容Coze工作流) + ToolCalls []ToolCall `json:"tool_calls,omitempty"` } // Usage 定义了使用统计的结构