«Галлюцинация» — это когда модель уверенно выдаёт то, чего нет или не может быть. Для твоего бота по СДВГ это критично: если бот «вспомнит» вчерашний разговор, которого не было, или придумает, что пользователь раньше говорил о дочке (а на самом деле её нет) — доверие рушится с одного раза. Особенно опасно, если бот начнёт ссылаться на несуществующие исследования или советы из «научной литературы».
По умолчанию модель считает, что её работа — ответить. Добавь в system prompt явное разрешение уклониться:
Если сомневаешься или не хватает информации — так и скажи:
«Я не уверена, можешь уточнить?». Не придумывай факты о
пользователе, которых нет в нашем разговоре.
Что здесь происходит: одной строчкой снимаешь давление «я должна что-то ответить». Модель начинает чаще переспрашивать вместо того, чтобы галлюцинировать.
Если в боте есть «память» о пользователе (заметки, прошлые сессии, цели) — передавай её в промпт явно, и требуй ссылаться только на эти данные:
Вот что мы знаем о пользователе (из базы):
<user_notes>
- Текущая цель: «выйти на бег 3 раза в неделю»
- Срыв последний: вторник (не лёг вовремя, потом весь день просидел)
- Любит: котов, читать ночью
</user_notes>
Отвечая, опирайся только на эти заметки. Если пользователь ссылается
на что-то, чего здесь нет, — переспроси.
Что здесь происходит: модель видит явный источник «правды»
и знает, что вне его — догадки. SQL ты уже умеешь: SQLite у тебя в
файле bot.db, достать заметки и подставить в промпт —
задача на 10 строк Python. Типа:
db.execute("SELECT text FROM user_notes WHERE user_id = ?", (uid,)).fetchall().
Если бот ссылается на «исследования про СДВГ», это почти всегда галлюцинация — он не гуглит, он вспоминает «что-то похожее». Лучше вовсе запретить такие ссылки:
Не ссылайся на конкретные исследования, авторов, названия книг.
Если нужно — говори обобщённо: «в литературе по СДВГ часто
рекомендуют…».
<user_notes>…</user_notes>.