AI

Создание многоисточникового агента обзорной разведки с помощью CrewAI и Bright Data

Узнайте шаг за шагом, как с помощью CrewAI и Bright Data создать автоматизированный агент для анализа отзывов, превращающий отзывы клиентов в полезную информацию.
4 мин. чтения
Intelligence Agent with CrewAI and Bright Data blog image

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

Вы узнаете:

  • Как построить систему анализа отзывов с помощью CrewAI и Web MCP от Bright Data.
  • Как проводить аспектный анализ настроений в отзывах клиентов
  • Как классифицировать отзывы по темам и генерировать полезную информацию.

Ознакомьтесь с финальным проектом на GitHub!

Что такое CrewAI?

CrewAI – это фреймворк с открытым исходным кодом для создания совместных команд агентов ИИ. Вы определяете роли, цели и инструменты агентов для выполнения сложных рабочих процессов. Каждый агент выполняет определенные задачи, работая вместе над достижением общей цели.

CrewAI состоит из:

  • Агент: Работник на базе LLM с определенными обязанностями и инструментами.
  • Задача: Конкретная работа с четкими требованиями к результату
  • Инструмент: Функции, используемые агентами для выполнения специализированной работы, например извлечения данных.
  • Экипаж: Группа агентов, работающих вместе.

Что такое MCP?

MCP (Model Context Protocol) – это стандарт JSON-RPC 2.0, который соединяет агентов ИИ с внешними инструментами и источниками данных через единый интерфейс.

Web MCP-сервер Bright Data предоставляет прямой доступ к возможностям веб-скрапинга с защитой от ботов через 150M+ ротируемых IP-адресов, JavaScript-рендеринг для динамического контента, чистый JSON-вывод данных, а также более 50 готовых инструментов для различных платформ.

Что мы создаем: Интеллектуальный агент с несколькими источниками обзора

Мы создадим систему CrewAI, которая будет автоматически собирать отзывы о конкретных компаниях с различных платформ, таких как G2, Capterra, Trustpilot и TrustRadius, и получать рейтинг каждой из них, а также лучшие отзывы, выполнять аспектный анализ настроений, классифицировать отзывы по темам (поддержка, цены, простота использования), оценивать настроения для каждой категории и генерировать полезные бизнес-инсайты.

Необходимые условия

Настройте среду разработки, используя:

  • Python 3.11 или выше
  • Node.js и npm для сервера Web MCP
  • Учетная запись Bright Dataзарегистрируйтесь и создайте API-токен (доступны бесплатные пробные кредиты).
  • Ключ API Nebius – создайте ключ в Nebius AI Studio (нажмите + Получить ключ API). Вы можете использовать его бесплатно. Биллинговый профиль не требуется.
  • Виртуальное окружение Python – позволяет изолировать зависимости; см. документациюvenv.

Настройка среды

Создайте каталог проекта и установите зависимости:

python -m venv venv
# macOS/Linux: source venv/bin/activate
# Windows: venv\Scripts\activate
pip install "crewai-tools[mcp]" crewai mcp python-dotenv pandas textblob

Создайте новый файл review_intelligence.py и добавьте в него следующие импорты:

from crewai import Agent, Task, Crew, Process
from crewai_tools import MCPServerAdapter
from mcp import StdioServerParameters
from crewai.llm import LLM
импортировать os
импортировать json
import pandas as pd
from datetime import datetime
from dotenv import load_dotenv
from textblob import TextBlob

load_dotenv()

Конфигурация Bright Data Web MCP

Создайте файл .env с вашими учетными данными:

BRIGHT_DATA_API_TOKEN="ваш_api_token_здесь"
WEB_UNLOCKER_ZONE="your_web_unlocker_zone"
BROWSER_ZONE="your_browser_zone"
NEBIUS_API_KEY="your_nebius_api_key"

Вам потребуется:

  • API-токен: Сгенерируйте новый API-токен на панели управления Bright Data.
  • Зона Web Unlocker: Создайте новую зону Web Unlocker для сайтов недвижимости
  • Зона Browser API: Создайте новую зону Browser API для сайтов недвижимости, работающих на JavaScript
  • Ключ API Nebius: Уже создан в Предварительные условия

Настройте LLM и сервер Web MCP в файле review_intelligence.py:

llm = LLM(
    model="nebius/Qwen/Qwen3-235B-A22B",
    api_key=os.getenv("NEBIUS_API_KEY")
)

server_params = StdioServerParameters(
    command="npx",
    args=["@brightdata/mcp"],
    env={
        "API_TOKEN": os.getenv("BRIGHT_DATA_API_TOKEN"),
        "WEB_UNLOCKER_ZONE": os.getenv("WEB_UNLOCKER_ZONE"),
        "BROWSER_ZONE": os.getenv("BROWSER_ZONE"),
    },
)

Определение агентов и задач

Определите специализированные агенты для различных аспектов анализа отзывов. Агент по сбору отзывов извлекает отзывы покупателей с различных платформ и возвращает чистые, структурированные данные в формате JSON с текстом отзыва, оценками, датами и источником платформы. Этот агент обладает экспертными знаниями в области веб-скрейпинга, глубоким пониманием структуры платформ отзывов и способностью обходить меры защиты от ботов.

def build_review_scraper_agent(mcp_tools):
    return Agent(
        role="Сборщик данных об отзывах",
        goal=(
            "Извлекать отзывы покупателей с нескольких платформ и возвращать чистые, "
            "структурированные JSON-данные с текстом отзыва, оценками, датами и источником платформы."
        ),
        backstory=(
            "Эксперт в области веб-скреппинга с глубоким знанием структуры платформ отзывов. "
            "Умеет обходить меры по защите от ботов и извлекать полные наборы данных обзоров "
            "с Amazon, Yelp, Google Reviews и других платформ".
        ),
        tools=mcp_tools,
        llm=llm,
        max_iter=3,
        verbose=True,
    )
the agent showing the reviews

Агент анализатора настроений анализирует настроения в отзывах по трем ключевым аспектам: Качество поддержки, Удовлетворенность ценой и Простота использования. Он предоставляет числовые оценки и подробное обоснование для каждой категории. Этот агент специализируется на обработке естественного языка и анализе настроений клиентов, обладая опытом выявления эмоциональных индикаторов и специфических для каждого аспекта шаблонов отзывов.

def build_sentiment_analyzer_agent():
    return Agent(
        role="Специалист по анализу настроений",
        goal=(
            "Анализировать настроения отзывов по трем ключевым аспектам: Качество поддержки, "
            "Удовлетворенность ценой и простота использования. Предоставьте числовые оценки и "
            "подробное обоснование для каждой категории".
        ),
        backstory=(
            "Специалист по изучению данных, специализирующийся на обработке естественного языка и "
            "анализ настроения. Эксперт по выявлению эмоциональных индикаторов, контекстных подсказок, "
            "и специфических паттернов отзывов в отзывах клиентов".
        ),
        llm=llm,
        max_iter=2,
        verbose=True,
    )

Агент генератора идей преобразует результаты анализа настроений в полезные для бизнеса идеи. Он выявляет тенденции, выделяет критические проблемы и дает конкретные рекомендации по улучшению ситуации. Этот агент обладает опытом стратегического анализа, а также навыками оптимизации клиентского опыта и преобразования данных обратной связи в конкретные действия для бизнеса.

def build_insights_generator_agent():
    return Agent(
        role="Business Intelligence Analyst",
        goal=(
            "Преобразовывать результаты анализа настроений в действенные бизнес-понятия. "
            "Выявлять тенденции, выделять критические проблемы и давать конкретные "
            "рекомендации по улучшению".
        ),
        backstory=(
            "Стратегический аналитик с опытом оптимизации клиентского опыта. "
            "Опытный специалист по переводу данных обратной связи с клиентами в конкретные бизнес "
            "действия и приоритеты".
        ),
        llm=llm,
        max_iter=2,
        verbose=True,
    )

Сборка и выполнение экипажа

Создайте задачи для каждого этапа конвейера анализа. Задача скрапинга собирает отзывы с указанных страниц товаров и выводит структурированный JSON с информацией о платформе, текстом отзыва, оценками, датами и статусом проверки.

def build_scraping_task(agent, product_urls):
    return Task(
        description=f "Соскрести отзывы с этих страниц товаров: {product_urls}",
        expected_output="""{
            "reviews": [
                {
                    "platform": "amazon",
                    "review_text": "Отличный товар, быстрая доставка...",
                    "rating": 5,
                    "date": "2024-01-15",
                    "reviewer_name": "Джон Д.",
                    "verified_purchase": true
                }
            ],
            "total_reviews": 150,
            "platforms_scraped": ["amazon", "yelp"]
        }""",
        agent=agent,
    )

Задача анализа настроений обрабатывает отзывы для анализа аспектов поддержки, ценообразования и простоты использования. Она возвращает числовые оценки, классификацию настроений, ключевые темы и количество отзывов для каждой категории.

def build_sentiment_analysis_task(agent):
    return Task(
        description="Анализ настроений для аспектов поддержки, ценообразования и простоты использования",
        expected_output="""{
            "aspect_analysis": {
                "support_quality": {
                    "score": 4.2,
                    "sentiment": "положительный",
                    "key_themes": ["отзывчивый", "полезный", "знающий"],
                    "review_count": 45
                },
                "pricing_satisfaction": {
                    "score": 3.1,
                    "sentiment": "смешанный",
                    "key_themes": ["expensive", "value", "competitive"],
                    "review_count": 67
                },
                "ease_of_use": {
                    "score": 4.7,
                    "sentiment": "очень положительно",
                    "key_themes": ["интуитивный", "простой", "удобный"],
                    "review_count": 89
                }
            }
        }""",
        agent=agent,
    )

Задача Insights генерирует практическую бизнес-аналитику на основе результатов анализа настроений. Она предоставляет резюме руководителей, приоритетные действия, зоны риска, определение сильных сторон и стратегические рекомендации.

def build_insights_task(agent):
    return Task(
        description="Генерировать действенные бизнес-инсайты из результатов анализа настроений",
        expected_output="""{
            "executive_summary": "Общая удовлетворенность клиентов высока...",
            "priority_actions": [
                "Устранение проблем с ценами путем информирования о стоимости",
                "Поддерживать отличные стандарты простоты использования"
            ],
            "risk_areas": ["Чувствительность к ценам среди новых клиентов"],
            "сильные стороны": ["Интуитивно понятный пользовательский опыт", "Качественная команда поддержки"],
            "recommended_focus": "Оптимизация ценовой стратегии"
        }""",
        agent=agent,
    )

Анализ настроения на основе аспектов

Добавьте функции анализа настроения, которые определяют конкретные аспекты, упомянутые в отзывах, и вычисляют баллы настроения для каждой интересующей области.

def analyze_aspect_sentiment(reviews, aspect_keywords):
    """Анализируем настроения для конкретных аспектов, упомянутых в отзывах."""
    aspect_reviews = []
    
    for review in reviews:
        text = review.get('review_text', '').lower()
        if any(keyword in text for keyword in aspect_keywords):
            blob = TextBlob(review['review_text'])
            sentiment_score = blob.sentiment.polarity
            
            aspect_reviews.append({
                'text': review['review_text'],
                'sentiment_score': sentiment_score,
                'рейтинг': review.get('рейтинг', 0),
                'platform': review.get('platform', '')
            })
    
    return aspect_reviews

Категоризация отзывов по темам (поддержка, ценообразование, удобство использования)

Функция категоризации распределяет отзывы по темам “Поддержка”, “Ценообразование” и “Простота использования” на основе соответствия ключевым словам. Ключевые слова поддержки включают термины, связанные с обслуживанием клиентов и помощью. Ключевые слова Pricing включают упоминания о стоимости, ценности и доступности.

def categorize_by_aspects(reviews):
    """Категоризация отзывов по темам "Поддержка", "Цена" и "Простота использования"."""
    
    support_keywords = ['support', 'help', 'service', 'customer', 'response', 'assistance']
    pricing_keywords = ['price', 'cost', 'expensive', 'cheap', 'value', 'money', 'affordable']
    usability_keywords = ['easy', 'difficult', 'intuitive', 'complicated', 'user-friendly', 'interface']
    
    categorized = {
        'поддержка': analyze_aspect_sentiment(reviews, support_keywords),
        'ценообразование': analyze_aspect_sentiment(reviews, pricing_keywords),
        'ease_of_use': analyze_aspect_sentiment(reviews, usability_keywords)
    }
    
    return categorized
agent returning the categorized reviews

Оценка настроения для каждой темы

Реализуйте логику подсчета баллов, которая преобразует анализ настроения в числовые рейтинги и значимые категории.

def calculate_aspect_scores(categorized_reviews):
    """Рассчитываем числовые оценки для каждой категории аспектов."""
    
    scores = {}
    
    for aspect, reviews in categorized_reviews.items():
        if not reviews:
            scores[aspect] = {'score': 0, 'count': 0, 'sentiment': 'neutral'}
            continue
            
        # Вычисление среднего балла настроения
        sentiment_scores = [r['sentiment_score'] for r in reviews]
        avg_sentiment = sum(sentiment_scores) / len(sentiment_scores)
        
        # Преобразование в шкалу 1-5
        normalized_score = ((avg_sentiment + 1) / 2) * 5
        
        # Определите категорию настроения
        если avg_sentiment > 0,3:
            sentiment_category = 'positive'
        elif avg_sentiment < -0.3:
            sentiment_category = 'negative'
        else:
            sentiment_category = 'neutral'
            
        scores[aspect] = {
            'score': round(normalized_score, 1),
            'count': len(reviews),
            'sentiment': sentiment_category,
            'raw_sentiment': round(avg_sentiment, 2)
        }
    
    return scores

Формирование окончательного отчета об исследованиях

Завершите выполнение рабочего процесса, последовательно запустив все агенты и задачи. Основная функция создает специализированных агентов для сбора информации, анализа настроений и формирования аналитического отчета. Она собирает этих агентов в команду с последовательной обработкой задач.

def analyze_reviews(product_urls):
    """Основная функция для организации рабочего процесса анализа отзывов."""
    
    with MCPServerAdapter(server_params) as mcp_tools:
        # Создаем агентов
        scraper_agent = build_review_scraper_agent(mcp_tools)
        sentiment_agent = build_sentiment_analyzer_agent()
        insights_agent = build_insights_generator_agent()
        
        # Создание задач
        scraping_task = build_scraping_task(scraper_agent, product_urls)
        sentiment_task = build_sentiment_analysis_task(sentiment_agent)
        insights_task = build_insights_task(insights_agent)
        
        # Собрать команду
        crew = Crew(
            агенты=[scraper_agent, sentiment_agent, insights_agent],
            tasks=[scraping_task, sentiment_task, insights_task],
            process=Process.sequential,
            verbose=True
        )
        
        return crew.kickoff()

if __name__ == "__main__":
    product_urls = [
        "<https://www.amazon.com/product-example-1>",
        "<https://www.yelp.com/biz/business-example>"
    ]
    
    try:
        result = analyze_reviews(product_urls)
        print("Анализ отзывов завершен!")
        print(json.dumps(result, indent=2))
    except Exception as e:
        print(f "Анализ не удался: {str(e)}")

Запустите анализ:

python review_intelligence.py
Agent starting the task

Вы увидите в консоли ход мыслей агентов, как каждый из них планирует и выполняет свои задачи. Система покажет, как это происходит:

  1. Извлечение комплексных данных об отзывах с различных платформ
  2. Анализ конкурентных преимуществ и позиционирования на рынке
  3. Обработка шаблонов настроений и оценка качества отзывов
  4. Выявление упоминаний о характеристиках и анализ ценообразования
  5. Предоставление стратегических рекомендаций и предупреждений о рисках
Final analysis results

Заключение

Автоматизация анализа отзывов с помощью CrewAI и мощной платформы веб-данных Bright Data позволит вам получить более глубокие сведения о клиентах, оптимизировать конкурентный анализ и принимать более разумные бизнес-решения. Благодаря продуктам Bright Data и ведущим в отрасли решениям для защиты от ботов вы сможете масштабировать сбор отзывов и анализ настроений в любой отрасли. Для получения информации о последних стратегиях и обновлениях изучите блог Bright Data или узнайте больше в наших подробных руководствах по веб-скреппингу, чтобы начать максимизировать ценность отзывов ваших клиентов уже сегодня.

Вас также может заинтересовать

Web Data

Управляемый или собственный сбор данных? Как выбрать правильный подход

Узнайте, какой способ сбора данных выбрать – собственный или управляемый – и как каждый подход влияет на стоимость, скорость, соответствие требованиям и масштабируемость.
1 мин. чтения
AI Data Mapping
AI

Картирование данных ИИ: Полное руководство

Узнайте, как искусственный интеллект революционизирует отображение данных, повышает точность и делает интеграцию веб-данных в аналитику простой и эффективной.
1 мин. чтения
AI Data Enrichment
AI

Обогащение данных с помощью ИИ: Улучшение данных для принятия более разумных решений

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