工具调用格式不兼容导致请求失败
问题解构
用户遇到的核心错误是 LLM request failed: provider rejected the request schema or tool payload.。这个错误通常发生在 OpenClaw 智能体通过网关向大语言模型(LLM)服务提供商(如 OpenAI、Kimi、GLM 等)发起请求时,请求的格式或内容不符合服务商的 API 规范 。具体可能涉及以下几个方面:
- 工具调用(Tool Call)格式不兼容:OpenClaw 的 Skill 会以工具(Tools)的形式暴露给 LLM,如果工具的描述(Schema)或调用参数(Payload)不符合特定 LLM 的格式要求,请求会被拒绝 。
- API 鉴权与路由问题:网关配置了错误的模型端点(Endpoint)、API 密钥(Key)或服务商(Provider),导致请求被目标服务方拒绝 。
- Skill 实现或配置错误:自定义 Skill 的
SKILL.md描述文件或index.ts中的工具函数定义不规范,生成了无效的请求负载 。
方案推演与调试方法
解决此问题需要从 OpenClaw 的请求链路出发,进行分层排查。以下是详细的调试步骤和方法。
1. 检查网关配置与模型路由
这是最可能的原因。OpenClaw 网关负责将智能体的请求路由到正确的 LLM 服务。配置错误会直接导致请求被拒。
- 检查模型配置文件:定位网关的配置文件(通常是
config/models.yaml或类似文件),确认目标模型的provider、endpoint和apiKey是否正确。 - 验证 API 密钥与权限:特别是对于 Kimi 等国内模型,需确认 API 密钥有效且具有调用对应模型(如
moonshot-v1-8k)的权限。不同产品线的 API 密钥可能不通用 。
# 示例:检查 models.yaml 中 GLM-5 的配置
models:
- id: "glm-5"
name: "GLM-5 Latest"
provider: "glm" # 提供商标识必须准确
endpoint: "https://open.bigmodel.cn/api/paas/v4/chat/completions" # 确认端点正确
apiKey: "${GLM_API_KEY}" # 确保环境变量已设置且密钥有效
capabilities: ["chat", "tools"] # 必须包含 "tools" 以支持工具调用
2. 审查并修正 Skill 定义
自定义 Skill 的工具定义必须严格遵循 OpenClaw 和 LLM 服务商的规范。
-
规范
SKILL.md文件:确保文件中的工具描述清晰、参数定义完整且类型准确。模糊或错误的描述可能导致 LLM 生成不合规的调用参数 。<!-- 在 SKILL.md 中,工具描述应清晰 --> ## get_weather 获取指定城市的当前天气信息。 **Parameters:** - `city` (string, required): 城市名称,例如“北京”。 - `unit` (string, optional): 温度单位,`celsius` 或 `fahrenheit`,默认为 `celsius`。 **Returns:** JSON 对象,包含温度、天气状况等信息。 -
检查
index.ts中的工具函数签名:工具函数的输入参数必须与SKILL.md中的描述严格匹配,并且函数应返回Promise<string>类型。参数类型不匹配或返回格式错误会导致序列化问题 。// index.ts 中的工具函数实现 import { SkillContext } from "@openclaw/core"; export async function getWeather( context: SkillContext, params: { city: string; unit?: string } // 参数结构必须与 SKILL.md 一致 ): Promise<string> { const { city, unit = 'celsius' } = params; // ... 实现逻辑 return JSON.stringify({ temperature: 25, condition: '晴', unit }); // 返回字符串 }
3. 启用详细日志与调试模式
OpenClaw 提供了日志系统来追踪请求链路。
- 查看网关日志:启动网关时,设置日志级别为
DEBUG或TRACE,可以查看出入网关的原始请求和响应,定位是哪个环节的格式被拒绝 。# 启动网关时指定日志级别 OPENCLAW_LOG_LEVEL=debug npm start - 查看智能体日志:在智能体的运行环境中,同样启用调试日志,查看它准备发送给网关的工具调用请求是什么 。
4. 针对特定模型的兼容性处理
某些 LLM 对工具调用格式有特殊要求。
- GLM-5 工具调用格式:已知 GLM-5 对工具调用的 JSON 结构要求较为严格。如果遇到
400错误,很可能是工具name或parameters的格式不符。需要参考 GLM 的官方文档,调整网关或 Skill 生成请求的适配层 。 - 简化或适配工具 Schema:如果某个复杂的工具定义总是导致失败,可以尝试简化参数,或将一个复杂工具拆分成多个简单工具,以符合 LLM 的处理能力。
5. 进行隔离测试与验证
通过最小化复现步骤来定位问题。
- 测试纯文本对话:首先,在智能体中禁用所有 Skill,仅进行纯文本对话。如果成功,说明基础模型连接和鉴权是正常的,问题出在工具调用上。
- 逐个启用 Skill:然后,逐个启用 Skill,观察是哪个 Skill 的调用触发了错误。这能帮助定位到有问题的具体工具 。
- 使用 MCP 客户端直接测试:OpenClaw 使用 Model Context Protocol (MCP)。可以使用独立的 MCP 客户端工具直接向你的 Skill 服务器发送工具调用请求,绕过 LLM,以验证 Skill 本身的接口是否符合 MCP 标准 。
总结与快速排查清单
当遇到“提供方拒绝请求模式或工具负载”错误时,请按以下清单顺序排查:
| 排查步骤 | 关键检查点 | 预期结果/修复措施 |
|---|---|---|
| 1. 基础连接 | 网关模型配置(provider, endpoint, apiKey) |
确认配置正确,API密钥有效且有权调用目标模型 。 |
| 2. 技能定义 | SKILL.md 的描述清晰度与 index.ts 的函数签名 |
确保描述准确,参数类型匹配,函数返回 Promise<string> 。 |
| 3. 日志分析 | 启用 DEBUG 级别日志,查看网关和智能体的出入请求 |
从日志中直接看到被拒绝的请求体,对比服务商API文档 。 |
| 4. 模型兼容性 | 针对特定模型(如GLM-5)检查工具调用格式 | 调整工具Schema或查阅该模型特定的工具调用格式要求 。 |
| 5. 隔离测试 | 禁用所有Skill进行纯聊天,再逐个启用 | 定位到引发问题的具体Skill,然后聚焦修复 。 |
通过以上结构化调试,可以系统地定位并解决 OpenClaw 中因工具调用格式或配置不当导致的 LLM 请求失败问题。核心思路是:确保网关配置正确指向有权限的模型服务,并保证 Skill 定义生成的工具调用负载完全符合目标 LLM API 的规范 。
参考来源
- 【OpenClaw 全面解析:从零到精通】第 017 篇:OpenClaw 自定义 Skill 开发指南——从零构建你的第一个专属技能
- OpenCLAW 讲师叶梓OpenCLAW 技术培训提纲
- OpenCLAW 讲师叶梓OpenCLAW 技术培训提纲
- OpenClaw入门:从理论基础到实践应用的自主AI代理框架
- openclaw
- OpenClaw 工作流自动化实战:打造你的智能定时任务中心
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)