The short answer
A language model predicts likely text, not true text. When it lacks the information to answer, it produces something plausible instead of stopping — that is hallucination. You cannot eliminate it, but you can make it rare and detectable by grounding answers in retrieved sources, constraining scope, and giving the model an explicit way to say it does not know.
What actually helps
Grounding with retrieval
Put the source passages in the prompt and instruct the model to answer only from them.
This converts a memory problem into a reading-comprehension problem, which models are far better at.
An explicit escape hatch
Instruct the model to answer "not found in the provided context" when the context does not cover the question.
Without this, the prompt implicitly demands an answer, so it invents one.
Narrow scope
A model answering about one product domain has far less room to drift than one answering about anything.
Citations
Requiring the model to point at the passage it used makes wrong answers visible to the user rather than silent.
What does not help as much as people think
Telling the model "do not hallucinate" in the prompt. It has no reliable self-knowledge of when it is wrong.
Raising the temperature to zero. It makes output deterministic, not correct.
Fine-tuning on your data, when the real problem is that the answer needs to be looked up rather than memorised.