Search
Write a publication
Pull to refresh

Comments 5

Что-то не до конца раскрыт момент про пример "Какой был рост ВВП Японии в 2024 году?"

А именно, как на основании этого промпта LLM-ка вообще понимает, что надо дёрнуть web_search, а не internet_search, или там open-file "c:\gdp.ja.txt".

Далее работа с ответами. LLM в ответе (model.encode) должна написать что-то, что можно распарсить в вызов тула с параметрами. А на сколько я разбирался (нужно обновить данные), невозможно вообще никак, совсем никак, архитектурно фундаментально невозможно гарантировать, чтоб модель, напримре сгенерировала json с foo равным 1.
Да, можно сейчас побежать в chatgpt и попросить и она даже сгенерит. Но это всё - особые усилия и тренировки датасета, чтобы вероятность этого ответа стремилась к 1. Но она никогда не равна. Т.е. в ответе может быть и невалидный json, скобка лишния или лишний текст, или не так названо поле, или текст после ответа и т.п. Любые попытки это причесать - это враппер вокруг LLM на низком уровне. Изменилось ли тут что-нибудь?

Добрый день! Спасибо за коммент. Попробую ответить.

Первый вопрос: как модель узнает, что нужно именно web_search дергать

Вся эта система работает, потому что mcp host перед началом работы получает список доступных инструментов, и в каждом инструменте содержится описание - которое объясняет модельке, что именно этот инструмент нужно дернуть для поиска данных по японии, а не какой-то другой. В процессе рассуждений ллмка сама решит по описанию, что нужно использовать этот инструмент. Я это воспринимаю для себя, как системный промпт перед началом работы. Конечно, если будет несколько инструментов с похожим описанием - может быть путаница. Такого нужно избегать, и четко объяснять модели, какой инструмент зачем нужно использовать

Второй вопрос: можно ли гарантировать, что модель сгенерирует валидный json в нужном формате для вызова инструмента

На 100%, конечно, нельзя. Вообще вся работа с ИИ - это не стопроцентная штука. Всегда есть ошибки/допущения и тд. Но современные последние модельки (Q3-Q4 2024 и свежее) хорошо обучены на огромных объемах данных, чтобы именно вызывать функции или инструменты использовать. Я это для себя воспринимаю не так, что я прошу в промпте сгенерировать мне json - а скорее работаю с моделью в таком режиме, что она точно знает, что ожидаемый формат вывода - это json, который основан на схемах, которые она получила от mcp сервера. НО, все еще - ошибки могут быть конечно иногда) и да, враппер, про который вы написали - имеет место быть

Ну, видимо, я глубоко копаю. Первый вопрос, да, я знаю что весь тулинг с описанием собирается и подставляется в промпт. Кстати, системный он или не системный вообще без разницы. Современный messages array формат через тот же jinja template (transformers как минимум) генерит просто текст. Т.е. input - длиннющий текст. array of chars. который потом токенезируется в array of tokens.
Если тулов много, интересно как собрать релевантный набор, чтоб оно влезло в контекст, т.к. как правило он огромный и забит бесполезной ерундой "ты опытный программист, а твоя мама больна раком и если ты не сделаешь эту таску не заработаешь денег и вообще капец" (почему это бесполезно - заслуживает отдельной статьи для объяснения. ведь кажется, что работает).

Ну и по второму " работаю с моделью в таком режиме, что она точно знает, что ожидаемый формат вывода - это json": так вот наш "array of tokens", он же prompt, попадает в условный метод model.encode(prompt_tokens). Результатом являются просто новые токены, которые, как кажется модели, наиболее подходящие здесь.

Далее токены -> текст и мы его видим. Модель не знает, не понимает что там пользователь хотел. никаких json-ов, yaml-ов или чего там нет. всё что можно гарантировать, что там будет string.

Все в конечном итоге упирается просто в набор токенов при работе с трансформерами - спору нет. И мы не можем быть на 100проц уверены в ответе модели. Просто шанс ошибки очень мал, и это решается обычно обработкой типа "if (ошибка) повтори" - система при этом для пользователя будет работать достаточно стабильно

Огромное спасибо за статью! Искала информацию по тому, как это все работает. Но в ресурсах было очень много неточностей. Нашла ролик от Anthropic, а статья уже помогла разложить все по полочкам до конца!

Sign up to leave a comment.

Articles