问题改写提示词提升多跳问题的检索效果,用户输入部分放到提示词最后

在使用大模型处理多跳问题(multi-hop question)时,我们常常面临一个挑战:原始问题可能不够具体或缺乏关键实体信息,导致语义搜索系统难以准确检索到相关答案。为了解决这个问题,现在大家常使用问题改写,获取深层次的知识。下述是一套有效的问题改写提示词(prompt),专门用于“问题改写”阶段,帮助模型生成更清晰、更具实体导向的新问题。

这套提示词经过实际测试,效果不错。

实验效果

qwen-2.5-7B 作为问题改写的大模型。
在 hotpot 数据集上的测试,1000条数据构建向量数据库:

  • 直接使用用户问题在向量数据库中做召回TopK@10 hite_rate命中率 可以达到82%左右。
  • 使用问题改写后,TopK@10 + TopK@10 hite_rate命中率 可以达到91%左右。

其实 qwen-2.5-7B的问题改写能力不强,如果你不使用下述提示词,会发现很多问题改写都失败了,无法获得下一步的信息。但 一些强大的大模型比如 gpt-4o等大参数的模型表现很好。

使用下述问题改写的提示词达到的效果,可以与gpt-4o问题改写相媲美!

一、提示词设计思路详解

以下是我在项目中使用的提示词模板,专门用于引导大模型进行高质量的问题改写:

query_rewrite = """
You are given the following four elements:

1. **Original Question**
2. **Relevant Supporting Text(s)**

Your task is to **create a new, better question** that would help a semantic search system (like vector-based retrieval) find relevant information more accurately.

### 🔍 Follow These Clear Steps:

**Step 1: Understand the original question.**
Identify what the question is asking — focus on the key person, object, or event it refers to.

**Step 2: Extract the key detail from the supporting text.**
Look carefully at the relevant text and **find the most important new information** — especially **names**, dates, roles, or titles.
👉 **You must include this key information in the new question.**

**Step 3: Create a natural follow-up question.**
Now, think of a new question that:

* Focuses on the subject identified from the relevant text (e.g., a person).
* Moves the conversation toward what the original question was looking for (but in a clearer or more direct way).

**Step 4: Write the new question clearly and completely.**
Your final question must:

* **Include the key entity or name (e.g., a person) from the relevant text.**
* Be directly connected to the original topic.
* Make it easier for a search system to retrieve the right answer.

### 🚫 Do Not:

* Leave out key names or details that were introduced in the relevant text.
* Repeat the original question exactly.

### ✅ Example (Just for Reference - Do Not Copy):

If the original question was:

> "Which team does the quarterback picked first in the 2010 draft play for?"

And the relevant text tells us:

> "Sam Bradford was taken first in the 2010 draft."

Then your new question **must include 'Sam Bradford'** and could be something like:

> "Which NFL team did Sam Bradford play for during the early 2010s?"

### 🎯 Output Format:
1. A multi-step, logically coherent explanation showing your reasoning process.
2. A json block at the end containing the final inferred question.

{{
  "new_question": "Your clearly written, specific, entity-rich question goes here."
}}

### Input Format:
- Question: {user_question}
- Relevant Texts: {relevant_texts}
""".lstrip()

这个提示词的设计有几个关键点:

  1. 分步指导明确:从理解原问题、提取关键信息,到构造新问题,每一步都有清晰指引。
  2. 强调实体信息:要求必须包含从支持文本中提取的关键实体,如人名、地名等。
  3. 输出格式规范:以 JSON 格式返回结果,便于后续解析和集成到系统中。
  4. 示例辅助理解:通过一个具体例子帮助模型更好地理解任务目标。

二、为什么这个提示词如此有效?

根据我的实践观察,以下几点是该提示词成功的核心原因:

1. 实体抽取能力增强

多跳问题往往需要模型在多个文档之间跳跃推理,而原始问题通常模糊不清。通过要求模型从支持文本中提取关键实体(如人名、时间、地点等),可以显著提高问题的具体性。

例如,在“谁是2010年冠军?”这个问题中,如果支持文本指出“Sam Bradford 是 2010 年冠军”,那么新的问题就可以被改写为“Sam Bradford 效力于哪支 NFL 球队?”,这显然更容易被搜索引擎识别并定位答案,或者在向量数据库中检索。

2. 输出格式统一,利于自动化处理

在提示词中给了一个例子, 让大模型根据相关文本中的信息,完成原始问题中未知内容的替换

三、实战案例演示

我们来看一个具体的例子,感受一下这套提示词的实际效果:

原始问题
“《百年孤独》这本书的作者,还写过哪些书?”

相关文本
“加布里埃尔·加西亚·马尔克斯(Gabriel García Márquez)是哥伦比亚著名作家,他创作了《百年孤独》。”

按照提示词的步骤,模型会这样推理并生成新问题:

  1. 原问题询问的是《百年孤独》的作者,写过哪些书?
  2. 支持文本提供了关键信息:“Gabriel García Márquez 创作了这本书。”
  3. 新问题是:“Gabriel García Márquez 写过哪些著名小说?” 或者更精确地指向主题:“Gabriel García Márquez 的代表作是什么?”

这样改写后的问题不仅包含了关键实体,而且更适合搜索引擎检索,极大提高了找到正确答案的概率。


四、输入文本放到提示词最后

上述提示词是GPT生成的,GPT根据我的要求润色与修改提示词的能力特别强。国内相关的大模型,还是有差距。

我发现GPT在针对我的提示词润色、修改的过程中,频繁地把用户输入部分的文本放到最后。
一开始我没理解这样做的原因。

我认为,提示词先提到用户输入,再提到输出要求,更符合逻辑。

但是后面的实验经历告诉我,用户的输入部分的文本,非常推荐放到提示词的最后

本地模型在处理长文本时会启用截断机制(truncation),若输入部分的文本过长,那么提示词的输出要求部分就会被截断删除掉,模型就无法理解任务目标,从而出现无效输出甚至续写输入内容的情况。

因此,建议大家编写提示词时将 {user_question}{relevant_texts} 放在提示词末尾,确保该项任务的逻辑与输出要求不会被截断。

<think>好的,我现在需要处理用户问题用户想要一些关于“用户问题重写”的提示词样例。首先,我需要回顾之前的对话历史,看看用户之前问了什么,以及我之前的回答内容。 用户之前询问了关于大模型中的用户问题重写的介绍,我详细解释了定义、目的、技术原理、常见策略、应用场景以及挑战与限制。现在用户进一步要求提供具体的提示词样例,这说明他们可能希望在实际应用中使用这些提示词,比如在开发聊天机器人或优化现有的大模型交互系统时。 接下来,我需要确定用户的具体需求。用户可能需要这些样例来指导如何设计有效的提示词,以帮助模型更好地重写用户问题。可能的场景包括轮对话中的上下文补全、意图不明确的用户查询的澄清,或者将口语化的问题转化为结构化的格式。 接下来,我需要考虑如何组织这些提示词样例。应该涵盖不同的重写策略,比如意图明确化、上下文补全、结构规范化、轮对话处理、领域适配等。每个类别下给出几个例子,并解释每个提示词的作用和使用场景。 同时,需要注意用户可能需要的格式,比如是否需要分点列出,是否需要表格,或者是否需要具体的示例对比。根据之前的回复,用户可能更倾向于结构清晰的列表或表格,以及具体的例子说明。 还需要确保提示词样例的样性和实用性,覆盖不同的应用场景,比如通用对话、专业领域、语言处理等。每个样例应展示如何将原始问题转换为更清晰、更完整的问题,帮助模型更好地理解和处理。 此外,可能需要加入注意事项,比如提示词设计的灵活性、避免过度修改、结合具体业务需求调整等,以帮助用户在实际应用中避免常见问题最后,需要检查是否遗漏了用户可能的潜在需求,比如是否涉及技术细节、是否需要代码示例,但根据用户问题,他们可能只需要文本提示词,而不是具体的代码实现。因此,保持回答在提示词设计的层面,不涉及编程细节。 总结来说,我需要提供个类别的提示词样例,每个类别下有具体示例和解释,结构清晰,便于用户参考和应用。同时,加入使用建议和注意事项,确保回答全面且有帮助。</think>以下是用户问题重写的提示词设计样例及使用说明,涵盖常见场景与优化方向: --- ### 一、基础重写模板 | **场景** | **原始问题** | **提示词设计** | **重写结果** | |----------|--------------|----------------|--------------| | **意图明确化** | "这个方程怎么解?" | "将以下问题转换为包含具体方程样例的完整数学提问:{用户输入}" | "请演示如何解二次方程 $2x^2 + 5x - 3 = 0$" | | **上下文补全** | "它有少员工?" | "补充公司名称和时间限定后重写:{用户输入}" | "截至2023年,OpenAI公司全球全职员工总数是少?" | | **结构规范化** | "我不懂相对论" | "将模糊陈述转为具体知识请求:{用户输入}" | "请用通俗语言解释狭义相对论中的时间膨胀效应" | --- ### 二、进阶策略模板 #### 1. **轮对话维护** **提示词**: ``` 基于对话历史补全问题: 历史:[用户:量子纠缠是什么?],[助手:量子纠缠是指...] 当前输入:"有什么实际应用?" 要求:将当前问题关联到历史话题 ``` **输出**: "量子纠缠现象在量子计算领域有哪些实际应用?" #### 2. **跨语言校准** **提示词**: ``` 将非母语表达转化为标准中文提问: 原句:"How calculate area of circle?" 要求:保留专业术语如 $A = \pi r^2$ ``` **输出**: "如何计算圆的面积?请说明公式 $A = \pi r^2$ 的推导方法" #### 3. **领域适配** **提示词**: ``` 将通用问题转为医学专业提问: 原句:"头疼该怎么办?" 要求:添加症状细节假设(持续时间/伴随症状) ``` **输出**: "如果患者出现持续3天以上的剧烈头痛并伴随视力模糊,应优先考虑哪些鉴别诊断?" --- ### 三、复合型提示词 **模板结构**: ``` 执行以下重写操作: 1. 纠错:[检测拼写/术语错误] 2. 补全:[添加缺失的时间/地点/领域限定] 3. 转换:[转为分步骤请求格式] 原始输入:"教我怎么证明勾股定理" ``` **输出**: "请用几何代数两种方法分步骤证明勾股定理 $a^2 + b^2 = c^2$,要求包含图示说明" --- ### 四、注意事项 1. **动态参数化** - 在提示词中预留变量插槽,如`{时间}`、`{领域}` - 例:"添加‘在{年份}’的时间限定后重写:{输入}" 2. **控制改写强度** - 通过强度参数防止过度修改: ``` 重写强度设置为70%(0=完全保留原句,100%=彻底重构) 输入:"Python咋读文件?" ``` 输出:"如何在Python中读取.txt文本文件?" 3. **模态扩展** - 关联数学公式/图表请求: ``` 将问题扩展为包含公式和绘图的请求: "解释三角函数周期性" ``` 输出:"请用公式 $\sin(x + 2\pi) = \sin x$ 配合波形图说明三角函数的周期性特征" --- 通过针对性设计提示词,可使重写过程更可控。实际应用中建议: - 通过AB测试验证不同提示词效果 - 对专业领域添加术语白名单(如强制保留$E=mc^2$等公式) - 结合用户画像动态调整语言风格(学术型/口语化)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jieshenai

为了遇见更好的文章

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值