diff --git a/internal/pkg/rec_extra/ext.go b/internal/pkg/rec_extra/ext.go index b8b3c86..ac842de 100644 --- a/internal/pkg/rec_extra/ext.go +++ b/internal/pkg/rec_extra/ext.go @@ -17,6 +17,9 @@ func SetTaskRecExt(requireData *entitys.RequireData, rec *entitys.Recognize) { } func GetTaskRecExt(rec *entitys.Recognize) (ext entitys.TaskExt, err error) { + if rec == nil { + return + } err = json.Unmarshal(rec.Ext, &ext) return ext, err } diff --git a/internal/tools/zltx/excute_test.go b/internal/tools/zltx/excute_test.go index 3f8460d..0c5cd78 100644 --- a/internal/tools/zltx/excute_test.go +++ b/internal/tools/zltx/excute_test.go @@ -4,16 +4,31 @@ import ( config2 "ai_scheduler/internal/config" "ai_scheduler/internal/entitys" "context" + "strings" "testing" ) func Test_task(t *testing.T) { - c := NewZltxOrderDetailTool(config2.ToolConfig{}, nil) + c := NewZltxOrderDetailTool(config2.ToolConfig{ + BaseURL: "https://revcl.1688sup.com/api/admin/direct/ai/%s", + AddURL: "https://revcl.1688sup.com/api/admin/direct/log/%s/%s", + }, nil) + ch := make(chan entitys.Response, 10000) err := c.Execute(context.Background(), &entitys.Recognize{ Match: &entitys.Match{ - Parameters: `{"order_number": 859393216068067329}`, + Parameters: `{"order_number": 864086822064234497}`, }, + Ext: []byte(`{"auth":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ1c2VyQ2VudGVyIiwiZXhwIjoxNzY3OTM0MTg1LCJuYmYiOjE3Njc5MjMzODUsImp0aSI6IjE3OSIsIlBob25lIjoiMTUwMDA0NTAxNTUiLCJVc2VyTmFtZSI6IjE1MDAwNDUwMTU1IiwiUmVhbE5hbWUiOiLliJjlvanlhpsiLCJBY2NvdW50VHlwZSI6MSwiR3JvdXBDb2RlcyI6IlZDTF9BRE1JTixWQ0xfU1lTVEVNLENSTV9BRE1JTixMU1hERFNfQURNSU4sTFNYRERTX1NZU1RFTSxNQVJLRVRJTkdTQUFTX1NVUEVSQURNSU4sU1RBVElTVElDQUxTWVNURU1fQURNSU4sUEhZU0lDQUxHT09EU19BRE1JTixNQVJLRVRJTkdTWVNURU1fU1VQRVIsUkVQT1JUQ0VOVEVSX0FETUlOLE1PTklUT1JfTUFESU4sWkxUWF9BRE1JTixaTFRYX09QRVJBVEUiLCJEaW5nVXNlcklkIjoiMTcxMTkzNTg3NTAzMjk5MzUifQ.d9z0S1Ia-PFAxhGstT055Amt8PI09bUHxG0_lba4UwvSomiTNCD-5DFdMkbZHwiDTlhVdBjcd1mDYFRRZXWMPoSnanubMBnRnuvTi8csch5nz1L9oWNo-HFyBE3lMw9-UJ5j84gz228_kcBsvRATT1Ixs9bnuaN9CDNz20c524llDt10C3cc8wLGMin4jWEMF4RNrf2oBZOFAahRYSJNeBmutIwRSIP1pMIAaUy_IkMCyOwK8JzgMnHJGLwIH_nxR9XZXlAN0FmrmtWVkRA2YUKvoDX5a5BCYmDVNqUbi_ZNuRPJH87Ia7_-UoyJu8Yq79jX0Qgsm6qJ4rX2nauneg"}`), + UserContent: &entitys.RecognizeUserContent{Text: "订单查询:864086822064234497\n"}, }) - t.Log(err) + if err != nil { + t.Log(err) + } + var res strings.Builder + for v := range ch { + res.WriteString(v.Content) + } + t.Log(res) + } diff --git a/internal/tools/zltx/zltx_order_detail.go b/internal/tools/zltx/zltx_order_detail.go index 47574a3..8ad1001 100644 --- a/internal/tools/zltx/zltx_order_detail.go +++ b/internal/tools/zltx/zltx_order_detail.go @@ -84,8 +84,8 @@ type ZltxOrderDetailData struct { // Execute 执行直连天下订单详情查询 func (w *ZltxOrderDetailTool) Execute(ctx context.Context, rec *entitys.Recognize) error { - var req ZltxOrderDetailRequest - if err := json.Unmarshal([]byte(rec.Match.Parameters), &req); err != nil { + var req = &ZltxOrderDetailRequest{} + if err := req.UnmarshalJSON([]byte(rec.Match.Parameters)); err != nil { return fmt.Errorf("invalid zltxOrderDetail request: %w", err) } if req.OrderNumber == "" { @@ -96,6 +96,22 @@ func (w *ZltxOrderDetailTool) Execute(ctx context.Context, rec *entitys.Recogniz return w.getZltxOrderDetail(rec, req.OrderNumber) } +func (r *ZltxOrderDetailRequest) UnmarshalJSON(data []byte) error { + var tmp struct { + OrderNumber json.Number `json:"order_number"` // 使用 json.Number 保留原始格式 + } + if err := json.Unmarshal(data, &tmp); err != nil { + return err + } + // 根据需要转换为 int64 或 string + if num, err := tmp.OrderNumber.Int64(); err == nil { + r.OrderNumber = num + } else { + r.OrderNumber = tmp.OrderNumber.String() + } + return nil +} + // getMockZltxOrderDetail 获取模拟直连天下订单详情数据 func (w *ZltxOrderDetailTool) getZltxOrderDetail(rec *entitys.Recognize, number interface{}) (err error) { log.Infof("订单编号:%v,类型:%v") @@ -170,8 +186,13 @@ func (w *ZltxOrderDetailTool) getZltxOrderDetail(rec *entitys.Recognize, number err = w.llm.ChatStream(context.TODO(), rec.Ch, []api.Message{ { - Role: "system", - Content: "你是一个订单日志助手。用户可能会提供订单日志,你需要分析订单日志,失败订单->分析失败原因,成功订单->找出整个日志的 Base64 编码的 JSON 数据的内容进行转换并反馈给我", + Role: "system", + Content: "你是一个订单日志助手。用户可能会提供订单日志,你需要按以下规则处理:\n" + + "1. **先输出结论**:用标签包裹关键结论(如失败原因或Base64解码内容);\n" + + "2. **再输出分析过程**:详细解释如何得出结论;\n" + + "3. **订单类型处理**:\n" + + " - 失败订单:分析失败原因(如支付超时、库存不足等);\n" + + " - 成功订单:提取日志中的Base64编码JSON数据,解码后转换为用户可读的格式(如表格或JSON)。", }, { Role: "assistant",