from langchain_core.prompts import ChatPromptTemplate, PromptTemplate def get_prompt_template(prompt_type:str) -> ChatPromptTemplate: """返回 RAG 问答链的提示模板。""" rewrite_prompt = PromptTemplate( input_variables=["query"], template="""你是⼀个查询优化助⼿。请将⽤户的⼝语化问题改写为更适合信息检索的 精确查询。 改写要求: 1. 补充隐含的上下⽂信息 2. 将⼝语化表达转为专业表述 在 RAG 链路中集成 将查询重写作为检索前的预处理步骤: 3. 消除歧义,明确查询意图 4. 保持原意不变,不要添加原问题未提及的内容 5. 直接输出改写后的查询,不要解释 ⽤户问题: {query} 改写后的查询:""" ) decompose_prompt = PromptTemplate( input_variables=["question"], template="""你是⼀个问题分解助⼿。请将⽤户的复杂问题分解为 2-4 个独⽴的⼦问 题, 每个⼦问题应该能独⽴检索和回答。 要求: 1. ⼦问题之间互不依赖,可以并⾏检索 2. ⼦问题覆盖原始问题的所有⽅⾯ 3. 每个⼦问题简洁明确 4. 以 JSON 数组格式输出 ⽤户问题: {question} 输出格式示例: ["⼦问题1", "⼦问题2", "⼦问题3"] ⼦问题列表:""" ) clarify_prompt = PromptTemplate( input_variables=["query"], template="""你是⼀个智能客服助⼿。请判断⽤户的提问是否包含⾜够的信息来进⾏准 确检索和回答。 判断标准: 1. 问题是否有明确的主语(指代的对象是否清晰) 2. 问题是否包含必要的上下⽂(时间、地点、产品型号等) 3. 问题是否存在歧义(可能有多种理解⽅式) 请以 JSON 格式返回: - 如果问题清晰:{{"need_clarify": false, "reason": "问题清晰的原因"}} - 如果需要澄清:{{"need_clarify": true, "clarification": "向⽤户提出的澄清 问题", "assumption": "如果必须回答时的合理假设"}} ⽤户问题: {query} 结果:""" ) if prompt_type == "rewrite": return rewrite_prompt elif prompt_type == "decompose": return decompose_prompt elif prompt_type == "clarify": return clarify_prompt else: return (ChatPromptTemplate.from_messages( [ ( "system", "你是专业的汽车知识库助手。只能依据给出的上下文回答;" "上下文没有答案时,请直接说明“抱歉,我无法从知识库中回答这个问题”。", ), ("user", "上下文:\n{context}\n\n用户问题:{question}"), ] ))