Gemini와 CrewAI로 고객 지원 분석하기

Gemini와 CrewAI로 고객 지원 분석하기

CrewAI는 복잡한 목표를 달성하기 위해 협력하는 자율 AI 에이전트를 오케스트레이션하는 프레임워크예요. 이 예시에서는 고객 지원 데이터를 분석해 문제를 식별하고 프로세스 개선을 제안하는 다중 에이전트 시스템을 Gemini로 구축해 봐요.

출처: 원문

본문

CrewAI는 복잡한 목표를 달성하기 위해 협력하는 자율 AI 에이전트를 오케스트레이션하는 프레임워크예요. 역할, 목표, 배경 스토리를 지정해 에이전트를 정의하고, 그다음 작업(task)을 정의할 수 있어요.

이 예시는 Gemini 3 Flash를 사용해 고객 지원 데이터를 분석하고 문제를 식별하며 프로세스 개선을 제안하는 다중 에이전트 시스템을 구축하는 방법을 보여줘요. 최종 산출물은 Chief Operating Officer(COO)가 읽는 보고서예요.

이 가이드에서 만들 "크루(crew)"는 다음 작업을 수행하는 AI 에이전트로 구성돼요:

  1. 고객 지원 데이터를 가져와 분석 (이 예시에서는 시뮬레이션)
  2. 반복되는 문제와 프로세스 병목 식별
  3. 실행 가능한 개선 제안
  4. COO가 읽기에 적합한 간결한 보고서로 정리

Gemini API 키가 필요해요. 아직 없으면 Google AI Studio에서 발급받을 수 있어요.

pip install "crewai[tools]"

Gemini API 키를 GEMINI_API_KEY 환경 변수로 설정한 뒤, CrewAI가 Gemini 모델을 사용하도록 구성하세요.

import os
from crewai import LLM

gemini_api_key = os.getenv("GEMINI_API_KEY")

gemini_llm = LLM(
    model='gemini/gemini-3.8-flash',
    api_key=gemini_api_key,
    temperature=1.0  # Use the Gemini 3 recommended temperature
)

구성 요소 정의

CrewAI 애플리케이션은 Tools(도구), Agents(에이전트), Tasks(작업), 그리고 Crew(크루) 자체로 구성해요. 각 구성 요소를 살펴볼게요.

도구 (Tools)

도구는 에이전트가 외부 세계와 상호작용하거나 특정 작업을 수행하는 데 사용하는 능력이에요. 여기서는 고객 지원 데이터를 가져오는 것을 시뮬레이션하는 플레이스홀더 도구를 정의해요. 실제 애플리케이션에서는 데이터베이스, API, 파일 시스템에 연결하게 돼요. 도구에 대한 자세한 내용은 CrewAI tools 가이드를 참고하세요.

from crewai.tools import BaseTool

# Placeholder tool for fetching customer support data
class CustomerSupportDataTool(BaseTool):
    name: str = "Customer Support Data Fetcher"
    description: str = (
      "Fetches recent customer support interactions, tickets, and feedback. "
      "Returns a summary string.")

    def _run(self, argument: str) -> str:
        # In a real scenario, this would query a database or API.
        # For this example, return simulated data.
        print(f"--- Fetching data for query: {argument} ---")
        return (
            """Recent Support Data Summary:
- 50 tickets related to 'login issues'. High resolution time (avg 48h).
- 30 tickets about 'billing discrepancies'. Mostly resolved within 12h.
- 20 tickets on 'feature requests'. Often closed without resolution.
- Frequent feedback mentions 'confusing user interface' for password reset.
- High volume of calls related to 'account verification process'.
- Sentiment analysis shows growing frustration with 'login issues' resolution time.
- Support agent notes indicate difficulty reproducing 'login issues'."""
        )

support_data_tool = CustomerSupportDataTool()

에이전트 (Agents)

에이전트는 크루 안의 개별 AI 작업자예요. 각 에이전트는 특정 role, goal, backstory, 할당된 llm, 선택적 tools를 가져요. 에이전트에 대한 자세한 내용은 CrewAI agents 가이드를 참고하세요.

from crewai import Agent

# Agent 1: Data analyst
data_analyst = Agent(
    role='Customer Support Data Analyst',
    goal='Analyze customer support data to identify trends, recurring issues, and key pain points.',
    backstory=(
        """You are an expert data analyst specializing in customer support operations.
        Your strength lies in identifying patterns and quantifying problems from raw support data."""
    ),
    verbose=True,
    allow_delegation=False,  # This agent focuses on its specific task
    tools=[support_data_tool],  # Assign the data fetching tool
    llm=gemini_llm  # Use the configured Gemini LLM
)

# Agent 2: Process optimizer
process_optimizer = Agent(
    role='Process Optimization Specialist',
    goal='Identify bottlenecks and inefficiencies in current support processes based on the data analysis. Propose actionable improvements.',
    backstory=(
        """You are a specialist in optimizing business processes, particularly in customer support.
        You excel at pinpointing root causes of delays and inefficiencies and suggesting concrete solutions."""
    ),
    verbose=True,
    allow_delegation=False,
    # No tools needed, this agent relies on the context provided by data_analyst.
    llm=gemini_llm
)

# Agent 3: Report writer
report_writer = Agent(
    role='Executive Report Writer',
    goal='Compile the analysis and improvement suggestions into a concise, clear, and actionable report for the COO.',
    backstory=(
        """You are a skilled writer adept at creating executive summaries and reports.
        You focus on clarity, conciseness, and highlighting the most critical information and recommendations for senior leadership."""
    ),
    verbose=True,
    allow_delegation=False,
    llm=gemini_llm
)

작업 (Tasks)

작업은 에이전트의 구체적인 할 일을 정의해요. 각 작업은 description, expected_output을 가지며 agent에 할당돼요. 작업은 기본적으로 순차적으로 실행되며 이전 작업의 컨텍스트를 포함해요. 작업에 대한 자세한 내용은 CrewAI tasks 가이드를 참고하세요.

from crewai import Task

# Task 1: Analyze data
analysis_task = Task(
    description=(
        """Fetch and analyze the latest customer support interaction data (tickets, feedback, call logs)
        focusing on the last quarter. Identify the top 3-5 recurring issues, quantify their frequency
        and impact (e.g., resolution time, customer sentiment). Use the Customer Support Data Fetcher tool."""
    ),
    expected_output=(
        """A summary report detailing the key findings from the customer support data analysis, including:
- Top 3-5 recurring issues with frequency.
- Average resolution times for these issues.
- Key customer pain points mentioned in feedback.
- Any notable trends in sentiment or support agent observations."""
    ),
    agent=data_analyst  # Assign task to the data_analyst agent
)

# Task 2: Identify bottlenecks and suggest improvements
optimization_task = Task(
    description=(
        """Based on the data analysis report provided by the Data Analyst, identify the primary bottlenecks
        in the support processes contributing to the identified issues (especially the top recurring ones).
        Propose 2-3 concrete, actionable process improvements to address these bottlenecks.
        Consider potential impact and ease of implementation."""
    ),
    expected_output=(
        """A concise list identifying the main process bottlenecks (e.g., lack of documentation for agents,
        complex escalation path, UI issues) linked to the key problems.
A list of 2-3 specific, actionable recommendations for process improvement
(e.g., update agent knowledge base, simplify password reset UI, implement proactive monitoring)."""
    ),
    agent=process_optimizer  # Assign task to the process_optimizer agent
    # This task implicitly uses the output of analysis_task as context
)

# Task 3: Compile COO report
report_task = Task(
    description=(
        """Compile the findings from the Data Analyst and the recommendations from the Process Optimization Specialist
        into a single, concise executive report for the COO. The report should clearly state:
1. The most critical customer support issues identified (with brief data points).
2. The key process bottlenecks causing these issues.
3. The recommended process improvements.
Ensure the report is easy to understand, focuses on actionable insights, and is formatted professionally."""
    ),
    expected_output=(
        """A well-structured executive report (max 1 page) summarizing the critical support issues,
        underlying process bottlenecks, and clear, actionable recommendations for the COO.
        Use clear headings and bullet points."""
    ),
    agent=report_writer  # Assign task to the report_writer agent
)

크루 (Crew)

Crew는 에이전트와 작업을 묶어 워크플로 프로세스("sequential" 등)를 정의해요.

from crewai import Crew, Process

support_analysis_crew = Crew(
    agents=[data_analyst, process_optimizer, report_writer],
    tasks=[analysis_task, optimization_task, report_task],
    process=Process.sequential,  # Tasks will run sequentially in the order defined
    verbose=True
)

크루 실행

마지막으로 필요한 입력을 넣어 크루 실행을 시작해요.

# Start the crew's work
print("--- Starting Customer Support Analysis Crew ---")
# The 'inputs' dictionary provides initial context if needed by the first task.
# In this case, the tool simulates data fetching regardless of the input.
result = support_analysis_crew.kickoff(inputs={'data_query': 'last quarter support data'})

print("--- Crew Execution Finished ---")
print("--- Final Report for COO ---")
print(result)

이제 스크립트가 실행돼요. Data Analyst가 도구를 사용하고, Process Optimizer가 결과를 분석하며, Report Writer가 최종 보고서를 정리해서 콘솔에 출력해요. verbose=True 설정으로 각 에이전트의 상세한 사고 과정과 동작을 볼 수 있어요.

CrewAI에 대해 더 알아보려면 CrewAI introduction을 확인하세요.

더 알아보기 (Learn more)