← 返回API 开发
API 开发 / 第 03 课

让 Claude 调用外部 API

用 GitHub 元数据走通 tool_use → HTTP → tool_result。

开始之前

先完成首次 API 请求,将 client.mjs、external-tool.mjs 放在同一目录。本例无需 GitHub 令牌即可读取公开仓库元数据,但 Claude 调用仍消耗 API 额度,GitHub 也有限流。

1. 定义范围明确的工具

定义 name、description、input_schema。示例只接受 owner 与 repo,不接受任意 URL;执行代码验证参数,始终请求 api.github.com。Schema 指导生成参数,但执行端仍要验证。定义工具本身不会执行 API。

json
{
  "name": "get_github_repository",
  "description": "Read public repository metadata",
  "input_schema": {
    "type": "object",
    "properties": {"owner": {"type": "string"}, "repo": {"type": "string"}},
    "required": ["owner", "repo"],
    "additionalProperties": false
  }
}

2. 由应用执行工具请求

将工具定义随用户消息发送。stop_reason 为 tool_use 时,逐个检查工具块、名称与输入,由代码发 HTTP 请求。示例仅返回所需仓库信息、来源链接与获取时间。open_issues_count 包含拉取请求,不能简单标成问题数。

3. 返回匹配的工具结果

将完整 assistant content 追加到历史,紧接一个 user 消息,内含所有 tool_result,每项匹配 tool_use_id。失败标记 is_error: true。再发送更新后的历史与工具定义,循环至 end_turn 并限制轮数,不假设调用一次就一定结束。

javascript
messages.push({role: "assistant", content: response.content});
messages.push({role: "user", content: [{
  type: "tool_result", tool_use_id: call.id, content: result
}]});

4. 运行并核验完整示例

使用 .env 运行下载脚本,将 URL、数字与仓库原页面对比,数量会随时间变化。示例最多五轮,每个响应最多四个工具调用,并含 HTTP 超时和工具错误回传。外部描述作为不可信数据处理;写入工具应在执行端加入授权和确认。

shell
node --env-file=.env external-tool.mjs

下载示例文件

教学示例的模型输出可能不同。请按前置条件操作并核验结果,页面本身不发送 API 请求。

练习与自检

YOUR TURN / 动手练习

跟踪一次成功调用和一次不存在仓库的查询,确认失败通过 is_error 回传,不生成虚构事实。

完成后,花一点时间检查:

阅读官方原始资料

CLI 操作已对照官方文档核查;API 示例通过模拟响应测试。未登录产品账户进行完整实机演示。

从一个问题开始