P
Prompt Master
Prompt Engineering 教程与提示词实战

从任务定义、示例和工作流到评测与安全边界

Prompt Engineering Tutorial and Prompt PracticePrompt Library

Open Domain Q&A

Open-domain question answering prompt example

CHAPTER PROMPT DECISION
01Prompt problem

Open-domain question answering prompt example

02Reviewable output

A reusable prompt, example set, evaluation record or safety rule with its task boundary preserved.

03Definition of done

Run at least one representative case, inspect the result and record what still requires human review.

Open-domain QA means having the AI answer questions using only its pre-trained knowledge -- the stuff it memorized during training -- without any extra documents or context.

It's like sending an extremely well-read scholar to a "trivia night" competition.

Core Challenge: Knowledge Cutoff & Hallucination

When doing open-domain QA, you need to watch out for two risks:

  1. Knowledge Cutoff: The AI's memory stops at the date training ended. Ask it "what's the weather in Tokyo today" or "who won the latest Olympics," and it can't answer.
  2. Hallucination: When asked about details it doesn't know, the AI tends to confidently make things up. Sounds authoritative, says nonsense.

Bad Prompt Example

User: Tell me everything about quantum mechanics.

Result: The topic is way too broad. The AI will dump a wall of vague generalizations or randomly pick a few concepts to elaborate on. Won't meet any specific need.


Better Approach: Set Boundaries and a Refusal Mechanism

To make open-domain QA more reliable, we need to explicitly plant a "refusal mechanism" in the prompt.

Improved Prompt Template

You are an honest, knowledgeable AI assistant. Answer the user's question.

Important rules:

1. **Honesty principle**: If you don't know the answer, or you're unsure (e.g., involving the latest real-time info), just say "I don't know" or "My knowledge base doesn't have that information." **Never fabricate.**
2. **Knowledge cutoff**: Be aware of your knowledge cutoff date. For news that clearly happened after the cutoff (like events in 2026), explicitly tell the user you can't answer.
3. **Style**: Keep answers concise and accessible for a general audience.

User question:
{user_question}

Hands-on: Testing Different Question Types

We can test the AI's boundaries with different kinds of questions:

1. General Knowledge

Q: "What is the largest planet in the solar system?"

Expected A: Jupiter. (This is the AI's sweet spot -- usually accurate.)

2. Real-time Information - High Risk

Q: "Who won last night's Super Bowl?"

Expected A: "I don't know / I can't answer." (Unless the model has internet access, a pure offline model must refuse. If it makes up a team name, that's a serious hallucination.)

3. Obscure / Fake Facts - Hallucination Trap

Q: "Tell me about the leader of the famous 'Mars Colonization Program' in the 18th century."

Expected A: "There was no Mars Colonization Program in the 18th century." (If the AI starts inventing leader names, it fails the test.)


Iteration Tips

  1. Add confidence scores: Ask the AI to append a Confidence Score: (0-100%) after its answer. If it's below 80%, flag for human review.
  2. Chain-of-Thought (CoT): For complex questions, have the AI print a Thinking Process first, then give the Answer. This significantly reduces logical errors.
  3. Search plugins: For "real-time information" questions, open-domain QA usually can't help. The only real solution is connecting a Search Tool (Google/Bing) and turning it into RAG.

Code Example (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, # Keep a bit of creativity, but not too much
    max_tokens=300
)

print(response.choices[0].message.content)

📚 Related resources