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()