主题
在不使用 LiteLLM 的情况下使用 CrewAI
如何结合原生服务商集成来使用 CrewAI,并从项目中移除 LiteLLM 依赖。
概述
CrewAI 支持两种连接 LLM 服务商的路径:
- 原生集成 — 直接通过 SDK 连接 OpenAI、Anthropic、Google Gemini、Azure OpenAI 和 AWS Bedrock
- LiteLLM 回退 — 一个支持 100 多个额外服务商的转换层
本指南说明如何仅使用原生服务商集成来使用 CrewAI,从而移除对 LiteLLM 的任何依赖。
WARNING
由于一次安全/可靠性事件,litellm 包已在 PyPI 上被隔离。如果你依赖基于 LiteLLM 的服务商,应迁移到原生集成。CrewAI 的原生集成可在不依赖 LiteLLM 的情况下提供完整功能。
为什么要移除 LiteLLM?
- 减少依赖面 — 更少的软件包意味着更少的潜在供应链风险
- 更好的性能 — 原生 SDK 直接与服务商 API 通信,省去转换层
- 更简单的调试 — 代码与服务商之间少了一层抽象
- 更小的安装占用 — LiteLLM 会引入许多传递依赖
原生服务商(无需 LiteLLM)
这些服务商使用各自的 SDK,无需安装 LiteLLM 即可工作:
OpenAI
GPT-4o、GPT-4o-mini、o1、o3-mini 等。
bash
uv add "crewai[openai]"Anthropic
Claude Sonnet、Claude Haiku 等。
bash
uv add "crewai[anthropic]"Google Gemini
Gemini 2.0 Flash、Gemini 2.0 Pro 等。
bash
uv add "crewai[gemini]"Azure OpenAI
Azure 托管的 OpenAI 模型。
bash
uv add "crewai[azure]"AWS Bedrock
通过 AWS 提供的 Claude、Llama、Titan 等。
bash
uv add "crewai[bedrock]"INFO
如果你只使用原生服务商,你永远不需要安装 crewai[litellm]。基础的 crewai 包加上你选定的服务商扩展就是全部所需。
如何检查你是否正在使用 LiteLLM
检查你的模型字符串
如果你的代码使用如下模型前缀,则你正在通过 LiteLLM 路由:
| 前缀 | 服务商 | 使用 LiteLLM? |
|---|---|---|
ollama/ | Ollama | ✅ 是 |
groq/ | Groq | ✅ 是 |
together_ai/ | Together AI | ✅ 是 |
mistral/ | Mistral | ✅ 是 |
cohere/ | Cohere | ✅ 是 |
huggingface/ | Hugging Face | ✅ 是 |
openai/ | OpenAI | ❌ 原生 |
anthropic/ | Anthropic | ❌ 原生 |
gemini/ | Google Gemini | ❌ 原生 |
azure/ | Azure OpenAI | ❌ 原生 |
bedrock/ | AWS Bedrock | ❌ 原生 |
检查 LiteLLM 是否已安装
bash
# Using pip
pip show litellm
# Using uv
uv pip show litellm如果命令返回软件包信息,则你的环境中已安装 LiteLLM。
检查你的依赖项
查看你的 pyproject.toml 中是否有 crewai[litellm]:
toml
# 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
]迁移指南
步骤 1:确定你当前的服务商
在代码中查找所有 LLM() 调用和模型字符串:
bash
# Search your codebase for LLM model strings
grep -r "LLM(" --include="*.py" .
grep -r "llm=" --include="*.yaml" .
grep -r "llm:" --include="*.yaml" .步骤 2:切换到原生服务商
python
from crewai import LLM
# Before (LiteLLM):
# llm = LLM(model="groq/llama-3.1-70b")
# After (Native):
llm = LLM(model="openai/gpt-4o")bash
# Install
uv add "crewai[openai]"
# Set your API key
export OPENAI_API_KEY="sk-..."步骤 3:在不使用 LiteLLM 的情况下保留 Ollama
如果你正在使用 Ollama 并希望继续使用,可以通过 Ollama 的 OpenAI 兼容 API 进行连接:
python
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
)TIP
许多本地推理服务器(Ollama、vLLM、LM Studio、llama.cpp)都提供 OpenAI 兼容 API。你可以使用 custom_openai=True 和自定义 base_url 以原生方式连接到其中任意一个,同时保留你的网关所期望的模型 ID。
步骤 4:更新你的 YAML 配置
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步骤 5:移除 LiteLLM
在你迁移完所有模型引用后:
bash
# 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]步骤 6:验证
运行你的项目并确认一切正常:
bash
# Run your crew
crewai run
# Or run your tests
uv run pytest自定义 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/路由前缀会被去除。基础 URL 是必填的。CrewAI 会按以下顺序解析它:
base_url=...api_base=...OPENAI_BASE_URL环境变量OPENAI_API_BASE环境变量(旧版)
如果以上都未设置,CrewAI 会抛出
ValueError,让配置错误快速失败,而不是静默访问api.openai.com。
python
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",
)连接到常见服务器
python
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
)TIP
如果你将 openai/ 前缀与非 OpenAI 已知模型一起使用,并直接传入 base_url 或 api_base,CrewAI 会自动将其视为自定义 OpenAI 兼容端点。仅靠环境变量不会为未知模型启用自动路由;通过 OPENAI_BASE_URL 或 OPENAI_API_BASE 配置端点时,请设置 custom_openai=True。
快速参考:模型字符串映射
以下是从依赖 LiteLLM 的服务商迁移到原生服务商的常见路径:
python
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"
)常见问题
移除 LiteLLM 会让我失去任何功能吗?
不会,如果你使用的是五个原生支持的服务商之一(OpenAI、Anthropic、Gemini、Azure、Bedrock)。这些原生集成支持所有 CrewAI 功能,包括流式传输、工具调用、结构化输出等。你只会失去对仅通过 LiteLLM 可用的服务商的访问(例如 Groq、Together AI、作为一等服务商的 Mistral)。
我可以同时使用多个原生服务商吗?
可以。安装多个扩展,并为不同的智能体使用不同的服务商:
bash
uv add "crewai[openai,anthropic,gemini]"python
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 与其基础 URL 和 API 密钥一起使用——参见 自定义 OpenAI 兼容端点。例如,Groq:LLM(model="llama-3.1-70b-versatile", custom_openai=True, base_url="https://api.groq.com/openai/v1", api_key="...")。模型 ID 会原样传递,因此使用服务商期望的任何 ID。