arrow_backНазад к полевым заметкам
AI Опубликовано 5 Aug 2026

Создание работающего AI-агента: практический глоссарий

Что такое AI-агент на самом деле, чем он отличается от чатбота и какие компоненты нужны, чтобы его построить.

AI-агент — это программа, которая получает цель, определяет последовательность действий и выполняет эти действия с помощью инструментов до достижения цели или отказа. Это отличается от чатбота, который просто отвечает на сообщения. Агент планирует, вызывает функции, проверяет результаты и корректирует действия. Если вы использовали ChatGPT только в браузере, создание первого агента — это момент, когда модель перестаёт быть просто генератором текста и становится компонентом в большей системе.

Основной цикл

Каждый агент, независимо от того, как его позиционируют, выполняет один и тот же цикл: наблюдай, думай, действуй, повтори. Конкретно:

  1. Агент получает задачу ("найти самый дешевый рейс в Лиссабон в следующем месяце и составить краткое резюме по электронной почте").
  2. Он вызывает LLM с описанием задачи и доступных инструментов.
  3. Модель возвращает либо окончательный ответ, либо вызов инструмента, например search_flights(destination="Lisbon", month="2025-06").
  4. Ваш код выполняет эту функцию, получает реальный результат и передаёт его обратно в контекст модели.
  5. Модель решает, что делать дальше: вызвать другой инструмент, запросить уточнение или завершить работу.

Этот паттерн часто называют ReAct-циклом (reason plus act), и он лежит в основе фреймворков, таких как LangChain, LlamaIndex и функции вызова OpenAI. Вы можете реализовать всё это самостоятельно менее чем в 100 строках Python, используя просто LLM API и цикл while — фреймворки добавляют удобство, а не магию.

Инструменты делают это агентом

Модель без инструментов может только говорить. Дайте ей функции — и она может действовать. Инструменты — это обычно функции Python с описанием в виде схемы, которая указывает их имя, параметры и назначение, чтобы модель знала, когда и как их вызывать. Пример:

def get_weather(city: str) -> str:
    """Return current weather for a given city."""
    resp = requests.get(f"https://api.weather.example/v1/{city}")
    return resp.json()["summary"]

С функцией вызова OpenAI вы передаёте JSON-схему вместе с этой функцией, и модель выдаёт структурированный вызов вроде {"name": "get_weather", "arguments": {"city": "Lisbon"}} вместо свободного текста. Ваш код парсит это, запускает реальную функцию и возвращает результат как новое сообщение в беседе. Повторяйте, пока модель не получит достаточно информации для ответа.

Память и состояние

Один вызов API не помнит ничего за пределами своего контекстного окна. Агентам нужно явное состояние: список сообщений (история беседы) и часто отдельное хранилище для долгосрочных фактов. Для коротких задач достаточно Python-списка словарей, представляющих беседу. Для агентов, которым нужно запоминать информацию между сессиями, пригодится векторная база данных (Chroma, Pinecone, Qdrant) для хранения и поиска релевантной информации из прошлого через эмбеддинги.

Не переусложняйте это на начальном этапе. Удивительно много проектов с "агентами" падают не потому, что LLM слабая, а потому что управление состоянием неряшливо: дублирующиеся сообщения, неограниченный рост контекста или потеря связи между вызовом инструмента и результатом.

Минимальный рабочий пример

Вот структура базового агента, использующего OpenAI API без фреймворка:

messages = [{"role": "user", "content": "What's the weather in Lisbon?"}]

while True:
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=messages,
        tools=[weather_tool_schema],
    )
    msg = response.choices[0].message
    if msg.tool_calls:
        for call in msg.tool_calls:
            result = get_weather(**json.loads(call.function.arguments))
            messages.append(msg)
            messages.append({
                "role": "tool",
                "tool_call_id": call.id,
                "content": result,
            })
    else:
        print(msg.content)
        break

Это реальный, работающий агент. Всё остальное — стратегии планирования, координация между несколькими агентами, конвейеры поиска — строится на этом цикле.

Где он ломается

Агенты падают предсказуемо: бесконечные циклы вызовов инструментов, когда модель не понимает, что успела, галлюцинации в аргументах функций и неконтролируемые затраты на повторные вызовы дорогих инструментов. Защититесь от циклов жёсткой лимитом итераций (скажем, 10 шагов) и логируйте каждый вызов инструмента во время разработки. Проверяйте аргументы перед выполнением чего-либо, что трогает реальную систему — агент, который может отправлять письма или запускать shell-команды, нуждается в такой же обработке входных данных, как пользовательский код, потому что LLM в эффекте — это ненадёжный пользователь, генерирующий этот ввод.

Что дальше

Когда цикл работает, начинаются интересные задачи: выбор между одноагентными и многоагентными архитектурами, решение вопроса о степени автономии и надёжное тестирование агентов, когда их вывод недетерминирован. Курсы AI и Python в Korra Studio подробнее рассматривают retrieval-augmented generation, дизайн промптов и паттерны работы с инструментами, если вы хотите продолжить разработку отсюда.

Написано с помощью ИИ, проверено и опубликовано Михалом Пильхом (CISSP), Korra Studio.

Готовы пойти дальше?

Это одна заметка из базы знаний Korra Studio — платформа сочетает каждую тему с наставничеством один на один.

Начать бесплатноarrow_forward