Отзывы клиентов, разбросанные по нескольким платформам, создают проблемы для анализа. Ручной мониторинг отзывов отнимает много времени и часто упускает из виду важные моменты. В этом руководстве показано, как создать ИИ-агент, который будет автоматически собирать, анализировать и классифицировать отзывы из разных источников.
Вы узнаете:
- Как построить систему анализа отзывов с помощью 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,
)

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

Оценка настроения для каждой темы
Реализуйте логику подсчета баллов, которая преобразует анализ настроения в числовые рейтинги и значимые категории.
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

Вы увидите в консоли ход мыслей агентов, как каждый из них планирует и выполняет свои задачи. Система покажет, как это происходит:
- Извлечение комплексных данных об отзывах с различных платформ
- Анализ конкурентных преимуществ и позиционирования на рынке
- Обработка шаблонов настроений и оценка качества отзывов
- Выявление упоминаний о характеристиках и анализ ценообразования
- Предоставление стратегических рекомендаций и предупреждений о рисках

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