Руководство по программированию для создания иерархической структуры агентов-супервизоров с помощью CrewAI и Google Gemini для координации мультиагентных рабочих процессов

В этом руководстве мы покажем вам, как спроектировать и реализовать продвинутую структуру агентов-супервизоров, используя CrewAI с моделью Google Gemini. Мы создадим специализированных агентов, включая исследователей, аналитиков, писателей и рецензентов, и подчиним их агенту-супервизору, который будет координировать и контролировать их работу.

Установка библиотек и модулей

Для начала установим библиотеки и необходимые модули для настройки нашей структуры CrewAI. Здесь мы определяем перечисление TaskPriority, которое помогает нам назначать разные уровни срочности и важности для каждой создаваемой нами задачи.

«`python
from enum import Enum

class TaskPriority(Enum):
LOW = 1
MEDIUM = 2
HIGH = 3
CRITICAL = 4
«`

Определение класса TaskConfig

«`python
@dataclass
class TaskConfig:
description: str
expected_output: str
priority: TaskPriority
maxexecutiontime: int = 300
requireshumaninput: bool = False
«`

Класс SupervisorFramework

«`python
class SupervisorFramework:
«»»
Advanced Supervisor Agent Framework using CrewAI
Manages multiple specialized agents with hierarchical coordination
«»»

def init(self, geminiapikey: str, serperapikey: str = None):
«»»
Initialize the supervisor framework

Args:
geminiapikey: Google Gemini API key (free tier)
serperapikey: Serper API key for web search (optional, has free tier)
«»»
os.environ[«GOOGLEAPIKEY»] = geminiapikey
if serperapikey:
os.environ[«SERPERAPIKEY»] = serperapikey

self.llm = ChatGoogleGenerativeAI(
model=»gemini-1.5-flash»,
temperature=0.7,
max_tokens=2048
)

self.tools = []
if serperapikey:
self.tools.append(SerperDevTool())

self.agents = {}
self.supervisor = None
self.crew = None

print(» SupervisorFramework initialized successfully!»)
print(f» LLM Model: {self.llm.model}»)
print(f» Available tools: {len(self.tools)}»)
«`

Создание агентов

«`python
def createresearchagent(self) -> Agent:
«»»Create a specialized research agent»»»
return Agent(
role=»Senior Research Analyst»,
goal=»Conduct comprehensive research and gather accurate information on any given topic»,
backstory=»»»You are an expert research analyst with years of experience in
information gathering, fact-checking, and synthesizing complex data from multiple sources.
You excel at finding reliable sources and presenting well-structured research findings.»»»,
verbose=True,
allow_delegation=False,
llm=self.llm,
tools=self.tools,
max_iter=3,
memory=True
)
«`

Настройка агентов

«`python
def setup_agents(self):
«»»Initialize all agents in the framework»»»
print(» Setting up specialized agents…»)

self.agents = {
‘researcher’: self.createresearchagent(),
‘analyst’: self.createanalystagent(),
‘writer’: self.createwriteragent(),
‘reviewer’: self.createrevieweragent()
}

self.supervisor = self.createsupervisoragent()

print(f» Created {len(self.agents)} specialized agents + 1 supervisor»)

for role, agent in self.agents.items():
print(f» └── {role.title()}: {agent.role}»)
«`

Создание рабочего процесса

«`python
def createtaskworkflow(self, topic: str, task_configs: Dict[str, TaskConfig]) -> List[Task]:
«»»
Create a comprehensive task workflow

Args:
topic: Main topic/project focus
task_configs: Dictionary of task configurations

Returns:
List of CrewAI Task objects
«»»
tasks = []

if ‘research’ in task_configs:
config = task_configs[‘research’]
research_task = Task(
description=f»{config.description} Focus on: {topic}»,
expectedoutput=config.expectedoutput,
agent=self.agents[‘researcher’]
)
tasks.append(research_task)

# Аналогично для анализа, написания и рецензирования

supervisor_task = Task(
description=f»»»As the project supervisor, coordinate the entire workflow for: {topic}.
Monitor progress, ensure quality standards, resolve any conflicts between agents,
and provide final project oversight. Ensure all deliverables meet requirements.»»»,
expected_output=»»»A comprehensive project summary including:
— Executive summary of all completed work
— Quality assessment of deliverables
— Recommendations for improvements or next steps
— Final project status report»»»,
agent=self.supervisor,
context=tasks
)
tasks.append(supervisor_task)

return tasks
«`

Выполнение проекта

«`python
def execute_project(self,
topic: str,
task_configs: Dict[str, TaskConfig],
process_type: Process = Process.hierarchical) -> Dict[str, Any]:
«»»
Execute a complete project using the supervisor framework

Args:
topic: Main project topic
task_configs: Task configurations
process_type: CrewAI process type (hierarchical recommended for supervisor)

Returns:
Dictionary containing execution results
«»»
print(f» Starting project execution: {topic}»)
print(f» Process type: {process_type.value}»)

if not self.agents or not self.supervisor:
self.setup_agents()

tasks = self.createtaskworkflow(topic, task_configs)
print(f» Created {len(tasks)} tasks in workflow»)

crew_agents = list(self.agents.values()) + [self.supervisor]

self.crew = Crew(
agents=crew_agents,
tasks=tasks,
process=process_type,
manager_llm=self.llm,
verbose=True,
memory=True
)

print(» Executing project…»)
try:
result = self.crew.kickoff()

return {
‘status’: ‘success’,
‘result’: result,
‘topic’: topic,
‘tasks_completed’: len(tasks),
‘agentsinvolved’: len(crewagents)
}

except Exception as e:
print(f» Error during execution: {str(e)}»)
return {
‘status’: ‘error’,
‘error’: str(e),
‘topic’: topic
}
«`

Мы определяем гибкий класс данных TaskConfig для захвата намерений каждой задачи, ожидаемого результата, приоритета и требований ко времени выполнения, стандартизируя таким образом рабочий процесс в системе. Затем мы создаём SupervisorFramework, который подключает Gemini, дополнительные поисковые инструменты и скоординированную команду специализированных агентов, чтобы организовать работу по принципу «исследование → анализ → написание → рецензирование» под руководством агента-супервизора в режиме реального времени.

Мы создаём вспомогательную функцию createsampletask_configs(), которая определяет стандартные чертежи задач для исследования, анализа, написания и рецензирования. Устанавливая чёткие описания, ожидаемые результаты и приоритеты, мы гарантируем, что наши агенты точно знают, что нужно предоставить, и важность каждого шага в рабочем процессе.

В заключение мы видим, как Supervisor Framework позволяет нам систематически управлять сложными проектами, используя нескольких специализированных агентов, работающих согласованно. Теперь мы можем выполнять задачи по исследованию, анализу, написанию и рецензированию в рамках скоординированного рабочего процесса, при этом супервизор обеспечивает качество и согласованность на каждом этапе. С такой настройкой мы готовы эффективно работать над реальными проектами, превращая абстрактные цели в действенные, высококачественные результаты.

1. Какие инструменты и библиотеки используются для создания иерархической структуры агентов-супервизоров в данном руководстве?

В данном руководстве используются CrewAI и модель Google Gemini. Для настройки структуры CrewAI устанавливаются необходимые библиотеки и модули.

2. Какие классы и объекты определены для управления специализированными агентами в иерархической структуре?

Для управления специализированными агентами в иерархической структуре определены следующие классы и объекты:
* класс TaskPriority для назначения уровней срочности и важности задачам;
* класс TaskConfig для захвата намерений каждой задачи, ожидаемого результата, приоритета и требований ко времени выполнения;
* класс SupervisorFramework для подключения Gemini, дополнительных поисковых инструментов и скоординированной команды специализированных агентов;
* класс Agent для создания специализированных агентов (исследователей, аналитиков, писателей и рецензентов);
* класс Task для создания задач для агентов;
* класс Crew для организации работы агентов.

3. Какие шаги необходимо выполнить для создания рабочего процесса с использованием SupervisorFramework?

Для создания рабочего процесса с использованием SupervisorFramework необходимо выполнить следующие шаги:
1. Определить перечисление TaskPriority.
2. Определить класс TaskConfig.
3. Создать класс SupervisorFramework.
4. Создать специализированных агентов (исследователей, аналитиков, писателей и рецензентов).
5. Настроить агентов в рамках SupervisorFramework.
6. Создать рабочий процесс с помощью метода createtaskworkflow.
7. Выполнить проект с помощью метода execute_project.

4. Какие аргументы принимает метод createtaskworkflow и что он возвращает?

Метод createtaskworkflow принимает следующие аргументы:
* topic — основная тема или проектный фокус;
* task_configs — словарь конфигураций задач.

Метод возвращает список объектов Task.

Источник