Сначала LLM могли работать чисто text-to-text. Потом научились подавать на вход вместе с текстом еще и изображения, и аудио, и даже видео.
На этом не остановились и смогли прикрутить специальные декодеры (типа vocoder) для генерации речи из аудио-токенов на выходе модели.
А еще давайте-ка научим LLM пользоваться сторонними инструментами для получения информации.
Зачем?
🔹 Несмотря на то, что в LLM и так много знаний заложено, остаются такие данные, которые затратно пихать в саму модель. Эффективнее было бы прикрутить RAG, либо научить обращаться с запросами в базу знаний.
🔹 Если информация постоянно обновляется. Самый яркий пример — погода на текущий момент. Получить правильный ответ можно, только "сходив" на соответствующий ресурс.
🔹 Страховка от галлюцинаций. LLM может ошибаться даже в элементарных математических операциях. И такие ошибки могут свести на нет весь результат. Вот пусть LLM использует внешний калькулятор, который точно не ошибется.
Внешние сервисы в большинстве своем (других я просто не встречал) представляют собой некоторый API, который имеет четкий запрос, входный и выходной форматы. И этот API описывается в промпт, как непосредственно инструкция к пользованию. Стоит отметить, что для таких целей лучше смотреть в сторону reasoning-LLM с хорошими показателями на кодерских тестах (бенчмарках). Так мы можем полагать, что те же самые JSON-ы модели уже знакомы.
LLM подскажет погоду
В этой статье есть пример, как LLM с озвучивает погоду, его и рассмотрим. Модель получает первый промпт от юзера: "какая сейчас погода в Лондоне?".
Далее этот промпт дополняется инструкциями типа:
Для ответа на вопрос можешь использовать следующие запросы:
- web_search(query: string): Поиск в интернете по данному запросу.
- run_python_code(code: string): Выполнить python код.
- get_weather(city: string): Узнать погоду в данном городе.
Модель это все хавает и должна выдать ответ в виде:
Для получения ответа необходим ответ от сервиса
Request:
get_weather(city: "London")
Далее некоторая программная среда, получив такой ответ от LLM и увидев в нем ключевое для нее слово Request,
просто выполняет то, что написала LLM. И ответ на запрос снова дополняет промпт. И получается вот такой контекст для LLM:
какая сейчас погода в Лондоне?
Для ответа на вопрос можешь использовать следующие запросы:
...
Для получения ответа необходим ответ от сервиса
Request:
get_weather(city: "London")
Response
{"temperature": 18, "cloudy": True}
И теперь, имея все это, LLM формирует понятный ответ для пользователя:
Сейчас в Лондоне 18 градусов облачно
❗️ Крайне важно понять, что сама LLM никуда запросы не посылает. Она лишь дает текстовые инструкции, а их выполняет уже другая программная среда. Если программная среда не имеет доступ к тем или иным ресурсам, то LLM ничего с этим не сделает. Разве что может нафантазировать ответ.