Skip to content
imarch.dev
Блогқа оралу
· 4 мин оқу

Бір кеште төрт баг

ai debugging claude code продукт

Таңертең ботқа екі жаңа құрал қостым - өтінім жинау және CV жіберу. Бәрі жұмыс істеді. Түске қарай шын мәнінде тексере бастадым және бір-біріне матрёшка сияқты кірігіп кеткен төрт багқа тап болдым.

Бір кеште төрт баг

Багтар тізбегі (әрқайсысы келесісін күшейтті)
Сессия жоғалуы
Тіл ауысуы
Email галлюцинациясы
Хат спамда

Баг 1: жоғалған сессиялар

Келуші CV сұрайды. Бот email сұрайды. Келуші мекенжайды жазады. Бот оны бірінші рет көргендей жауап береді.

Себебі - uvicorn-ның екі воркері. Әрқайсысы сессияларды өз жадында сақтайды. Бірінші сұрау 1-воркерге түседі, екіншісі 2-воркерге. 2-воркер сессия туралы ештеңе білмейді, жаңасын ашады.

Болды: 2 воркер
Сұрау 1 → Воркер 1 (сессия A)
Сұрау 2 → Воркер 2 (сессия ???)
Контекст жоғалды
Болды: 1 воркер
Сұрау 1 → Воркер 1 (сессия A)
Сұрау 2 → Воркер 1 (сессия A)
Контекст сақталды

CPU-bound жүктемелер үшін бірнеше воркердің мәні бар. Чатбот - таза I/O: Claude API жауабын күтеді, SMTP күтеді. Бір async-воркер жиырма бір мезгілдегі қосылымды еш қиындықсыз көтереді. Менің жағдайда екі воркер өнімділікті емес, баг санын екі еселеді.

Түзету - Dockerfile-дағы бір сан. --workers 2 орнына --workers 1 болды.

Баг 2: email тілді ауыстырады

Келуші қазақша жазады. Бот қазақша жауап береді. Келуші ilikosha@icloud.com деп тереді. Бот ағылшынша жауап бере бастайды.

Тіл детекторы хабарламадағы латын және кирилл таңбаларын санайды. Email-мекенжай - таза латын. Кирилл нөл. Детектор бұл ағылшынша деп шешіп, хабарламаға [Reply in English] тегін қояды.

Түзету - санау алдында мәтіннен email-мекенжайларды, URL-дарды және @хэндлдарды алып тастау. Бұлар табиғи тіл емес, есептеуге кірмеуі керек.

Баг 3: ойдан шығарылған email

Келуші: «түйіндемені жіберіңіз». Бот email сұраудың орнына жүйелік промпттан info@imarch.dev мекенжайын алып, құралды шақырады. Хат маған өзіме келеді.

Haiku 3 - кішкентай модель. Tool definition visitor_email міндетті дейді, бірақ диалогта email жоқ болса, модель тоқтамайды. Контексттен бірінші ұқсас мекенжайды алады. Ал жүйелік промптта үшеу бар.

Үш деңгейлі қорғаныс:

1. Tool description промпттан мекенжайларға тыйым салады
2. Жүйелік промпт: алдымен email сұра
3. Серверлік сақтандырғыш: email чат тарихында бар ма? Жоқ → бас тарту

Бір деңгей жеткіліксіз. Haiku әрқайсысын жеке-жеке айналып өтеді. Үшеуі бірге ұстайды. Бұл эшелондалған қорғаныс принципі - желі қауіпсіздігіндегі сол тәсіл: бірде-бір кедергі мінсіз емес, бірақ бірге бір-бірінің осал жерлерін жабады.

Баг 4: хаттар спамда

Өтінім хабарландырулары қалыпты келеді. CV хаттары спамға түседі. Бірнеше поштада.

Айырмашылық - өтінімдер менің доменіме кетеді (Cloudflare Email Routing), ал CV сыртқы поштаға жіберіледі (iCloud, Gmail). Сыртқы серверлер қатаңырақ.

Хаттың өзі спамға ұқсайды. Жіберуші - noreply@. Үлкен түймесі бар HTML-шаблон. Мәтін аз. Бейтарап тақырып «Ильяс Мустафин - CV». Алушы аты жоқ, жауап жазу мүмкіндігі жоқ.

Түзету - хатты қарапайым адамнан келген хатқа ұқсату:

Болды (спам)
From: noreply@imarch.dev
Subject: Ильяс Мустафин - CV
Body: HTML + үлкен түйме
Reply-To: жоқ
Болды (inbox)
From: Ilyas Mustafin <info@...>
Subject: Сұранысыңыз бойынша CV
Body: таза мәтін + қолтаңба
Reply-To: нақты пошта жәшігі

Сонымен бірге Resend (Amazon SES) доменнің SPF-жазбасына қосылды - жіберуші серверді авторизацияладым. SPF мен DKIM-сіз жаңа домендегі мінсіз жазылған хат та спамға түседі - пошта серверлері мазмұнға емес, қолтаңбаға сенеді.

Қорытынды

Төрт баг. Ешқайсысы жеке алғанда күрделі емес. Бірақ біріне-бірі үстемеленді: жоғалған сессия сақтандырғышты бұзды, бұзылған сақтандырғыш галлюцинацияны өткізіп жіберді, ойдан шығарылған хат спамға ұшты. Классикалық каскадтық ақау - әр келесі баг алдыңғысын жасырады, бір тесттік іске қосуда проблеманың түбін табу мүмкін емес.

Төрттің ішіндегі ең пайдалы түзету - кэшті тазалауға арналған admin-эндпоинт. Бұрын серверге SSH керек еді. Енді бір curl токенмен. Ұсақ нәрсе, бірақ бір кеште промптты бес рет өзгерткенде - жүйкені сақтайды.

Кештің басты сабағы: AI-чатбот - бұл “API қосып ұмыту” емес. Бұл күйі бар, тілдік логикасы бар, галлюцинация жасайтын моделі бар, нәтижені сүзгілейтін сыртқы сервистері бар жүйе. Әр қабат бұзылуы мүмкін, және ол үнсіз бұзылады - пайдаланушы “бот біртүрлі жауап береді” дегенде ғана білесіз.


Бот жұмыс істеп тұр. CV сұрап немесе өтінім қалдырып көріңіз - чат түймесі оң жақ төменгі бұрышта. Немесе бірдеңе сынса, тікелей жазыңыз.

Бөлісу:

Ұқсас мақалалар