Self-Ask

prompt提示词2026年6月7日3

Self-Ask(Press et al., 2022)的核心是让模型把“直接回答”改成一个更稳的流程:先判断是否需要补充信息/分解问题 → 生成后续子问题 → 逐个回答子问题 → 汇总回答原问题。它本质上是一种“显式问题分解(question decomposition)”与“自我提问(self-query)”的提示框架,常用于提升多跳推理与复杂问答的可靠性。

在原论文与后续实践中,Self-Ask 还经常与外部工具结合(例如搜索引擎/知识库),即 Self-Ask + Search:模型先提出需要查证的子问题,再去检索回答这些子问题,最后综合。


1) Self-Ask 适用场景

特别适合:

  • 多跳问题:需要先求 A 再求 B(人物关系、时间线、组合条件)。
  • 事实查证:需要先确认某个事实再推导结论(适合接搜索/RAG)。
  • 复杂决策/方案:需要先澄清需求、约束、资源,再输出方案。
  • 用户问题信息不足:模型先提出澄清问题,比直接瞎答更好。

不太适合(或要加约束):

  • 强结构化输出(纯 JSON):需要把“自问自答”隐藏到内部,或分阶段输出。
  • 对延迟极敏感的场景:Self-Ask 可能增加步骤与 token。

2) 标准流程(你可以这样理解)

Self-Ask 通常包含 4 个阶段:

  1. Need follow-up?:判断是否需要后续问题
  2. Generate follow-up questions:生成子问题(通常 2-5 个)
  3. Answer follow-ups:回答子问题(必要时调用检索/工具)
  4. Final answer:综合子问题答案,回答原问题

什么是Follow-up questions

“Follow-up questions”(后续问题/追问)指的是在你已经提出并得到初步回答之后,为了把事情问得更清楚、更具体或继续深入而提出的补充问题。

常见目的:
- **澄清**:把不明确的地方问清楚  
  例:你说“可以优化性能”,那具体指哪些优化点?
- **补充信息**:把缺失的关键信息补上  
  例:如果是在手机端和电脑端表现不一样,该怎么处理?
- **深入细节**:从概念进入可操作步骤  
  例:能给一个具体的实现步骤或代码示例吗?
- **验证理解/确认结论**:确认自己理解对不对  
  例:所以你的意思是先做A,再做B,对吗?
- **延伸到相关问题**:从当前话题自然扩展  
  例:除了这种方案,还有没有更简单/更便宜的替代方案?

一句话:**Follow-up questions 就是基于已有对话的“继续追问”,让答案更准确、更完整或更深入。**

3) Prompt 模板(可复制)

模板 A:纯提示词版(不接工具)

适合:知识主要在模型内部、或是逻辑分解类任务。

你将使用 Self-Ask 方式回答问题。
步骤:

  1. 判断是否需要后续问题(Need follow-up: Yes/No)。
  2. 如果需要,提出 2-5 个后续问题(Follow-up questions)。
  3. 逐个回答这些后续问题(Answers)。
  4. 最后基于上述回答,给出原问题的最终答案(Final)。

原问题:{question}

模板 B:Self-Ask + 检索/RAG(工程最常用)

适合:事实型、多跳、需要可验证来源。

你将使用 Self-Ask 方式,并且你可以调用检索工具来回答后续问题。

  • 先输出:Need follow-up: Yes/No
  • 若 Yes:列出 Follow-up questions(每个应当是可检索、可验证的)
  • 对每个问题:先检索,再基于检索结果回答
  • 最后综合为 Final answer,并标注引用/依据来自哪些检索片段

原问题:{question}

(如果你有特定工具接口,可以把“检索”替换成 search(query) 或你的 RAG 函数。)

模板 C:面向产品的结构化输出(便于控制)

输出 JSON:
{
"need_follow_up": true/false,
"follow_up_questions": ["..."],
"follow_up_answers": ["..."],
"final_answer": "..."
}


4) 应用场景例子 1:多跳事实问题(经典用法)

原问题:

《哈利·波特》的作者出生在哪个国家的哪个城市?

Self-Ask 会分解成:

  • Follow-up 1:哈利·波特作者是谁?(J.K. Rowling)
  • Follow-up 2:J.K. Rowling 出生城市和国家是什么?(例如:英国,Yate/约特——具体需查证)
  • Final:综合给出国家+城市
    如果接搜索/维基/RAG,这类问题准确率会明显高于“一步到位凭记忆”。

5) 应用场景例子 2:方案类问题(先澄清再设计)

原问题:

帮我设计一个公司内部知识库的检索系统。

Self-Ask 的后续问题可能是:

  • 你的知识源有哪些(Wiki、PDF、工单、代码)?
  • 需要哪些权限模型(部门/角色/项目)?
  • 主要查询类型(FAQ、排障、政策)?
  • 预算与延迟要求?
  • 是否需要可追溯引用?

然后模型再给出架构:采集→切分→向量/倒排→重排→权限过滤→评测→监控。


6) 应用场景例子 3:数学/逻辑分解(不一定要检索)

原问题:

一个商店打八折后再减 20 元,原价 200 的商品现在多少钱?

Self-Ask 子问题:

  • 先算八折后的价格是多少?(200×0.8=160)
  • 再减 20 元得到多少?(140) Final:140 元
    这里 Self-Ask 的价值在于强制“分步”,降低跳步算错。

7) 与相近方法的区别(避免混淆)

  • Self-Ask vs CoT(Chain-of-Thought):
    CoT 是“直接展开推理步骤”;Self-Ask 是“先提出子问题再回答”,更像显式分治,且更适合接检索。
  • Self-Ask vs RaR:
    RaR 是“把原问题改写得更清楚再答”;Self-Ask 是“把问题拆成多个可回答子问题再综合”。
  • Self-Ask vs S2A:
    S2A 主要“去除无关信息/注入”,Self-Ask 主要“分解并补齐信息”。

如果你告诉我:你打算把 Self-Ask 用在 纯对话 还是 RAG/搜索问答,以及你希望输出是“给用户看见的自问自答”还是“内部进行、只给最终答案”,我可以给你一份更贴近你系统的 Prompt 模板(包含字段、最大子问题数、何时必须提问澄清、以及如何把每个子问题变成检索 query)。