Год назад Максим, разработчик из Екатеринбурга, написал мне в личку: «Все вокруг говорят про AI агентов, а я даже не понимаю, с чего начать. Это вообще реально сделать самому?» Максим не был джуном — пять лет опыта в Python, хороший бэкенд. Но тема казалась ему космосом.
Я ответил ему тогда: «Ты уже умеешь всё, что нужно. Просто никто не объяснил по-человечески». Через три недели он запустил своего первого агента, который автоматически разбирал его рабочую почту и создавал задачи в Notion.
Эта статья — для таких, как Максим. И для тех, кто не хочет тратить месяц на теорию, а хочет сделать рабочую вещь за выходные.
Что такое AI агент и чем он отличается от обычного ChatGPT
Это первое, что путает всех. Объясню на пальцах.
Когда вы открываете ChatGPT и пишете «Напиши мне письмо», — это просто чат. Вы спросили, он ответил. Всё. Один вопрос — один ответ. Потом вы снова пишете, снова он отвечает. Вы — оператор, ChatGPT — инструмент.
AI агент — это другая история. Агент получает цель и сам решает, как её достичь. Он может: открыть браузер, найти информацию, сохранить её в файл, отправить письмо, снова открыть браузер — и всё это без вашего участия. Вы ставите задачу один раз и уходите пить кофе.
Ключевое отличие: у агента есть инструменты (tools) и он умеет рассуждать — решать, какой инструмент использовать в каждый момент. Это называется паттерн ReAct: Reason + Act. Подумал — сделал — посмотрел на результат — подумал снова.
Вот простая схема:
━━━━━━━━━━━━━━
Архитектура AI агента
━━━━━━━━━━━━━━
Цель (ваш запрос) → Мозг агента (LLM: GPT-4, Claude, Gemini) → Планирование шагов → Выбор инструмента → Выполнение действия → Оценка результата → Следующий шаг или завершение
━━━━━━━━━━━━━━
Звучит сложно? На деле это 50–100 строк Python-кода. Давайте разберём.
Что вам понадобится: минимальный набор
Прежде чем лезть в код, честно скажу: для первого агента не нужны GPU, облачные серверы и три месяца обучения. Нужно вот что:
— Python 3.9+ (уже стоит у большинства) — API-ключ OpenAI или Anthropic (оба дают бесплатный кредит при регистрации) — Библиотека LangChain или OpenAI Agents SDK — выберете одну — Пара часов времени и желание разобраться
Я буду использовать OpenAI Agents SDK — он появился в 2025 году и заметно проще старого LangChain для старта. Если у вас нет карты для OpenAI, Claude API от Anthropic работает аналогично.
Про выбор инструментов есть отдельный разбор — AI агенты в 2026: какой фреймворк выбрать. Рекомендую прочитать после этой статьи.
Шаг 1. Устанавливаем окружение
Открываем терминал и делаем всё по порядку. Не торопитесь — каждый шаг важен.
# Создаём виртуальное окружение
python -m venv agent_env
source agent_env/bin/activate # Windows: agent_env\Scripts\activate
# Устанавливаем зависимости
pip install openai python-dotenv requests
Создаём файл .env в корне проекта:
OPENAI_API_KEY=ваш_ключ_здесь
Никогда не вставляйте ключ прямо в код. Через месяц забудете, загрузите проект на GitHub — и ключ уйдёт в открытый доступ. Это классическая ошибка новичков, которая стоит реальных денег.
Шаг 2. Пишем первого агента — поисковика
Начнём с простого: агент, который умеет искать информацию в интернете и отвечать на вопросы со ссылками на источники.
import os
from openai import OpenAI
import requests
from dotenv import load_dotenv
import json
load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# Определяем инструменты агента
def search_web(query: str) -> str:
"""Поиск информации в интернете"""
# Используем бесплатный API DuckDuckGo
url = f"https://api.duckduckgo.com/?q={query}&format=json&no_html=1"
response = requests.get(url)
data = response.json()
results = []
for topic in data.get("RelatedTopics", [])[:3]:
if "Text" in topic:
results.append(topic["Text"])
return "\n".join(results) if results else "Результаты не найдены"
# Описание инструментов для модели
tools = [
{
"type": "function",
"function": {
"name": "search_web",
"description": "Поиск информации в интернете по запросу",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Поисковый запрос"
}
},
"required": ["query"]
}
}
}
]
def run_agent(user_query: str) -> str:
messages = [
{
"role": "system",
"content": "Ты полезный ассистент. Используй поиск для актуальной информации."
},
{"role": "user", "content": user_query}
]
# Цикл рассуждения агента
while True:
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=messages,
tools=tools,
tool_choice="auto"
)
message = response.choices[0].message
# Если агент решил использовать инструмент
if message.tool_calls:
messages.append(message)
for tool_call in message.tool_calls:
if tool_call.function.name == "search_web":
args = json.loads(tool_call.function.arguments)
result = search_web(args["query"])
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": result
})
else:
# Агент дал финальный ответ
return message.content
# Запускаем
answer = run_agent("Какие AI агентные фреймворки популярны в 2026 году?")
print(answer)
Запустите это. Агент сам решит, нужен ли поиск, выполнит его и даст ответ. Именно этот цикл while True — сердце любого агента. Он крутится до тех пор, пока модель не решит, что задача выполнена.
Понимаете, что происходит? Вы не говорите «сначала сделай X, потом Y». Вы даёте цель — агент сам планирует шаги. Это принципиальное отличие от обычного скрипта.
Шаг 3. Добавляем память — без неё агент как Дори из «В поисках Немо»
По умолчанию каждый запрос к агенту — это чистый лист. Он не помнит, что вы говорили пять минут назад. Для простых задач это нормально. Для серьёзных — проблема.
Самый простой способ добавить память — хранить историю диалога:
class AgentWithMemory:
def __init__(self):
self.conversation_history = [
{
"role": "system",
"content": "Ты полезный ассистент с памятью о предыдущих разговорах."
}
]
def chat(self, user_message: str) -> str:
self.conversation_history.append({
"role": "user",
"content": user_message
})
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=self.conversation_history,
tools=tools,
tool_choice="auto"
)
assistant_message = response.choices[0].message
self.conversation_history.append(assistant_message)
return assistant_message.content
agent = AgentWithMemory()
print(agent.chat("Меня зовут Максим, я разрабатываю финтех-приложение"))
print(agent.chat("Что ты знаешь обо мне?")) # Агент вспомнит имя и контекст
Это работает, но есть проблема: контекст имеет ограниченный размер (контекстное окно). При длинных диалогах старые сообщения надо удалять или сжимать. Об этом — в статье про продвинутые техники работы с памятью агентов.
Реальные истории: что пошло не так у первопроходцев
История первая. Антон, бэкенд-разработчик, решил сделать агента, который автоматически отвечает на письма клиентов. Запустил в пятницу вечером, ушёл на выходные. В понедельник обнаружил, что агент отправил 340 писем — включая несколько десятков одному клиенту по кругу. Причина: агент вошёл в бесконечный цикл, потому что Антон не поставил лимит на количество итераций. Клиенты были недовольны.
Урок: всегда ставьте max_iterations и тестируйте на изолированном окружении.
История вторая. Наташа, аналитик данных, написала агента для сбора данных с сайтов. Код работал идеально на тестах. На продакшне агент начал делать по 500 запросов в минуту — и её IP заблокировали три крупных сайта. Она не добавила паузы между запросами.
Урок: rate limiting — это не опция, это обязательство.
История третья — моя собственная. Я сделал агента, который анализировал вакансии и составлял резюме. Дал ему доступ к файловой системе для сохранения результатов. Агент решил «оптимизировать» работу и начал перемещать файлы. Потерял три часа работы.
Урок: давайте агенту минимально необходимые права. Принцип наименьших привилегий работает и здесь.
Типичные ошибки при создании AI агента
━━━━━━━━━━━━━━
Ошибки новичков и как их избежать
━━━━━━━━━━━━━━
Нет лимита итераций
Симптом: агент крутится вечно или делает тысячи запросов Последствие: огромный счёт за API, бан IP Решение: добавьте max_iterations = 10 в цикл агента
━━━━━━━━━━━━━━
Плохой системный промпт
Симптом: агент делает странные вещи, игнорирует ограничения Последствие: непредсказуемое поведение Решение: чётко опишите роль, ограничения и формат ответа
━━━━━━━━━━━━━━
Слишком много инструментов сразу
Симптом: агент путается, выбирает не тот инструмент Последствие: плохое качество работы Решение: начните с 2–3 инструментами, добавляйте постепенно
━━━━━━━━━━━━━━
Нет обработки ошибок
Симптом: агент ломается при первой проблеме с API Последствие: задача не выполнена, нет логов Решение: оберните каждый инструмент в try/except с логированием
━━━━━━━━━━━━━━
Нет тестирования
Симптом: агент ведёт себя непредсказуемо в продакшне Последствие: как у Антона из истории выше Решение: тестируйте на sandbox-окружении минимум неделю
━━━━━━━━━━━━━━
Шаг 4. Делаем агента надёжным
Вот улучшенная версия основного цикла с защитой от типичных проблем:
import logging
import time
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def run_agent_safe(user_query: str, max_iterations: int = 10) -> str:
messages = [
{
"role": "system",
"content": """Ты полезный ассистент. Правила:
1. Используй поиск только когда нужна актуальная информация
2. Давай конкретные ответы, без лишней воды
3. Если не уверен — скажи об этом"""
},
{"role": "user", "content": user_query}
]
iteration = 0
while iteration < max_iterations:
iteration += 1
logger.info(f"Итерация {iteration}/{max_iterations}")
try:
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=messages,
tools=tools,
tool_choice="auto",
timeout=30 # Таймаут запроса
)
except Exception as e:
logger.error(f"Ошибка API: {e}")
return f"Ошибка при обращении к API: {str(e)}"
message = response.choices[0].message
if message.tool_calls:
messages.append(message)
for tool_call in message.tool_calls:
try:
if tool_call.function.name == "search_web":
args = json.loads(tool_call.function.arguments)
# Пауза между запросами — важно!
time.sleep(1)
result = search_web(args["query"])
logger.info(f"Поиск выполнен: {args['query'][:50]}...")
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": result
})
except Exception as e:
logger.error(f"Ошибка инструмента: {e}")
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": f"Ошибка: {str(e)}"
})
else:
logger.info("Агент завершил работу")
return message.content
return "Достигнут лимит итераций. Задача не завершена."
Разница с первой версией — в деталях. Логирование, таймаут, пауза между запросами, обработка ошибок на каждом уровне. Это не перфекционизм — это минимум для нормальной работы.
Что делать дальше: куда расти
Вы сделали первого агента. Это честно круто. Но это только начало. Вот карта дальнейшего пути:
Уровень 1 (вы здесь): один агент, простые инструменты, базовая память.
Уровень 2: Multi-agent системы — несколько агентов, каждый со своей специализацией. Один ищет, другой анализирует, третий пишет отчёт. Они общаются между собой. Это уже серьёзная архитектура.
Уровень 3: Агенты с долгосрочной памятью через векторные базы данных (Chroma, Pinecone). Агент помнит всё, что делал месяц назад.
Уровень 4: Автономные агенты с планировщиком задач, которые работают 24/7 без вашего участия.
Про заработок на агентах — отдельная тема. Есть люди, которые строят на этом бизнес. Разбор реальных кейсов — как зарабатывают на AI агентах в 2026.
Блок «Что чаще всего делают неправильно»
Я видел сотни попыток сделать первого агента. Вот три паттерна, которые повторяются снова и снова.
Первое: пытаются сделать всё сразу. «Хочу агента, который ищет вакансии, составляет резюме, отправляет заявки и отвечает на письма рекрутеров». Такое не работает с первой попытки. Начните с одной задачи. Доведите до рабочего состояния. Потом расширяйте.
Второе: игнорируют системный промпт. Он кажется неважным — просто текст. На деле это самая критичная часть агента. Плохой системный промпт = непредсказуемое поведение. Потратьте на него столько же времени, сколько на код.
Третье: не логируют ничего. Когда агент делает что-то странное, вы не понимаете, почему. Добавьте логирование с первой итерации — это сэкономит часы отладки.
Если хотите понять, как автоматизировать рабочие процессы через агентов без глубокого погружения в код — почитайте разбор Make.com для автоматизации с AI. Там другой подход — через no-code, но принципы те же.
FAQ: вопросы, которые задают чаще всего
Вопрос 1: Сколько стоит запускать агента? Для тестирования и небольших задач — копейки. Запрос к gpt-4o-mini стоит около $0.00015 за 1000 токенов. Агент делает 5–10 запросов за задачу. Итого — меньше цента за выполненную задачу. Серьёзные нагрузки считайте отдельно.
Вопрос 2: Можно ли без OpenAI? Карты нет. Да. Claude API от Anthropic принимает карты многих стран. Есть также бесплатные локальные модели через Ollama (Llama, Mistral) — они слабее, но работают полностью офлайн и бесплатно.
Вопрос 3: LangChain или OpenAI Agents SDK? Для старта — OpenAI Agents SDK, он проще. LangChain мощнее и гибче, но у него крутая кривая обучения. Когда освоитесь — переходите.
Вопрос 4: Агент галлюцинирует. Что делать? Нормально — все модели иногда «придумывают». Решения: давайте агенту инструменты для проверки фактов, просите указывать источники, добавляйте в промпт «если не уверен — скажи об этом».
Вопрос 5: Как безопасно давать агенту доступ к реальным системам? Принцип наименьших привилегий: только те права, которые необходимы для конкретной задачи. Создайте отдельные API-ключи с ограниченным доступом. Никогда не давайте агенту доступ к продакшн-базам без тестирования.
Итог: что вы теперь умеете
За одну статью мы прошли путь от «что такое агент» до рабочего кода с обработкой ошибок и памятью. Это не игрушка — это реальный инструмент, который можно применять в работе уже сейчас.
Главное, что нужно запомнить: агент — это LLM плюс инструменты плюс цикл. Всё остальное — детали реализации.
Начните с малого. Сделайте агента, который решает одну конкретную вашу проблему. Автоматизирует один рутинный процесс. Это даст понимание принципов лучше, чем любая теория.
Мир разработки меняется быстро. Те, кто начнёт работать с агентами сейчас, через год будут на голову выше тех, кто ждёт «правильного момента». Правильный момент — это сегодня.
Читайте также:
Как автоматизировать рутину с помощью AI в 2026 году
Топ инструментов для создания AI агентов без кода
Как заработать на AI автоматизации: реальные кейсы
Больше полезных материалов, разборов кода и реальных кейсов с AI агентами — в других статьях нашего блога.
А теперь вопрос к вам: какую задачу вы бы первым делом автоматизировали с помощью AI агента? Напишите в комментариях — интересно посмотреть, что у людей болит больше всего. Самые популярные идеи разберу в следующей статье.
Если статья была полезной — подпишитесь на канал. Здесь только практика, никакой воды и хайпа.