Вызов функций (Function Calling)
Вызов функций позволяет модели в зависимости от запроса пользователя автоматически выбирать и вызывать заранее определённые вами инструментальные функции, реализуя запросы данных, вызовы API, выполнение задач и другие возможности.
Основные понятия#
Полный процесс вызова функций:
- Определение инструментов — опишите в запросе доступные функции и их параметры
- Решение модели — модель определяет, нужно ли вызывать инструмент
- Возврат вызова — модель возвращает имя функции и параметры
- Выполнение функции — вы выполняете функцию и получаете результат
- Продолжение диалога — отправьте результат обратно модели для генерации финального ответа
Протокол OpenAI#
Python
from openai import OpenAI
import json
client = OpenAI(
base_url="https://as.apinoma.com/v1",
api_key="<ваш APINOMA_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)TypeScript
Протокол Anthropic#
Anthropic использует параметр `tools`, формат немного отличается:
import anthropic
client = anthropic.Anthropic(
base_url="https://as.apinoma.com/anthropic",
api_key="<ваш APINOMA_API_KEY>"
)
response = client.messages.create(
model="anthropic/claude-sonnet-4.6",
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-pro-compatible-pro-preview`, `gemini-pro-compatible-flash-lite-preview`, `gemini-3-pro-preview`
- Отечественные: `deepseek-chat`, `qwen-max`, `glm-4`
Последнее обновление: 23 июня 2026 г.