From 64b37b687cb56280edb1d50631932635391cc7a8 Mon Sep 17 00:00:00 2001 From: spark Date: Tue, 4 Feb 2025 15:12:15 +0800 Subject: [PATCH] =?UTF-8?q?refactor(data):=20=E4=BC=98=E5=8C=96=20OpenAI?= =?UTF-8?q?=20API=20=E5=AE=A2=E6=88=B7=E7=AB=AF=E9=85=8D=E7=BD=AE=E5=B9=B6?= =?UTF-8?q?=E6=94=B9=E8=BF=9B=E6=B5=81=E6=95=B0=E6=8D=AE=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将请求超时时间从 30秒增加到 60 秒 - 修正流数据的前缀检查,从 "chat data: " 改为 "data: "- 增加对 reasoning_content 的处理逻辑 - 优化数据处理流程,提高错误处理能力 --- backend/data/openai_api.go | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/backend/data/openai_api.go b/backend/data/openai_api.go index d8f8b29..f641880 100644 --- a/backend/data/openai_api.go +++ b/backend/data/openai_api.go @@ -130,7 +130,7 @@ func (o OpenAi) NewChatStream(stock, stockCode string) <-chan string { client.SetHeader("Authorization", "Bearer "+o.ApiKey) client.SetHeader("Content-Type", "application/json") client.SetRetryCount(3) - client.SetTimeout(time.Second * 30) + client.SetTimeout(time.Second * 60) msg := []map[string]interface{}{ { @@ -216,7 +216,7 @@ func (o OpenAi) NewChatStream(stock, stockCode string) <-chan string { for scanner.Scan() { line := scanner.Text() logger.SugaredLogger.Infof("Received data: %s", line) - if strings.HasPrefix(line, "chat data: ") { + if strings.HasPrefix(line, "data: ") { data := strings.TrimPrefix(line, "data: ") if data == "[DONE]" { return @@ -225,17 +225,27 @@ func (o OpenAi) NewChatStream(stock, stockCode string) <-chan string { var streamResponse struct { Choices []struct { Delta struct { - Content string `json:"content"` + Content string `json:"content"` + ReasoningContent string `json:"reasoning_content"` } `json:"delta"` } `json:"choices"` } if err := json.Unmarshal([]byte(data), &streamResponse); err == nil { for _, choice := range streamResponse.Choices { + txt := "" if content := choice.Delta.Content; content != "" { - ch <- content + txt = content + logger.SugaredLogger.Infof("Content data: %s", txt) } + if reasoningContent := choice.Delta.ReasoningContent; reasoningContent != "" { + txt = reasoningContent + logger.SugaredLogger.Infof("ReasoningContent data: %s", txt) + } + ch <- txt } + } else { + logger.SugaredLogger.Infof("Stream data error : %s", err.Error()) } } }