package consumer import ( "context" "github.com/gogf/gf/v2/encoding/gjson" "github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/glog" ) // recreateChatIfNeeded 检测并重建Chat配置 // 调用customerservice的recreateRAGFlow接口,由customerservice负责MongoDB操作 func recreateChatIfNeeded(ctx context.Context, tenantId, accountName, platform string) error { glog.Infof(ctx, "开始自动重建Chat - accountName: %s, platform: %s, tenantId: %s", accountName, platform, tenantId) // 1. 从配置获取customerservice地址(避免consul.GetInstanceAddr在Stream context中panic) customerserviceAddr := g.Cfg().MustGet(ctx, "customerservice.address", "customerservice:3000").String() // 2. 调用customerservice的recreateRAGFlow接口 url := "http://" + customerserviceAddr + "/customer/service/account/recreateRAGFlow" reqBody := g.Map{ "accountName": accountName, "platform": platform, } glog.Infof(ctx, "调用customerservice recreateRAGFlow接口 - URL: %s, 请求: %+v", url, reqBody) client := g.Client() resp, err := client.Post(ctx, url, reqBody) if err != nil { return gerror.Wrapf(err, "调用recreateRAGFlow接口失败") } defer resp.Close() // 3. 解析响应 respBody := resp.ReadAllString() result := gjson.New(respBody) if result.Get("code").Int() != 0 { errMsg := result.Get("message").String() return gerror.Newf("recreateRAGFlow失败: %s", errMsg) } glog.Infof(ctx, "Chat自动重建完成 - accountName: %s", accountName) return nil }