Туториал 2: Команда агентов для проекта
Строим мульти-агентную систему: PM, аналитик, разработчик и тестировщик работают вместе.
CrewAI + Ollama — идеально для твоей цели.
← Туториалы · Первый агент · Агент-программист → · 🇬🇧 English
Что вы сделаете
Команду из 4 агентов, которые работают над проектом:
- PM-агент — ставит задачи, назначает исполнителей, проверяет результаты
- Аналитик — собирает требования и пишет спецификации
- Разработчик — пишет код по спецификации
- Тестировщик — проверяет код и ищет баги
Агенты работают последовательно: каждый получает результат предыдущего и делает свою часть.
Шаг 1: Установка
pip install crewai
Шаг 2: Код команды
Создайте файл agent_team.py:
import json
import requests
from typing import List, Dict
OLLAMA = "http://localhost:11434/api/chat"
MODEL = "qwen3.5:4b"
class SimpleAgent:
"""Базовый агент с ролью и задачей."""
def __init__(self, name: str, role: str, goal: str, system_prompt: str):
self.name = name
self.role = role
self.goal = goal
self.system_prompt = system_prompt
def run(self, task: str, context: str = "") -> str:
"""Выполняет задачу с учётом контекста."""
full_prompt = (
f"Твоя роль: {self.role}\n"
f"Твоя цель: {self.goal}\n\n"
f"Контекст проекта:\n{context}\n\n"
f"Задача: {task}"
)
response = requests.post(OLLAMA, json={
"model": MODEL,
"messages": [
{"role": "system", "content": self.system_prompt},
{"role": "user", "content": full_prompt}
],
"stream": False
})
return response.json()["message"]["content"]
class ProjectTeam:
"""Оркестратор команды агентов."""
def __init__(self):
self.pm = SimpleAgent(
name="PM",
role="Project Manager",
goal="Координировать команду, ставить задачи, проверять результаты",
system_prompt=(
"Ты — опытный Project Manager. Твоя задача — разбить проект "
"на чёткие задачи, назначить их команде и проверить результат. "
"После каждого этапа пиши краткое резюме: что сделано, что дальше."
)
)
self.analyst = SimpleAgent(
name="Аналитик",
role="System Analyst",
goal="Собрать требования и написать спецификацию",
system_prompt=(
"Ты — системный аналитик. Превращаешь расплывчатые идеи "
"в чёткие технические требования. Пиши спецификацию в формате:\n"
"## Функциональные требования\n## Нефункциональные требования\n## User Stories"
)
)
self.developer = SimpleAgent(
name="Разработчик",
role="Software Developer",
goal="Реализовать код по спецификации",
system_prompt=(
"Ты — Python-разработчик. Пиши код с type hints и docstrings. "
"Используй современные практики. "
"Выводи ТОЛЬКО код, без лишних комментариев."
)
)
self.tester = SimpleAgent(
name="Тестировщик",
role="QA Engineer",
goal="Проверить код, найти баги, написать тесты",
system_prompt=(
"Ты — QA-инженер. Проверяй код на:\n"
"- Ошибки и баги\n"
"- Граничные случаи\n"
"- Безопасность\n"
"- Соответствие спецификации\n\n"
"Если нашёл баг — опиши его. Если всё хорошо — подтверди."
)
)
def run(self, project_description: str) -> str:
"""Запускает полный цикл работы команды."""
print("\n" + "=" * 50)
print(f"🚀 ПРОЕКТ: {project_description[:50]}...")
print("=" * 50)
# Этап 1: PM ставит задачу
print("\n📋 Этап 1: PM → Аналитик")
task = self.pm.run(
f"Сформулируй задачу для аналитика по проекту: {project_description}"
)
print(f" PM: {task[:200]}...")
# Этап 2: Аналитик пишет спецификацию
print("\n📋 Этап 2: Аналитик пишет спецификацию")
spec = self.analyst.run(
f"Напиши спецификацию для проекта: {project_description}",
context=f"Задача от PM: {task}"
)
print(f" Аналитик: {spec[:300]}...")
# Этап 3: Разработчик пишет код
print("\n📋 Этап 3: Разработчик пишет код")
code = self.developer.run(
f"Реализуй код по спецификации",
context=f"Спецификация:\n{spec}"
)
print(f" Разработчик: {code[:300]}...")
# Этап 4: Тестировщик проверяет
print("\n📋 Этап 4: Тестировщик проверяет код")
review = self.tester.run(
f"Проверь код и спецификацию",
context=f"Спецификация:\n{spec}\n\nКод:\n{code}"
)
print(f" Тестировщик: {review[:300]}...")
# Этап 5: PM подводит итог
print("\n📋 Этап 5: PM подводит итог")
summary = self.pm.run(
"Подведи итог работы команды по проекту",
context=(
f"Спецификация:\n{spec}\n\n"
f"Код:\n{code}\n\n"
f"Рецензия:\n{review}"
)
)
return summary
# === Точка входа ===
if __name__ == "__main__":
team = ProjectTeam()
project = (
"TODO-приложение: Flask API для управления задачами. "
"Нужны CRUD-операции, SQLite, REST-эндпоинты."
)
result = team.run(project)
print("\n" + "=" * 50)
print("📌 ИТОГ ПРОЕКТА:")
print(result)
print("=" * 50)
Шаг 3: Запуск
python agent_team.py
Шаг 4: Что вы увидите
==================================================
🚀 ПРОЕКТ: TODO-приложение: Flask API для управления...
==================================================
📋 Этап 1: PM → Аналитик
PM: Аналитик, необходимо разработать TODO-приложение...
📋 Этап 2: Аналитик пишет спецификацию
Аналитик: ## Функциональные требования
1. Создание задачи...
📋 Этап 3: Разработчик пишет код
Разработчик: from flask import Flask...
📋 Этап 4: Тестировщик проверяет код
Тестировщик: Код соответствует спецификации...
📋 Этап 5: PM подводит итог
PM: Проект завершён. Создано TODO-приложение...
CrewAI-версия (для реальных проектов)
from crewai import Agent, Task, Crew, Process, LLM
llm = LLM(model="ollama/qwen3.5:4b", base_url="http://localhost:11434")
# Агенты
pm = Agent(
role="Project Manager",
goal="Координировать команду",
backstory="Опытный PM с 10-летним стажем",
llm=llm
)
analyst = Agent(
role="System Analyst",
goal="Написать спецификацию",
backstory="Технический писатель с опытом в разработке",
llm=llm
)
developer = Agent(
role="Python Developer",
goal="Реализовать код",
backstory="Senior Python-разработчик",
llm=llm
)
tester = Agent(
role="QA Engineer",
goal="Проверить код",
backstory="Дотошный тестировщик",
llm=llm
)
# Задачи
task_spec = Task(description="Создать спецификацию TODO-приложения", agent=analyst)
task_code = Task(description="Реализовать API по спецификации", agent=developer)
task_test = Task(description="Проверить код и написать тесты", agent=tester)
# Иерархическая команда
crew = Crew(
agents=[pm, analyst, developer, tester],
tasks=[task_spec, task_code, task_test],
process=Process.hierarchical,
manager_llm=llm,
verbose=True
)
result = crew.kickoff()
Как расширить команду
| Роль | Инструменты | Что даёт |
|---|---|---|
| DevOps | Docker, CI/CD | Деплой и инфраструктура |
| Дизайнер | Figma API | UI/UX-макеты |
| Frontend | React, HTML/CSS | Веб-интерфейс |
| Security | SAST, DAST | Аудит безопасности |
Что дальше
| Если хотите | Переходите | |————-|———–| | Создать coding-агента | 03-coding-agent.ru.md | | Понять архитектуру мульти-агентных систем | ../multi-agent.ru.md | | Настроить память для команды | ../memory.ru.md | | Вернуться к туториалам | README.ru.md | —
В разделе: 01-first-agent · 02-agent-team · 03-coding-agent
Связанные разделы: AI-агенты · Нулевой уровень · Локальные модели
Навигация: ← Туториалы · ↑ На главную · 🇬🇧 English