Как работает вызов функций
Разберитесь во всём цикле: модель выбирает инструмент, ваш код запускает его, вы отправляете результат обратно, а модель продолжает работу.
«Как работает вызов функций» — бесплатный урок AI Agents на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.
Вызов функций: основной принцип
Вызов функций — это протокол, который превращает LLM в агента. Модель выбирает функцию из предоставленного Вами списка, заполняет аргументы, а Вы запускаете эту функцию.
Этот принцип поддерживают OpenAI, Anthropic, Google, Cohere, Mistral и большинство крупных моделей OSS при наличии подходящей донастройки.
Пять шагов обмена
- Вы отправляете сообщения и определения инструментов
- Модель возвращает либо окончательный ответ, либо вызов инструмента
- Вы выполняете инструмент с аргументами модели
- Вы добавляете результат как сообщение инструмента
- Вы снова вызываете модель с обновлённой историей
Повторяйте шаги 2–5, пока модель не вернёт окончательный ответ.
Шаг 1: определение инструментов
Определения инструментов — это схемы JSON, описывающие каждую функцию:
tools = [{
'type': 'function',
'function': {
'name': 'get_weather',
'description': 'Current weather for a city',
'parameters': {
'type': 'object',
'properties': {
'city': {'type': 'string'}
},
'required': ['city']
}
}
}]
import json
print(json.dumps(tools, indent=2))
Шаг 2: первый вызов модели
Отправьте сообщения и инструменты:
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': 'Weather in Paris?'}],
tools=tools,
)
message = response.choices[0].message
print(message.tool_calls)
# [ToolCall(name='get_weather', arguments='{"city": "Paris"}')]Шаг 3: выполнение инструмента
Передайте управление своей функции на Python:
import json
def get_weather(city: str) -> dict:
# ...call your weather API...
return {'city': city, 'temp_c': 18, 'condition': 'cloudy'}
tool_call = message.tool_calls[0]
args = json.loads(tool_call.function.arguments)
result = get_weather(**args)Шаг 4: добавление результата инструмента
Добавьте сообщение инструмента с соответствующим ID:
messages.append(message) # the assistant message with tool_calls
messages.append({
'role': 'tool',
'tool_call_id': tool_call.id,
'content': json.dumps(result)
})Шаг 5: второй вызов модели
Снова вызовите модель — теперь у неё есть результат инструмента, и она создаст ответ для пользователя:
final = client.chat.completions.create(
model='gpt-4o-mini',
messages=messages,
tools=tools,
)
print(final.choices[0].message.content)
# 'It is currently 18 degrees and cloudy in Paris.'Цикл агента
Оберните это в цикл while: модель может последовательно вызвать несколько инструментов:
while True:
response = client.chat.completions.create(model=MODEL, messages=messages, tools=tools)
msg = response.choices[0].message
messages.append(msg)
if not msg.tool_calls:
return msg.content # final answer
for tc in msg.tool_calls:
result = dispatch(tc)
messages.append({'role': 'tool', 'tool_call_id': tc.id, 'content': json.dumps(result)})Параллельные вызовы инструментов
Современные модели возвращают несколько вызовов инструментов в одном ответе. Если это безопасно, запускайте их параллельно:
import asyncio
async def run_tools(tool_calls):
coros = [dispatch_async(tc) for tc in tool_calls]
return await asyncio.gather(*coros)finish_reason: вызовы инструментов
Вместо поиска вызовов инструментов можно также проверить finish_reason:
if response.choices[0].finish_reason == 'tool_calls':
# the model wants to call tools
...
elif response.choices[0].finish_reason == 'stop':
# done
...Распространённые ошибки
- Забыть добавить сообщение ассистента перед результатом инструмента
- Использовать неправильный идентификатор вызова инструмента
- Отправлять результаты инструментов как сообщения пользователя
- Позволить циклу выполняться без ограничений — задайте максимальное число шагов
Завершение цикла
Как понять, что агент закончил работу?
Итоги
Вызов функций — самый важный принцип во всём этом курсе. Освойте его, прежде чем двигаться дальше.
Часто задаваемые вопросы
Урок «Как работает вызов функций» бесплатный?
Да — полный текст урока «Как работает вызов функций» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.
Чему я научусь в уроке «Как работает вызов функций»?
Разберитесь во всём цикле: модель выбирает инструмент, ваш код запускает его, вы отправляете результат обратно, а модель продолжает работу. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Agents?
Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Как работает вызов функций»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Agents?
Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Как работает вызов функций
- Определение схем инструментов (JSON Schema)
- Выбор инструментов во время выполнения
- Возврат результатов модели