LLMs

一份关于在 CrewAI 项目中配置和使用大型语言模型( LLMs )的综合指南

概述

CrewAI 通过各提供商原生 SDK 集成了多种 LLM 提供商,使你能够灵活地为具体用例选择合适的模型。本指南将帮助你了解如何在 CrewAI 项目中配置和使用不同的 LLM 提供商。

什么是 LLMs?

大型语言模型( LLMs )是 CrewAI agents 背后的核心智能。它们使 agent 能够理解上下文、做出决策,并生成类似人类的响应。以下是你需要了解的内容:

LLM 基础

大型语言模型是基于海量文本数据训练的 AI 系统。它们为你的 CrewAI agents 提供智能能力,使其能够理解并生成类似人类的文本。

上下文窗口

上下文窗口决定了一个 LLM 一次可以处理多少文本。更大的窗口(例如 128K tokens )能够容纳更多上下文,但通常成本更高、速度更慢。

Temperature

Temperature( 0.0 到 1.0 )控制响应的随机性。较低的值(例如 0.2 )会产生更聚焦、更具确定性的输出,而较高的值(例如 0.8 )会提升创造性和多样性。

提供商选择

每个 LLM 提供商(例如 OpenAI、Anthropic、Google )都提供不同的模型,它们在能力、价格和功能方面各不相同。请根据你对准确性、速度和成本的需求进行选择。

设置你的 LLM

在 CrewAI 代码中,你可以在不同位置指定要使用的模型。一旦指定了所使用的模型,你就需要为每个使用到的模型提供商提供相应配置(例如 API key )。请参阅下方 provider 配置示例部分,找到对应提供商的配置方法。

1. 环境变量

最简单的入门方式。直接在环境中设置模型,可以通过 .env 文件或在应用代码中设置。如果你使用 crewai create 初始化项目,那么它通常已经被预设好了。

  1. MODEL=model-id # 例如 gpt-4o, gemini-2.0-flash, claude-3-sonnet-...
  2. # 请务必在这里也设置你的 API keys。见下方 Provider
  3. # 部分。

注意:永远不要将 API keys 提交到版本控制系统中。请使用环境文件( .env )或系统级密钥管理方案。

2. YAML 配置

创建一个 YAML 文件来定义你的 agent 配置。这种方式非常适合版本控制与团队协作:

  1. researcher:
  2. role: Research Specialist
  3. goal: Conduct comprehensive research and analysis
  4. backstory: A dedicated research professional with years of experience
  5. verbose: true
  6. llm: provider/model-id # 例如 openai/gpt-4o, google/gemini-2.0-flash, anthropic/claude...
  7. # (更多内容见下方 provider 配置示例)

YAML 配置允许你:

  • 对 agent 配置进行版本控制
  • 轻松切换不同模型
  • 在团队成员之间共享配置
  • 记录模型选择及其用途

3. 直接代码配置

如果你需要最大灵活性,可以直接在 Python 代码中配置 LLM :

  1. from crewai import LLM
  2. # 基础配置
  3. llm = LLM(model="model-id-here") # gpt-4o, gemini-2.0-flash, anthropic/claude...
  4. # 带详细参数的高级配置
  5. llm = LLM(
  6. model="model-id-here", # gpt-4o, gemini-2.0-flash, anthropic/claude...
  7. temperature=0.7, # 更高值用于更具创造性的输出
  8. timeout=120, # 等待响应的秒数
  9. max_tokens=4000, # 响应的最大长度
  10. top_p=0.9, # 核采样参数
  11. frequency_penalty=0.1 , # 降低重复
  12. presence_penalty=0.1, # 鼓励主题多样性
  13. response_format={"type": "json"}, # 用于结构化输出
  14. seed=42 # 用于可复现结果
  15. )

参数说明:

  • temperature:控制随机性( 0.0 - 1.0 )
  • timeout:响应最大等待时间
  • max_tokens:限制响应长度
  • top_p:Temperature 的另一种采样方式
  • frequency_penalty:减少词语重复
  • presence_penalty:鼓励引入新主题
  • response_format:指定输出结构
  • seed:确保输出一致

说明:CrewAI 为 OpenAI、Anthropic、Google( Gemini API )、Azure 和 AWS Bedrock 提供原生 SDK 集成 —— 除了 provider 对应的 extras 之外,无需额外安装(例如 uv add "crewai[openai]" )。

其他所有 provider 都通过 LiteLLM 提供支持。如果你计划使用其中任意一个,请将其作为依赖添加到你的项目中:

  1. uv add 'crewai[litellm]'

Provider 配置示例

CrewAI 支持大量 LLM providers,每个 provider 都提供独特的功能、认证方式和模型能力。在本节中,你将看到详细示例,帮助你选择、配置并优化最适合你项目需求的 LLM。

OpenAI

CrewAI 通过 OpenAI Python SDK 提供对 OpenAI 的原生集成。

  1. # 必填
  2. OPENAI_API_KEY=sk-...
  3. # 可选
  4. OPENAI_BASE_URL=<custom-base-url>

基础用法:

  1. from crewai import LLM
  2. llm = LLM(
  3. model="openai/gpt-4o",
  4. api_key="your-api-key", # 或设置 OPENAI_API_KEY
  5. temperature=0.7,
  6. max_tokens=4000
  7. )

高级配置:

  1. from crewai import LLM
  2. llm = LLM(
  3. model="openai/gpt-4o",
  4. api_key="your-api-key",
  5. base_url="https://api.openai.com/v1", # 可选自定义 endpoint
  6. organization="org-...", # 可选 organization ID
  7. project="proj_...", # 可选 project ID
  8. temperature=0.7,
  9. max_tokens=4000,
  10. max_completion_tokens=4000, # 用于较新的模型
  11. top_p=0.9,
  12. frequency_penalty=0.1,
  13. presence_penalty=0.1,
  14. stop=["END"],
  15. seed=42, # 用于可复现输出
  16. stream=True, # 启用流式输出
  17. timeout=60.0, # 请求超时时间(秒)
  18. max_retries=3, # 最大重试次数
  19. logprobs=True, # 返回对数概率
  20. top_logprobs=5, # 最可能 tokens 的数量
  21. reasoning_effort="medium" # 用于 o1 模型:low, medium, high
  22. )

结构化输出:

  1. from pydantic import BaseModel
  2. from crewai import LLM
  3. class ResponseFormat(BaseModel):
  4. name: str
  5. age: int
  6. summary: str
  7. llm = LLM(
  8. model="openai/gpt-4o",
  9. )

支持的环境变量:

  • OPENAI_API_KEY:你的 OpenAI API key(必填)
  • OPENAI_BASE_URL:OpenAI API 的自定义 base URL(可选)

特性:

  • 原生函数调用支持( o1 模型除外 )
  • 通过 JSON schema 支持结构化输出
  • 支持实时流式响应
  • Token 用量追踪
  • Stop sequences 支持( o1 模型除外 )
  • 用于 token 级洞察的对数概率
  • 针对 o1 模型的 reasoning effort 控制

支持的模型:

模型 上下文窗口 适用场景
gpt-4.1 1M tokens 具有增强能力的最新模型
gpt-4.1-mini 1M tokens 具有大上下文的高效版本
gpt-4.1-nano 1M tokens 超高效变体
gpt-4o 128,000 tokens 针对速度与智能进行优化
gpt-4o-mini 200,000 tokens 具有大上下文的高性价比模型
gpt-4-turbo 128,000 tokens 长文内容、文档分析
gpt-4 8,192 tokens 高精度任务、复杂推理
o1 200,000 tokens 高级推理、复杂问题求解
o1-preview 128,000 tokens 推理能力预览版
o1-mini 128,000 tokens 高效推理模型
o3-mini 200,000 tokens 轻量级推理模型
o4-mini 200,000 tokens 新一代高效推理模型

Responses API:

OpenAI 提供两种 API:Chat Completions(默认)和较新的 Responses API。Responses API 从底层开始就以原生多模态支持为设计目标 —— 文本、图像、音频和函数调用都是一等公民。它在推理模型上性能更好,并支持自动链式调用和内置工具等附加功能。

  1. from crewai import LLM
  2. # 使用 Responses API 而不是 Chat Completions
  3. llm = LLM(
  4. model="openai/gpt-4o",
  5. api="responses", # 启用 Responses API
  6. store=True, # 为多轮对话存储 responses(可选)
  7. auto_chain=True, # 为推理模型启用自动链式调用(可选)
  8. )

Responses API 参数:

  • api:设置为 "responses" 以使用 Responses API(默认值:"completions"
  • instructions:系统级指令(仅 Responses API )
  • store:是否为多轮对话存储 responses
  • previous_response_id:用于多轮对话的上一条 response ID
  • include:响应中需要附带的附加数据(例如 ["reasoning.encrypted_content"]
  • builtin_tools:OpenAI 内置工具列表:"web_search""file_search""code_interpreter""computer_use"
  • parse_tool_outputs:返回带已解析内置工具输出的结构化 ResponsesAPIResult
  • auto_chain:自动跟踪并使用 response IDs 进行多轮对话
  • auto_chain_reasoning:跟踪加密的 reasoning items,以满足 ZDR( Zero Data Retention )合规

建议:对于新项目,特别是在使用推理模型( o1、o3、o4 )或需要原生多模态支持 files 时,建议使用 Responses API 。

注意: 要使用 OpenAI,请安装所需依赖:

  1. uv add "crewai[openai]"

Meta-Llama

CrewAI 通过 Meta 的 Llama API 提供对 Meta 大语言模型家族的访问能力。

  1. # Meta Llama API Key 配置
  2. LLAMA_API_KEY=LLM|your_api_key_here

示例:

  1. from crewai import LLM
  2. llm = LLM(
  3. model="meta_llama/Llama-4-Scout-17B-16E-Instruct-FP8",
  4. temperature=0.8,
  5. stop=["END"],
  6. seed=42
  7. )

支持模型:

模型 ID 输入上下文长度 输出上下文长度 输入模态 输出模态
meta_llama/Llama-4-Scout-17B-16E-Instruct-FP8 128k 4028 Text, Image Text
meta_llama/Llama-4-Maverick-17B-128E-Instruct-FP8 128k 4028 Text, Image Text
meta_llama/Llama-3.3-70B-Instruct 128k 4028 Text Text
meta_llama/Llama-3.3-8B-Instruct 128k 4028 Text Text

注意: 此 provider 使用 LiteLLM:

  1. uv add 'crewai[litellm]'

Anthropic

CrewAI 通过 Anthropic Python SDK 提供对 Anthropic 的原生集成。

  1. # 必填
  2. ANTHROPIC_API_KEY=sk-ant-...

基础用法:

  1. from crewai import LLM
  2. llm = LLM(
  3. model="anthropic/claude-3-5-sonnet-20241022",
  4. api_key="your-api-key", # 或设置 ANTHROPIC_API_KEY
  5. max_tokens=4096 # Anthropic 必填
  6. )

高级配置:

  1. from crewai import LLM
  2. llm = LLM(
  3. model="anthropic/claude-3-5-sonnet-20241022",
  4. api_key="your-api-key",
  5. base_url="https://api.anthropic.com", # 可选自定义 endpoint
  6. temperature=0.7,
  7. max_tokens=4096, # 必填参数
  8. top_p=0.9,
  9. stop_sequences=["END", "STOP"], # Anthropic 使用 stop_sequences
  10. stream=True, # 启用流式输出
  11. timeout=60.0, # 请求超时时间(秒)
  12. max_retries=3 # 最大重试次数
  13. )

Extended Thinking( Claude Sonnet 4 及更新版本 ):

  1. from crewai import LLM
  2. llm = LLM(
  3. model="anthropic/claude-sonnet-4",
  4. thinking={"type": "enabled"},
  5. max_tokens=10000
  6. )
  7. llm = LLM(
  8. model="anthropic/claude-sonnet-4",
  9. thinking={
  10. "type": "enabled",
  11. "budget_tokens": 5000
  12. },
  13. max_tokens=10000
  14. )

Thinking 配置选项:

  • type:设置为 "enabled" 以启用 extended thinking 模式
  • budget_tokens(可选):thinking 可使用的最大 token 数

支持 Extended Thinking 的模型:

  • claude-sonnet-4 及更新模型
  • claude-3-7-sonnet

何时使用 Extended Thinking:

  • 复杂推理与多步问题求解
  • 数学计算与证明
  • 代码分析与调试
  • 战略规划与决策制定
  • 研究与分析任务

支持的环境变量:

  • ANTHROPIC_API_KEY:你的 Anthropic API key(必填)

特性:

  • 针对 Claude 3+ 模型的原生工具使用支持
  • 针对 Claude Sonnet 4+ 的 Extended Thinking 支持
  • 支持实时流式响应
  • 自动系统消息处理
  • Stop sequences
  • Token 用量追踪
  • 多轮工具调用对话

重要说明:

  • max_tokens 是所有 Anthropic 模型的 必填 参数
  • Claude 使用 stop_sequences,而不是 stop
  • 系统消息与对话消息分开处理
  • 第一条消息必须来自用户
  • 消息必须在 user 和 assistant 之间交替

支持的模型:

模型 上下文窗口 适用场景
claude-sonnet-4 200,000 tokens 具备 extended thinking 能力的最新模型
claude-3-7-sonnet 200,000 tokens 高级推理与 agentic tasks
claude-3-5-sonnet-20241022 200,000 tokens 最新 Sonnet,性能最佳
claude-3-5-haiku 200,000 tokens 适合快速响应的快速紧凑模型
claude-3-opus 200,000 tokens 最适合复杂任务的最强模型
claude-3-sonnet 200,000 tokens 智能与速度平衡
claude-3-haiku 200,000 tokens 适合简单任务的最快模型
claude-2.1 200,000 tokens 更长上下文,降低幻觉
claude-2 100,000 tokens 适用于多种任务的通用模型
claude-instant 100,000 tokens 适用于日常任务的快速高性价比模型

注意:

  1. uv add "crewai[anthropic]"

Google( Gemini API )

CrewAI 通过 Google Gen AI Python SDK 提供对 Google Gemini 的原生集成。

  1. # 必填(以下二选一)
  2. GOOGLE_API_KEY=<your-api-key>
  3. GEMINI_API_KEY=<your-api-key>
  4. # 用于 Vertex AI Express mode(API key 认证)
  5. GOOGLE_GENAI_USE_VERTEXAI=true
  6. GOOGLE_API_KEY=<your-api-key>
  7. # 用于带 service account 的 Vertex AI
  8. GOOGLE_CLOUD_PROJECT=<your-project-id>
  9. GOOGLE_CLOUD_LOCATION=<location>

基础用法:

  1. from crewai import LLM
  2. llm = LLM(
  3. model="gemini/gemini-2.0-flash",
  4. api_key="your-api-key",
  5. temperature=0.7
  6. )

高级配置:

  1. from crewai import LLM
  2. llm = LLM(
  3. model="gemini/gemini-2.5-flash",
  4. api_key="your-api-key",
  5. temperature=0.7,
  6. top_p=0.9,
  7. top_k=40,
  8. max_output_tokens=8192,
  9. stop_sequences=["END", "STOP"],
  10. stream=True,
  11. safety_settings={
  12. "HARM_CATEGORY_HARASSMENT": "BLOCK_NONE",
  13. "HARM_CATEGORY_HATE_SPEECH": "BLOCK_NONE"
  14. }
  15. )

Vertex AI Express Mode:

  1. GOOGLE_GENAI_USE_VERTEXAI=true
  2. GOOGLE_API_KEY=<your-api-key>
  1. from crewai import LLM
  2. llm = LLM(
  3. model="gemini/gemini-2.0-flash",
  4. temperature=0.7
  5. )

Vertex AI( Service Account ):

  1. from crewai import LLM
  2. llm = LLM(
  3. model="gemini/gemini-1.5-pro",
  4. project="your-gcp-project-id",
  5. location="us-central1"
  6. )

支持的环境变量:

  • GOOGLE_API_KEYGEMINI_API_KEY
  • GOOGLE_GENAI_USE_VERTEXAI
  • GOOGLE_CLOUD_PROJECT
  • GOOGLE_CLOUD_LOCATION

特性:

  • 针对 Gemini 1.5+ 和 2.x 模型的原生函数调用支持
  • 支持实时流式响应
  • 多模态能力(文本、图像、视频)
  • Safety settings 配置
  • 同时支持 Gemini API 与 Vertex AI
  • 自动系统指令处理
  • Token 用量追踪

Gemini 模型:

模型 上下文窗口 适用场景
gemini-2.5-flash 1M tokens 自适应思考、成本效率
gemini-2.5-pro 1M tokens 增强思考与推理、多模态理解
gemini-2.0-flash 1M tokens 下一代能力、速度、思考
gemini-2.0-flash-thinking 32,768 tokens 带思考过程的高级推理
gemini-2.0-flash-lite 1M tokens 成本效率与低延迟
gemini-1.5-pro 2M tokens 最佳性能、逻辑推理、编码
gemini-1.5-flash 1M tokens 平衡型多模态模型,适合大多数任务
gemini-1.5-flash-8b 1M tokens 最快、最具性价比
gemini-1.0-pro 32,768 tokens 更早一代模型

Gemma 模型:

模型 上下文窗口 适用场景
gemma-3-1b 32,000 tokens 超轻量级任务
gemma-3-4b 128,000 tokens 高效通用任务
gemma-3-12b 128,000 tokens 性能与效率平衡
gemma-3-27b 128,000 tokens 高性能任务

注意:

  1. uv add "crewai[google-genai]"

Google( Vertex AI )

  1. import json
  2. file_path = 'path/to/vertex_ai_service_account.json'
  3. with open(file_path, 'r') as file:
  4. vertex_credentials = json.load(file)
  5. vertex_credentials_json = json.dumps(vertex_credentials)
  1. from crewai import LLM
  2. llm = LLM(
  3. model="gemini-1.5-pro-latest",
  4. temperature=0.7,
  5. vertex_credentials=vertex_credentials_json
  6. )

支持模型:

模型 上下文窗口 适用场景
gemini-2.5-flash-preview-04-17 1M tokens 自适应思考、成本效率
gemini-2.5-pro-preview-05-06 1M tokens 增强思考与推理、多模态理解、高级编码等
gemini-2.0-flash 1M tokens 下一代功能、速度、思考与实时流式能力
gemini-2.0-flash-lite 1M tokens 成本效率与低延迟
gemini-1.5-flash 1M tokens 平衡型多模态模型,适合大多数任务
gemini-1.5-flash-8B 1M tokens 最快、最具性价比
gemini-1.5-pro 2M tokens 最佳性能,适用于逻辑推理、编码和创意协作等广泛任务

注意:

  1. uv add 'crewai[litellm]'

Azure

CrewAI 通过 Azure AI Inference Python SDK 原生集成 Azure AI Inference 和 Azure OpenAI。

  1. # 必填
  2. AZURE_API_KEY=<your-api-key>
  3. AZURE_ENDPOINT=<your-endpoint-url>
  4. # 可选
  5. AZURE_API_VERSION=<api-version>

Endpoint URL 格式:

Azure OpenAI deployments:

  1. https://<resource-name>.openai.azure.com/openai/deployments/<deployment-name>

Azure AI Inference endpoints:

  1. https://<resource-name>.inference.azure.com

基础用法:

  1. llm = LLM(
  2. model="azure/gpt-4",
  3. api_key="<your-api-key>",
  4. endpoint="<your-endpoint-url>",
  5. api_version="2024-06-01"
  6. )

高级配置:

  1. llm = LLM(
  2. model="azure/gpt-4o",
  3. temperature=0.7,
  4. max_tokens=4000,
  5. top_p=0.9,
  6. frequency_penalty=0.0,
  7. presence_penalty=0.0,
  8. stop=["END"],
  9. stream=True,
  10. timeout=60.0,
  11. max_retries=3
  12. )

支持的环境变量:

  • AZURE_API_KEY
  • AZURE_ENDPOINT
  • AZURE_API_VERSION

特性:

  • Azure OpenAI 模型的原生函数调用支持
  • 支持实时流式响应
  • 自动校验并修正 endpoint URL
  • 带重试逻辑的全面错误处理
  • Token 用量追踪

注意:

  1. uv add "crewai[azure-ai-inference]"

AWS Bedrock

CrewAI 通过 boto3 SDK 使用 Converse API 原生集成 AWS Bedrock。

  1. # 必填
  2. AWS_ACCESS_KEY_ID=<your-access-key>
  3. AWS_SECRET_ACCESS_KEY=<your-secret-key>
  4. # 可选
  5. AWS_SESSION_TOKEN=<your-session-token>
  6. AWS_DEFAULT_REGION=<your-region>
  7. AWS_REGION_NAME=<your-region>

基础用法:

  1. from crewai import LLM
  2. llm = LLM(
  3. model="bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0",
  4. region_name="us-east-1"
  5. )

高级配置:

  1. from crewai import LLM
  2. llm = LLM(
  3. model="bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0",
  4. aws_access_key_id="your-access-key",
  5. aws_secret_access_key="your-secret-key",
  6. aws_session_token="your-session-token",
  7. region_name="us-east-1",
  8. temperature=0.7,
  9. max_tokens=4096,
  10. top_p=0.9,
  11. top_k=250,
  12. stop_sequences=["END", "STOP"],
  13. stream=True,
  14. guardrail_config={
  15. "guardrailIdentifier": "your-guardrail-id",
  16. "guardrailVersion": "1"
  17. },
  18. additional_model_request_fields={
  19. "top_k": 250
  20. }
  21. )

支持的环境变量:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_SESSION_TOKEN
  • AWS_DEFAULT_REGION
  • AWS_REGION_NAME

特性:

  • 通过 Converse API 提供原生工具调用支持
  • 支持流式和非流式响应
  • 带重试逻辑的全面错误处理
  • guardrail 配置
  • 模型专属参数
  • Token 用量追踪
  • 支持所有 Bedrock foundation models
  • 自动处理对话格式

重要说明:

  • 使用现代 Converse API
  • 自动处理模型专属对话要求
  • 系统消息与对话消息分开处理
  • 第一条消息必须来自用户
  • 某些模型要求对话必须以用户消息结束

其他 Provider 简表

Amazon SageMaker

  1. AWS_ACCESS_KEY_ID=<your-access-key>
  2. AWS_SECRET_ACCESS_KEY=<your-secret-key>
  3. AWS_DEFAULT_REGION=<your-region>
  1. llm = LLM(
  2. model="sagemaker/<my-endpoint>"
  3. )

Mistral

  1. MISTRAL_API_KEY=<your-api-key>
  1. llm = LLM(
  2. model="mistral/mistral-large-latest",
  3. temperature=0.7
  4. )

Nvidia NIM

  1. NVIDIA_API_KEY=<your-api-key>
  1. llm = LLM(
  2. model="nvidia_nim/meta/llama3-70b-instruct",
  3. temperature=0.7
  4. )

Groq

  1. GROQ_API_KEY=<your-api-key>
  1. llm = LLM(
  2. model="groq/llama-3.2-90b-text-preview",
  3. temperature=0.7
  4. )

IBM watsonx.ai

  1. WATSONX_URL=<your-url>
  2. WATSONX_APIKEY=<your-apikey>
  3. WATSONX_PROJECT_ID=<your-project-id>
  1. llm = LLM(
  2. model="watsonx/meta-llama/llama-3-1-70b-instruct",
  3. base_url="https://api.watsonx.ai/v1"
  4. )

Ollama(本地 LLMs)

  1. llm = LLM(
  2. model="ollama/llama3:70b",
  3. base_url="http://localhost:11434"
  4. )

Fireworks AI

  1. FIREWORKS_API_KEY=<your-api-key>
  1. llm = LLM(
  2. model="fireworks_ai/accounts/fireworks/models/llama-v3-70b-instruct",
  3. temperature=0.7
  4. )

Perplexity AI

  1. PERPLEXITY_API_KEY=<your-api-key>
  1. llm = LLM(
  2. model="llama-3.1-sonar-large-128k-online",
  3. base_url="https://api.perplexity.ai/"
  4. )

Hugging Face

  1. HF_TOKEN=<your-api-key>
  1. llm = LLM(
  2. model="huggingface/meta-llama/Meta-Llama-3.1-8B-Instruct"
  3. )

SambaNova

  1. SAMBANOVA_API_KEY=<your-api-key>
  1. llm = LLM(
  2. model="sambanova/Meta-Llama-3.1-8B-Instruct",
  3. temperature=0.7
  4. )

Cerebras

  1. CEREBRAS_API_KEY=<your-api-key>
  1. llm = LLM(
  2. model="cerebras/llama3.1-70b",
  3. temperature=0.7,
  4. max_tokens=8192
  5. )

Open Router

  1. OPENROUTER_API_KEY=<your-api-key>
  1. llm = LLM(
  2. model="openrouter/deepseek/deepseek-r1",
  3. base_url="https://openrouter.ai/api/v1",
  4. api_key=OPENROUTER_API_KEY
  5. )

Nebius AI Studio

  1. NEBIUS_API_KEY=<your-api-key>
  1. llm = LLM(
  2. model="nebius/Qwen/Qwen3-30B-A3B"
  3. )

以上 provider 多数使用 LiteLLM,请添加依赖:

  1. uv add 'crewai[litellm]'

流式响应

CrewAI 支持来自 LLM 的流式响应,使你的应用能够在响应生成过程中实时接收并处理输出。

基础设置

  1. from crewai import LLM
  2. llm = LLM(
  3. model="openai/gpt-4o",
  4. stream=True
  5. )

启用流式输出后,响应会以分块形式逐步返回,从而带来更高的交互响应性。

事件处理

  1. from crewai.events import (
  2. LLMStreamChunkEvent
  3. )
  4. from crewai.events import BaseEventListener
  5. class MyCustomListener(BaseEventListener):
  6. def setup_listeners(self, crewai_event_bus):
  7. @crewai_event_bus.on(LLMStreamChunkEvent)
  8. def on_llm_stream_chunk(self, event: LLMStreamChunkEvent):
  9. print(f"Received chunk: {event.chunk}")
  10. my_listener = MyCustomListener()

Agent 与 Task 追踪

  1. from crewai import LLM, Agent, Task, Crew
  2. from crewai.events import LLMStreamChunkEvent
  3. from crewai.events import BaseEventListener
  4. class MyCustomListener(BaseEventListener):
  5. def setup_listeners(self, crewai_event_bus):
  6. @crewai_event_bus.on(LLMStreamChunkEvent)
  7. def on_llm_stream_chunk(source, event):
  8. if researcher.id == event.agent_id:
  9. print("\n==============\n Got event:", event, "\n==============\n")
  10. my_listener = MyCustomListener()
  11. llm = LLM(model="gpt-4o-mini", temperature=0, stream=True)
  12. researcher = Agent(
  13. role="About User",
  14. goal="You know everything about the user.",
  15. backstory="""You are a master at understanding people and their preferences.""",
  16. llm=llm,
  17. )
  18. search = Task(
  19. description="Answer the following questions about the user: {question}",
  20. expected_output="An answer to the question.",
  21. agent=researcher,
  22. )
  23. crew = Crew(agents=[researcher], tasks=[search])
  24. result = crew.kickoff(
  25. inputs={"question": "..."}
  26. )

适用场景:

  • 调试特定 agent 的行为
  • 按 task 类型记录 LLM 使用情况
  • 审计哪些 agents 在发起何种类型的 LLM 调用
  • 对特定任务进行性能监控

异步 LLM 调用

CrewAI 支持异步 LLM 调用,以提升 AI 工作流中的性能与并发能力。

基础用法

  1. import asyncio
  2. from crewai import LLM
  3. async def main():
  4. llm = LLM(model="openai/gpt-4o")
  5. response = await llm.acall("What is the capital of France?")
  6. print(response)
  7. asyncio.run(main())

结合 Streaming

  1. import asyncio
  2. from crewai import LLM
  3. async def stream_async():
  4. llm = LLM(model="openai/gpt-4o", stream=True)
  5. response = await llm.acall("Write a short story about AI")
  6. print(response)
  7. asyncio.run(stream_async())

结构化 LLM 调用

  1. from crewai import LLM
  2. class Dog(BaseModel):
  3. name: str
  4. age: int
  5. breed: str
  6. llm = LLM(model="gpt-4o", response_format=Dog)
  7. response = llm.call(
  8. "Analyze the following messages and return the name, age, and breed. "
  9. "Meet Kona! She is 3 years old and is a black german shepherd."
  10. )
  11. print(response)
  12. # 输出:
  13. # Dog(name='Kona', age=3, breed='black german shepherd')

高级特性与优化

上下文窗口管理

  1. from crewai import LLM
  2. llm = LLM(
  3. model="gpt-4",
  4. max_tokens=4000,
  5. )

上下文管理最佳实践:

  1. 选择具有合适上下文窗口的模型
  2. 尽可能预处理长输入
  3. 对大文档使用分块策略
  4. 监控 token 用量以优化成本

性能优化

Token 用量优化

  • 小型任务(最多 4K tokens ):标准模型
  • 中型任务( 4K - 32K ):增强型模型
  • 大型任务(超过 32K ):大上下文模型
  1. llm = LLM(
  2. model="openai/gpt-4-turbo-preview",
  3. temperature=0.7,
  4. max_tokens=4096,
  5. timeout=300
  6. )

提示:

  • 更低的 temperature( 0.1 到 0.3 )适合事实性响应
  • 更高的 temperature( 0.7 到 0.9 )适合创意任务

最佳实践

  1. 监控 token 用量
  2. 实现速率限制
  3. 尽可能使用缓存
  4. 设置合理的 max_tokens 限制

丢弃附加参数

  1. from crewai import LLM
  2. import os
  3. os.environ["OPENAI_API_KEY"] = "<api-key>"
  4. o3_llm = LLM(
  5. model="o3",
  6. drop_params=True,
  7. additional_drop_params=["stop"]
  8. )

传输拦截器

支持的 Providers:

  • OpenAI
  • Anthropic
  1. import httpx
  2. from crewai import LLM
  3. from crewai.llms.hooks import BaseInterceptor
  4. class CustomInterceptor(BaseInterceptor[httpx.Request, httpx.Response]):
  5. """用于修改请求和响应的自定义拦截器。"""
  6. def on_outbound(self, request: httpx.Request) -> httpx.Request:
  7. print(request)
  8. return request
  9. def on_inbound(self, response: httpx.Response) -> httpx.Response:
  10. print(f"Status: {response.status_code}")
  11. print(f"Response time: {response.elapsed}")
  12. return response
  13. llm = LLM(
  14. model="openai/gpt-4o",
  15. interceptor=CustomInterceptor()
  16. )

重要说明:

  • 两个方法都必须返回接收到的对象或对应类型对象
  • 修改接收到的对象可能导致不可预期行为或应用崩溃
  • 并非所有 provider 都支持拦截器

适用场景:

  • 消息转换与过滤
  • 调试 API 交互

常见问题与解决方案

认证

大多数认证问题都可以通过检查 API key 格式和环境变量名称来解决。

  1. # OpenAI
  2. OPENAI_API_KEY=sk-...
  3. # Anthropic
  4. ANTHROPIC_API_KEY=sk-ant-...

模型名称

始终在模型名称中包含 provider 前缀。

  1. # 正确
  2. llm = LLM(model="openai/gpt-4")
  3. # 错误
  4. llm = LLM(model="gpt-4")

上下文长度

对于大型任务,请使用更大上下文窗口的模型。

  1. llm = LLM(model="openai/gpt-4o") # 128K tokens