更新各项内容
This commit is contained in:
@@ -240,7 +240,7 @@ func (c *BackendAiSmartGenerateController) GenerateCompany() {
|
||||
}
|
||||
|
||||
// 调用AI(非流式,含已启用 MCP 工具:AI 会先调用天眼查等工具获取真实数据再生成)
|
||||
reply, err := runToolLoop(claims, provider, useModel, "", messages)
|
||||
reply, usage, err := runToolLoop(claims, provider, useModel, "", messages)
|
||||
if err != nil {
|
||||
c.sgJsonErr(500, 500, "AI生成失败: "+err.Error())
|
||||
return
|
||||
@@ -269,12 +269,16 @@ func (c *BackendAiSmartGenerateController) GenerateCompany() {
|
||||
"error": "AI返回格式异常,无法解析JSON",
|
||||
"name": p.CompanyName,
|
||||
"type": p.Type,
|
||||
"model": usage.Model,
|
||||
"tools": usage.Tools,
|
||||
"tool_count": usage.ToolCount,
|
||||
"rounds": usage.Rounds,
|
||||
"generate_time": time.Now().Format("2006-01-02 15:04:05"),
|
||||
})
|
||||
return
|
||||
}
|
||||
// KV兜底成功,继续走后面的结果组装
|
||||
c.sgOk(smartGenResult(reply, result, p.CompanyName, p.Type, nameField))
|
||||
c.sgOk(smartGenResult(reply, result, p.CompanyName, p.Type, nameField, usage))
|
||||
return
|
||||
}
|
||||
|
||||
@@ -285,17 +289,31 @@ func (c *BackendAiSmartGenerateController) GenerateCompany() {
|
||||
"error": fmt.Sprintf("解析JSON失败: %v", err),
|
||||
"name": p.CompanyName,
|
||||
"type": p.Type,
|
||||
"model": usage.Model,
|
||||
"tools": usage.Tools,
|
||||
"tool_count": usage.ToolCount,
|
||||
"rounds": usage.Rounds,
|
||||
"generate_time": time.Now().Format("2006-01-02 15:04:05"),
|
||||
})
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
c.sgOk(smartGenResult(reply, result, p.CompanyName, p.Type, nameField))
|
||||
c.sgOk(smartGenResult(reply, result, p.CompanyName, p.Type, nameField, usage))
|
||||
}
|
||||
|
||||
// aiGenNotFound 判断 AI 回复是否明确表示未查到企业信息(MCP 工具查询无结果)
|
||||
func aiGenNotFound(raw string) bool {
|
||||
for _, kw := range []string{"未找到", "未匹配", "查无", "未查询到", "未检索到", "no matching", "not found"} {
|
||||
if strings.Contains(raw, kw) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// smartGenResult 组装智能生成成功响应(含完整AI回复 raw),并对表单受限字段做规整
|
||||
func smartGenResult(reply string, result map[string]interface{}, companyName, genType, nameField string) map[string]interface{} {
|
||||
func smartGenResult(reply string, result map[string]interface{}, companyName, genType, nameField string, usage *aiToolUsage) map[string]interface{} {
|
||||
// 确保公司名称字段存在
|
||||
if _, ok := result[nameField]; !ok || result[nameField] == "" {
|
||||
result[nameField] = companyName
|
||||
@@ -317,10 +335,15 @@ func smartGenResult(reply string, result map[string]interface{}, companyName, ge
|
||||
crossFillPhone(result, "contact_phone", "registered_phone")
|
||||
return map[string]interface{}{
|
||||
"parsed": true,
|
||||
"found": !aiGenNotFound(reply), // MCP 是否查到企业信息
|
||||
"data": result,
|
||||
"raw": reply, // AI完整回复(含企业画像markdown,供前端"AI响应数据"展示)
|
||||
"name": companyName,
|
||||
"type": genType,
|
||||
"model": usage.Model, // 实际使用的模型
|
||||
"tools": usage.Tools, // 实际调用的 MCP 工具(server + tool)
|
||||
"tool_count": usage.ToolCount,
|
||||
"rounds": usage.Rounds,
|
||||
"generate_time": time.Now().Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user