Создайте команду из трёх AI-агентов: Researcher ищет данные, Analyst обрабатывает, Writer пишет статью.
# Установка CrewAI и инструментов pip install crewai crewai-tools # Настройка API ключей (добавьте в .env) # OPENAI_API_KEY=sk-... # SERPER_API_KEY=... (для поискового инструмента) from crewai import Agent, Task, Crew, Process # Создание агента — минимум: role, goal, backstory my_first_agent = Agent( role="Senior Data Analyst", goal="Проанализировать данные и найти инсайты", backstory="Опытный аналитик с 10-летним стажем в FinTech", verbose=True, allow_delegation=False ) print(f"Агент создан: {my_first_agent.role}")
from crewai_tools import SerperDevTool, WebsiteSearchTool # Инструменты для поиска search_tool = SerperDevTool() web_tool = WebsiteSearchTool() # Researcher Agent — ищет актуальную информацию researcher = Agent( role="Senior Research Analyst", goal="Найти самую актуальную информацию по заданной теме", backstory=( "Вы — ведущий исследователь с доступом к поисковым системам. " "Ваша специализация: быстрый сбор и верификация данных. " "Вы умеете отличать надёжные источники от недостоверных." ), tools=[search_tool, web_tool], verbose=True, allow_delegation=True ) # Задача для Researcher research_task = Task( description=( "Проведи исследование на тему: '{topic}'. " "Найди 5-7 ключевых фактов, трендов и статистику. " "Оформи результат в виде структурированного отчёта " "с подзаголовками и ссылками на источники." ), expected_output="Структурированный отчёт на 500+ слов с источниками", agent=researcher )
# Analyst Agent — анализирует и структурирует данные analyst = Agent( role="Data & Strategy Analyst", goal="Проанализировать исследование и выделить ключевые инсайты", backstory=( "Вы — аналитик-стратег. Ваша сильная сторона — " "выделять главное из большого объёма информации. " "Вы превращаете сырые данные в actionable рекомендации." ), verbose=True, allow_delegation=False ) # Задача для Analyst analysis_task = Task( description=( "Проанализируй отчёт исследователя по теме '{topic}'. " "Выдели ТОП-3 ключевых тренда. " "Для каждого тренда укажи: почему это важно, " "потенциальное влияние на индустрию, " "и рекомендации для бизнеса." ), expected_output="Аналитическая записка: 3 тренда + рекомендации", agent=analyst, context=[research_task] # Получает вывод research_task )
# Writer Agent — создаёт финальную статью writer = Agent( role="Senior Content Writer", goal="Написать увлекательную статью на русском языке", backstory=( "Вы — профессиональный копирайтер и технический писатель. " "Вы умеете объяснять сложные концепции простым языком. " "Ваши статьи всегда структурированы, информативны " "и оптимизированы для чтения." ), verbose=True, allow_delegation=False ) # Задача для Writer writing_task = Task( description=( "Напиши статью на русском языке на тему '{topic}', " "используя аналитическую записку аналитика. " "Структура статьи:\n" "1. Заголовок (H1) — цепляющий, с ключевым словом\n" "2. Введение — почему тема важна (2-3 абзаца)\n" "3. Три ключевых тренда (H2 для каждого)\n" "4. Заключение и прогноз\n" "Общий объём: 800-1000 слов." ), expected_output="Готовая статья 800-1000 слов на русском языке", agent=writer, context=[analysis_task], output_file="article_output.md" # Автосохранение )
# Сборка Crew — команды агентов crew = Crew( agents=[researcher, analyst, writer], tasks=[research_task, analysis_task, writing_task], process=Process.sequential, # Последовательное выполнение verbose=True, memory=True, # Включаем память между задачами planning=True # Авто-планирование шагов ) # Запуск! inputs = {"topic": "Искусственный интеллект в ритейле 2026"} result = crew.kickoff(inputs=inputs) # Результат выполнения print("="*60") print("🎯 ФИНАЛЬНЫЙ РЕЗУЛЬТАТ:") print("="*60") print(result) # Метрики выполнения print(f"\n📊 Использовано токенов: {crew.usage_metrics}")
# Создание своего Tool: Python функция → BaseTool from crewai_tools import BaseTool class SentimentAnalyzer(BaseTool): name: str = "Sentiment Analyzer" description: str = "Анализирует тональность текста: positive, negative, neutral" def _run(self, text: str) -> str: """Анализ тональности через OpenAI""" from openai import OpenAI client = OpenAI() response = client.chat.completions.create( model="gpt-4o-mini", messages=[{ "role": "system", "content": "Определи тональность: positive/negative/neutral. Только одно слово." }, { "role": "user", "content": text }], temperature=0 ) return response.choices[0].message.content.strip() # Использование кастомного инструмента sentiment_tool = SentimentAnalyzer() analyst_with_sentiment = Agent( role="Analyst", goal="Анализировать данные с учётом тональности", backstory="Эксперт-аналитик", tools=[sentiment_tool, search_tool], verbose=True )