Open domain Q&A
open-domain question answering prompt example
开放域问答是指让 AI 仅依靠其预训练知识(即“大脑”里记下的东西)来回答问题,而不提供额外的文档或上下文。
这就像是让一个博学多才的学者参加“百科全书问答比赛”。
核心挑战:知识截止与幻觉
在进行开放域问答时,你必须时刻警惕两个风险:
- 知识截止 (Knowledge Cutoff):AI 的记忆停留在训练结束的那一天。问它“今天东京的天气”或“最新的奥运冠军”,它答不上来。
- 幻觉 (Hallucination):当被问到它不知道的细节时,AI 倾向于自信地胡编乱造(一本正经地胡说八道)。
❌ 错误的示范 (Bad Prompt)
User: 告诉我关于量子力学的一切。
后果:话题太大,AI 会输出一大堆泛泛而谈的废话,或者随机挑选几个知识点展开,无法满足用户具体需求。
✅ 进阶技巧:设定边界与拒绝机制
为了让开放域问答更可靠,我们需要在 Prompt 中显式植入“拒绝机制”。
优化后的 Prompt 模板
你是一个诚实、博学的 AI 助手。请回答用户的问题。
重要规则:
1. **诚实原则**:如果你不知道答案,或者不确定(例如涉及最新的实时信息),请直接回答 "我不知道" 或 "无论是我的知识库中没有相关信息",**绝对不要编造**。
2. **知识截止**:请留意你的知识截止日期。对于显然发生在截止日期之后的新闻(如 2026 年的事件),请明确告知用户你无法回答。
3. **风格**:回答要简洁明了,适合普通大众阅读。
用户问题:
{user_question}
实战演练:不同类型的测试
我们可以用不同类型的问题来测试 AI 的边界:
1. 通用常识 (General Knowledge)
Q: "太阳系中最大的行星是哪一颗?"
预期 A: 木星。 (这是 AI 最擅长的,通常准确无误)
2. 实时信息 (Real-time Info) - 高风险
Q: "昨晚的超级碗决赛谁赢了?"
预期 A: "我不知道/无法回答。" (除非该模型联网,否则纯离线模型必须拒绝回答,如果它编造了一个队伍,那就是严重的幻觉)
3. 冷门/虚构知识 (Obscure/Fake Facts) - 幻觉陷阱
Q: "请介绍一下 18 世纪著名的'火星殖民计划'的领导人。"
预期 A: "历史上 18 世纪并没有火星殖民计划。" (如果 AI 开始编造领导人名字,说明它通过不了测试)
迭代建议 (How to Iterate)
- 增加置信度评分:要求 AI 在回答后附上
Confidence Score: (0-100%)。如果低于 80%,建议人工复核。 - 思维链 (CoT):对于复杂问题,让 AI 先打印
Thinking Process,再给出Answer。这能显著减少逻辑错误。 - 联网插件:对于“实时信息”类问题,开放域问答通常无解。唯一的解法是接入 Search Tool (Google/Bing),将任务转化为 RAG。
代码示例 (Python / OpenAI)
from openai import OpenAI
client = OpenAI()
system_prompt = """
You are a helpful and honest AI assistant.
If you do not know the answer to a question, or if it requires real-time information you don't have, say "I don't know".
Do not make up facts.
"""
user_question = "Can I get McDonald's at the SeaTac airport?"
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_question}
],
temperature=0.7, # 稍微保留一点创造力,但不要太高
max_tokens=300
)
print(response.choices[0].message.content)