Мой кодинг-агент завершил задачу. Почему поток прервался?
Худший баг в кодинг-агенте — это не краш.
Это когда первая задача выполнена успешно, но следующее сообщение вызывает ощущение амнезии. Вы даете задачу. Агент ее выполняет. Затем вы говорите: «сделай кнопку зеленой».
Для вас это один и тот же разговор. Для системы завершенная задача часто означает, что сессия окончена. Система начинает всё с чистого листа.
Создавая CliGate, я понял, что смешал три разных уровня:
- Чат (разговор)
- Runtime-сессия
- Текущий ход (turn)
Это не одно и то же.
Разговор — это долгоживущее пространство для общения. Runtime-сессия — это рабочий поток для этого разговора. Ход (turn) — это один отдельный запуск внутри этой сессии.
Когда задача завершается, должен заканчиваться только ход. Сессия должна оставаться активной.
Сломанный процесс выглядит так: Пользователь просит выполнить задачу -> Запускается runtime-сессия -> Задача завершается -> Разговор очищает активную сессию -> Следующий уточняющий запрос запускает совершенно новую сессию.
Это ломает короткие уточнения, такие как:
- повтори это
- сделай то же самое для этого файла
- объясни ошибку
- продолжай
Если система сразу разрывает сессию, вам приходится переформулировать всё заново. Агент работает, но общение кажется ненастоящим.
Я исправил это, сделав логику модели явной:
- Разговоры персистентны.
- Runtime-сессии по умолчанию «липкие» (sticky).
- Завершенные или проваленные задачи закрывают только текущий ход.
- Новые сессии запускаются только по запросу пользователя или при смене модели.
Я перестал воспринимать завершение задачи как смерть сессии. Это крошечное изменение значительно улучшает ощущение от продукта.
В CliGate новая сессия запускается только если:
- Сессии еще не существует.
- Пользователь просит создать новую.
- Смена модели делает старую сессию несовместимой.
Это соответствует человеческому мышлению. Пользователь ожидает, что одна вкладка чата будет работать как одна непрерывная ветка. Это критически важно для мобильных приложений, таких как Telegram или Feishu.
Новая логика проста:
- Первое сообщение создает runtime-сессию.
- Последующие сообщения продолжают использовать эту сессию.
- Завершение задачи не разрывает поток.
- Только явные команды запускают новую сессию.
Благодаря этому агент ощущается как коллега, а не просто инструмент для запуска команд.
Если вы создаете кодинг-агентов, помните: Разговор — это долговечная единица. Runtime-сессия — это многоразовый исполнитель. Ход (turn) — это то, что завершается при успехе или ошибке.
Разделите эти три слоя. Ваши последующие запросы наконец-то станут похожи на естественный диалог.
Источник: https://dev.to/codekingai/my-coding-agent-finished-the-task-why-did-the-thread-die-2jk2
Дополнительное обучающее сообщество: https://t.me/GyaanSetuAi