fix: 优化提示词

This commit is contained in:
fuzhongyun 2026-02-04 17:27:35 +08:00
parent cfeaa6e201
commit 99865c2bc4
2 changed files with 13 additions and 11 deletions

View File

@ -185,7 +185,7 @@ func (d *DingTalkBotBiz) handleSingleChat(ctx context.Context, requireData *enti
if err != nil { if err != nil {
return err return err
} }
log.Debugf("系统&分类结果: %s - %s", resolveResult.Sys.SysName, resolveResult.IssueType.Name) log.Debugf("系统&分类结果: %s - %s,原因:%s", resolveResult.Sys.SysName, resolveResult.IssueType.Name, resolveResult.Classification.Reason)
// 4. 分类处理(后续考虑接各自的工作流/agent // 4. 分类处理(后续考虑接各自的工作流/agent
switch resolveResult.IssueType.Code { switch resolveResult.IssueType.Code {

View File

@ -98,20 +98,19 @@ func (r *Handle) RewriteQuery(ctx context.Context, history []model.AiBotChatHi,
return currentQuery, nil return currentQuery, nil
} }
var histStr strings.Builder histStr := strings.Builder{}
for _, h := range history { for _, h := range history {
role := "用户" if h.Role == "user" {
if h.Role != "user" { histStr.WriteString(fmt.Sprintf("%s:%s\n", h.CreateAt, h.Content))
role = "助手"
} }
histStr.WriteString(fmt.Sprintf("%s: %s\n", role, h.Content))
} }
systemPrompt := `你是一个搜索查询改写专家请结合用户的历史对话上下文将用户当前的输入改写为一个独立的语义完整的适合知识库检索的中文查询词 systemPrompt := `你是一个搜索查询改写专家请结合用户的历史对话上下文将用户当前的输入改写为一个独立的语义完整的适合知识库检索的中文查询词
要求 要求
1. 保持原意补全指代刚才那个问题 1. 当前输入最能反映用户的意图权重按照时间逆序依次减弱改写后的查询词应与当前输入的语义相关
2. 只返回改写后的查询词不要有任何解释 2. 保持原意补全指代刚才那个问题
3. 如果当前输入已经很完整直接返回原句` 3. 只返回改写后的查询词不要有任何解释
4. 如果当前输入已经很完整直接返回原句`
userPrompt := fmt.Sprintf("### 历史对话:\n%s\n### 当前输入:\n%s\n### 改写后的查询词:", histStr.String(), currentQuery) userPrompt := fmt.Sprintf("### 历史对话:\n%s\n### 当前输入:\n%s\n### 改写后的查询词:", histStr.String(), currentQuery)
@ -141,6 +140,7 @@ func (r *Handle) ClassifyIssueSystem(ctx context.Context, systems []string, user
- 当前输入明确提到系统 直接覆盖历史系统 - 当前输入明确提到系统 直接覆盖历史系统
- 当前输入未提系统但历史对话有 继承最近历史系统 - 当前输入未提系统但历史对话有 继承最近历史系统
- 当前输入和历史均未出现 "全局" - 当前输入和历史均未出现 "全局"
- 询问公司企业制度层面的问题 "全局"
2. 特殊规则 2. 特殊规则
- 如果当前输入仅包含系统名称CRM视为系统上下文补充仅更新 sys_name不做其他推断 - 如果当前输入仅包含系统名称CRM视为系统上下文补充仅更新 sys_name不做其他推断
@ -190,7 +190,7 @@ func (r *Handle) ClassifyIssueSystem(ctx context.Context, systems []string, user
// ClassifyIssueType 问题分类分析 // ClassifyIssueType 问题分类分析
func (r *Handle) ClassifyIssueType(ctx context.Context, issueTypes []string, systems []string, userInput string, userHist []model.AiBotChatHi) (*IssueClassification, error) { func (r *Handle) ClassifyIssueType(ctx context.Context, issueTypes []string, systems []string, userInput string, userHist []model.AiBotChatHi) (*IssueClassification, error) {
systemPrompt := fmt.Sprintf(`## 角色 systemPrompt := fmt.Sprintf(`## 角色
你是一个业务问题类型分析专家你的任务是基于多轮对话识别用户讨论的**问题类型issue_type_name**问题类型必须严格来自可用问题类型列表 [%s] 你是一个业务问题类型分析专家你的任务是基于多轮对话识别用户讨论的**问题类型issue_type_name**问题类型必须严格来自背景数据-可用问题类型列表
你不负责系统名称判断输出必须严格遵守 JSON 格式 你不负责系统名称判断输出必须严格遵守 JSON 格式
@ -200,12 +200,14 @@ func (r *Handle) ClassifyIssueType(ctx context.Context, issueTypes []string, sys
- 将当前输入与历史对话合并理解为完整问题演进 - 将当前输入与历史对话合并理解为完整问题演进
- 当前输入可能是补充条件追问修正或只给模块名/报错片段 - 当前输入可能是补充条件追问修正或只给模块名/报错片段
- 不要只看当前一句 - 不要只看当前一句
- 忽略历史中的系统名称相关
2. 问题类型判定逻辑 2. 问题类型判定逻辑
- 当前输入明确匹配列表中某个类型 使用该类型 - 当前输入明确匹配列表中某个类型 使用该类型
- 当前输入未明确但历史已有 继承历史类型 - 当前输入未明确但历史已有 继承历史类型
- 当前输入未匹配历史也没有 选择最接近的列表类型尽量匹配意图 - 当前输入未匹配历史也没有 选择最接近的列表类型尽量匹配意图
- 除非是闲聊你好在吗禁止返回空值 - 除非是闲聊你好在吗禁止返回空值
- 除非明确是需求否则禁止返回开发需求类型
3. 特殊规则 3. 特殊规则
- 当前输入只包含系统名/模块名/参数名 视为问题补充继承历史 issue_type_name - 当前输入只包含系统名/模块名/参数名 视为问题补充继承历史 issue_type_name
@ -220,7 +222,7 @@ func (r *Handle) ClassifyIssueType(ctx context.Context, issueTypes []string, sys
"issue_type_name": "问题类型名称", "issue_type_name": "问题类型名称",
"summary": "15字内问题标题", "summary": "15字内问题标题",
"reason": "说明问题类型是基于哪句话判断,或说明继承自历史,继承自哪条历史" "reason": "说明问题类型是基于哪句话判断,或说明继承自历史,继承自哪条历史"
}`, strings.Join(issueTypes, ", "), strings.Join(issueTypes, ", "), strings.Join(systems, ", ")) }`, strings.Join(issueTypes, ", "), strings.Join(systems, ", "))
historyStr := strings.Builder{} historyStr := strings.Builder{}
historyStr.WriteString("### 历史对话:\n") historyStr.WriteString("### 历史对话:\n")