模型与提供商
支持的模型概览
DeepAgents 与任何支持工具调用(Tool Calling)能力的 LLM 模型兼容。这意味着模型必须能够:
- 理解工具定义和参数
- 决定何时以及如何调用工具
- 以结构化的方式响应工具调用
主流模型提供商
Anthropic Claude 系列
推荐模型:
- Claude 3.5 Sonnet(生产环境推荐)
- Claude 3.5 Haiku(轻量级、快速)
- Claude 3 Opus(高级推理)
特点:
- 强大的推理能力和上下文理解
- 原生支持工具使用
- 支持扩展思考(Extended Thinking)
配置方式:
from deepagents import create_deep_agent
agent = create_deep_agent(
model="anthropic:claude-3-5-sonnet-20241022",
tools=[your_tools],
)
OpenAI GPT 系列
推荐模型:
- GPT-4o(多模态能力强)
- GPT-4 Turbo
- GPT-4 Mini(成本优化)
特点:
- 稳定的工具调用能力
- 支持多模态输入
- API 非常稳定成熟
配置方式:
from deepagents import create_deep_agent
agent = create_deep_agent(
model="openai:gpt-4o",
tools=[your_tools],
)
Google Gemini
推荐模型:
- Gemini 2.0 Flash
- Gemini 1.5 Pro
- Gemini 1.5 Flash(轻量级)
特点:
- 先进的推理能力
- 支持大量上下文
- 性能与成本具有竞争力
配置方式:
from deepagents import create_deep_agent
agent = create_deep_agent(
model="google:gemini-2.0-flash",
tools=[your_tools],
)
其他提供商
Cohere、Mistral、Groq 等也提供具有工具调用能力的模型。完整列表和配置详见 LangChain 官方文档。
模型选择指南
性能维度对比
| 模型 | 推理能力 | 速度 | 成本 | 上下文 | 最佳用途 |
|---|---|---|---|---|---|
| GPT-4o | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | 128K | 复杂推理、多模态 |
| Claude 3.5 Sonnet | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | 200K | 一般用途、长文本 |
| Gemini 2.0 Flash | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | 1M | 快速响应、大量数据 |
| GPT-4 Mini | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 128K | 简单任务、成本控制 |
| Claude 3.5 Haiku | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 200K | 快速反应、开发测试 |
选型建议
生产环境:
- 如果需要最佳性能 → Claude 3.5 Sonnet
- 如果需要多模态支持 → GPT-4o
- 如果需要处理大量数据 → Gemini 2.0 Flash
开发测试:
- 快速迭代 → Claude 3.5 Haiku 或 GPT-4 Mini
- 降低成本 → 任何 Mini/Flash 系列
特殊场景:
- 需要长期记忆 → 任何支持大上下文的模型
- 需要代码生成 → GPT-4o 或 Claude 系列
- 需要实时响应 → Gemini 2.0 Flash
模型配置
基本配置
最简单的方式是使用模型字符串标识符:
from deepagents import create_deep_agent
agent = create_deep_agent(
model="openai:gpt-4o",
tools=[search_tool, read_file_tool],
)
高级配置
对于需要自定义参数的场景,使用 init_chat_model() 函数:
from langchain.chat_models import init_chat_model
from deepagents import create_deep_agent
model = init_chat_model(
model="anthropic:claude-3-5-sonnet-20241022",
temperature=0.7, # 控制创意程度(0.0-1.0)
max_tokens=2000, # 单次响应最大字数
top_p=0.9, # 核采样参数
)
agent = create_deep_agent(
model=model,
tools=[your_tools],
)
使用提供商特定类
对于特定的配置需求,可以直接使用提供商的模型类:
from langchain_anthropic import ChatAnthropic
from deepagents import create_deep_agent
model = ChatAnthropic(
model="claude-3-5-sonnet-20241022",
temperature=0.5,
max_tokens=4000,
thinking={
"type": "enabled",
"budget_tokens": 10000 # Anthropic 扩展思考功能
}
)
agent = create_deep_agent(
model=model,
tools=[your_tools],
)
高级配置选项
网络韧性配置
对于在不稳定网络环境中运行的应用,可以配置重试策略:
from langchain.chat_models import init_chat_model
from deepagents import create_deep_agent
model = init_chat_model(
model="anthropic:claude-3-5-sonnet-20241022",
max_retries=10, # 默认值为 6
timeout=120, # 请求超时时间(秒)
)
agent = create_deep_agent(model=model)
重试行为说明:
- 自动重试网络错误和速率限制错误
- 自动重试服务器 5xx 错误
- 不会重试客户端错误(4xx),如认证失败
令牌计数和成本控制
from langchain_core.callbacks import get_openai_token_counter
# 估算成本
token_counter = get_openai_token_counter()
estimated_tokens = token_counter.estimate_token_count("your input text")
# 设置最大令牌限制
model = init_chat_model(
model="openai:gpt-4o",
max_tokens=1000, # 防止过度支出
)
流式响应和部分结果
agent = create_deep_agent(
model="anthropic:claude-3-5-sonnet-20241022",
tools=[your_tools],
)
# 流式处理响应
for chunk in agent.stream(
{"messages": [{"role": "user", "content": "处理这个大任务"}]},
stream_mode="updates",
):
print(chunk) # 实时查看进度
运行时动态模型切换
在某些应用中,可能需要根据用户选择或其他条件在运行时切换模型。使用中间件实现这一功能:
from deepagents import create_deep_agent
from langchain.chat_models import init_chat_model
def get_agent_with_model_selection(user_model_preference: str):
"""根据用户偏好创建代理"""
model_map = {
"fast": init_chat_model("openai:gpt-4-mini"),
"balanced": init_chat_model("openai:gpt-4o"),
"powerful": init_chat_model("anthropic:claude-3-5-sonnet-20241022"),
}
agent = create_deep_agent(
model=model_map.get(user_model_preference, model_map["balanced"]),
tools=[your_tools],
)
return agent
# 使用示例
user_choice = "fast" # 或从 UI 获取
agent = get_agent_with_model_selection(user_choice)
result = agent.invoke({"messages": [{"role": "user", "content": "..."}]})
性能优化建议
1. 提示工程
system_prompt = """你是一个专业的 Python 开发助手。
在回复前,你应该:
1. 理解用户的具体需求
2. 考虑最佳实践和代码质量
3. 提供可立即使用的代码示例
对于每个建议,解释为什么这是最佳方案。"""
agent = create_deep_agent(
model="anthropic:claude-3-5-sonnet-20241022",
system_prompt=system_prompt,
tools=[your_tools],
)
2. 工具优化
# ❌ 不好:工具参数过多
def complex_search(query, date_from, date_to, language, region, ...): pass
# ✅ 好:接口简洁明确
def search(query: str) -> str:
"""搜索相关信息。query 可以包含日期和其他过滤条件。"""
pass
3. 上下文管理
# 对于长的对话历史,定期清理或总结
def cleanup_context(messages, max_tokens=8000):
"""保持消息历史在合理大小"""
total_tokens = 0
kept_messages = [messages[0]] # 保留系统消息
for msg in reversed(messages[1:]):
msg_tokens = len(msg.content) // 4 # 粗略估算
if total_tokens + msg_tokens < max_tokens:
kept_messages.insert(1, msg)
total_tokens += msg_tokens
else:
break
return kept_messages
成本估算
按使用场景
| 应用类型 | 推荐模型 | 平均成本/1000 调用 | 适用规模 |
|---|---|---|---|
| 企业助手 | Claude 3.5 Sonnet | $5-10 | 小到中型 |
| 批量处理 | GPT-4 Mini | $2-5 | 大规模 |
| 实时对话 | Gemini 2.0 Flash | $3-8 | 中到大型 |
| 开发测试 | 任何 Mini | $1-3 | 非生产 |
成本优化技巧
- 使用缓存机制:避免重复处理相同数据
- 批量处理:合并多个请求
- 选择合适的模型大小:不要过度配置
- 监控 token 使用:设置告警阈值
故障排查
模型不支持工具调用
症状:Error: Model does not support tool calling
解决:
- 确认模型版本支持工具调用
- 查看 LangChain 官方文档获取最新支持的模型列表
- 升级 langchain 和 相关提供商包
API 速率限制
症状:RateLimitError: 429 Too Many Requests
解决:
# 添加重试和退避
model = init_chat_model(
model="openai:gpt-4o",
max_retries=10,
)
# 或手动添加延迟
import time
import random
def call_with_backoff(agent, messages, max_retries=3):
for attempt in range(max_retries):
try:
return agent.invoke({"messages": messages})
except Exception as e:
if attempt < max_retries - 1:
wait_time = 2 ** attempt + random.random()
time.sleep(wait_time)
else:
raise
令牌超限
症状:Error: Maximum context length exceeded
解决:
- 减少消息历史长度
- 使用更长上下文的模型
- 实现消息总结/压缩机制