Использование функций
Схема взаимодействия
При использовании API с вызовом функций модель никогда не выполняет функции сама. Модель просто генерирует параметры, которые могут быть использованы для вызова вашей функции (например, вызов API или сгенерировать отчет вызвав код программы).
После этого вы можете добавить результаты вашей функции как дополнение к пользовательскому запросу.
Как отправить запрос через API
- Сгенерировать API_TOKEN
- Отправить запрос на
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, код и т.д), мы должны отправить эти данные как дополнение к пользовательскому запросу.
Форматы дополнения у разных моделей могут отличаться. Проверьте документацию и примеры ниже.
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
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
- meta-llama/llama-3.2-90b-vision-instruct
- meta-llama/llama-3.3-70b-instruct
Вызовы функций, аналогично Anthropic (см. примеры выше)
Deepseek
Поддержка в моделях:
- deepseek/deepseek-chat
- deepseek/deepseek-coder
- deepseek/deepseek-chat-v2.5
Вызовы функций, аналогично 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
}
}