Context-1 — поисковый агент, который умеет избавляться от лишнего. Часть 1/2
Авторы сегодняшней статьи заявляют следующую проблему. Когда агент ищет что-то в поиске, то нерелевантные страницы, выданные браузером, всё равно остаются в контексте агента. Чтобы справиться с этим, контекст можно обрезать или суммировать.
Ещё одно весьма перспективное направление в этой области — self-editing context, при котором модель сама определяет, что ей нужно для решения задачи и может отбрасывать бесполезные документы. Этот подход авторы статьи и берут за основу своего субагента Context-1, построенного на модели в 20B параметров.
В его арсенале есть четыре инструмента. Первый, search_corpus(query), позволяет оценивать релевантность документа: отбирается 50 документов, ранжируются, самые подходящие отправляются модели в рамках доступного бюджета токенов. Инструмент grep_corpus(pattern) проводит поиск с помощью регулярных выражений, read_document(doc_id) нужен, чтобы прочитать документ.
Самый интересный из инструментов — prune_chunks(chunk_ids), который даёт модели возможность убрать какие-то фрагменты из контекста с сохранением траектории. После каждого шага модели сообщается, сколько токенов у неё осталось. Когда контекст заполнен наполовину, модель советуют освободить его, — но только на обучении, не на инференсе.
После преодоления какого-то порога по токенам, модель начинает получать отбивку о необходимости почистить контекст на каждый запрос вызова инструментов для получения новых документов. В этом случае модель либо должна выдать ответ, либо запустить prune_chunks(chunk_ids).
Авторы придумали, как генерировать синтетические данные для RL с возрастанием по сложности. Генерация происходит в пять стадий:
Gather supporting documents — сбор сопутствующих документов, которые содержат уникальные факты на основе заданного сида. В статье приводится пример с сидом «Синагоги в Брюсселе», по которому модель собрала факты вроде «Синагоги выполнены в романо-византийском стиле».
Generate clues (obfuscated references to facts) — собранные на первом этапе факты встраиваются в одну задачу, загадку, где разные сущности заменены фактами. Так, вместо, собственно, «синагога» в этом тексте будет сказано «религиозные сооружения в романо-византийском стиле».
Verify that the task is valid — этап проверки, что в сопутствующих документах есть подсказки, ведущие к ответу. То есть в каком-то из документов должно быть прямо сказано, что «синагога — это религиозное сооружение в романо-византийском стиле». Проверка осуществляется не с помощью LLM, а просто кодом на Python.
Optionally, collect distractors — опциональное добавление в базу документов-дистракторов. Важно, чтобы они не только вели модель по ложному пути, но и случайно не содержали правильных ответов.
Optionally, recursively chain — опциональная генерация задач, которые связаны с прошлыми задачами. Так получается синта, которую нужно решать в несколько шагов.
Во второй части поговорим об обучении и результатах.
Разбор подготовил ❣ Владислав Пыж
Душный NLP
Авторы сегодняшней статьи заявляют следующую проблему. Когда агент ищет что-то в поиске, то нерелевантные страницы, выданные браузером, всё равно остаются в контексте агента. Чтобы справиться с этим, контекст можно обрезать или суммировать.
Ещё одно весьма перспективное направление в этой области — self-editing context, при котором модель сама определяет, что ей нужно для решения задачи и может отбрасывать бесполезные документы. Этот подход авторы статьи и берут за основу своего субагента Context-1, построенного на модели в 20B параметров.
В его арсенале есть четыре инструмента. Первый, search_corpus(query), позволяет оценивать релевантность документа: отбирается 50 документов, ранжируются, самые подходящие отправляются модели в рамках доступного бюджета токенов. Инструмент grep_corpus(pattern) проводит поиск с помощью регулярных выражений, read_document(doc_id) нужен, чтобы прочитать документ.
Самый интересный из инструментов — prune_chunks(chunk_ids), который даёт модели возможность убрать какие-то фрагменты из контекста с сохранением траектории. После каждого шага модели сообщается, сколько токенов у неё осталось. Когда контекст заполнен наполовину, модель советуют освободить его, — но только на обучении, не на инференсе.
После преодоления какого-то порога по токенам, модель начинает получать отбивку о необходимости почистить контекст на каждый запрос вызова инструментов для получения новых документов. В этом случае модель либо должна выдать ответ, либо запустить prune_chunks(chunk_ids).
Авторы придумали, как генерировать синтетические данные для RL с возрастанием по сложности. Генерация происходит в пять стадий:
Gather supporting documents — сбор сопутствующих документов, которые содержат уникальные факты на основе заданного сида. В статье приводится пример с сидом «Синагоги в Брюсселе», по которому модель собрала факты вроде «Синагоги выполнены в романо-византийском стиле».
Generate clues (obfuscated references to facts) — собранные на первом этапе факты встраиваются в одну задачу, загадку, где разные сущности заменены фактами. Так, вместо, собственно, «синагога» в этом тексте будет сказано «религиозные сооружения в романо-византийском стиле».
Verify that the task is valid — этап проверки, что в сопутствующих документах есть подсказки, ведущие к ответу. То есть в каком-то из документов должно быть прямо сказано, что «синагога — это религиозное сооружение в романо-византийском стиле». Проверка осуществляется не с помощью LLM, а просто кодом на Python.
Optionally, collect distractors — опциональное добавление в базу документов-дистракторов. Важно, чтобы они не только вели модель по ложному пути, но и случайно не содержали правильных ответов.
Optionally, recursively chain — опциональная генерация задач, которые связаны с прошлыми задачами. Так получается синта, которую нужно решать в несколько шагов.
Во второй части поговорим об обучении и результатах.
Разбор подготовил ❣ Владислав Пыж
Душный NLP