Обрезка истории LangChain: как сохранить договорённости
При сокращении истории диалога можно потерять не только старые слова, но и действующее условие задачи. Если пользователь изменил адрес доставки десять сообщений назад, простое сохранение последних реплик способно вернуть прежний адрес в следующий ответ.
Разделяйте текст разговора и подтверждённое состояние. История помогает понимать контекст, а структурированные поля фиксируют то, что приложение действительно должно помнить: выбранный объект, согласованные ограничения и незавершённые вопросы.
Проследите изменение одного условия
Учебный диалог: сначала человек выбирает самовывоз, затем просит доставку, потом уточняет этаж. В итоговом состоянии способ получения должен быть «доставка». Если summary содержит старый самовывоз, а последние сообщения упоминают только этаж, модель может связать их неправильно.
| Событие | Подтверждённое состояние |
|---|---|
| Выбран самовывоз | mode = pickup |
| Подтверждена доставка | mode = delivery |
| Уточнён этаж | mode = delivery, floor = 4 |
Изменение этажа не должно заново определять способ получения. Храните источник обновления и при необходимости время подтверждения. Сводка текста удобна для модели, но не должна становиться единственным источником критичного решения.
Что оставить в сокращённом контексте
Сохраняйте текущую цель, существенные ограничения, последнее подтверждённое состояние и нерешённые вопросы. Длинные промежуточные рассуждения и повторные описания обычно менее важны. Не вырезайте связанный результат инструмента так, чтобы оставшийся диалог нарушал требования выбранного API.
LangChain предоставляет способы управления краткосрочной памятью. Конкретная стратегия сокращения зависит от приложения и модели. Перед применением нового механизма проверьте текущую документацию и версии библиотек: структура сообщений и поддерживаемые операции могут различаться.
Проверка после сокращения
Создайте разговор с двумя изменениями одного условия, затем сократите историю. Попросите систему перечислить действующие условия без нового действия. Сверьте их с состоянием приложения. Повторите проверку, когда последнее сообщение двусмысленно и требует старого контекста.
Если сводка противоречит подтверждённому состоянию, исправляйте источник противоречия, а не заставляйте модель выбирать наугад. Для реального изменения заказа всё равно нужна отдельная проверка и точное подтверждение. Удачный пересказ разговора не равен разрешению совершить действие.
Этот разбор подготовлен Latorn. Если вы уже знаете основы Python и API и хотите практиковать такие решения системно, сравните программу платного курса LangChain 1.0.x со своей задачей. Открытый пример выше можно проверить самостоятельно; он не заменяет полный проект.
Технические источники: LangChain short-term memory. Учебные ситуации и числа в статье придуманы для объяснения механизма.
Следующий шаг: LangChain: практические разборы формата, памяти и потоков. По смежным вопросам: LangChain вернул правильный JSON, но данные неверны: что проверять, Отсутствующее поле и null в ответе LLM: как не стереть данные.
