Skip to Content

Вызов функций (Function Calling)

Вызов функций позволяет модели автоматически выбирать и вызывать предопределенные вами инструменты в зависимости от потребностей пользователя, реализуя возможности запроса данных, вызова API, выполнения задач и т.д.

Основные понятия

Полный процесс вызова функций:

  1. Определение инструментов — описание доступных функций и параметров в запросе
  2. Решение модели — модель определяет, нужно ли вызывать инструмент
  3. Возврат вызова — модель возвращает имя функции и аргументы
  4. Выполнение функции — вы выполняете функцию и получаете результат
  5. Продолжение диалога — отправка результата обратно модели для генерации финального ответа

Протокол OpenAI

function_calling.py
from openai import OpenAI import json client = OpenAI( base_url="https://api.ofox.ai/v1", api_key="<Ваш OFOXAI_API_KEY>" ) # 1. Определение инструментов tools = [{ "type": "function", "function": { "name": "get_weather", "description": "Получить актуальную погоду в указанном городе", "parameters": { "type": "object", "properties": { "city": { "type": "string", "description": "Название города, например: Москва, Санкт-Петербург" }, "unit": { "type": "string", "enum": ["celsius", "fahrenheit"], "description": "Единица измерения температуры" } }, "required": ["city"] } } }] # 2. Отправка запроса messages = [{"role": "user", "content": "Какая сегодня погода в Москве?"}] response = client.chat.completions.create( model="openai/gpt-4o", messages=messages, tools=tools, tool_choice="auto" ) message = response.choices[0].message # 3. Обработка вызова инструмента if message.tool_calls: for tool_call in message.tool_calls: args = json.loads(tool_call.function.arguments) # 4. Выполнение вашей функции result = get_weather(args["city"]) # Ваша реализация # 5. Отправка результата обратно модели messages.append(message) messages.append({ "role": "tool", "tool_call_id": tool_call.id, "content": json.dumps(result) }) # Получение финального ответа final = client.chat.completions.create( model="openai/gpt-4o", messages=messages, tools=tools ) print(final.choices[0].message.content)

Протокол Anthropic

Anthropic использует параметр tools с немного другим форматом:

anthropic_tools.py
import anthropic client = anthropic.Anthropic( base_url="https://api.ofox.ai/anthropic", api_key="<Ваш OFOXAI_API_KEY>" ) response = client.messages.create( model="anthropic/claude-sonnet-4.5", max_tokens=1024, tools=[{ "name": "get_weather", "description": "Получить актуальную погоду в указанном городе", "input_schema": { "type": "object", "properties": { "city": {"type": "string", "description": "Название города"} }, "required": ["city"] } }], messages=[{"role": "user", "content": "Какая сегодня погода в Москве?"}] ) # Обработка content block типа tool_use for block in response.content: if block.type == "tool_use": print(f"Вызов инструмента: {block.name}, аргументы: {block.input}")

Параллельный вызов функций

Модель может вернуть несколько вызовов инструментов в одном ответе, и их следует выполнять параллельно:

# Модель может запросить несколько вызовов одновременно if message.tool_calls: # Параллельное выполнение всех вызовов import asyncio async def execute_tools(tool_calls): tasks = [] for tc in tool_calls: args = json.loads(tc.function.arguments) tasks.append(execute_function(tc.function.name, args)) return await asyncio.gather(*tasks)

Параметр tool_choice

ЗначениеОписание
"auto"Модель автоматически решает, вызывать ли инструмент (по умолчанию)
"none"Запретить вызов инструментов
"required"Принудительный вызов инструмента
{"type": "function", "function": {"name": "xxx"}}Принудительный вызов указанного инструмента

Поддерживаемые модели

Следующие модели поддерживают Function Calling:

  • OpenAI: gpt-4o, gpt-4o-mini, o1, o3-mini
  • Anthropic: claude-opus-4, claude-sonnet-4, claude-3-5-haiku
  • Google: gemini-3.1-pro-preview, gemini-3-flash-preview, gemini-3-pro-preview
  • Китайские: deepseek-chat, qwen-max, glm-4
Last updated on