Closed Domain Q&A
Closed-domain question answering prompt example
TL;DR
- The core of
Closed-domain Q&A: answers must be strictly limited to the given facts/context. No "freestyling." - The most common problem: the model fills in information that doesn't exist (
hallucination), especially in specialized domains (medical/legal/finance). - Production tip: enforce "use exclusively the information above," and pair it with
evaluation(cross-check every claim).
Background
The following prompt tests an LLM's capabilities to answer closed-domain questions which involves answering questions within a specific topic or domain.
Note: due to the challenging nature of the task, LLMs are likely to hallucinate when they have no knowledge regarding the question.
How to Apply
This example transfers directly to "rewrite/generate documents from given data" scenarios:
- Input is facts (bullet list / table / JSON)
- Output is a structured note (medical note, case summary, policy memo, etc.)
- Require "use only given information" to avoid speculative content
How to Iterate
- Define an explicit output template (sections + fields) to reduce the model's room to improvise
- Require citations: each output paragraph tags the corresponding fact line number/field name (if input can be numbered)
- Add
self-check: before output, list a "claims list," then cross-reference each claim against the input - Add "unknown policy": when information is missing, output "Unknown" or ask clarifying questions
Self-check Rubric
- Does the output contain specific information not in the input (diagnosis, BMI, complications, treatment recommendations, etc.)?
- Are facts and speculation mixed together? Can
assumptionsbe clearly labeled? - Does it follow "exclusively the information above"?
Practice
Exercise: use your own work materials for a closed-domain rewrite.
- Prepare a set of facts (10-20 items, ideally numbered)
- Have the model output a structured note
- Then use a
truthfulnessrubric for claim-by-claim review (can pair with/prompt-truthfulness-identify-hallucination)
Prompt
Patient's facts:
- 20 year old female
- with a history of anerxia nervosa and depression
- blood pressure 100/50, pulse 50, height 5'5''
- referred by her nutrionist but is in denial of her illness
- reports eating fine but is severely underweight
Please rewrite the data above into a medical note, using exclusively the information above.
Code / API
OpenAI (Python)
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4",
messages=[
{
"role": "user",
"content": "Patient's facts:\n- 20 year old female\n- with a history of anerxia nervosa and depression\n- blood pressure 100/50, pulse 50, height 5'5''\n- referred by her nutrionist but is in denial of her illness\n- reports eating fine but is severely underweight\n\nPlease rewrite the data above into a medical note, using exclusively the information above.",
}
],
temperature=1,
max_tokens=500,
top_p=1,
frequency_penalty=0,
presence_penalty=0,
)
Fireworks (Python)
import fireworks.client
fireworks.client.api_key = "<FIREWORKS_API_KEY>"
completion = fireworks.client.ChatCompletion.create(
model="accounts/fireworks/models/mixtral-8x7b-instruct",
messages=[
{
"role": "user",
"content": "Patient's facts:\n- 20 year old female\n- with a history of anerxia nervosa and depression\n- blood pressure 100/50, pulse 50, height 5'5''\n- referred by her nutrionist but is in denial of her illness\n- reports eating fine but is severely underweight\n\nPlease rewrite the data above into a medical note, using exclusively the information above.",
}
],
stop=["<|im_start|>", "<|im_end|>", "<|endoftext|>"],
stream=True,
n=1,
top_p=1,
top_k=40,
presence_penalty=0,
frequency_penalty=0,
prompt_truncate_len=1024,
context_length_exceeded_behavior="truncate",
temperature=0.9,
max_tokens=4000,
)