🐍

Python-инструменты для AI-агентов: полный набор

LangChain, LlamaIndex, SmolAgents, Pydantic AI — сравнение 5 фреймворков для создания агентов на Python. Код для каждого. Плюсы/минусы.

intermediate⏱ 22 мин
Экосистема Python-фреймворков для AI-агентов 🐍 Python AI Agent Stack LangChain Оркестратор LlamaIndex RAG/Данные SmolAgents Лёгкий Pydantic AI Структура OpenAI SDK Assistants

# 1. LangChain — король оркестрации агентов

LangChain — самый популярный фреймворк для создания цепочек вызовов LLM и агентов. С 2025 года включает LangGraph для конечных автоматов и LangSmith для мониторинга. Идеален для сложных многошаговых агентов с разветвлённой логикой.

# Установка
pip install langchain langchain-openai

from langchain_openai import ChatOpenAI
from langchain.agents import create_agent
from langchain.tools import tool

# 1. Определяем инструмент
@tool
def get_order_status(order_id: str) -> str:
    """Получить статус заказа по ID."""
    # В реальном коде: запрос к БД
    return f"Заказ {order_id}: в доставке"

# 2. Создаём LLM
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)

# 3. Создаём агента с инструментом
agent = create_agent(llm, [get_order_status])
result = agent.invoke({
    "input": "Проверь статус заказа ORD-7721"
})
print(result["output"])
# → Заказ ORD-7721: в доставке

# Плюсы:
# + Огромная экосистема (интеграции со всем)
# + LangGraph — графы состояний для агентов
# + LangSmith — продакшен-мониторинг
# Минусы:
# - Высокий порог входа, много абстракций
# - Частые breaking changes между версиями
# - Тяжёлый для простых задач

# 2. LlamaIndex — агенты, которые работают с вашими данными

LlamaIndex (бывший GPT Index) — фреймворк для RAG (Retrieval Augmented Generation) и агентов над данными. Если ваш агент должен искать по документам, базе данных или API — это выбор №1.

# Установка
pip install llama-index llama-index-llms-openai

from llama_index.core import (
    VectorStoreIndex, SimpleDirectoryReader, Settings
)
from llama_index.llms.openai import OpenAI

# 1. Загружаем документы из папки
documents = SimpleDirectoryReader(
    "./docs"
).load_data()

# 2. Настраиваем LLM
Settings.llm = OpenAI(model="gpt-4o-mini")

# 3. Строим индекс
index = VectorStoreIndex.from_documents(documents)

# 4. Создаём агента-поисковика
query_engine = index.as_query_engine()
response = query_engine.query(
    "Какие гарантийные сроки на продукт X?"
)
print(response)
# → Ответ на основе содержимого документов

# Плюсы:
# + Лучший RAG из коробки (индексация, retrieval)
# + 20+ типов загрузчиков данных
# + Агенты умеют работать с БД, API, файлами
# Минусы:
# - Заточен под RAG, не универсальный оркестратор
# - Большой вес зависимостей

# 3. SmolAgents — минималистичные агенты от HuggingFace

SmolAgents (2025) от HuggingFace — библиотека, которая делает создание агентов максимально простым. Код агента умещается в 10 строк. Идеально для прототипирования и обучения. Поддерживает любые модели через HuggingFace Hub.

# Установка
pip install smolagents

from smolagents import CodeAgent, tool, LiteLLMModel

# 1. Определяем модель (любой провайдер через LiteLLM)
model = LiteLLMModel(
    model_id="openai/gpt-4o-mini",
    api_key="sk-proj-..."
)

# 2. Определяем инструмент
@tool
def calculator(expression: str) -> float:
    """Вычислить математическое выражение."""
    return eval(expression, {"__builtins__": {}}, {})

# 3. Создаём агента (5 строк!)
agent = CodeAgent(
    tools=[calculator],
    model=model,
)

# 4. Запускаем
result = agent.run(
    "Посчитай (15 * 73 + 220) / 5 и объясни результат"
)
print(result)
# → 263.0 с объяснением шагов

# Плюсы:
# + Максимальная простота (10 строк на агента)
# + CodeAgent пишет и выполняет Python-код
# + Поддержка любых моделей через Hub
# Минусы:
# - Молодой проект, меньше интеграций
# - Не для продакшена (пока)

# 4. Pydantic AI — агенты со строгой типизацией

Pydantic AI (от создателя Pydantic Сэмюэля Колвина) — фреймворк, который делает ставку на строгую типизацию ответов модели. Если вам нужны структурированные выходные данные (JSON-схемы, Pydantic-модели) — это лучший выбор.

# Установка
pip install pydantic-ai

from pydantic import BaseModel
from pydantic_ai import Agent

# 1. Описываем структуру ответа
class WeatherReport(BaseModel):
    city: str
    temperature: float
    conditions: str
    humidity: int

# 2. Создаём агента со строгим output-форматом
agent = Agent(
    'openai:gpt-4o-mini',
    result_type=WeatherReport,  # ← модель автоматически вернёт это
    system_prompt='Ты метеоролог. Всегда указывай city, temperature, conditions, humidity.',
)

# 3. Запрос — получаем строго типизированный ответ
result = agent.run_sync('Какая погода в Берлине?')
print(f"Тип: {type(result.data)}")    # → 
print(f"Город: {result.data.city}")     # → Берлин
print(f"Температура: {result.data.temperature}°C")

# Плюсы:
# + Строгая типизация ответов (Pydantic)
# + Валидация на лету, авто-retry при ошибках
# + Поддержка function calling
# Минусы:
# - Меньше готовых интеграций
# - Не для сложной оркестрации агентов

# 5. OpenAI Assistants API — готовые агенты без фреймворков

Иногда фреймворк не нужен. OpenAI Assistants API — это управляемый сервис: ассистенты с сохранением контекста, автоматическим вызовом инструментов (Code Interpreter, File Search, Function Calling) и управлением тредами (историей диалогов).

# Установка
pip install openai

from openai import OpenAI
import time

client = OpenAI()

# 1. Создаём ассистента
assistant = client.beta.assistants.create(
    name="Data Analyst",
    instructions="Ты аналитик данных. Используй code_interpreter для анализа.",
    model="gpt-4o",
    tools=[{"type": "code_interpreter"}]
)

# 2. Создаём тред (диалог)
thread = client.beta.threads.create()

# 3. Добавляем сообщение
client.beta.threads.messages.create(
    thread_id=thread.id,
    role="user",
    content="Посчитай среднее, медиану и std для чисел: 23,45,12,67,34,89,15,41"
)

# 4. Запускаем выполнение
run = client.beta.threads.runs.create_and_poll(
    thread_id=thread.id,
    assistant_id=assistant.id
)

# 5. Читаем ответ
if run.status == "completed":
    messages = client.beta.threads.messages.list(thread_id=thread.id)
    print(messages.data[0].content[0].text.value)

# Плюсы:
# + Нулевая инфраструктура (OpenAI хранит состояние)
# + Code Interpreter — песочница Python из коробки
# + File Search — векторный поиск по файлам
# Минусы:
# - Vendor lock-in (только OpenAI)
# - $0.03/GB/день за хранение файлов
# - Меньше гибкости, чем фреймворки

# 6. Сравнительная таблица и рекомендации

Выбор фреймворка зависит от задачи. Вот cheat-sheet для быстрого принятия решения:

# Когда что выбирать:

# 🟢 Нужен простой агент с парой инструментов
# → SmolAgents — 10 строк кода и готово

# 🔵 Агент должен искать по документам/БД
# → LlamaIndex — лучший RAG из коробки

# 🟣 Нужны строго структурированные ответы
# → Pydantic AI — типизация + валидация

# 🟡 Сложный многошаговый агент с ветвлением
# → LangChain + LangGraph — конечные автоматы

# 🔴 Не хотите управлять инфраструктурой
# → OpenAI Assistants API — serverless агенты

# Комбо-подход (production):
# LangChain (оркестрация) + LlamaIndex (RAG) + Pydantic AI (типизация)
✅ Итог

Python-экосистема для AI-агентов в 2026 году разнообразна и зрела. LangChain остаётся стандартом для сложных оркестраций, LlamaIndex незаменим для RAG, Pydantic AI даёт строгую типизацию там, где она критична. SmolAgents — находка для прототипирования и обучения. OpenAI Assistants API — выбор для тех, кто не хочет управлять состоянием. Не существует «лучшего» фреймворка — есть правильный инструмент под конкретную задачу. Начните с малого: SmolAgents для прототипа, затем LangChain/LlamaIndex для продакшена. И помните: агент на 50 строк кода часто решает задачу лучше, чем фреймворк на 5000 строк.

🔗 LangChain 🦙 LlamaIndex 🤗 SmolAgents ✅ Pydantic AI 🤖 Assistants API