{"title":"Собираем настоящего AI-агента: от задачи до готового проекта","url":"https://verapointmedia.com/guides/ai-agent-build-from-scratch/","markdownUrl":"https://verapointmedia.com/guides/ai-agent-build-from-scratch.md","language":"ru","category":"guides","publishedAt":"2026-05-27T10:00:00.000Z","updatedAt":"2026-05-27T10:00:00.000Z","references":["https://api.coindesk.com/v1/bpi/currentprice.json","https://api.hh.ru/vacancies?text={query}","https://openai.github.io/openai-agents-python/","https://www.anthropic.com/engineering/building-effective-agents","https://docs.crewai.com/"],"rights":"Public user-requested reading, summarization and citation allowed. Model training requires separate permission.","contentMarkdown":"# Собираем настоящего AI-агента: от задачи до готового проекта\n\n- Site: VeraPoint News\n- Section: Гайды\n- Date: 2026-05-27\n- Canonical: https://verapointmedia.com/guides/ai-agent-build-from-scratch/\n- Markdown: https://verapointmedia.com/guides/ai-agent-build-from-scratch.md\n- Summary: 💡 Хватит игрушечных примеров. Сегодня мы соберём настоящего агента, который делает реальную работу: ищет новости, анализирует их и сохраняет отчёт. Полный проект с нуля — вы сможете запустить его у себя и переделать п...\n- Target queries: создать ai агента python полный туториал; как написать ai агента самому; агент python готовый код проект; ai агент мониторинг новостей код; построить ai агента с нуля 2026\n- Tags: #ai-agents #guide #tutorial #python #project #practical #full-stack #russian\n- Image: https://verapointmedia.com/static/content-assets/guides/ai-agent-build-from-scratch/cover.webp\n\n## Sources\n\n- https://api.coindesk.com/v1/bpi/currentprice.json\n- https://api.hh.ru/vacancies?text={query}\n- https://openai.github.io/openai-agents-python/\n- https://www.anthropic.com/engineering/building-effective-agents\n- https://docs.crewai.com/\n\n---\n\n## Короткий ответ\n\n💡 Хватит игрушечных примеров. Сегодня мы соберём настоящего агента, который делает реальную работу: ищет новости, анализирует их и сохраняет отчёт. Полный проект с нуля — вы сможете запустить его у себя и переделать под свою задачу.\n\n![](https://verapointmedia.com/static/content-assets/guides/ai-agent-build-from-scratch/slide-01.webp)\n\n\n---\n\n## Что будем делать\n\nАгент-аналитик новостей. Вы говорите тему — он:\n1. Находит последние новости\n2. Анализирует и составляет краткую сводку\n3. Сохраняет результат в файл\n\nМожете заменить «новости» на «цену биткоина», «погоду в вашем городе» или «вакансии на HeadHunter» — принцип тот же.\n\n---\n\n\n![](https://verapointmedia.com/static/content-assets/guides/ai-agent-build-from-scratch/slide-02.webp)\n\n## Структура проекта\n\nПеред тем как писать код, давайте договоримся, как у нас будут лежать файлы. Это важно: в большом проекте файлы должны быть разложены по полочкам.\n\nВот как будет выглядеть наш проект:\n\n```\nnews_agent_project/           # папка проекта\n├── .env                      # здесь будут ключи (API-ключи)\n├── main.py                   # главный файл — запуск агента\n├── tools.py                  # инструменты — то, чем агент будет пользоваться\n├── requirements.txt          # список библиотек, которые нужно установить\n└── data/                     # папка для результатов\n```\n\nНичего сложного. Каждый файл отвечает за своё:\n- `main.py` — управляет агентом, запускает его, обрабатывает ошибки\n- `tools.py` — содержит функции, которые агент может вызывать\n- `.env` — хранит секретные ключи отдельно от кода\n- `data/` — сюда агент будет сохранять отчёты\n\n---\n\n## Шаг 1. Готовим окружение\n\nСоздайте папку проекта:\n\n```bash\nmkdir news_agent_project\ncd news_agent_project\n```\n\nСоздайте файл `requirements.txt` — в нём мы перечислим, какие библиотеки нужны:\n\n```\nopenai-agents\npython-dotenv\n```\n\nПервая — сам фреймворк. Вторая — для удобной работы с .env файлом.\n\nУстановите:\n\n```bash\npip install -r requirements.txt\n```\n\nТеперь создайте файл `.env` и запишите туда ваш ключ OpenAI:\n\n```\nOPENAI_API_KEY=ваш_ключ\n```\n\n**Почему в .env, а не прямо в коде?** Потому что .env файл можно добавить в `.gitignore` и случайно не опубликовать ключ на GitHub. Никогда не храните ключи в коде.\n\nСоздайте папку для результатов:\n\n```bash\nmkdir data\n```\n\n---\n\n## Шаг 2. Пишем инструменты (`tools.py`)\n\nИнструменты — это функции, которые агент может вызывать. Давайте сделаем два:\n\n1. `get_news_from_web` — ищет новости по теме\n2. `save_report` — сохраняет результат в файл\n\nСоздайте файл `tools.py`:\n\n```python\nimport datetime\nimport os\n\ndef get_news_from_web(topic: str) -> str:\n    \"\"\"\n    Ищет последние новости по заданной теме в интернете.\n    \n    Используй этот инструмент, когда нужно найти свежие новости.\n    Принимает тему запроса (например, 'AI-агенты', 'технологии', 'биткоин').\n    Возвращает список новостей с кратким описанием.\n    \"\"\"\n    # В реальном проекте здесь был бы запрос к API новостей\n    # (например, NewsAPI, или парсинг через requests + BeautifulSoup)\n    # Но для примера вернём учебные данные\n    \n    return (\n        f\"Новости по теме '{topic}' на {datetime.date.today()}:\\n\"\n        \"1. Anthropic выпустила руководство по созданию эффективных AI-агентов\\n\"\n        \"2. OpenAI представила обновлённый SDK для разработки агентов\\n\"\n        \"3. MCP становится стандартом для подключения внешних сервисов к AI\\n\"\n        \"4. Google запустила соревнование по агентному AI\"\n    )\n\ndef save_report(content: str, filename: str) -> str:\n    \"\"\"\n    Сохраняет текст отчёта в файл в папку data/.\n    \n    Вызывай этот инструмент, когда нужно сохранить результат анализа.\n    Принимает:\n    - content: текст для сохранения\n    - filename: имя файла (например, 'report_2026-05-18.txt')\n    \n    Важно: файл сохраняется в папку data/ автоматически,\n    не нужно указывать полный путь.\n    \"\"\"\n    filepath = os.path.join(\"data\", filename)\n    try:\n        with open(filepath, \"w\", encoding=\"utf-8\") as f:\n            f.write(content)\n        return f\"Готово! Отчёт сохранён в {filepath}\"\n    except Exception as e:\n        return f\"Ошибка при сохранении: {str(e)}\"\n```\n\n**Что здесь важно:**\n\n1. **Описания (`\"\"\"...\"\"\"`)** — это не просто комментарии. Модель читает их и решает, когда вызывать инструмент. Чем точнее описание, тем реже агент ошибается.\n2. **Типы параметров** — `topic: str` и `content: str` — модель их учитывает и подставляет данные правильного типа.\n3. **Обработка ошибок** — `try...except` — если что-то пошло не так, агент получит сообщение об ошибке и сможет попробовать другой путь.\n\n---\n\n## Шаг 3. Пишем главный файл (`main.py`)\n\nЭто управляющий центр. Здесь мы создаём агента, даём ему инструменты и запускаем.\n\nСоздайте `main.py`:\n\n```python\nimport os\nfrom dotenv import load_dotenv\nfrom agents import Agent, Runner\n\nload_dotenv()\n\nfrom tools import get_news_from_web, save_report\n\nnews_analyst = Agent(\n    name=\"NewsAnalyst\",\n    instructions=(\n        \"Ты — эксперт по анализу новостей. Твоя задача:\\n\"\n        \"1. Найти последние новости по теме, которую указал пользователь.\\n\"\n        \"2. Проанализировать их и составить краткую сводку — 3-5 предложений.\\n\"\n        \"3. Обязательно сохранить отчёт в файл с помощью save_report.\\n\"\n        \"4. Если новостей мало — так и скажи, ничего не выдумывай.\\n\"\n        \"5. Если инструмент вернул ошибку — сообщи пользователю.\"\n    ),\n    tools=[get_news_from_web, save_report]\n)\n\ndef main():\n    # Запрос пользователя (в реальности можно заменить на input())\n    user_query = \"Последние новости в мире AI-агентов\"\n    \n    print(f\"🤖 Запускаю агента...\")\n    print(f\"📋 Задача: {user_query}\")\n    print()\n    \n    try:\n        # Запускаем агента — он сам решает, какие инструменты вызывать\n        result = Runner.run_sync(news_analyst, user_query)\n        \n        print(\"✅ Агент завершил работу!\")\n        print()\n        print(\"📄 Ответ агента:\")\n        print(result.final_output)\n        \n    except Exception as e:\n        print(f\"❌ Критическая ошибка: {e}\")\n        print(\"Проверьте, что ключ API правильный и в .env файле.\")\n\nif __name__ == \"__main__\":\n    # Убеждаемся, что папка data существует\n    os.makedirs(\"data\", exist_ok=True)\n    main()\n```\n\n**Разберём, что тут происходит по порядку:**\n\n1. `load_dotenv()` — загружает переменные из файла `.env`. Агент найдёт ключ `OPENAI_API_KEY` и сможет общаться с моделью.\n2. `Agent(name=\"NewsAnalyst\", ...)` — создаём агента с именем и инструкцией. Обратите внимание на инструкцию: она написана как список шагов, а не как общее пожелание. Чем конкретнее — тем лучше.\n3. `tools=[get_news_from_web, save_report]` — передаём инструменты. Сами функции лежат в другом файле (`tools.py`), но мы их импортировали (взяли) оттуда.\n4. `Runner.run_sync(...)` — запускаем. Агент сам решает, в каком порядке вызывать инструменты.\n5. `try...except` — если что-то пойдёт не так (например, ключ неправильный), мы не упадём с ошибкой, а вежливо сообщим пользователю.\n\n---\n\n## Шаг 4. Запускаем!\n\nВернитесь в терминал (убедитесь, что вы в папке `news_agent_project`) и выполните:\n\n```bash\npython main.py\n```\n\nЕсли всё правильно, вы увидите:\n\n```\n🤖 Запускаю агента...\n📋 Задача: Последние новости в мире AI-агентов\n\n✅ Агент завершил работу!\n\n📄 Ответ агента:\nВот сводка последних новостей в мире AI-агентов...\n\n[а здесь будет сам ответ]\n```\n\nА в папке `data/` появится файл с отчётом.\n\n---\n\n\n![](https://verapointmedia.com/static/content-assets/guides/ai-agent-build-from-scratch/slide-03.webp)\n\n## Шаг 5. Что происходит «под капотом»\n\nКогда вы запускаете агента, происходит вот что:\n\n```\nВы: \"Найди новости про AI-агентов\"\n  ↓\n  Агент получает задачу\n  ↓\n  Агент: \"Мне нужно вызвать get_news_from_web с темой 'AI-агенты'\"\n  ↓\n  Инструмент возвращает новости\n  ↓\n  Агент: \"Теперь нужно сохранить отчёт. Вызываю save_report\"\n  ↓\n  Инструмент сохраняет файл\n  ↓\n  Агент формулирует ответ для вас\n```\n\nRunner (исполнитель) сам управляет этим циклом. Он вызывает модель, проверяет, не хочет ли она использовать инструмент, если хочет — выполняет инструмент, отправляет результат обратно модели, и так по кругу, пока задача не будет решена.\n\n---\n\n## Как переделать под свою задачу\n\nЭтот проект — шаблон. Вот как его изменить для других задач:\n\n### Мониторинг цен\nЗамените `get_news_from_web` на функцию, которая запрашивает цену через API криптобиржи:\n```python\ndef get_bitcoin_price() -> str:\n    \"\"\"Возвращает текущую цену биткоина.\"\"\"\n    # Здесь requests.get(\"https://api.coindesk.com/v1/bpi/currentprice.json\")\n    return \"Цена биткоина: $67,432\"\n```\n\n### Поиск вакансий\nЗамените на запрос к HeadHunter API:\n```python\ndef search_vacancies(query: str) -> str:\n    \"\"\"Ищет вакансии по запросу.\"\"\"\n    # requests.get(f\"https://api.hh.ru/vacancies?text={query}\")\n    return \"Найдено 5 вакансий: ...\"\n```\n\n### Сбор данных из интернета\nДобавьте `requests` и `BeautifulSoup` для настоящего парсинга, а не учебных данных.\n\n---\n\n## Про сборку и деплой — коротко\n\nСамый простой способ «запустить и забыть»:\n\n1. **Git + сервер.** Залейте проект на GitHub, настройте сервер (например, дешёвый VPS за $5/мес), запустите скрипт через `cron` — он будет выполняться по расписанию.\n2. **GitHub Actions.** Можно настроить автоматический запуск раз в день — бесплатно.\n3. **Telegram-бот.** Прикрутите отправку результата в Telegram (простая библиотека `python-telegram-bot`).\n\nПодробнее про деплой — в одном из следующих гайдов.\n\n---\n\n## Чек-лист: что вы сегодня сделали\n\n- [ ] Создали структуру проекта\n- [ ] Написали два инструмента (поиск новостей, сохранение в файл)\n- [ ] Создали агента с инструкцией\n- [ ] Запустили и получили результат\n- [ ] Поняли, как переделать под свою задачу\n\n---\n\n## Что дальше?\n\nУ нас есть работающий агент. Но у него нет памяти — он не помнит, что делал в прошлый раз. В следующем гайде я научу вас **добавлять агенту память**: краткосрочную (для диалога) и долгосрочную (чтобы помнить между сессиями).\n\n👉 [Читать: Память для AI-агентов →](https://t.me/verapavlova_ai)\n\nПропустили предыдущие гайды?\n\n👉 [Что такое AI-агент →](https://verapointmedia.com/guides/ai-agent-what-is/)\n👉 [Типы AI-агентов →](https://verapointmedia.com/guides/ai-agent-types/)\n👉 [Сравнение AI-фреймворков →](https://verapointmedia.com/guides/ai-agent-frameworks-comparison/)\n👉 [OpenAI SDK: первый агент →](https://verapointmedia.com/guides/ai-agent-openai-sdk-first-agent/)\n👉 [Claude + MCP →](https://verapointmedia.com/guides/ai-agent-claude-mcp-agent/)\n👉 [Проектирование AI-агента →](https://verapointmedia.com/guides/ai-agent-design-methodology/)\n\n---\n\n\n![](https://verapointmedia.com/static/content-assets/guides/ai-agent-build-from-scratch/slide-04.webp)\n\n## Источники\n\n- [OpenAI Agents SDK — документация](https://openai.github.io/openai-agents-python/)\n- [Building Effective Agents — Anthropic](https://www.anthropic.com/engineering/building-effective-agents)\n- [CrewAI — документация](https://docs.crewai.com/)\n\n---\n\n*Подписывайтесь на канал — каждый день новый гайд по AI-агентам.*\n\n#aiagents #guide #tutorial #python #fullproject #deploy\n\nСмежные материалы:\n- [AI-агенты](/topics/ai-agents/)\n- [MCP простыми словами](https://verapointmedia.com/guides/mcp-prostymi-slovami/)\n- [Как бизнесу использовать AI-агентов без самообмана](https://verapointmedia.com/guides/kak-biznesu-ispolzovat-ai-agentov-bez-samoobmana/)\n## Частые вопросы\n\n### Что важно понять про тему «Собираем настоящего AI-агента: от задачи до готового проекта»?\n\nНе путать красивую демонстрацию с рабочей системой: важны цель, шаги, инструменты, ограничения и проверка результата.\n\n### Чем это отличается от обычного чат-бота?\n\nЧат-бот в основном отвечает на запрос. Агентный подход работает как процесс: он может читать контекст, вызывать инструменты и вести задачу по шагам.\n\n### Когда такой подход реально нужен?\n\nКогда задача повторяется, состоит из нескольких действий и её можно проверить по понятному критерию качества.\n\n### С чего лучше начать новичку?\n\nС одного небольшого сценария, где можно ограничить права, увидеть промежуточные шаги и быстро понять, где агент помогает, а где только создаёт шум.\n"}