8000 [功能请求] 工具调用 · Issue #42 · Xerxes-2/clewdr · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
[功能请求] 工具调用 #42
Open
@mirrorange

Description

@mirrorange

Claude.ai 官方客户端现在支持 MCP 服务器了,理论上官网已经可以进行工具调用。

抓包看了一下。工具定义包含在 completion 请求 Body 的 tools 中。相比标准 API,多了一个 integration_name 参数(MCP 服务器名称)。

{
  "name": "read_file",
  "description": "Read the contents of a file from the file system or a URL with optional offset and length parameters.",
  "input_schema": {
    "type": "object",
    "properties": {
      "path": { "type": "string" },
      "isUrl": { "type": "boolean", "default": false },
      "offset": { "type": "number", "default": 0 },
      "length": { "type": "number", "default": 1000 }
    },
    "required": ["path"],
    "additionalProperties": false,
    "$schema": "http://json-schema.org/draft-07/schema#"
  },
  "integration_name": "desktop-commander"
}

completion 的工具调用响应与 API 大致一致。输出完成后会在 content_block_stop 事件处暂停,等待工具调用结果。不会返回 message_delta 和 message_stop 事件。

客户端通过 tool_result 端点发送工具调用结果。(在 API 中这个结果位于新请求的最后一条消息)

POST /api/organizations/{}/chat_conversations/{}/tool_result

Req:

{"type":"tool_result","tool_use_id":"toolu_01F1hJryMVsgXexHtuze1zxK","content":[{"type":"text","text":"[DIR] clewdr"}]}

发送工具调用结果后,先前的 completion 响应会继续返回后续内容。

经过测试 Claude.ai 不会进行并行工具调用。

考虑到请求中可能有工具调用历史,钓了一下工具调用的结构:

<antml:function_calls>
<antml:invoke name="desktop-commander:list_directory">
<antml:parameter name="path">/home/user/Projects</antml:parameter>
</antml:invoke>
</antml:function_calls>

<function_results>[DIR] clewdr</function_results>

"antml:" 前面需要跟真 Role 一样加特殊字符处理。

可能的实现方案:

对 completion 返回的 content_block,如果 type 为 tool_use:

  • 在该 block 结束时构造并返回 message_delta 和 message_stop 事件
  • 记录 tool_use_id,反代与 completion 保持连接

收到新请求时:

  • 检查最后一条消息是否为 tool_result 且 ID 匹配
  • 构造一个 message_start 事件返回
  • 调用 tool_result 端点发送结果
  • 将 completion 的后续结果返回到新请求

对于不在最后一条消息的历史工具调用,可以按照上述格式与其他消息一样格式化到文档里。

酒馆现在也可以工具调用了,但没有反代支持,生态还不完善。如果能工具调用,估计很多插件都可以大幅升级。这里仅作抛砖引玉,实施起来会比较复杂,期待佬的进一步开发。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0