Q&A prompts
question answering prompts(overview)
问答 (QA) 是 LLM 最基础也最核心的能力之一。从通用百科问答,到企业内部知识库助手,QA 系统贯穿了 AI 应用的主流程。
本章的核心目标:让 AI 在可控范围内回答,能引用证据,信息不足时知道拒答。
学习路径(建议顺序)
- 入门:写出“问题 + 输出格式”的最小 QA Prompt
- 进阶:加入引用与“不知道”规则
- 实战:将问题限定在给定文档范围内(RAG/Closed QA)
两大核心场景
1. 开放域问答 (Open-Domain QA)
- 定义:利用模型预训练知识回答问题
- 场景:百科问答、通用助手、闲聊机器人
- 挑战:知识时效性与幻觉
2. 封闭域问答 (Closed-Domain QA / RAG)
- 定义:仅基于提供的上下文回答问题
- 场景:企业知识库、合同审查、客服
- 挑战:让模型“只说文档里有的”
业务产出(PM 视角)
使用 QA Prompt 可以交付:
- 可上线的最小问答功能(FAQ/知识库)
- 结构化回答模板(可解析、可复核)
- 可追溯答复(带引用与来源编号)
完成标准(建议):
- 读完本页 + 完成 1 个练习 + 自检 1 次
核心 Prompt 结构
目标:回答问题
范围:是否限制在给定文档
格式:输出结构(结论/依据/引用)
输入:问题 + 文档(可选)
通用模板(开放域)
请回答以下问题,输出简洁结论。
问题:
{question}
输出格式:
- 答案:
- 关键点(1-3 条):
通用模板(封闭域)
你是企业知识库助手,仅能使用提供的文档回答。
文档:
{context}
问题:
{question}
要求:
1) 只能引用文档内容
2) 若文档无答案,输出“信息不足,无法回答”
3) 输出包含引用编号
输出格式:
- 答案:
- 引用:
Quick Start:开放域 QA
问题:为什么天空是蓝色?
输出格式:
- 答案:
- 关键点(1-3 条):
示例 1:开放域问答
问题:光合作用的核心反应是什么?
输出格式:
- 答案:
- 关键点(1-3 条):
示例 2:封闭域问答(带引用)
文档:
[Doc 1] 产品保修期为 24 个月,仅覆盖非人为损坏。
[Doc 2] 电池属于易耗品,保修期为 6 个月。
问题:电池用了一年坏了,能保修吗?
要求:只用文档回答,每句话带 [Doc] 引用。
示例 3:歧义问题澄清
问题:能不能退?
要求:如果问题不清晰,先提出澄清问题,再给出“默认假设版”答案。
迁移模板(替换变量即可复用)
问题:{question}
文档:{context}
输出:答案 + 引用编号 + 关键信息
自检清单(提交前自查)
- 是否明确了回答范围(开放/封闭)?
- 是否要求“信息不足就拒答”?
- 引用是否可追溯?
- 输出格式是否稳定?
技巧与最佳实践
-
“I don't know” 规则
明确写入:无答案 → “信息不足,无法回答”。 -
引用来源
强制引用文档编号,便于复核。 -
处理歧义
要求先反问澄清,再回答。 -
结构化输出
用列表/表格组织答案,提升可读性。 -
参数设置
QA 任务建议temperature=0~0.3提高一致性。
常见问题与解决方案
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 回答过度发挥 | 未限制范围 | 明确“只用文档” |
| 无法追溯 | 没有引用 | 强制引用编号 |
| 逻辑混乱 | 输出无格式 | 固定输出字段 |
| 不拒答 | 规则缺失 | 加“信息不足”兜底 |
API 调用示例
Python (OpenAI)
from openai import OpenAI
client = OpenAI()
def closed_qa(context: str, question: str) -> str:
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{
"role": "system",
"content": "你是知识库助手,只能使用提供的文档回答。"
},
{
"role": "user",
"content": f"""文档:\n{context}\n\n问题:{question}\n\n要求:\n- 仅使用文档\n- 无答案则返回“信息不足,无法回答”\n- 输出包含引用编号"""
}
],
temperature=0,
max_tokens=300
)
return response.choices[0].message.content.strip()
Python (Claude)
import anthropic
client = anthropic.Anthropic()
def closed_qa(context: str, question: str) -> str:
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=300,
messages=[
{
"role": "user",
"content": f"""你是知识库助手,只能使用文档回答。
文档:{context}
问题:{question}
要求:无答案则返回“信息不足,无法回答”,输出包含引用编号。"""
}
]
)
return message.content[0].text.strip()
动手练习
练习 1:开放域
问题:为什么月球会有潮汐锁定?
输出格式:答案 + 关键点(1-3 条)
练习 2:封闭域
文档:
[Doc 1] 课程 A 时长为 12 周,包含 8 次直播课。
[Doc 2] 课程 A 提供 1 次免费补课机会。
问题:课程 A 有几次直播课?能补课吗?
练习评分标准(学生自评)
| 维度 | 合格标准 |
|---|---|
| 范围明确 | 清楚说明开放或封闭 |
| 引用正确 | 引用编号一致 |
| 拒答规则 | 信息不足时拒答 |
| 格式稳定 | 输出字段一致 |
相关阅读
小结
- QA 需要明确“开放/封闭”范围。
- 引用与拒答机制是可信 QA 的基础。
- 固定输出格式便于工程落地。
- 低温度提升一致性。
- 用模板快速复用到不同业务场景。