Изоляция диалогов LangChain: тест на смешивание историй
Если бот отвечает одному пользователю фактами из разговора другого, сначала проверяйте идентификаторы сессий и хранилище истории. Общий объект памяти или одинаковый ключ могут смешивать контекст ещё до вызова модели.
Идентификатор потока нужен для выбора истории, но сам по себе не проверяет право её читать. Приложение должно связывать поток с владельцем и проверять эту связь на сервере при каждом обращении.
Тест с двумя вымышленными аккаунтами
- Аккаунт A сообщает: «Мой тестовый код — сосна-17».
- Аккаунт B сообщает: «Мой тестовый код — кедр-42».
- Оба по очереди спрашивают: «Какой мой код?».
- Запросы отправляются в перемешанном порядке, затем после перезапуска сервиса.
A должен получить только свой код, B — только свой. Тестовые значения специально вымышленные: для проверки изоляции не нужны реальные личные сведения. Успех одной последовательной пары запросов недостаточен, если рабочий сервис обслуживает несколько пользователей одновременно.
Проверьте границы ключа
Ключ вида «default» удобен в демонстрации и опасен как общий идентификатор для всех клиентов. Отдельные вкладки одного человека тоже могут представлять разные задачи. Сначала определите модель: одна история на аккаунт, на проект или на отдельный разговор.
Не принимайте переданный клиентом thread_id как доказательство владения. В тесте пользователь B должен получить отказ при попытке обратиться к потоку A, даже если знает его идентификатор. Ошибка не должна показывать содержимое чужой истории.
Какие пути часто остаются непроверенными
Проверьте кнопку «начать заново», восстановление после обрыва, фоновые задачи и загрузку старой беседы. Бывает, основной чат изолирован, а восстановление ответа ищет результат только по номеру операции без владельца. Это отдельная граница доступа.
После выхода из аккаунта браузер не должен продолжать показывать чужую беседу из локального состояния. После серверного перезапуска история должна сохраняться или сбрасываться согласно контракту продукта. Потеря памяти и нарушение изоляции — разные дефекты, их нельзя скрывать одним общим сообщением об ошибке.
LangChain описывает хранение краткосрочного состояния по потокам. Политику владения, срок хранения и проверку доступа определяет ваше приложение. Зафиксируйте ожидаемое поведение до выбора конкретного backend хранилища.
Этот разбор подготовлен Latorn. Если вы уже знаете основы Python и API и хотите практиковать такие решения системно, сравните программу платного курса LangChain 1.0.x со своей задачей. Открытый пример выше можно проверить самостоятельно; он не заменяет полный проект.
Технические источники: LangChain short-term memory. Учебные ситуации и числа в статье придуманы для объяснения механизма.
Следующий шаг: LangChain: практические разборы формата, памяти и потоков. По смежным вопросам: LangChain вернул правильный JSON, но данные неверны: что проверять, Обрезка истории LangChain: как сохранить договорённости.
