Разделы базы знаний ▾

Инструменты

Инструменты

PydanticAI + Gonka — типизированные AI-агенты за копейки

PydanticAI — Python-фреймворк для создания AI-агентов от команды Pydantic (той самой библиотеки валидации, на которой держится половина Python-экосистемы). Главная фишка PydanticAI — типизированный вывод: вы описываете результат как обычную Pydantic-модель, а фреймворк гарантирует, что модель вернёт именно эту структуру, провалидированную и готовую к использованию. Плюс понятный @agent.tool tool calling, dependency injection и поддержка любого провайдера.

Проблема та же, что у всех агентных фреймворков, — цена токенов. Агент с инструментами гоняет контекст по кругу: запрос → вызов tool → результат → повторный запрос. На одну задачу легко уходит несколько миллионов токенов. При тарифах OpenAI ($2.50–15 за 1M) и Anthropic ($3–15 за 1M) даже прототип становится дорогим, а production с тысячами запросов в день — неподъёмным.

PydanticAI нативно работает с любым OpenAI-совместимым endpoint через классы OpenAIChatModel и OpenAIProvider. Это значит, что JoinGonka Gateway подключается несколькими строками — без отдельных пакетов и адаптеров. Результат: типизированные агенты, работающие за $0.0005 за 1M входных токенов вместо $2.50–15 у OpenAI/Anthropic — в сотни и тысячи раз дешевле.

Быстрый старт: подключение в коде

Сначала получите ключ: зарегистрируйтесь на gate.joingonka.ai/register — при регистрации даём 10M бесплатных токенов — и создайте ключ jg-xxx в Dashboard → API Keys.

Установка:

pip install pydantic-ai
# либо облегчённый вариант только с OpenAI-зависимостями:
# pip install "pydantic-ai-slim[openai]"

Минимальный пример — агент через Gonka. PydanticAI задаёт кастомный endpoint через OpenAIProvider(base_url=..., api_key=...), который передаётся в OpenAIChatModel:

from pydantic_ai import Agent
from pydantic_ai.models.openai import OpenAIChatModel
from pydantic_ai.providers.openai import OpenAIProvider

model = OpenAIChatModel(
    "Qwen/Qwen3-235B-A22B-Instruct-2507-FP8",
    provider=OpenAIProvider(
        base_url="https://gate.joingonka.ai/v1",
        api_key="jg-ваш-ключ",
    ),
)

agent = Agent(model)

result = agent.run_sync("Объясни в двух предложениях, что такое PoUW")
print(result.output)

Это всё — ваш PydanticAI-агент работает через децентрализованную сеть Gonka за копейки. Метод run_sync удобен для скриптов; для async-кода есть await agent.run(...).

Параметры модели: контекстное окно Qwen3-235B — 128K токенов (131072), максимальная длина ответа через Gateway — до 8192 токенов. Ограничить вывод можно через настройки модели (OpenAIChatModelSettings(max_tokens=8192)). Доступны также moonshotai/Kimi-K2.6 (до 3072 токенов вывода) и MiniMaxAI/MiniMax-M2.7 (до 4096) — достаточно поменять имя модели в первом аргументе OpenAIChatModel.

Фишка PydanticAI: типизированный вывод

Главная причина выбрать PydanticAI — structured output. Вместо того чтобы парсить текст ответа регулярками, вы описываете результат как Pydantic-модель и передаёте её в параметр output_type. Фреймворк использует tool calling модели, чтобы заставить её вернуть данные строго по схеме, валидирует их и отдаёт уже готовый объект через result.output.

from pydantic import BaseModel
from pydantic_ai import Agent
from pydantic_ai.models.openai import OpenAIChatModel
from pydantic_ai.providers.openai import OpenAIProvider

model = OpenAIChatModel(
    "Qwen/Qwen3-235B-A22B-Instruct-2507-FP8",
    provider=OpenAIProvider(
        base_url="https://gate.joingonka.ai/v1",
        api_key="jg-ваш-ключ",
    ),
)


class Profile(BaseModel):
    name: str
    role: str
    skills: list[str]


agent = Agent(model, output_type=Profile)

result = agent.run_sync(
    "Извлеки данные: Анна — backend-разработчик, знает Python, Go и Postgres"
)
print(result.output)
# name='Анна' role='backend-разработчик' skills=['Python', 'Go', 'Postgres']
print(result.output.skills)  # ['Python', 'Go', 'Postgres'] — уже list[str], не текст

Это работает, потому что Qwen3-235B (и обе другие модели Gonka) поддерживают нативный tool calling — PydanticAI опирается на него, чтобы вернуть валидную JSON-структуру. На выходе вы получаете типизированный объект Python, а не строку, которую нужно разбирать вручную. Идеально для извлечения данных, классификации, заполнения форм и RAG-пайплайнов, где результат должен идти дальше по коду в строгом формате.

Сравнение стоимости

PydanticAI — фреймворк для агентов и пайплайнов, которые работают непрерывно: извлекают данные, вызывают инструменты, обрабатывают потоки запросов. Здесь стоимость токенов решает, останется ли проект прототипом или пойдёт в production. Сравним типичные нагрузки:

СценарийТокеновOpenAI / AnthropicJoinGonka Gonka
Извлечение структуры из документа~3K$0.008 — $0.045~$0.000002
Агент с tool calling (один цикл)~15K$0.04 — $0.22~$0.00001
RAG-пайплайн (1000 запросов/день)~5M/день$12 — $75/день~$0.003/день
Production-агент (100K запросов/день)~500M/день$1,250 — $7,500/день~$0.30/день

Разница — в сотни и тысячи раз. Для прототипа это означает, что 10M бесплатных токенов хватает на сотни прогонов агента. Для production, обрабатывающего сотни тысяч запросов в день, экономия составляет десятки тысяч долларов в месяц — при том же коде на PydanticAI, просто с другим base_url.

Один ключ jg-xxx и один баланс работают и для OpenAI-формата (/v1), и для Anthropic-формата (/v1/messages) — но для PydanticAI достаточно OpenAI-совместимого endpoint, показанного выше.

Tool calling и выбор модели

Вторая ключевая возможность PydanticAI — инструменты. Функцию можно зарегистрировать декоратором @agent.tool_plain (без контекста) или @agent.tool (с доступом к RunContext и dependency injection). Модель сама решает, когда вызвать инструмент, получает результат и продолжает рассуждение:

import random
from pydantic_ai import Agent
from pydantic_ai.models.openai import OpenAIChatModel
from pydantic_ai.providers.openai import OpenAIProvider

model = OpenAIChatModel(
    "Qwen/Qwen3-235B-A22B-Instruct-2507-FP8",
    provider=OpenAIProvider(
        base_url="https://gate.joingonka.ai/v1",
        api_key="jg-ваш-ключ",
    ),
)

agent = Agent(
    model,
    instructions="Ты помощник. Используй инструменты, когда нужно.",
)


@agent.tool_plain
def roll_dice() -> str:
    """Бросает шестигранный кубик и возвращает результат."""
    return str(random.randint(1, 6))


@agent.tool_plain
def calculator(expression: str) -> str:
    """Вычисляет математическое выражение."""
    return str(eval(expression))


result = agent.run_sync("Брось кубик и умножь результат на 7")
print(result.output)

Поскольку tool calling у Gonka нативный, инструменты вызываются надёжно — без хрупкого парсинга текстовых ответов. Весь цикл (запрос → вызов tool → финальный ответ) стоит около $0.00001 через Gonka против $0.04–0.22 у OpenAI/Anthropic.

Какую модель выбрать: Qwen/Qwen3-235B-A22B-Instruct-2507-FP8 — дефолт, лучший баланс качества и самый большой лимит вывода (8192). moonshotai/Kimi-K2.6 сильна в кодинге и сложных рассуждениях (вывод до 3072). MiniMaxAI/MiniMax-M2.7 — для длинных диалогов (вывод до 4096). Все три доступны прямо сейчас по одному ключу — меняется только строка модели. Близкие по духу инструменты: LangChain для цепочек и RAG, LlamaIndex для индексации данных.

PydanticAI + Gonka = типизированные AI-агенты на Python за копейки. Structured output на Pydantic-моделях, нативный tool calling, dependency injection — всё через OpenAIChatModel + OpenAIProvider с одним base_url. Стоимость — от $0.0005 за 1M токенов вместо $2.50–15 у OpenAI и Anthropic.

Хотите узнать больше?

Изучите другие разделы или начните зарабатывать GNK прямо сейчас.

Получить бесплатные 10M токенов →