diff --git a/prompts.py b/prompts.py index 962f533..09f75a0 100644 --- a/prompts.py +++ b/prompts.py @@ -440,21 +440,35 @@ BAIKE_PROMPTS = { # 输入变量: last_user_query, history_str, original_query # ------------------------------------------------------------------ "rewrite_query_with_history": ( - "你是一个专业的检索query重写助手,负责根据对话历史和当前用户问题,生成**适合向量检索/RAG 的单条查询语句**。\n" + "你是知识库问答系统的检索问题改写助手。请结合当前用户问题与必要的对话上下文,生成适合向量检索/RAG 的主查询和补充查询。\n" "\n" - "请严格遵守以下要求:\n" - "1. 只融合与当前问题语义强相关的**最近几轮对话信息**,不要机械拼接全部历史。\n" - "2. 消除指代和省略(例如:这个、刚才那个问题、上面说的故障等),补全成自洽、完整的描述。\n" - "3. 不要加入与用户问题无关的背景信息,不要过度扩展检索范围。\n" - "4. 输出必须是一句自然的中文问句或陈述句,便于检索;不要包含条目符号、编号或解释性文字。\n" - "5. 只输出改写后的query本身:\n" - " - 不要输出说明文字\n" - " - 不要包含「改写结果:」「检索query:」等前缀\n" - " - 不要添加引号\n" + "第一步:补全当前问题\n" + "1. 以【当前用户问题】表达的意图为最高优先级。只有当前问题存在指代、省略或承接关系时,才使用历史补全;如果当前问题已经完整独立,不要强行融入历史。\n" + "2. 需要补全时,优先参考【上一轮用户问题】,再从最近的相关对话中确认对象、设备、故障、操作、时间或其他必要限定;忽略与当前意图无关的历史。\n" + "3. 将“这个”“它”“上述问题”“刚才的故障”等指代替换为明确对象,使主查询脱离对话也能独立理解。\n" + "4. 保留用户原意和关键术语,不虚构历史中没有的信息,不回答问题,不添加检索范围之外的背景。\n" "\n" - "【特别提示】\n" - "- 请优先参考**上一轮用户的问题**来重写本轮query。\n" - "- 上一轮用户的问题是:{last_user_query}\n" + "第二步:判断是否需要拆分\n" + "1. 单知识点查询:问题只涉及一个主题下的一个明确检索意图。不要拆分,rewrite_query 输出补全后的问题,search_queries 返回空数组。\n" + "2. 单主题多知识点查询:问题围绕同一对象明确询问多个方面时,按知识点拆分为可独立检索的问题。\n" + "3. 多主题多知识点查询:问题涉及多个对象、文档或主题时,优先按主题拆分;比较类问题应分别检索各主题的对应信息,完整比较问题由 rewrite_query 保留。\n" + "4. 不要仅因一句话较长就判定为多知识点,也不要把一个简单问题机械拆成同义句。\n" + "\n" + "第三步:生成检索查询\n" + "1. rewrite_query 必须保留用户的完整检索意图,是一句简洁、自然、自洽的中文问句或陈述句。\n" + "2. search_queries 只放拆分后的代表性子问题,最多2条;每条聚焦一个明确知识点,并包含必要的主题或对象名称。\n" + "3. 主查询与补充查询合计最多3条。不要偏离原主题,不要臆造用户未询问的知识点,也不要输出答案。\n" + "4. 所有查询均不得包含“改写结果”“检索query”等前缀、条目编号、解释文字或多余引号。\n" + "\n" + "示例:\n" + "当前问题:某设备A的工作原理是什么?\n" + "输出:{{\"rewrite_query\":\"某设备A的工作原理是什么?\",\"search_queries\":[]}}\n" + "\n" + "当前问题:发动机和螺旋桨的工作原理有什么区别?\n" + "输出:{{\"rewrite_query\":\"发动机和螺旋桨的工作原理有什么区别?\",\"search_queries\":[\"发动机的工作原理是什么?\",\"螺旋桨的工作原理是什么?\"]}}\n" + "\n" + "【上一轮用户问题】\n" + "{last_user_query}\n" "\n" "【对话历史(JSON 格式,已按时间排序)】\n" "{history_str}\n" @@ -462,7 +476,8 @@ BAIKE_PROMPTS = { "【当前用户问题】\n" "{original_query}\n" "\n" - "请给出最终用于检索的单条中文query。" + "只输出一个合法的 JSON 对象,不要输出 Markdown 代码块或任何解释。格式如下:\n" + "{{\"rewrite_query\":\"最终主查询\",\"search_queries\":[\"补充查询1\",\"补充查询2\"]}}" ), # ------------------------------------------------------------------