Skip to main content
CrewAI는 LiteLLM을 통해 여러 LLM 프로바이더와 통합된다. 이를 통해 특정 사용 사례에 적합한 모델을 유연하게 선택할 수 있다. 이 가이드는 CrewAI 프로젝트에서 다양한 LLM 프로바이더를 설정하고 사용하는 방법을 이해하는 데 도움을 준다.

LLM이란 무엇인가?

대규모 언어 모델(LLM)은 CrewAI 에이전트의 핵심 지능을 담당한다. 에이전트가 문맥을 이해하고 결정을 내리며 인간과 유사한 응답을 생성할 수 있게 한다. 다음은 LLM에 대해 알아야 할 핵심 사항이다:

LLM 기본 개념

대규모 언어 모델은 방대한 텍스트 데이터로 학습된 AI 시스템이다. CrewAI 에이전트의 지능을 구동하여 인간과 유사한 텍스트를 이해하고 생성할 수 있게 한다.

컨텍스트 윈도우

컨텍스트 윈도우는 LLM이 한 번에 처리할 수 있는 텍스트의 양을 결정한다. 더 큰 윈도우(예: 128K 토큰)는 더 많은 컨텍스트를 허용하지만, 비용이 더 들고 속도가 느려질 수 있다.

온도

온도(0.0에서 1.0 사이)는 응답의 무작위성을 조절한다. 낮은 값(예: 0.2)은 더 집중적이고 결정론적인 출력을 생성하며, 높은 값(예: 0.8)은 창의성과 다양성을 증가시킨다.

프로바이더 선택

각 LLM 프로바이더(예: OpenAI, Anthropic, Google)는 다양한 기능, 가격, 특징을 가진 모델을 제공한다. 정확도, 속도, 비용에 대한 요구 사항에 따라 선택한다.

지원 모델과 기능

지원되는 모델과 각각의 기능을 상세히 정리했다. lmarena.aiartificialanalysis.ai에서 성능을 비교할 수 있다.
  • OpenAI
  • Nvidia NIM
  • Gemini
  • Groq
  • SambaNova
  • Others
모델컨텍스트 윈도우주요 용도
GPT-48,192 토큰고정확도 작업, 복잡한 추론
GPT-4 Turbo128,000 토큰장문 콘텐츠, 문서 분석
GPT-4o & GPT-4o-mini128,000 토큰비용 효율적인 대용량 컨텍스트 처리
o3-mini200,000 토큰빠른 추론, 복잡한 추론
1 토큰 ≈ 영어 4 문자. 예를 들어, 8,192 토큰 ≈ 32,768 문자 또는 약 6,000 단어.

LLM 설정하기

CrewAI에서 LLM을 설정하는 방법은 세 가지다. 여러분의 작업 흐름에 가장 적합한 방법을 선택하면 된다:
  • 1. 환경 변수
  • 2. YAML 설정
  • 3. 직접 코드
가장 간단한 시작 방법이다. 환경 변수를 다음과 같이 설정한다:
# 필수: 인증을 위한 API 키
OPENAI_API_KEY=<your-api-key>

# 선택: 기본 모델 선택
OPENAI_MODEL_NAME=gpt-4o-mini  # 설정하지 않으면 기본값

# 선택: 조직 ID (해당되는 경우)
OPENAI_ORGANIZATION_ID=<your-org-id>
API 키를 버전 관리 시스템에 커밋하지 말자. 환경 파일(.env)이나 시스템의 비밀 관리 기능을 사용한다.

고급 기능과 최적화

LLM 설정을 최대한 활용하는 방법을 알아본다:
CrewAI는 스마트 컨텍스트 관리 기능을 제공한다:
from crewai import LLM

# CrewAI가 자동으로 처리하는 사항:
# 1. 토큰 계산 및 추적
# 2. 필요 시 콘텐츠 요약
# 3. 큰 컨텍스트에 대한 작업 분할

llm = LLM(
    model="gpt-4",
    max_tokens=4000,  # 응답 길이 제한
)
컨텍스트 관리의 모범 사례:
  1. 적절한 컨텍스트 윈도우를 가진 모델 선택
  2. 가능한 경우 긴 입력 사전 처리
  3. 큰 문서에 대해 청킹 사용
  4. 토큰 사용량 모니터링하여 비용 최적화
1

토큰 사용 최적화

작업에 맞는 적절한 컨텍스트 윈도우 선택:
  • 소규모 작업 (최대 4K 토큰): 표준 모델
  • 중간 규모 작업 (4K-32K 사이): 향상된 모델
  • 대규모 작업 (32K 이상): 큰 컨텍스트 모델
# 적절한 설정으로 모델 구성
llm = LLM(
    model="openai/gpt-4-turbo-preview",
    temperature=0.7,    # 작업에 따라 조정
    max_tokens=4096,    # 출력 필요에 따라 설정
    timeout=300        # 복잡한 작업을 위해 타임아웃 길게 설정
)
  • 사실적인 응답을 위해 낮은 온도 (0.1 ~ 0.3) 설정
  • 창의적인 작업을 위해 높은 온도 (0.7 ~ 0.9) 설정
2

모범 사례

  1. 토큰 사용량 모니터링
  2. 속도 제한 구현
  3. 가능한 경우 캐싱 사용
  4. 적절한 max_tokens 제한 설정
비용과 성능을 최적화하기 위해 토큰 사용량을 정기적으로 모니터링하고 필요에 따라 설정을 조정한다.

프로바이더 설정 예제

# 필수
OPENAI_API_KEY=sk-...

# 선택 사항
OPENAI_API_BASE=<custom-base-url>
OPENAI_ORGANIZATION=<your-org-id>
사용 예시:
from crewai import LLM

llm = LLM(
    model="gpt-4",
    temperature=0.8,
    max_tokens=150,
    top_p=0.9,
    frequency_penalty=0.1,
    presence_penalty=0.1,
    stop=["END"],
    seed=42
)
ANTHROPIC_API_KEY=sk-ant-...
사용 예시:
llm = LLM(
    model="anthropic/claude-3-sonnet-20240229-v1:0",
    temperature=0.7
)
# 옵션 1: API 키로 Gemini 접근
# https://ai.google.dev/gemini-api/docs/api-key
GEMINI_API_KEY=<your-api-key>

# 옵션 2: Vertex AI IAM 자격 증명으로 Gemini, Anthropic, Model Garden 접근
# https://cloud.google.com/vertex-ai/generative-ai/docs/overview
자격 증명 가져오기:
import json

file_path = 'path/to/vertex_ai_service_account.json'

# JSON 파일 로드
with open(file_path, 'r') as file:
    vertex_credentials = json.load(file)

# 자격 증명을 JSON 문자열로 변환
vertex_credentials_json = json.dumps(vertex_credentials)
사용 예시:
from crewai import LLM

llm = LLM(
    model="gemini/gemini-1.5-pro-latest",
    temperature=0.7,
    vertex_credentials=vertex_credentials_json
)
# 필수
AZURE_API_KEY=<your-api-key>
AZURE_API_BASE=<your-resource-url>
AZURE_API_VERSION=<api-version>

# 선택 사항
AZURE_AD_TOKEN=<your-azure-ad-token>
AZURE_API_TYPE=<your-azure-api-type>
사용 예시:
llm = LLM(
    model="azure/gpt-4",
    api_version="2023-05-15"
)
AWS_ACCESS_KEY_ID=<your-access-key>
AWS_SECRET_ACCESS_KEY=<your-secret-key>
AWS_DEFAULT_REGION=<your-region>
사용 예시:
llm = LLM(
    model="bedrock/anthropic.claude-3-sonnet-20240229-v1:0"
)
AWS_ACCESS_KEY_ID=<your-access-key>
AWS_SECRET_ACCESS_KEY=<your-secret-key>
AWS_DEFAULT_REGION=<your-region>
사용 예시:
llm = LLM(
    model="sagemaker/<my-endpoint>"
)
MISTRAL_API_KEY=<your-api-key>
사용 예시:
llm = LLM(
    model="mistral/mistral-large-latest",
    temperature=0.7
)
NVIDIA_API_KEY=<your-api-key>
사용 예시:
llm = LLM(
    model="nvidia_nim/meta/llama3-70b-instruct",
    temperature=0.7
)
GROQ_API_KEY=<your-api-key>
사용 예시:
llm = LLM(
    model="groq/llama-3.2-90b-text-preview",
    temperature=0.7
)
# 필수
WATSONX_URL=<your-url>
WATSONX_APIKEY=<your-apikey>
WATSONX_PROJECT_ID=<your-project-id>

# 선택 사항
WATSONX_TOKEN=<your-token>
WATSONX_DEPLOYMENT_SPACE_ID=<your-space-id>
사용 예시:
llm = LLM(
    model="watsonx/meta-llama/llama-3-1-70b-instruct",
    base_url="https://api.watsonx.ai/v1"
)
  1. Ollama 설치: ollama.ai
  2. 모델 실행: ollama run llama2
  3. 설정:
llm = LLM(
    model="ollama/llama3:70b",
    base_url="http://localhost:11434"
)
FIREWORKS_API_KEY=<your-api-key>
사용 예시:
llm = LLM(
    model="fireworks_ai/accounts/fireworks/models/llama-v3-70b-instruct",
    temperature=0.7
)
PERPLEXITY_API_KEY=<your-api-key>
사용 예시:
llm = LLM(
    model="llama-3.1-sonar-large-128k-online",
    base_url="https://api.perplexity.ai/"
)
HUGGINGFACE_API_KEY=<your-api-key>
사용 예시:
llm = LLM(
    model="huggingface/meta-llama/Meta-Llama-3.1-8B-Instruct",
    base_url="your_api_endpoint"
)
SAMBANOVA_API_KEY=<your-api-key>
사용 예시:
llm = LLM(
    model="sambanova/Meta-Llama-3.1-8B-Instruct",
    temperature=0.7
)
# 필수
CEREBRAS_API_KEY=<your-api-key>
사용 예시:
llm = LLM(
    model="cerebras/llama3.1-70b",
    temperature=0.7,
    max_tokens=8192
)
Cerebras 특징:
  • 빠른 추론 속도
  • 경쟁력 있는 가격
  • 속도와 품질의 균형
  • 긴 컨텍스트 윈도우 지원
OPENROUTER_API_KEY=<your-api-key>
사용 예시:
llm = LLM(
    model="openrouter/deepseek/deepseek-r1",
    base_url="https://openrouter.ai/api/v1",
    api_key=OPENROUTER_API_KEY
)
Open Router 모델:
  • openrouter/deepseek/deepseek-r1
  • openrouter/deepseek/deepseek-chat

구조화된 LLM 호출

CrewAI는 Pydantic 모델을 사용해 response_format을 정의할 수 있도록 지원한다. 이를 통해 프레임워크가 자동으로 출력을 파싱하고 검증할 수 있어, 응답을 수동으로 후처리하지 않고도 애플리케이션에 쉽게 통합할 수 있다. 예를 들어, 예상되는 응답 구조를 나타내는 Pydantic 모델을 정의하고, LLM을 인스턴스화할 때 response_format으로 전달할 수 있다. 이 모델은 LLM 출력을 구조화된 파이썬 객체로 변환하는 데 사용된다.
from crewai import LLM

class Dog(BaseModel):
    name: str
    age: int
    breed: str


llm = LLM(model="gpt-4o", response_format=Dog)

response = llm.call(
    "Analyze the following messages and return the name, age, and breed. "
    "Meet Kona! She is 3 years old and is a black german shepherd."
)
print(response)

일반적인 문제와 해결 방법

  • 인증
  • 모델 이름
  • 컨텍스트 길이
대부분의 인증 문제는 API 키 형식과 환경 변수 이름을 확인하면 해결할 수 있다.
# OpenAI
OPENAI_API_KEY=sk-...

# Anthropic
ANTHROPIC_API_KEY=sk-ant-...

도움 받기

도움이 필요하다면 다음 리소스를 활용할 수 있다:
API 키 보안을 위한 모범 사례:
  • 환경 변수나 보안 볼트를 사용한다
  • 버전 관리 시스템에 키를 절대 커밋하지 않는다
  • 키를 정기적으로 교체한다
  • 개발과 프로덕션 환경에서 별도의 키를 사용한다
  • 키 사용 패턴에서 비정상적인 활동을 모니터링한다