From d26c4bc9866ddf0b44f6f6b64ad59736c712aa3e Mon Sep 17 00:00:00 2001 From: ArvinLovegood Date: Fri, 11 Jul 2025 18:58:31 +0800 Subject: [PATCH] =?UTF-8?q?feat(data):AI=E5=B8=82=E5=9C=BA=E8=B5=84?= =?UTF-8?q?=E8=AE=AF=E6=80=BB=E7=BB=93=E6=B7=BB=E5=8A=A0=E5=9B=BD=E5=86=85?= =?UTF-8?q?=E5=AE=8F=E8=A7=82=E7=BB=8F=E6=B5=8E=E6=95=B0=E6=8D=AE=EF=BC=88?= =?UTF-8?q?GDP=E5=92=8CCPI=EF=BC=8C=E5=90=8E=E6=9C=9F=E9=99=86=E7=BB=AD?= =?UTF-8?q?=E4=BC=9A=E5=8A=A0=E5=85=B6=E4=BB=96=E6=95=B0=E6=8D=AE=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 openai_api.go 中添加 GDP 和 CPI 数据的获取和格式化输出 - 在 market_news_api_test.go 中更新相关测试函数 - 在 struct_to_markdown.go 中新增 MarkdownTableWithTitle 函数用于添加标题 --- backend/data/market_news_api_test.go | 8 ++++---- backend/data/openai_api.go | 24 +++++++++++++++++++++++- backend/util/struct_to_markdown.go | 22 ++++++++++++++++++++++ 3 files changed, 49 insertions(+), 5 deletions(-) diff --git a/backend/data/market_news_api_test.go b/backend/data/market_news_api_test.go index d3219c4..86938e6 100644 --- a/backend/data/market_news_api_test.go +++ b/backend/data/market_news_api_test.go @@ -179,11 +179,11 @@ func TestClsCalendar(t *testing.T) { func TestGetGDP(t *testing.T) { res := NewMarketNewsApi().GetGDP() - md := util.MarkdownTable(res.GDPResult.Data) - logger.SugaredLogger.Debugf("国内生产总值(GDP):\n %s", md) + md := util.MarkdownTableWithTitle("国内生产总值(GDP)", res.GDPResult.Data) + logger.SugaredLogger.Debugf(md) } func TestGetCPI(t *testing.T) { res := NewMarketNewsApi().GetCPI() - md := util.MarkdownTable(res.CPIResult.Data) - logger.SugaredLogger.Debugf("居民消费价格指数(CPI) :\n %s", md) + md := util.MarkdownTableWithTitle("居民消费价格指数(CPI)", res.CPIResult.Data) + logger.SugaredLogger.Debugf(md) } diff --git a/backend/data/openai_api.go b/backend/data/openai_api.go index 9370ee4..677fefa 100644 --- a/backend/data/openai_api.go +++ b/backend/data/openai_api.go @@ -17,6 +17,7 @@ import ( "go-stock/backend/db" "go-stock/backend/logger" "go-stock/backend/models" + "go-stock/backend/util" "strings" "sync" "time" @@ -178,7 +179,28 @@ func (o OpenAi) NewSummaryStockNewsStreamWithTools(userQuestion string, sysPromp "content": "当前本地时间是:" + time.Now().Format("2006-01-02 15:04:05"), }) wg := &sync.WaitGroup{} - wg.Add(2) + wg.Add(3) + + go func() { + defer wg.Done() + var market strings.Builder + res := NewMarketNewsApi().GetGDP() + md := util.MarkdownTableWithTitle("国内生产总值(GDP)", res.GDPResult.Data) + market.WriteString(md) + res2 := NewMarketNewsApi().GetCPI() + md2 := util.MarkdownTableWithTitle("居民消费价格指数(CPI)", res2.CPIResult.Data) + market.WriteString(md2) + + msg = append(msg, map[string]interface{}{ + "role": "user", + "content": "国内宏观经济数据", + }) + msg = append(msg, map[string]interface{}{ + "role": "assistant", + "content": "\n# 国内宏观经济数据:\n" + market.String(), + }) + }() + go func() { defer wg.Done() var market strings.Builder diff --git a/backend/util/struct_to_markdown.go b/backend/util/struct_to_markdown.go index a4a282f..4475f23 100644 --- a/backend/util/struct_to_markdown.go +++ b/backend/util/struct_to_markdown.go @@ -29,6 +29,28 @@ func MarkdownTable(v interface{}) string { return "输入必须是结构体、结构体指针、结构体切片或数组" } +func MarkdownTableWithTitle(title string, v interface{}) string { + value := reflect.ValueOf(v) + if value.Kind() == reflect.Ptr { + value = value.Elem() + } + + // 处理单个结构体 + if value.Kind() == reflect.Struct { + return markdownSingleStruct(value) + } + + // 处理结构体切片/数组 + if value.Kind() == reflect.Slice || value.Kind() == reflect.Array { + if value.Len() == 0 { + return "\n## " + title + "\n" + "无数据" + "\n" + } + return "\n## " + title + "\n" + markdownStructSlice(value) + "\n" + } + + return "\n## " + title + "\n" + "无数据" + "\n" +} + // 处理单个结构体 func markdownSingleStruct(value reflect.Value) string { t := value.Type()