AI

CrewAI와 Bright Data를 활용한 다중 소스 리뷰 인텔리전스 에이전트 구축

CrewAI와 Bright Data를 활용해 자동화된 리뷰 인텔리전스 에이전트를 구축하는 단계별 방법을 알아보고, 고객 피드백을 실행 가능한 인사이트로 전환하세요.
4 분 읽기
Intelligence Agent with CrewAI and Bright Data blog image

여러 플랫폼에 흩어진 고객 리뷰는 기업에 분석 난제를 안깁니다. 수동 리뷰 모니터링은 시간이 많이 소요되며 핵심 인사이트를 놓치는 경우가 많습니다. 본 가이드는 다양한 출처의 리뷰를 자동으로 수집, 분석, 분류하는 AI 에이전트 구축 방법을 안내합니다.

배울 내용:

  • CrewAI와 Bright Data의 Web MCP를 활용한 리뷰 인텔리전스 시스템 구축 방법
  • 고객 피드백에 대한 측면 기반 감정 분석 수행 방법
  • 주제별 리뷰 분류 및 실행 가능한 인사이트 생성 방법

GitHub에서 최종 프로젝트를 확인해 보세요!

CrewAI란 무엇인가요?

CrewAI는 협업형 AI 에이전트 팀 구축을 위한 오픈소스 프레임워크입니다. 복잡한 워크플로우를 실행하기 위해 에이전트의 역할, 목표, 도구를 정의합니다. 각 에이전트는 특정 작업을 처리하면서 공동 목표를 향해 협력합니다.

CrewAI는 다음과 같이 구성됩니다:

  • 에이전트: 정의된 책임과 도구를 가진 LLM 기반 작업자
  • 작업(Task): 명확한 출력 요구사항을 가진 특정 업무
  • 도구: 데이터 추출과 같은 특수 작업을 위해 에이전트가 사용하는 기능
  • 크루(Crew): 함께 작업하는 에이전트 집합

MCP란 무엇인가요?

MCP(Model Context Protocol)는 통합 인터페이스를 통해 AI 에이전트를 외부 도구 및 데이터 소스와 연결하는 JSON-RPC 2.0 표준입니다.

Bright Data의 웹 MCP 서버는 1억 5천만 개 이상의 회전하는 주거용 IP를 통한 봇 방지 기능, 동적 콘텐츠를 위한 자바스크립트 렌더링, 스크랩된 데이터의 깔끔한 JSON 출력, 다양한 플랫폼을 위한 50개 이상의 기성 도구를 통해 웹 스크래핑 기능에 대한 직접적인 접근을 제공합니다.

구축 중인 시스템: 다중 소스 리뷰 인텔리전스 에이전트

G2, Capterra, Trustpilot, TrustRadius 등 여러 플랫폼에서 특정 기업에 대한 리뷰를 자동으로 스크래핑하고 각 플랫폼의 평점과 주요 리뷰를 가져온 다음, 측면 기반 감정 분석을 수행하고 피드백을 주제(지원, 가격, 사용 편의성)별로 분류하며 각 카테고리의 감정 점수를 매기고 실행 가능한 비즈니스 인사이트를 생성하는 CrewAI 시스템을 만들 것입니다.

필수 사항

개발 환경 설정:

  • Python 3.11 이상
  • 웹 MCP 서버용 Node.js 및 npm
  • Bright Data 계정가입 후 API 토큰 생성(무료 체험 크레딧 제공).
  • Nebius API 키Nebius AI Studio에서 키 생성( + Get API Key 클릭). 무료로 사용 가능하며 결제 프로필이 필요하지 않습니다.
  • 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
import os
import json
import pandas as pd
from datetime import datetime
from dotenv import load_dotenv
from textblob import TextBlob

load_dotenv()

Bright Data 웹 MCP 구성

인증 정보를 포함한 .env 파일을 생성하세요:

BRIGHT_DATA_API_TOKEN="your_api_token_here"
WEB_UNLOCKER_ZONE="your_web_unlocker_zone"
BROWSER_ZONE="your_browser_zone"
NEBIUS_API_KEY="your_nebius_api_key"

필요한 것:

  • API 토큰: Bright Data 대시보드에서 새 API 토큰 생성
  • 웹 언락커 영역: 부동산 사이트용 새 웹 언락커 영역 생성
  • 브라우저 API 영역: 자바스크립트 중심 부동산 사이트용 새 브라우저 API 영역 생성
  • Nebius API 키: 필수 조건에서 이미 생성됨

review_intelligence.py에서 LLM 및 웹 MCP 서버 구성:

llm = LLM(
    model="nebius/Qwen/Qwen3-30B-A3B",
    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=(
            "리뷰 플랫폼 구조에 대한 깊은 지식을 갖춘 웹 스크래핑 전문가입니다. "
            "반봇(anti-bot) 조치를 우회하고 아마존, 옐프, 구글 리뷰 등 다양한 플랫폼에서 완전한 리뷰 데이터셋을 추출하는 데 능숙합니다."
        ),
        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="비즈니스 인텔리전스 애널리스트",
        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": "John D.",
                    "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": "positive",
                    "key_themes": ["responsive", "helpful", "knowledgeable"],
                    "review_count": 45
                },
                "pricing_satisfaction": {
                    "score": 3.1,
                    "sentiment": "혼합",
                    "key_themes": ["비싼", "가치", "경쟁력 있는"],
                    "review_count": 67
                },
                "사용 편의성": {
                    "점수": 4.7,
                    "감정": "매우 긍정적",
                    "주요 주제": ["직관적", "간단함", "사용자 친화적"],
                    "리뷰 수": 89
                }
            }
        }""",
        agent=agent,
    )

인사이트 작업은 감성 분석 결과를 바탕으로 실행 가능한 비즈니스 인텔리전스를 생성합니다. 경영진 요약, 우선순위 조치, 위험 영역, 강점 식별 및 전략적 권장 사항을 제공합니다.

def build_insights_task(agent):
    return Task(
        description="감정 분석을 통해 실행 가능한 비즈니스 인사이트 생성",
        expected_output="""{
            "executive_summary": "전반적인 고객 만족도는 매우 높습니다...",
            "priority_actions": [
                "가치 전달을 통한 가격 관련 우려 사항 해결",
                "탁월한 사용 편의성 기준 유지"
            ],
            "risk_areas": ["신규 고객의 가격 민감도"],
            "strengths": ["직관적인 사용자 경험", "우수한 지원 팀"],
            "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,
                'rating': review.get('rating', 0),
                'platform': review.get('platform', '')
            })
    
    return aspect_reviews

리뷰를 주제(지원, 가격, 사용 편의성)로 분류하기

분류 함수는 키워드 매칭을 기반으로 리뷰를 지원, 가격, 사용 편의성 주제로 분류합니다. 지원 키워드에는 고객 서비스 및 지원 관련 용어가 포함됩니다. 가격 키워드는 비용, 가치, 경제성 언급을 다룹니다.

def categorize_by_aspects(reviews):
    """리뷰를 지원, 가격, 사용 편의성 주제로 분류합니다."""
    
    support_keywords = ['support', 'help', 'service', 'customer', 'response', 'assistance']
    pricing_keywords = ['가격', '비용', '비싼', '싼', '가치', '돈', '부담 없는']
    usability_keywords = ['쉬운', '어려운', '직관적인', '복잡한', '사용자 친화적인', '인터페이스']
    
    분류된 = {
        '지원': 리뷰에 대한 감정 분석(리뷰, 지원_키워드),
        '가격': 리뷰에 대한 감정 분석(리뷰, 가격_키워드),
        '사용 편의성': 리뷰에 대한 감정 분석(리뷰, 사용성_키워드)
    }
    
    분류된 반환
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
        
        # 감정 범주 결정
        if 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(
            agents=[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 블로그를 탐색하거나 상세한 웹 스크래핑 가이드에서 자세히 알아보시고, 지금 바로 고객 피드백의 가치를 극대화하세요.