fix: 优化提示词
This commit is contained in:
parent
cfeaa6e201
commit
99865c2bc4
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue