Перейти к основному содержимому
CodeAlive 3.0: от context engine к агенту для исследования кода
CodeAlive

Ко всем статьям

Улучшаем следование инструкциям через подсказки следующих шагов в ответе tool call

Агент может правильно вызвать каждый tool и сразу после этого потерять нить исследования. С небольшими LLM мы видим это чаще: они хорошо следуют короткой локальной инструкции, но не всегда восстанавливают весь workflow из длинного system prompt.

Результат семантического поиска легко принять за доказательство. Пустую выдачу grep — за доказательство, что такого кода нет. Обрезанный список связей — за полный список использований. Вызов формально успешен, данные получены, но следующий вывод оказывается неверным.

В агенте исследования кода CodeAlive мы используем для этого простое соглашение: каждый ответ tool заканчивается блоком hint.

xml
<artifacts>  <!-- результаты поиска --></artifacts><hint>  Строки из grep дают контекст, но не доказывают поведение кода.  Сначала загрузи исходник через fetch_artifacts.</hint>

Положение подсказки здесь важно. Сначала модель читает, что нашёл инструмент. Последним она видит, как интерпретировать результат и какое действие имеет смысл дальше. Так hint замыкает ответ tool и возвращает внимание модели к ходу исследования.

Новых способностей к рассуждению у небольшой модели от этого не появляется. Зато ей не нужно удерживать в активном контексте весь порядок работы. Нужное правило находится рядом с данными и прямо перед следующим решением, а не только в начале разговора.

Description до вызова, hint после

Описание tool учит модель составлять корректный вызов. Например, semantic_search просит полноценный вопрос на естественном языке вместо набора ключевых слов. read_file требует точный путь относительно корня репозитория.

У завершающего hint другая задача. Он уже знает, чем закончился вызов, и поэтому может дать более узкую подсказку:

  • результаты поиска предупреждают, что описания и фрагменты нужны для отбора, а не для окончательных выводов;
  • пустая выдача предлагает переформулировать вопрос, расширить фильтры или сменить тип поиска;
  • загруженный исходник обозначается как ground truth;
  • обрезанный граф связей сообщает, когда нужен ещё один вызов;
  • recoverable error объясняет, какой аргумент исправить, не прерывая весь чат.

При этом hint не обязательно хранить как статический текст. В get_artifact_relationships он формируется из запрошенного профиля, возвращённых групп и счётчиков доступных связей. Успешный ответ может выглядеть так:

json
{  "sourceIdentifier": "CodeAlive.Agents::SearchToolsFactory::Build",  "profile": "callsOnly",  "found": true,  "relationships": [    {      "type": "outgoing_calls",      "totalCount": 2,      "returnedCount": 2,      "truncated": false,      "items": [        { "identifier": "CodeAlive.Search::SemanticSearchAsync" },        { "identifier": "CodeAlive.Search::GetArtifactRelationshipsAsync" }      ]    }  ],  "hint": "Загрузи перспективные связанные артефакты, прежде чем делать выводы о поведении, конкретных применениях или распространённости механизма."}

Tool уже успешно ответил: агент получил две исходящие связи. Финальный hint объясняет, что метаданных о связях ещё недостаточно для вывода о поведении, и указывает следующее полезное действие. Сам по себе агент часто неохотно загружает связанные артефакты и начинает писать ответ по идентификаторам и summary. После такой подсказки он часто исправляется и сначала читает исходники. Тот же метод формирует другие инструкции, если группы пусты, обрезаны или доступны в другом профиле связей.

В prompt агента достаточно один раз задать соглашение: учитывать <hint>, <next_tool> и списки кандидатов, когда они относятся к вопросу пользователя. Подробная инструкция приходит сразу после нужных данных, именно в тот момент, когда модель выбирает следующее действие. При этом она не занимает место в system prompt на каждом шаге.

Так ответ tool становится частью управления агентом. Данные отвечают на вопрос «что нашёл инструмент?», а финальный hint — «что теперь?». Для небольшой LLM эта короткая локальная инструкция может стать разницей между продолжением исследования и преждевременным ответом по первому правдоподобному результату.

Agent Experience (AX)Context Engineering

Новые статьи

Следите за работой, а не за маркетинговой воронкой

Одно прямое письмо после публикации. Без отслеживания открытий и кликов, продаж и чаще одного раза в день.

Дайте агентам всю кодовую базу

Проиндексируйте первый репозиторий за минуты — или попробуйте демо без регистрации.