From 957de8ad8b85dd85ac689dd82a787b20d03ec403 Mon Sep 17 00:00:00 2001 From: spark Date: Tue, 11 Feb 2025 15:10:29 +0800 Subject: [PATCH] =?UTF-8?q?feat(backend):=E6=B7=BB=E5=8A=A0=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=96=B0=E9=97=BB=E8=B5=84=E8=AE=AF=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 GetTopNewsList 函数,用于获取新闻资讯 - 在处理用户消息时,添加获取新闻资讯的逻辑 - 当获取新闻资讯失败时,发送警告消息 --- backend/data/openai_api.go | 35 +++++++++++++++++++++++++++++++++ backend/data/openai_api_test.go | 7 ++++++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/backend/data/openai_api.go b/backend/data/openai_api.go index f9a2a62..c77ea85 100644 --- a/backend/data/openai_api.go +++ b/backend/data/openai_api.go @@ -157,6 +157,19 @@ func (o OpenAi) NewChatStream(stock, stockCode string) <-chan string { "content": message, }) } + messages = GetTopNewsList() + if messages == nil || len(*messages) == 0 { + logger.SugaredLogger.Error("获取新闻资讯失败") + ch <- "***❗获取新闻资讯失败,分析结果可能不准确***
" + go runtime.EventsEmit(o.ctx, "warnMsg", "❗获取新闻资讯失败,分析结果可能不准确") + return + } + for _, message := range *messages { + msg = append(msg, map[string]interface{}{ + "role": "assistant", + "content": message, + }) + } }() go func() { @@ -459,6 +472,28 @@ func GetTelegraphList() *[]string { return &telegraph } +func GetTopNewsList() *[]string { + url := "https://www.cls.cn" + response, err := resty.New().R(). + SetHeader("Referer", "https://www.cls.cn/"). + SetHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.60"). + Get(fmt.Sprintf(url)) + if err != nil { + return &[]string{} + } + //logger.SugaredLogger.Info(string(response.Body())) + document, err := goquery.NewDocumentFromReader(strings.NewReader(string(response.Body()))) + if err != nil { + return &[]string{} + } + var telegraph []string + document.Find("div.home-article-title a,div.home-article-rec a").Each(func(i int, selection *goquery.Selection) { + logger.SugaredLogger.Info(selection.Text()) + telegraph = append(telegraph, selection.Text()) + }) + return &telegraph +} + func (o OpenAi) SaveAIResponseResult(stockCode, stockName, result string) { db.Dao.Create(&models.AIResponseResult{ StockCode: stockCode, diff --git a/backend/data/openai_api_test.go b/backend/data/openai_api_test.go index 363461d..19c7a85 100644 --- a/backend/data/openai_api_test.go +++ b/backend/data/openai_api_test.go @@ -1,13 +1,14 @@ package data import ( + "context" "go-stock/backend/db" "testing" ) func TestNewDeepSeekOpenAiConfig(t *testing.T) { db.Init("../../data/stock.db") - ai := NewDeepSeekOpenAi() + ai := NewDeepSeekOpenAi(context.TODO()) res := ai.NewChatStream("北京文化", "sz000802") for { select { @@ -19,3 +20,7 @@ func TestNewDeepSeekOpenAiConfig(t *testing.T) { } } } + +func TestGetTopNewsList(t *testing.T) { + GetTopNewsList() +}