LiteLLM 없이 CrewAI 사용하기
LiteLLM 없이 CrewAI 사용하기 (Using CrewAI Without LiteLLM)
CrewAI는 LLM 프로바이더에 연결하는 두 가지 경로를 지원해요. 네이티브 통합만 사용해서 LiteLLM 의존성을 완전히 제거하는 방법을 알려드릴게요.
출처: 문서
본문
Overview (개요)
CrewAI는 LLM 프로바이더에 연결하는 두 가지 경로를 지원해요:
- Native integrations — OpenAI, Anthropic, Google Gemini, Azure OpenAI, AWS Bedrock에 대한 직접 SDK 연결
- LiteLLM fallback — 100개 이상의 추가 프로바이더를 지원하는 번역 계층
이 가이드는 CrewAI를 네이티브 프로바이더 통합만으로 사용해서 LiteLLM에 대한 의존성을 제거하는 방법을 설명해요.
litellm 패키지는 보안/신뢰성 사고 때문에 PyPI에서 격리(quarantine)됐어요. LiteLLM에 의존하는 프로바이더를 사용한다면 네이티브 통합으로 마이그레이션해야 해요. CrewAI의 네이티브 통합은 LiteLLM 없이도 전체 기능을 제공해요.
Why Remove LiteLLM? (왜 LiteLLM을 제거하나요?)
- 의존성 표면 축소 — 패키지가 적을수록 잠재적 공급망 위험이 줄어요.
- 더 나은 성능 — 네이티브 SDK가 프로바이더 API와 직접 통신해서 번역 계층을 제거해요.
- 더 간단한 디버깅 — 여러분 코드와 프로바이더 사이의 추상 계층이 하나 줄어요.
- 더 작은 설치 공간 — LiteLLM은 많은 전이 의존성을 끌어와요.
Native Providers (네이티브 프로바이더 — LiteLLM 불필요)
이 프로바이더들은 자체 SDK를 사용하고 LiteLLM 설치 없이 동작해요:
OpenAI
GPT-4o, GPT-4o-mini, o1, o3-mini 등을 지원해요.
uv add "crewai[openai]"
Anthropic
Claude Sonnet, Claude Haiku 등을 지원해요.
uv add "crewai[anthropic]"
Google Gemini
Gemini 2.0 Flash, Gemini 2.0 Pro 등을 지원해요.
uv add "crewai[gemini]"
Azure OpenAI
Azure에서 호스팅되는 OpenAI 모델이에요.
uv add "crewai[azure]"
AWS Bedrock
AWS를 통해 Claude, Llama, Titan 등을 지원해요.
uv add "crewai[bedrock]"
네이티브 프로바이더만 사용한다면 crewai[litellm]을 절대 설치할 필요가 없어요. 기본 crewai 패키지에 선택한 프로바이더 extra만 있으면 충분해요.
How to Check If You're Using LiteLLM (LiteLLM을 사용 중인지 확인하는 법)
모델 문자열 확인하기
코드에서 이런 모델 접두사를 사용한다면 LiteLLM을 경유하고 있는 거예요:
| Prefix | Provider | Uses LiteLLM? |
|---|---|---|
ollama/ |
Ollama | ✅ Yes |
groq/ |
Groq | ✅ Yes |
together_ai/ |
Together AI | ✅ Yes |
mistral/ |
Mistral | ✅ Yes |
cohere/ |
Cohere | ✅ Yes |
huggingface/ |
Hugging Face | ✅ Yes |
openai/ |
OpenAI | ❌ Native |
anthropic/ |
Anthropic | ❌ Native |
gemini/ |
Google Gemini | ❌ Native |
azure/ |
Azure OpenAI | ❌ Native |
bedrock/ |
AWS Bedrock | ❌ Native |
LiteLLM이 설치되어 있는지 확인하기
# Using pip
pip show litellm
# Using uv
uv pip show litellm
명령이 패키지 정보를 반환하면 LiteLLM이 환경에 설치된 거예요.
의존성 확인하기
pyproject.toml에서 crewai[litellm]을 확인하세요:
# If you see this, you have LiteLLM as a dependency
dependencies = [
"crewai[litellm]>=0.100.0", # ← Uses LiteLLM
]
# Change to a native provider extra instead
dependencies = [
"crewai[openai]>=0.100.0", # ← Native, no LiteLLM
]
Migration Guide (마이그레이션 가이드)
Step 1: 현재 프로바이더 식별
코드에서 모든 LLM() 호출과 모델 문자열을 찾으세요:
# Search your codebase for LLM model strings
grep -r "LLM(" --include="*.py" .
grep -r "llm=" --include="*.yaml" .
grep -r "llm:" --include="*.yaml" .
Step 2: 네이티브 프로바이더로 전환
-
OpenAI로 전환
from crewai import LLM # Before (LiteLLM): # llm = LLM(model="groq/llama-3.1-70b") # After (Native): llm = LLM(model="openai/gpt-4o")# Install uv add "crewai[openai]" # Set your API key export OPENAI_API_KEY="sk-..." -
Anthropic으로 전환
from crewai import LLM # Before (LiteLLM): # llm = LLM(model="together_ai/meta-llama/Meta-Llama-3.1-70B") # After (Native): llm = LLM(model="anthropic/claude-sonnet-4-20250514")# Install uv add "crewai[anthropic]" # Set your API key export ANTHROPIC_API_KEY="sk-ant-..." -
Gemini로 전환
from crewai import LLM # Before (LiteLLM): # llm = LLM(model="mistral/mistral-large-latest") # After (Native): llm = LLM(model="gemini/gemini-3.7-flash")# Install uv add "crewai[gemini]" # Set your API key export GEMINI_API_KEY="..." -
Azure OpenAI로 전환
from crewai import LLM # After (Native): llm = LLM( model="azure/your-deployment-name", api_key="your-azure-api-key", base_url="https://your-resource.openai.azure.com", api_version="2024-06-01" )# Install uv add "crewai[azure]" -
AWS Bedrock으로 전환
from crewai import LLM # After (Native): llm = LLM( model="bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0", aws_region_name="us-east-1" )# Install uv add "crewai[bedrock]" # Configure AWS credentials export AWS_ACCESS_KEY_ID="..." export AWS_SECRET_ACCESS_KEY="..." export AWS_DEFAULT_REGION="us-east-1"
Step 3: LiteLLM 없이 Ollama 유지하기
Ollama를 사용 중이고 계속 쓰고 싶다면, Ollama의 OpenAI 호환 API로 연결할 수 있어요:
from crewai import LLM
# Before (LiteLLM):
# llm = LLM(model="ollama/llama3")
# After (OpenAI-compatible mode, no LiteLLM needed):
llm = LLM(
model="llama3",
custom_openai=True,
base_url="http://localhost:11434/v1",
api_key="ollama" # Ollama doesn't require a real API key
)
많은 로컬 추론 서버(Ollama, vLLM, LM Studio, llama.cpp)는 OpenAI 호환 API를 노출해요. custom_openai=True를 커스텀 base_url과 함께 사용하면, 게이트웨이가 기대하는 모델 ID를 유지하면서 그중 어떤 서버에도 네이티브로 연결할 수 있어요.
Step 4: YAML 설정 업데이트
# Before (LiteLLM providers):
researcher:
role: Research Specialist
goal: Conduct research
backstory: A dedicated researcher
llm: groq/llama-3.1-70b # ← LiteLLM
# After (Native provider):
researcher:
role: Research Specialist
goal: Conduct research
backstory: A dedicated researcher
llm: openai/gpt-4o # ← Native
Step 5: LiteLLM 제거
모든 모델 참조를 마이그레이션한 뒤:
# Remove litellm from your project
uv remove litellm
# Or if using pip
pip uninstall litellm
# Update your pyproject.toml: change crewai[litellm] to your provider extra
# e.g., crewai[openai], crewai[anthropic], crewai[gemini]
Step 6: 검증
프로젝트를 실행해서 모든 것이 동작하는지 확인하세요:
# Run your crew
crewai run
# Or run your tests
uv run pytest
Custom OpenAI-Compatible Endpoints (커스텀 OpenAI 호환 엔드포인트)
많은 프로바이더와 로컬 서버(Ollama, vLLM, LM Studio, llama.cpp, LiteLLM 프록시, 호스팅 게이트웨이)가 OpenAI 호환 API를 노출해요. 이들을 LiteLLM으로 라우팅하는 대신, custom_openai=True를 설정해서 CrewAI의 네이티브 OpenAI 통합으로 직접 통신할 수 있어요. 이는 OpenAI 호환 엔드포인트를 제공하는 모든 LiteLLM 프로바이더에 권장되는 대체 방법이에요.
동작 원리
custom_openai=True는 모델 이름과 관계없이 CrewAI가 네이티브 OpenAI SDK를 사용하도록 강제해요.- 모델 ID는 OpenAI의 알려진 모델 목록에 대한 검증 없이 엔드포인트로 전달돼요. 이를 통해 게이트웨이가 기대하는 임의의 모델 ID를 사용할 수 있어요 (예: OpenAI 호환 프록시 뒤에서 서빙되는
anthropic/claude-sonnet-4-6). 선택적인 앞의openai/라우팅 접두사는 제거돼요. - base URL이 필수예요. CrewAI는 다음 순서로 이를 결정해요:
base_url=...→api_base=...→OPENAI_BASE_URL환경 변수 →OPENAI_API_BASE환경 변수 (레거시). 아무것도 설정되지 않으면 CrewAI가ValueError를 raise해서, 잘못된 구성이 조용히api.openai.com을 때리지 않고 빠르게 실패하게 해요.
from crewai import LLM
llm = LLM(
model="anthropic/claude-sonnet-4-6", # passed through as-is
custom_openai=True,
base_url="https://your-gateway.example/v1",
api_key="your-key",
)
일반 서버에 연결하기
- Ollama
from crewai import LLM llm = LLM( model="llama3.2:latest", custom_openai=True, base_url="http://localhost:11434/v1", api_key="ollama", # Ollama ignores it, but the client requires a value ) - vLLM
from crewai import LLM llm = LLM( model="meta-llama/Meta-Llama-3.1-8B-Instruct", custom_openai=True, base_url="http://localhost:8000/v1", api_key="not-needed", ) - LM Studio
from crewai import LLM llm = LLM( model="your-loaded-model", custom_openai=True, base_url="http://localhost:1234/v1", api_key="lm-studio", ) - 환경 변수 사용
export OPENAI_BASE_URL="https://your-gateway.example/v1" export OPENAI_API_KEY="your-key"from crewai import LLM # base_url is picked up from OPENAI_BASE_URL / OPENAI_API_BASE llm = LLM(model="anthropic/claude-sonnet-4-6", custom_openai=True)
알려진 OpenAI 모델이 아닌 모델에 openai/ 접두사를 사용하고 base_url이나 api_base를 직접 전달하면, CrewAI가 자동으로 커스텀 OpenAI 호환 엔드포인트로 취급해요. 환경 변수만으로는 알려지지 않은 모델에 대한 자동 라우팅을 켜지 않아요. OPENAI_BASE_URL이나 OPENAI_API_BASE를 통해 엔드포인트를 구성할 때는 custom_openai=True를 설정하세요.
Quick Reference: Model String Mapping (모델 문자열 매핑 빠른 참조)
LiteLLM 의존 프로바이더에서 네이티브로의 일반적인 마이그레이션 경로예요:
from crewai import LLM
# ─── LiteLLM providers → Native alternatives ────────────────────
# Groq → OpenAI or Anthropic
# llm = LLM(model="groq/llama-3.1-70b")
llm = LLM(model="openai/gpt-4o-mini") # Fast & affordable
llm = LLM(model="anthropic/claude-haiku-3-5") # Fast & affordable
# Together AI → OpenAI or Gemini
# llm = LLM(model="together_ai/meta-llama/Meta-Llama-3.1-70B")
llm = LLM(model="openai/gpt-4o") # High quality
llm = LLM(model="gemini/gemini-3.7-flash") # Fast & capable
# Mistral → Anthropic or OpenAI
# llm = LLM(model="mistral/mistral-large-latest")
llm = LLM(model="anthropic/claude-sonnet-4-20250514") # High quality
# Ollama → OpenAI-compatible (keep using local models)
# llm = LLM(model="ollama/llama3")
llm = LLM(
model="llama3",
custom_openai=True,
base_url="http://localhost:11434/v1",
api_key="ollama"
)
FAQ
LiteLLM을 제거하면 기능을 잃나요? 아니요 — 다섯 개의 네이티브 지원 프로바이더(OpenAI, Anthropic, Gemini, Azure, Bedrock) 중 하나를 사용한다면 그렇지 않아요. 이 네이티브 통합들은 스트리밍, 툴 호출, 구조화된 출력 등 모든 CrewAI 기능을 지원해요. 다만 오로지 LiteLLM을 통해서만 사용 가능한 프로바이더(Groq, Together AI, 일류 프로바이더로서의 Mistral 같은)에 대한 접근만 잃게 돼요.
여러 네이티브 프로바이더를 동시에 쓸 수 있나요? 네. 여러 extra를 설치하고 에이전트마다 다른 프로바이더를 사용하면 돼요:
uv add "crewai[openai,anthropic,gemini]"
researcher = Agent(llm="openai/gpt-4o", ...)
writer = Agent(llm="anthropic/claude-sonnet-4-20250514", ...)
지금 LiteLLM을 써도 안전한가요? 격리 상태와 관계없이, 의존성 표면을 줄이는 것은 좋은 보안 관행이에요. CrewAI가 네이티브로 지원하는 프로바이더만 필요하다면 LiteLLM을 설치해 둘 이유가 없어요.
OPENAI_API_KEY 같은 환경 변수는 어떻게 되나요?
네이티브 프로바이더는 여러분이 이미 익숙한 것과 동일한 환경 변수를 사용해요. OPENAI_API_KEY, ANTHROPIC_API_KEY, GEMINI_API_KEY 등에 변경이 필요 없어요.
LiteLLM 없이 Groq, Together AI, 기타 OpenAI 호환 프로바이더에 어떻게 연결하나요?
이 대부분의 프로바이더는 OpenAI 호환 API를 노출해요. custom_openai=True를 base URL과 API key와 함께 사용하세요 — "Custom OpenAI-Compatible Endpoints"를 참조하세요. 예를 들어 Groq: LLM(model="llama-3.1-70b-versatile", custom_openai=True, base_url="https://api.groq.com/openai/v1", api_key="..."). 모델 ID는 그대로 전달되므로 프로바이더가 기대하는 ID를 사용하세요.
Related Resources (관련 자료)
- LLM Connections — CrewAI를 어떤 LLM에든 연결하는 전체 가이드
- LLM Concepts — CrewAI에서 LLM 이해하기
- LLM Selection Guide — 사용 사례에 맞는 모델 고르기