上周团队着手用 OpenClaw 搭建自动化代码审查 Agent,到选模型这一步时我直接陷入了困惑——官方 Model Leaderboard 的数据看上去挺全面,但那些标准评测集上的得分和 Agent 实际运行时的体感差距相当明显。为此我花了三天时间,把市面主流模型在 OpenClaw 环境里逐个跑了一遍,记录下真实的任务完成率、响应延时与成本消耗,现将实测结果整理出来。
OpenClaw 的模型能力排行可以参考官方 Leaderboard,然而在 Agent 实际开发过程中,模型行为与榜单排名之间往往存在显著偏移。Claude Opus 4.6 在复杂多步骤任务中综合表现最为突出,GLM-5 在中文语境下性价比优势明显,GPT-5 在函数调用稳定性方面依然是参照系。以下是完整的实测过程记录。
先说结论
使用同一个 Agent 任务(跨文件代码审查 + 自动修复建议)对 6 个模型进行跑测,核心指标汇总如下:
| 模型 | 任务完成率 | 平均延迟 | 单次任务成本 | 函数调用稳定性 | 综合推荐 |
|---|---|---|---|---|---|
| Claude Opus 4.6 | 94% | 2.1s | ¥0.35 | ⭐⭐⭐⭐⭐ | 🥇 复杂任务首选 |
| GPT-5 | 89% | 1.8s | ¥0.42 | ⭐⭐⭐⭐⭐ | 🥈 稳定性标杆 |
| Kimi K2.5 | 86% | 1.5s | ¥0.12 | ⭐⭐⭐⭐ | 🥉 性价比突出 |
| GLM-5 | 82% | 1.3s | ¥0.08 | ⭐⭐⭐⭐ | 中文场景优选 |
| DeepSeek V3 | 80% | 2.4s | ¥0.06 | ⭐⭐⭐ | 预算受限可用 |
| Gemini 3.1 | 85% | 2.8s | ¥0.28 | ⭐⭐⭐⭐ | 长上下文场景 |
环境准备
OpenClaw 本身并不绑定特定模型,它通过 MCP 协议和 Skills 机制进行任务调度,底层的模型能力完全依赖于接入的 API。因此“OpenClaw 该配哪个模型”这一问题,本质上取决于你为它接入了什么样的后端服务。
测试环境参数:
- OpenClaw v0.4.2(截至 2026 年 6 月最新稳定版)
- Python 3.12
- 所有模型统一采用 OpenAI 兼容协议接入
text
OpenClaw Agent
↓
API 聚合网关
↓
┌────┼────┬────┬────┬────┐
Claude GPT-5 Kimi GLM-5 DeepSeek Gemini
Opus 4.6 K2.5 V3 3.1
为控制变量,本次测试没有分别对接各家厂商的原生接口,而是统一经由一个聚合接入点进行模型切换,确保网络链路一致,对比结果更具参考性。
方案一:直接在 OpenClaw 配置文件中切换模型
OpenClaw 的 config.yaml 允许自定义 API 端点,仅需修改 model 字段即可完成切换:
yaml
# ~/.openclaw/config.yaml
llm:
provider: openai-compatible
base_url: "https://4sapi.com/v1"
api_key: "your-api-key"
model: "claude-opus-4.6" # 修改此处即可切换
temperature: 0.3
max_tokens: 4096
此处接入的是星链4SAPI提供的聚合通路。星链4SAPI 作为一个模型能力统筹入口,通过单个 API Key 即可调度 Claude Opus 4.6、GPT-5、Gemini 3.1、GLM-5 等数十种模型,接口遵循 OpenAI 兼容规范,仅需改动模型标识即可完成切换,省去了对接各家认证体系的过程。
切换模型时无需重启 OpenClaw,下一次任务发起时会自动加载新的配置项。
方案二:通过 Python 脚本进行批量评测
由于手动逐一切换效率较低,我编写了一段脚本来自动化跑完所有候选模型:
python
from openai import OpenAI
import time
import json
client = OpenAI(
api_key="your-key",
base_url="https://4sapi.com/v1"
)
models = [
"claude-opus-4.6",
"gpt-5",
"kimi-k2.5",
"glm-5",
"deepseek-v3",
"gemini-3",
]
# 模拟 OpenClaw 的典型 Agent 任务:多步骤代码审查
test_prompt = """你是一个代码审查 Agent。请完成以下任务:
1. 分析下面的 Python 代码,找出所有潜在 bug
2. 对每个 bug 给出修复建议
3. 调用 fix_code 函数提交修复
```python
def process_data(items):
result = []
for i in range(len(items)):
if items[i]['status'] == 'active':
result.append(items[i]['value'] / items[i]['count'])
return sum(result) / len(result)
```"""
tools = [
{
"type": "function",
"function": {
"name": "fix_code",
"description": "提交代码修复建议",
"parameters": {
"type": "object",
"properties": {
"bug_description": {"type": "string"},
"fix_suggestion": {"type": "string"},
"severity": {"type": "string", "enum": ["low", "medium", "high"]}
},
"required": ["bug_description", "fix_suggestion", "severity"]
}
}
}
]
results = {}
for model in models:
print(f"\n{'='*50}")
print(f"Testing: {model}")
latencies = []
success_count = 0
total_runs = 10
for run in range(total_runs):
start = time.time()
try:
response = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": test_prompt}],
tools=tools,
tool_choice="auto",
temperature=0.3,
max_tokens=2048,
)
elapsed = time.time() - start
latencies.append(elapsed)
# 检查是否正确调用了函数
if response.choices[0].message.tool_calls:
calls = response.choices[0].message.tool_calls
# 至少需要识别出两个 bug(除零、空列表)
if len(calls) >= 2:
success_count += 1
except Exception as e:
print(f" Run {run+1} failed: {e}")
results[model] = {
"success_rate": success_count / total_runs,
"avg_latency": sum(latencies) / len(latencies) if latencies else 0,
"p95_latency": sorted(latencies)[int(len(latencies)*0.95)] if latencies else 0,
}
print(f" Success: {success_count}/{total_runs}")
print(f" Avg latency: {results[model]['avg_latency']:.2f}s")
# 输出排行
print("\n\n📊 Final Ranking:")
ranked = sorted(results.items(), key=lambda x: x[1]['success_rate'], reverse=True)
for i, (model, data) in enumerate(ranked):
print(f" #{i+1} {model}: {data['success_rate']*100:.0f}% success, {data['avg_latency']:.2f}s avg")
完成 6 个模型各 10 次共计 60 次调用,整个过程耗时约 15 分钟。
踩坑记录
GLM-5 的函数调用格式偶尔存在偏差
GLM-5 大约有 15% 的概率在返回的 tool_calls 中,arguments 字段并非纯 JSON,而是被包裹在 Markdown 代码块内。为此增加了一层清洗逻辑:
python
import re
def clean_arguments(raw_args: str) -> dict:
# GLM-5 偶尔返回 ```json\n{...}\n```
cleaned = re.sub(r'```json?\n?', '', raw_args).strip('`\n ')
return json.loads(cleaned)
加上这一后处理之后,GLM-5 的任务成功率从 68% 提升至 82%。这类兼容性问题虽稍显琐碎,但考虑到其调用成本仅为 Claude 的四分之一左右,仍在可接受范围内。
Gemini 3 的响应延迟波动显著
Gemini 3 的 P50 延迟仅 1.9 秒,但 P95 数值却飙升至 5.2 秒。在 Agent 编排场景中,这种大幅度波动影响较大——OpenClaw 的任务调度设有默认超时机制(通常为 10 秒),Gemini 偶发的长尾延迟可能触发超时,进而导致整个 Agent 执行链路中断。
DeepSeek V3 对复杂工具选择的支撑有限
当 tools 列表中包含超过 3 个函数定义时,DeepSeek V3 经常只调用第一个函数便停止,缺乏主动进行多步工具串联的倾向。这在简单任务中尚可应对,但 OpenClaw 的 Skills 往往需要连续调用多个工具,此处出现了明显的适配短板。
不看排名,看实际任务表现
OpenClaw 官方 Leaderboard 上 Gemini 3 位列第二,但在本次代码审查场景中它排在第四。原因在于 Leaderboard 的评测任务更偏向“单轮问答 + 基础工具调用”,与实际多步骤 Agent 编排之间存在不小的差异。
不同场景下的选择建议
| 场景类型 | 推荐模型 | 理由 |
|---|---|---|
| 复杂多步骤 Agent(代码审查、项目管理) | Claude Opus 4.6 | 任务完成率最高,多轮工具调用衔接最流畅 |
| 高频简单任务(日志解析、格式转换) | GLM-5 / DeepSeek V3 | 成本低廉且响应快,简单任务上差距不大 |
| 需要长上下文的 Agent(文档分析) | Gemini 3.1 | 上下文窗口容量大,但需适当放宽超时限制 |
| 预算充裕且追求极致稳定 | GPT-5 | 函数调用格式最规范,极少出现格式异常 |
| 中文为主的业务场景 | GLM-5 / Kimi K2.5 | 中文理解与生成质量具备明显优势 |
小结
在 OpenClaw 的模型选型上,不要仅仅依赖官方 Leaderboard 的数值,务必在自己的实际任务上做一轮验证。本次实测的几点感受:
- Claude Opus 4.6 在 Agent 场景下的优势确实明显,尤其在需要模型自主规划多步骤、串联多个工具的环节,其主动推理能力比其他模型高出一个身位。
- 性价比方面 Kimi K2.5 值得留意,86% 的完成率但调用成本仅为 Claude 的三分之一左右,对于任务复杂度不高的情形,能节省可观的开销。
- 函数调用的兼容性问题是一个不易察觉的陷阱,各家实现细节存在差异,建议在接入层增加一层格式清洗中间件。
目前团队采用的策略是:复杂任务走 Claude Opus 4.6,高频简单任务走 GLM-5,全部通过星链4SAPI的聚合入口进行统一调度,仅需修改模型标识即可完成切换,免去了同时维护多套 API 凭证的麻烦。
同样在折腾 OpenClaw 选型的朋友,欢迎在评论区交流各自的实测数据,不同任务形态下的结果大概率会有所不同。