OpenAPI Tool:将 REST API 动态生成 Agent 可调用的 Tool
详解如何使用 OpenAPI Tool 从 OpenAPI spec 动态生成 Tool,适合那些有 API 文档但没有 MCP 接口的服务。
OpenAPI Tool:将 REST API 动态生成 Agent 可调用的 Tool
很多内部服务有 REST API,但没有 MCP 接口。OpenAPI Tool 从 OpenAPI spec 动态生成 Tool——只要 API 有文档,就能接入 Agent。
使用场景
- 内部 REST API,不支持 MCP
- 第三方 REST API,有 OpenAPI spec
- 需要快速把一个 API 接入 Agent,不想手写 Tool
快速开始
1. 准备 OpenAPI spec
假设有一个天气 API,OpenAPI spec 大概长这样:
openapi: 3.0.0
info:
title: Weather API
version: 1.0.0
paths:
/weather:
get:
operationId: getWeather
parameters:
- name: city
in: query
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
temp:
type: number
condition:
type: string
保存为 weather-api.yaml。
2. 生成 Tool
import "google.golang.org/adk/tool/openapi"
openapiTool, err := openapi.NewOpenAPITool(ctx,
openapi.WithSpecFile("weather-api.yaml"),
)
3. 注册到 Agent
agent, _ := llmagent.New(llmagent.Config{
Name: "weather_assistant",
Model: model,
Instruction: "你是天气助手,帮我查询天气信息。",
Tools: []tool.Tool{
openapiTool, // 暴露 getWeather Tool
},
})
从 URL 加载 spec
除了本地文件,还可以从 URL 加载:
openapiTool, err := openapi.NewOpenAPITool(ctx,
openapi.WithSpecURL("https://api.example.com/openapi.yaml"),
)
认证配置
如果 API 需要认证:
openapiTool, err := openapi.NewOpenAPITool(ctx,
openapi.WithSpecFile("internal-api.yaml"),
openapi.WithAuth(openapi.APIKeyAuth("X-API-Key", "your-key")),
)
支持的方式:
- API Key(header 或 query)
- Bearer Token
- Basic Auth
常见问题
Q:spec 太复杂,生成 Tool 报错了 A:简化 spec,只暴露必要的端点。OpenAPI Tool 对部分 spec 可能支持不完整。
Q:API 需要 POST body,但 Tool 调用失败
A:检查 spec 里 content/application/json 的 schema 定义是否完整。
下一步
最后来看 Tool Confirmation——当 Agent 要做有风险的操作(删除数据、转账)时,如何让用户确认后再执行。
← MCP Server 接入实战 | Tool Confirmation 与安全认证 →
想跟着学更多 Go ADK 实战?关注「全栈之巅-梦兽编程」公众号,每周更新 Go / AI 编程实战干货。
