模型选型与 Agent 适配
不同的大模型在 Agent 场景中表现差异巨大——工具调用准确率、推理能力、上下文长度、响应速度都直接影响 Agent 的可靠性。本章从 Agent 视角分析如何选择和适配大模型。
一句话理解
不同的大模型在 Agent 场景中表现差异巨大——工具调用准确率、推理能力、上下文长度、响应速度都直接影响 Agent 的可靠性。本章从 Agent 视角分析如何选择和适配大模型。
阅读前置
建议完成第 04、05 章
本文关注
Agent 对模型的核心要求、主流模型 Agent 能力对比、模型路由策略
所在知识层
系统协同 · 大模型与智能体协同
文章导航
点击图中节点可定位到对应正文。
核心主题关系与流向
引言
不同的大模型在 Agent 场景中表现差异巨大——工具调用准确率、推理能力、上下文长度、响应速度都直接影响 Agent 的可靠性。本章从 Agent 视角分析如何选择和适配大模型。
1. Agent 对模型的核心要求
1.1 关键能力评估
TEXT
Agent 场景对模型的要求(按重要性排序):
1. 工具调用准确率(最重要)
- 能否正确选择工具
- 能否生成正确的参数
- 能否处理工具返回结果
2. 指令遵循能力
- 能否严格按照系统提示行动
- 能否输出指定格式(JSON、XML)
- 能否在需要时停止而非继续
3. 推理与规划能力
- 能否分解复杂任务
- 能否处理多步骤推理
- 能否根据中间结果调整策略
4. 上下文管理
- 能否有效利用长上下文
- 在大量信息中找到关键内容
- 不遗漏重要细节
5. 速度与成本
- 响应延迟(Agent 多轮调用,延迟累积)
- Token 价格(Agent 消耗远多于普通对话)1.2 Agent 专用评测
| 评测基准 | 测试能力 | 说明 |
|---|---|---|
| BFCL | 工具调用准确率 | Berkeley Function Calling Leaderboard |
| SWE-bench | 代码 Agent | 解决真实 GitHub Issue |
| WebArena | 网页操作 | 在真实网站上完成任务 |
| GAIA | 通用 Agent | 需要多步推理和工具使用 |
| AgentBench | 综合 Agent | 8 个不同环境的 Agent 任务 |
| ToolBench | 工具使用 | 16000+ 真实 API |
2. 主流模型 Agent 能力对比
2.1 闭源模型
| 模型 | 工具调用 | 推理能力 | 上下文 | 速度 | 成本 |
|---|---|---|---|---|---|
| GPT-4o | 优秀 | 强 | 128K | 快 | 高 |
| Claude 3.5 Sonnet | 优秀 | 强 | 200K | 快 | 中 |
| Claude 3.5 Haiku | 良好 | 中 | 200K | 极快 | 低 |
| Gemini 2.0 Flash | 良好 | 中 | 1M | 极快 | 低 |
| GPT-4o-mini | 良好 | 中 | 128K | 极快 | 极低 |
2.2 开源模型
| 模型 | 工具调用 | 推理能力 | 上下文 | 部署难度 |
|---|---|---|---|---|
| Qwen2.5-72B | 优秀 | 强 | 128K | 中 |
| LLaMA 3.3-70B | 良好 | 强 | 128K | 中 |
| Mistral Large | 良好 | 强 | 128K | 中 |
| DeepSeek-V3 | 良好 | 强 | 128K | 中 |
| Qwen2.5-7B | 一般 | 中 | 32K | 低 |
2.3 Agent 场景推荐
TEXT
高复杂度任务(需要多步推理和精确工具调用):
首选: Claude 3.5 Sonnet / GPT-4o
原因: 推理能力强,工具调用准确
高吞吐量任务(大量简单 Agent 任务):
首选: Claude 3.5 Haiku / GPT-4o-mini / Gemini Flash
原因: 速度快,成本低
代码 Agent:
首选: Claude 3.5 Sonnet / DeepSeek-V3
原因: 代码能力强,SWE-bench 表现优异
本地部署(数据安全要求高):
首选: Qwen2.5-72B / LLaMA 3.3-70B
原因: 工具调用支持好,可本地推理
预算敏感场景:
首选: GPT-4o-mini + GPT-4o(路由)
策略: 简单任务用 mini,复杂任务升级到 4o3. 模型路由策略
3.1 智能路由
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
def route(self, task: str, context: dict) -> str:
"""路由决策"""根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
# 规则 1: 代码相关任务 → 代码模型
if self.is_code_task(task):
return self.code_model根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
# 规则 2: 简单查询 → 快速模型
if self.is_simple_query(task):
return self.fast_model根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
# 规则 3: 复杂推理 → 强大模型
if self.requires_complex_reasoning(task):
return self.smart_model根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
def is_simple_query(self, task: str) -> bool:
"""判断是否是简单查询"""
simple_patterns = ["查询", "获取", "列出", "显示"]
return any(p in task for p in simple_patterns)3.2 级联调用
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
用户请求 → 小模型尝试处理
↓
结果质量够好?
├── 是 → 直接返回(省钱)
└── 否 → 大模型重新处理(保证质量)根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
实现:
Step 1: GPT-4o-mini 尝试回答
Step 2: 评估回答质量(自信度评分)
Step 3: 自信度 < 阈值 → 升级到 GPT-4o
Step 4: 返回最终回答4. 模型适配技巧
4.1 系统提示优化
PYTHON
# 针对不同模型的 Agent 系统提示优化
# Claude 系列(擅长 XML 标签结构化)
CLAUDE_SYSTEM = """
你是一个数据分析 Agent。
<instructions>
1. 首先理解用户的分析需求
2. 使用 query_data 工具获取数据
3. 分析数据并给出洞察
4. 如果数据不足,明确告知用户
</instructions>
<tool_usage>
- 每次只调用一个工具
- 仔细阅读工具返回结果再决定下一步
- 如果工具报错,尝试修正参数
</tool_usage>
"""
# GPT 系列(擅长 Markdown 结构化)
GPT_SYSTEM = """
你是一个数据分析 Agent。
## Instructions
1. 首先理解用户的分析需求
2. 使用 query_data 工具获取数据
3. 分析数据并给出洞察
4. 如果数据不足,明确告知用户
## Tool Usage
- 每次只调用一个工具
- 仔细阅读工具返回结果再决定下一步
- 如果工具报错,尝试修正参数
"""
# 小模型(需要更明确的指令)
SMALL_MODEL_SYSTEM = """
你是一个数据分析 Agent。你必须严格按照以下步骤行动:
步骤 1: 理解用户需求
步骤 2: 调用 query_data 工具获取数据
步骤 3: 分析数据
步骤 4: 给出回答
重要规则:
- 必须使用工具获取数据,不要编造数据
- 工具调用时必须提供所有必需参数
- 如果不确定,请询问用户
"""4.2 工具描述优化
PYTHON
# 差:模糊的描述
bad_tool = {
"name": "search",
"description": "搜索信息"
}
# 好:详细的描述(包含何时使用、输入输出、限制)
good_tool = {
"name": "search_web",
"description": """搜索互联网获取最新信息。
何时使用:
- 需要获取实时数据或最新新闻
- 知识库中没有的信息
- 需要验证事实
何时不使用:
- 已有确定答案的常识问题
- 可以通过计算得到答案的问题
输入:query (字符串) - 搜索关键词
输出:搜索结果列表,每项包含标题、摘要和链接
限制:每次最多返回 5 条结果""",
"parameters": {
"query": {
"type": "string",
"description": "搜索关键词,应具体而非笼统"
}
}
}5. 本地模型与 Agent
5.1 本地部署方案
PYTHON
# 使用 Ollama 部署本地模型
# ollama pull qwen2.5:72b
# 配置 Agent 使用本地模型
from langchain_ollama import ChatOllama
local_llm = ChatOllama(
model="qwen2.5:72b",
base_url="http://localhost:11434",
temperature=0
)
# 本地模型的工具调用
# 注意:需要模型原生支持 Function Calling
# Qwen2.5 和 LLaMA 3.x 支持较好5.2 本地 vs 云端
| 维度 | 本地部署 | 云端 API |
|---|---|---|
| 数据安全 | 数据不出本地 | 数据传输到云端 |
| 延迟 | 取决于硬件 | 网络延迟 + 排队 |
| 成本 | 硬件投入高 | 按量付费 |
| 模型质量 | 受限于开源模型 | 可用最强模型 |
| 维护 | 需要自行维护 | 免运维 |
| 扩展性 | 受硬件限制 | 弹性扩展 |
6. 本章小结
| 维度 | 要点 |
|---|---|
| 核心要求 | 工具调用准确 > 指令遵循 > 推理 > 上下文 > 速度 |
| 闭源推荐 | Claude 3.5 Sonnet(综合最佳)/ GPT-4o |
| 开源推荐 | Qwen2.5-72B / LLaMA 3.3-70B |
| 路由策略 | 简单任务→小模型,复杂任务→大模型 |
| 适配技巧 | 针对模型特点优化系统提示和工具描述 |
相关章节
- 模型能力评测体系 — Agent 选型的评测依据与基准
- 闭源模型(OpenAI-Anthropic-Google) — 主流候选模型的能力概览
- 什么是智能体 — 模型适配的对象与运行机制
延伸阅读
- Berkeley Function Calling Leaderboard: gorilla.cs.berkeley.edu/leaderboard
- SWE-bench: swe-bench.github.io
- GAIA Benchmark: gaia-benchmark.com