에이전트: 역할·목표·속성 가이드

에이전트: 역할·목표·속성 가이드

CrewAI의 에이전트(Agent)는 크루 안에서 특정 임무를 수행하는 자율 단위예요. 역할·목표·backstory를 기반으로 의사결정을 내리고, 툴을 쓰고, 다른 에이전트와 협업하며, 허용되면 작업을 위임하기도 합니다. 이 페이지에서는 에이전트의 전체 속성, 생성 방법(JSONC·클래식 YAML·코드), 컨텍스트 창 관리, 그리고 모범 사례를 정리합니다.

출처: 공식문서

본문

에이전트 개요

CrewAI 프레임워크에서 Agent는 다음을 할 수 있는 자율 단위입니다:

  • 특정 태스크 수행
  • 역할·목표에 기반한 의사결정
  • 목표 달성을 위한 툴 사용
  • 다른 에이전트와 소통·협업
  • 상호작용 메모리 유지
  • 허용되면 태스크 위임
에이전트를 특정 스킬·전문성·책임을 가진 팀의 전문화된 구성원으로 생각하세요. 예를 들어 `Researcher` 에이전트는 정보 수집·분석에 뛰어나고, `Writer` 에이전트는 콘텐츠 생성에 더 능숙할 수 있습니다.

에이전트 속성

속성 파라미터 타입 설명
Role role str 크루 내 에이전트의 기능·전문성 정의
Goal goal str 에이전트 의사결정을 이끄는 개별 목표
Backstory backstory str 에이전트에 컨텍스트·성격을 제공해 상호작용 풍부화
LLM (선택) llm Union[str, LLM, Any] 에이전트를 구동하는 언어모델. OPENAI_MODEL_NAME 또는 "gpt-4"로 기본값
Tools (선택) tools List[BaseTool] 에이전트에 제공되는 기능. 빈 목록이 기본
Function Calling LLM (선택) function_calling_llm Optional[Any] 툴 호출용 언어모델. 지정 시 크루의 LLM 재정의
Max Iterations (선택) max_iter int 최선의 답을 내기 전 최대 반복 횟수. 기본 20
Max RPM (선택) max_rpm Optional[int] 레이트 리밋 회피를 위한 분당 최대 요청 수
Max Execution Time (선택) max_execution_time Optional[int] 태스크 실행 최대 시간(초)
Verbose (선택) verbose bool 디버깅용 상세 실행 로그. 기본 False
Allow Delegation (선택) allow_delegation bool 에이전트가 다른 에이전트에 태스크 위임 허용. 기본 False
Step Callback (선택) step_callback Optional[Any] 각 에이전트 스텝 후 호출되는 함수. 크루 콜백 재정의
Cache (선택) cache bool 툴 사용 캐싱 활성화. 기본 True
System Template (선택) system_template Optional[str] 에이전트용 사용자 정의 시스템 프롬프트 템플릿
Prompt Template (선택) prompt_template Optional[str] 에이전트용 사용자 정의 프롬프트 템플릿
Response Template (선택) response_template Optional[str] 에이전트용 사용자 정의 응답 템플릿
Allow Code Execution (선택) allow_code_execution Optional[bool] 에이전트 코드 실행 활성화. 기본 False
Max Retry Limit (선택) max_retry_limit int 오류 시 최대 재시도 횟수. 기본 2
Respect Context Window (선택) respect_context_window bool 요약으로 메시지를 컨텍스트 창 크기 아래로 유지. 기본 True
Code Execution Mode (선택) code_execution_mode Literal["safe", "unsafe"] 코드 실행 모드: 'safe'(Docker) 또는 'unsafe'(직접). 기본 'safe'
Multimodal (선택) multimodal bool 멀티모달 능력 지원 여부. 기본 False
Inject Date (선택) inject_date bool 현재 날짜를 에이전트 프롬프트에 자동 주입할지. 기본 False
Date Format (선택) date_format str inject_date 활성 시 날짜 형식 문자열. 기본 "%Y-%m-%d"(ISO)
Reasoning (선택) reasoning bool 태스크 실행 전 반성·계획 생성 여부. 기본 False
Max Reasoning Attempts (선택) max_reasoning_attempts Optional[int] 실행 전 최대 리즈닝 시도 횟수. None이면 준비될 때까지 시도
Embedder (선택) embedder Optional[Dict[str, Any]] 에이전트가 사용하는 임베더 설정
Knowledge Sources (선택) knowledge_sources Optional[List[BaseKnowledgeSource]] 에이전트에 제공되는 지식 소스
Use System Prompt (선택) use_system_prompt Optional[bool] 시스템 프롬프트 사용 여부(o1 모델 지원용). 기본 True

에이전트 생성

에이전트를 만드는 두 가지 일반적인 방법: JSONC 프로젝트 구성(신규 크루 권장)코드에서 직접 정의.

JSONC 구성(권장)

crewai create crew <name>으로 만든 새 프로젝트는 JSON-first 구성을 사용합니다. 각 에이전트는 agents/<agent_name>.jsonc에 정의되고, crew.jsonc가 어떤 에이전트가 크루에 속하는지 나열합니다.

`role`, `goal`, `backstory`에 `{placeholder}` 값을 사용하세요. 기본값은 `crew.jsonc`의 `inputs`에 두고, `crewai run`은 누락된 값을 묻습니다.

agents/researcher.jsonc 예시:

{
  "role": "{topic} Senior Data Researcher",
  "goal": "Uncover cutting-edge developments in {topic}",
  "backstory": "You find the most relevant information and present it clearly.",
  "llm": "openai/gpt-4o",
  "tools": ["SerperDevTool"],
  "settings": {
    "verbose": true,
    "allow_delegation": false,
    "max_iter": 20
  }
}

그다음 crew.jsonc에서 그 에이전트를 포함합니다:

{
  "name": "Research Crew",
  "agents": ["researcher"],
  "tasks": [
    {
      "name": "research_task",
      "description": "Research {topic}",
      "expected_output": "A concise briefing about {topic}",
      "agent": "researcher"
    }
  ],
  "inputs": {
    "topic": "AI Agents"
  }
}

에이전트 파일은 공개 Agent 필드를 모두 지원합니다. verbose, allow_delegation, max_iter, max_rpm, memory, cache, planning_config, use_system_prompt 같은 동작 옵션은 최상위 또는 settings 아래 둘 수 있으며 settings 값이 우선합니다.

JSONC는 주석과 후행 쉼표를 지원합니다. `agents/.jsonc`와 `agents/.json`이 모두 있으면 CrewAI는 JSONC 파일을 사용합니다.

클래식 YAML 구성

crewai create crew <name> --classic으로 만든 클래식 프로젝트는 config/agents.yamlcrew.py@CrewBase 클래스를 사용합니다. 파이썬 데코레이터나 기존 YAML 프로젝트를 원하는 팀을 위해 계속 지원됩니다.

코드 직접 정의

Agent 클래스를 인스턴스화해 코드로 직접 만들 수 있습니다. 모든 파라미터가 포함된 예시:

from crewai import Agent
from crewai_tools import SerperDevTool

# Create an agent with all available parameters
agent = Agent(
    role="Senior Data Scientist",
    goal="Analyze and interpret complex datasets to provide actionable insights",
    backstory="With over 10 years of experience in data science and machine learning, "
              "you excel at finding patterns in complex datasets.",
    llm="gpt-4",  # Default: OPENAI_MODEL_NAME or "gpt-4"
    function_calling_llm=None,  # Optional: Separate LLM for tool calling
    verbose=False,  # Default: False
    allow_delegation=False,  # Default: False
    max_iter=20,  # Default: 20 iterations
    max_rpm=None,  # Optional: Rate limit for API calls
    max_execution_time=None,  # Optional: Maximum execution time in seconds
    max_retry_limit=2,  # Default: 2 retries on error
    allow_code_execution=False,  # Default: False
    code_execution_mode="safe",  # Default: "safe" (options: "safe", "unsafe")
    respect_context_window=True,  # Default: True
    use_system_prompt=True,  # Default: True
    multimodal=False,  # Default: False
    inject_date=False,  # Default: False
    date_format="%Y-%m-%d",  # Default: ISO format
    reasoning=False,  # Default: False
    max_reasoning_attempts=None,  # Default: None
    tools=[SerperDevTool()],  # Optional: List of tools
    knowledge_sources=None,  # Optional: List of knowledge sources
    embedder=None,  # Optional: Custom embedder configuration
    system_template=None,  # Optional: Custom system prompt template
    prompt_template=None,  # Optional: Custom prompt template
    response_template=None,  # Optional: Custom response template
    step_callback=None,  # Optional: Callback function for monitoring
)

파라미터 상세

  • 핵심 파라미터: role, goal, backstory는 필수이며 에이전트 동작을 결정. llm은 사용 언어모델 결정(기본 OpenAI GPT-4).
  • 메모리·컨텍스트: memory로 대화 이력 유지, respect_context_window로 토큰 한도 문제 방지, knowledge_sources로 도메인 지식베이스 추가.
  • 실행 제어: max_iter(최선의 답 전 최대 시도), max_execution_time(초 단위 타임아웃), max_rpm(API 레이트 리밋), max_retry_limit(오류 재시도).
  • 코드 실행: allow_code_execution, code_execution_mode는 폐기되었고 CodeInterpreterToolcrewai-tools에서 제거됨. 안전한 코드 실행에는 E2B 또는 Modal 같은 전용 샌드박스 서비스를 사용하세요.
  • 고급 기능: multimodal(텍스트·비주얼 처리), reasoning(실행 전 반성·계획), inject_date(프롬프트에 현재 날짜 주입).
  • 템플릿: system_template(핵심 동작), prompt_template(입력 형식), response_template(응답 형식).
사용자 정의 템플릿을 쓸 땐 `system_template`과 `prompt_template`을 모두 정의하세요. `response_template`은 선택이지만 일관된 출력 형식에 권장됩니다. 템플릿에서 `{role}`, `{goal}`, `{backstory}` 같은 변수를 사용할 수 있으며 실행 시 자동 채워집니다.

에이전트 툴

에이전트는 CrewAI ToolkitLangChain Tools의 툴로 강화될 수 있습니다.

from crewai import Agent
from crewai_tools import SerperDevTool, WikipediaTools

# Create tools
search_tool = SerperDevTool()
wiki_tool = WikipediaTools()

# Add tools to agent
researcher = Agent(
    role="AI Technology Researcher",
    goal="Research the latest AI developments",
    tools=[search_tool, wiki_tool],
    verbose=True
)

에이전트 메모리와 컨텍스트

에이전트는 상호작용 메모리와 이전 태스크 컨텍스트를 유지할 수 있습니다. memory=True로 설정하면 여러 상호작용에 걸쳐 컨텍스트를 유지해 복잡한 다단계 태스크를 더 잘 처리합니다.

컨텍스트 창 관리

CrewAI는 대화가 LLM의 토큰 한도를 초과할 때 처리하는 정교한 자동 컨텍스트 창 관리를 포함합니다. respect_context_window 파라미터로 제어됩니다.

  • respect_context_window=True(기본·권장): 에이전트 대화 이력이 컨텍스트 창에 비대해지면 CrewAI가 자동 감지해 요약합니다. 경고 메시지 "Context length exceeded. Summarizing content to fit the model context window." 후 자동 요약으로 실행을 계속합니다.
  • respect_context_window=False: 완전한 컨텍스트가 필요한 정밀 작업용. 컨텍스트 한도를 초과하면 "Context length exceeded. Consider using smaller text or RAG tools from crewai_tools." 오류로 실행을 즉시 중단하고 수동 개입이 필요합니다.

선택 가이드: 큰 문서 처리·긴 대화·연구 태스크·프로토타이핑에는 True(기본), 법률·의료·코드 리뷰·금융 분석처럼 정보 손실이 용납 안 되는 정밀 작업에는 False.

에이전트와 직접 상호작용: kickoff()

agent.kickoff(...)로 에이전트와 직접 상호작용할 수 있습니다.

# Create an agent
researcher = Agent(
    role="AI Technology Researcher",
    goal="Research the latest AI developments",
    tools=[SerperDevTool()],
    verbose=True
)

# Use kickoff() to interact directly with the agent
result = researcher.kickoff("What are the latest developments in language models?")

# Access the raw response
print(result.raw)

kickoff()LiteAgentOutput 객체를 반환합니다: raw(원본 출력 문자열), pydantic(response_format 제공 시 파싱된 Pydantic 모델), agent_role(출력 생성 에이전트 역할), usage_metrics(토큰 사용 메트릭). Pydantic 모델을 response_format으로 제공해 구조화 출력을 얻을 수 있고, kickoff_async() 비동기 버전도 있습니다. <Note> kickoff()는 내부적으로 LiteAgent를 사용해 에이전트의 모든 설정(role, goal, backstory, tools 등)을 보존하면서 더 단순한 실행 흐름을 제공합니다. </Note>

중요한 고려사항·모범 사례

  • 성능 최적화: respect_context_window: true로 토큰 한도 방지, 적절한 max_rpm 설정, 반복 태스크에 cache: true, 태스크 복잡도에 따라 max_iter·max_retry_limit 조정.
  • 메모리·컨텍스트 관리: 도메인 정보에 knowledge_sources 활용, 사용자 정의 임베딩 모델 시 embedder 구성, 미세 제어에 사용자 정의 템플릿 사용.
  • 고급 기능: 복잡한 태스크 전 계획·반성이 필요하면 reasoning: true, max_reasoning_attempts로 제어(None이면 무제한), 시간 민감 태스크에 inject_date: true + date_format(표준 Python datetime 형식 코드).
  • 에이전트 협업: 함께 작업해야 하면 allow_delegation: true, step_callback으로 상호작용 모니터링·로깅, 목적별 LLM 분리(복잡 추론용 메인 llm, 효율적 툴 사용용 function_calling_llm).
  • 모델 호환성: 시스템 메시지를 지원하지 않는 구형 모델에는 use_system_prompt: false.

트러블슈팅

  1. 레이트 리밋: 적절한 max_rpm 구현, 반복 연산에 캐싱, 요청 배칭 고려.
  2. 컨텍스트 창 오류: respect_context_window 활성화, 더 효율적인 프롬프트, 주기적으로 메모리 정리.
  3. 코드 실행 문제: safe 모드에 Docker 설치 확인, 실행 권한 확인, 코드 샌드박스 설정 검토.
  4. 메모리 문제: 지식 소스 설정 확인, 대화 이력 관리 검토.

에이전트는 특정 사용 사례에 맞게 구성될 때 가장 효과적입니다. 요구사항을 이해하고 파라미터를 그에 맞게 조정하세요.

더 알아보기