На работе мне давеча пришлось разбираться с function calling в LLM
Что это такое? Наверняка уже все видели агентов, которым даешь какое-то задание, они ходят по каким-то сайтам/апишкам, что-то собирают, что-то делают, и отдают результат. Вот это "походить по внешним апишкам" как раз делается благодаря function calling
Как оно верхнеуровнево работает: клиент говорит ллмке, какими она инструментами может пользоваться => ллмка отвечает клиенту, что ему нужно вызвать => клиент делает вызов и отдает ллмке результат => ллмка генерит итоговый ответ
client -> LLM:
Какая сейчас погода в москве?
доступные инструменты:
- get_weather
-- Описание: используй, когда хочешь получить погоду в конкретном городе
-- Аргументы: city (string)
------------
client <- LLM:
Вызови get_weather("moscow")
------------
client:
api call get_weather("moscow") = 13 градусов
client -> LLM:
get_weather("moscow") = 13 градусов
------------
client <- LLM:
В москве сейчас 13 градусов
Самый простой способ это реализовать — это действительно вставлять в промт спецификацию инструментов и парсить "необходимости что-то вызвать" из ответа модельки. Но такой способ подвержен галлюцинациям и проблемам со структурой
Следующий шаг — это сделать fine-tune модели, чтобы она лучше научилась справляться с подобными задачами, когда есть спека тулов, а ей нужно ответить, какие из них использовать
Следующий шаг — ввести структурированный формат, который избавляет от проблем с неспецифицированной структурой. Это и есть формат function calling от openai, про который можно почитать тут