Skip to main content

Использование функций

string (FunctionCallModel)
Enum: "anthropic/claude-3-haiku" "anthropic/claude-3-opus" "anthropic/claude-3-sonnet" "anthropic/claude-3.5-sonnet" "deepseek/deepseek-chat" "deepseek/deepseek-coder" "google/gemini-flash-1.5" "google/gemini-pro" "google/gemini-pro-1.5" "meta-llama/llama-3-70b-instruct" "meta-llama/llama-3.1-405b-instruct" "meta-llama/llama-3.1-70b-instruct" "meta-llama/llama-3.1-8b-instruct" "openai/gpt-3.5-turbo-0125" "openai/gpt-4-turbo" "openai/gpt-4o" "openai/gpt-4o-mini"

Список моделей с поддержкой function call

"anthropic/claude-3-haiku"

Схема взаимодействия

При использовании API с вызовом функций модель никогда не выполняет функции сама. Модель просто генерирует параметры, которые могут быть использованы для вызова вашей функции (например, вызов API или сгенерировать отчет вызвав код программы).

После этого вы можете добавить результаты вашей функции как дополнение к пользовательскому запросу.

function-calling.png

Как отправить запрос через API

  1. Сгенерировать API_TOKEN
  2. Отправить запрос на https://api.smartbuddy.ru/v1/chat/completions (см. примеры ниже)

Пример описания функции

Отправляем пользовательский промт и описание функции, чтобы нейросеть могла вытащить параметры из пользовательского промта в нужном нам формате.

Запрос:

import requests
import json

url = "https://api.smartbuddy.ru/v1/chat/completions"

payload = json.dumps({
"model": "openai/gpt-4o",
"messages": [
{
"role": "user",
"content": "What's the weather like in Boston?"
}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Get the current weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city, e.g. San Francisco"
},
"unit": {
"type": "string",
"enum": [
"celsius",
"fahrenheit"
]
}
},
"required": [
"location"
]
}
}
}
]
})
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer API_TOKEN'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Ответ:

{
"id": "gen-YT6SiKy3UnmummHtszQbffrxGWQd",
"model": "openai/gpt-4o",
"object": "chat.completion",
"created": 1726132411,
"choices": [
{
"logprobs": null,
"finish_reason": "tool_calls",
"index": 0,
"message": {
"role": "assistant",
"content": null,
"refusal": null,
"tool_calls": [
{
"index": 0,
"id": "call_Pts9LrUCo3cHVi7iUSwldK9t",
"type": "function",
"function": {
"name": "get_current_weather",
"arguments": "{\"location\":\"Boston\"}"
}
}
]
}
}
],
"system_fingerprint": "fp_25624ae3a5",
"usage": {
"prompt_tokens": 75,
"completion_tokens": 15,
"total_tokens": 90
}
}

Мы получаем идентификатор функции (tool_calls.0.id) и список параметров в tool_calls.0.function.arguments, распарсив который, можем использовать в вызове нашей функций (API, код и т.д.).

Пример дополнения запроса информацией из функции

После того как мы получили данные от нашей функции (API, код и т.д), мы должны отправить эти данные как дополнение к пользовательскому запросу.

info

Форматы дополнения у разных моделей могут отличаться. Проверьте документацию и примеры ниже.

GPT (Open AI)

Справочная информация Open AI platform

Поддержка в моделях:

  • openai/gpt-3.5-turbo
  • openai/gpt-4-turbo
  • openai/gpt-4o
  • openai/gpt-4o-mini

Tool

Нужно сохранить message из ответа 1-ого запроса (с описанием функции) к нейросети и идентификатор функции tool_calls.0.id и отправить в tool_call_id.

import requests
import json

url = "https://api.smartbuddy.ru/v1/chat/completions"

payload = json.dumps({
"model": "openai/gpt-4o",
"messages": [
{
"role": "user",
"content": "What's the weather like in Boston?"
},
{
"role": "assistant",
"content": None,
"refusal": None,
"tool_calls": [
{
"index": 0,
"id": "tool_0_get_current_weather",
"type": "function",
"function": {
"name": "get_current_weather",
"arguments": "{\"location\":\"Boston\"}"
}
}
]
},
{
"tool_call_id": "tool_0_get_current_weather",
"role": "tool",
"content": "{\"location\":\"Boston\",\"unit\":\"celsius\",\"temperature\":\"22\"}"
}
]
})
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer API_TOKEN'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Function

warning

DEPRECATED. Способ признан устаревшим.

Работает, но не рекомендуется использовать. OpenAi рекомендуют использовать role:tool.

import requests
import json

url = "https://api.smartbuddy.ru/v1/chat/completions"

payload = json.dumps({
"model": "openai/gpt-4o",
"messages": [
{
"role": "user",
"content": "What's the weather like in Boston?"
},
{
"name": "get_current_weather",
"role": "function",
"content": "{\"location\":\"Boston\",\"unit\":\"celsius\",\"temperature\":\"22\"}"
}
]
})
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer API_TOKEN'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Claude (Anthropic)

Справочная информация Anthropic

Поддержка в моделях:

  • anthropic/claude-3-haiku
  • anthropic/claude-3-sonnet
  • anthropic/claude-3-opus
  • anthropic/claude-3.5-sonnet
import requests
import json

url = "https://api.smartbuddy.ru/v1/chat/completions"

payload = json.dumps({
"model": "anthropic/claude-3-haiku",
"messages": [
{
"role": "user",
"content": "What's the weather like in Boston?"
},
{
"role": "user",
"content": "{\"type\":\"tool_result\",\"location\":\"Boston\",\"unit\":\"celsius\",\"temperature\":\"22\"}"
}
]
})
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer API_TOKEN'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Gemini (Google)

Справочная информация ai.google.dev

Поддержка в моделях:

  • google/gemini-pro
  • google/gemini-flash-1.5
  • google/gemini-pro-1.5

Вызовы функций, аналогично Anthropic (см. примеры выше)

Llama

Поддержка в моделях:

  • meta-llama/llama-3-70b-instruct
  • meta-llama/llama-3.1-8b-instruct
  • meta-llama/llama-3.1-70b-instruct
  • meta-llama/llama-3.1-405b-instruct

Вызовы функций, аналогично Anthropic (см. примеры выше)

Deepseek

Поддержка в моделях:

  • deepseek/deepseek-chat
  • deepseek/deepseek-coder

Вызовы функций, аналогично Anthropic (см. примеры выше)

Пример ответа

{
"id": "gen-h9CogVxh1fAxgcy5MoONTYXOjF7g",
"model": "openai/gpt-4o",
"object": "chat.completion",
"created": 1726136966,
"choices": [
{
"logprobs": null,
"finish_reason": "stop",
"index": 0,
"message": {
"role": "assistant",
"content": "Currently, in Boston, the temperature is 22°C.",
"refusal": ""
}
}
],
"system_fingerprint": "fp_25624ae3a5",
"usage": {
"prompt_tokens": 34,
"completion_tokens": 12,
"total_tokens": 46
}
}