问题解构

用户遇到的核心错误是 LLM request failed: provider rejected the request schema or tool payload.。这个错误通常发生在 OpenClaw 智能体通过网关向大语言模型(LLM)服务提供商(如 OpenAI、Kimi、GLM 等)发起请求时,请求的格式或内容不符合服务商的 API 规范 。具体可能涉及以下几个方面:

  1. 工具调用(Tool Call)格式不兼容:OpenClaw 的 Skill 会以工具(Tools)的形式暴露给 LLM,如果工具的描述(Schema)或调用参数(Payload)不符合特定 LLM 的格式要求,请求会被拒绝 。
  2. API 鉴权与路由问题:网关配置了错误的模型端点(Endpoint)、API 密钥(Key)或服务商(Provider),导致请求被目标服务方拒绝 。
  3. Skill 实现或配置错误:自定义 Skill 的 SKILL.md 描述文件或 index.ts 中的工具函数定义不规范,生成了无效的请求负载 。

方案推演与调试方法

解决此问题需要从 OpenClaw 的请求链路出发,进行分层排查。以下是详细的调试步骤和方法。

1. 检查网关配置与模型路由

这是最可能的原因。OpenClaw 网关负责将智能体的请求路由到正确的 LLM 服务。配置错误会直接导致请求被拒。

  • 检查模型配置文件:定位网关的配置文件(通常是 config/models.yaml 或类似文件),确认目标模型的 providerendpointapiKey 是否正确。
  • 验证 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 提供了日志系统来追踪请求链路。

  • 查看网关日志:启动网关时,设置日志级别为 DEBUGTRACE,可以查看出入网关的原始请求和响应,定位是哪个环节的格式被拒绝 。
    # 启动网关时指定日志级别
    OPENCLAW_LOG_LEVEL=debug npm start
    
  • 查看智能体日志:在智能体的运行环境中,同样启用调试日志,查看它准备发送给网关的工具调用请求是什么 。

4. 针对特定模型的兼容性处理

某些 LLM 对工具调用格式有特殊要求。

  • GLM-5 工具调用格式:已知 GLM-5 对工具调用的 JSON 结构要求较为严格。如果遇到 400 错误,很可能是工具 nameparameters 的格式不符。需要参考 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 的规范


参考来源

 

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐