From cc8d7d6134eda79995dca94b621c3dce8d70cc55 Mon Sep 17 00:00:00 2001 From: Eg <1711788888@qq.com> Date: Wed, 4 Mar 2026 18:01:25 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E4=BC=98=E5=8C=96=E6=AD=A3=E5=88=99?= =?UTF-8?q?=E5=A4=84=E7=90=86=E6=97=B6=E7=9A=84=E6=97=A5=E5=BF=97=E8=BE=93?= =?UTF-8?q?=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/service/app/ai_claude.go | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/server/service/app/ai_claude.go b/server/service/app/ai_claude.go index 4a2d796..5d9026b 100644 --- a/server/service/app/ai_claude.go +++ b/server/service/app/ai_claude.go @@ -212,7 +212,7 @@ func (s *AiProxyService) forwardClaudeStreamRequest(c *gin.Context, provider *ap reader := bufio.NewReader(httpResp.Body) flusher, _ := c.Writer.(http.Flusher) - // 聚合完整输出用于日志 + // 聚合完整输出用于日志和正则处理 var fullContent bytes.Buffer var totalInputTokens, totalOutputTokens int @@ -235,26 +235,30 @@ func (s *AiProxyService) forwardClaudeStreamRequest(c *gin.Context, provider *ap totalOutputTokens = chunk.Usage.OutputTokens } - // 处理文本内容 + // 收集文本内容(不在流式传输时应用正则,避免重复处理) if chunk.Delta != nil && chunk.Delta.Text != "" { fullContent.WriteString(chunk.Delta.Text) - if injector != nil { - chunk.Delta.Text = injector.ProcessResponse(chunk.Delta.Text) - } } - processedData, _ := json.Marshal(chunk) + // 直接转发原始响应 c.Writer.Write([]byte("data: ")) - c.Writer.Write(processedData) + c.Writer.Write(data) c.Writer.Write([]byte("\n\n")) flusher.Flush() } } } + // 流式结束后,对完整内容应用输出正则处理(仅用于日志记录) + processedContent := fullContent.String() + if injector != nil && processedContent != "" { + processedContent = injector.ProcessResponse(processedContent) + } + // 记录完整的流式响应日志 logFields := []zap.Field{ - zap.String("ai_output", fullContent.String()), + zap.String("ai_output_original", fullContent.String()), + zap.String("ai_output_processed", processedContent), zap.Int("input_tokens", totalInputTokens), zap.Int("output_tokens", totalOutputTokens), zap.Int("total_tokens", totalInputTokens+totalOutputTokens),