Інтеграція OpenAI Function Calling у застосунок

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Інтеграція OpenAI Function Calling у застосунок
Середній
~2-3 дні
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    901
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1119
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    853

Інтеграція OpenAI Function Calling в додаток

Function Calling в OpenAI API дозволяє моделі структурованим чином викликати ваші функції. Модель визначає, коли і з якими аргументами викликати функцію, на основі її опису. Це основа для агентних систем, підключення до баз даних, API та будь-яких зовнішніх сервісів.

Базовий приклад

from openai import OpenAI
import json

client = OpenAI()

# Визначення функцій
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_order_status",
            "description": "Отримати статус замовлення за його ID",
            "parameters": {
                "type": "object",
                "properties": {
                    "order_id": {
                        "type": "string",
                        "description": "Ідентифікатор замовлення"
                    }
                },
                "required": ["order_id"],
                "additionalProperties": False,
            },
            "strict": True,  # Гарантує точну відповідність схемі
        }
    },
    {
        "type": "function",
        "function": {
            "name": "cancel_order",
            "description": "Скасувати замовлення (тільки якщо статус pending або processing)",
            "parameters": {
                "type": "object",
                "properties": {
                    "order_id": {"type": "string"},
                    "reason": {"type": "string", "description": "Причина скасування"}
                },
                "required": ["order_id"],
                "additionalProperties": False,
            },
            "strict": True,
        }
    }
]

# Реалізація функцій
def get_order_status(order_id: str) -> dict:
    # Запит до БД
    return {"order_id": order_id, "status": "processing", "items": 3}

def cancel_order(order_id: str, reason: str = "") -> dict:
    return {"success": True, "message": f"Order {order_id} cancelled"}

FUNCTION_MAP = {
    "get_order_status": get_order_status,
    "cancel_order": cancel_order,
}

def run_with_tools(user_message: str, conversation_history: list = None) -> str:
    messages = conversation_history or []
    messages.append({"role": "user", "content": user_message})

    while True:
        response = client.chat.completions.create(
            model="gpt-4o",
            messages=messages,
            tools=tools,
            tool_choice="auto",
            parallel_tool_calls=True,  # Дозволяємо паралельні виклики
        )

        message = response.choices[0].message

        if response.choices[0].finish_reason == "stop":
            return message.content

        # Обробляємо виклики функцій
        messages.append(message.model_dump())

        for tool_call in message.tool_calls or []:
            func_name = tool_call.function.name
            func_args = json.loads(tool_call.function.arguments)

            result = FUNCTION_MAP[func_name](**func_args)

            messages.append({
                "role": "tool",
                "tool_call_id": tool_call.id,
                "content": json.dumps(result, ensure_ascii=False),
            })

Structured Outputs з функціями

from pydantic import BaseModel
from typing import Literal

class OrderAction(BaseModel):
    action: Literal["status_check", "cancellation", "escalation"]
    order_id: str
    priority: Literal["low", "medium", "high"]
    notes: str

# Примусове використання конкретної функції з Pydantic
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Замовлення #12345 зависло в обробці вже 3 дні"}],
    tools=[openai.pydantic_function_tool(OrderAction)],
    tool_choice="required",
)

# Автоматично парсується в Pydantic модель
tool_call = response.choices[0].message.tool_calls[0]
action = OrderAction.model_validate_json(tool_call.function.arguments)
print(action.action, action.priority)

Паралельні виклики для агрегації даних

async def aggregate_customer_data(customer_id: str) -> dict:
    """Паралельно запитує дані з кількох джерел"""
    # GPT-4o з parallel_tool_calls=True викличе всі інструменти одночасно

    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{
            "role": "user",
            "content": f"Зібери повну інформацію про клієнта {customer_id}: профіль, замовлення, тікети"
        }],
        tools=[get_profile_tool, get_orders_tool, get_tickets_tool],
        tool_choice="required",
        parallel_tool_calls=True,
    )

    # Модель викликає всі три функції в одній відповіді
    # Потім агрегує результати
    ...

Практичний кейс: служба підтримки e-commerce

Функції: get_order, track_shipment, process_refund, update_address, get_product_info.

Результат: 64% звернень обробляються автономно (статуси, трекінг, прості повернення). Середній час вирішення: 45 хв → 2 хв.

Строки реалізації

  • Базовий function calling цикл: 1–2 дні
  • Паралельні виклики + Pydantic: 2–3 дні
  • Production з error handling: 1 тиждень