概述
Shannon 可以从 OpenAPI 3.x 规范自动生成工具,允许您无需编写代码即可集成任何 REST API。OpenAPI 加载器:- ✅ 解析 OpenAPI 3.0/3.1 规范
- ✅ 每个操作生成一个工具
- ✅ 处理身份验证(Bearer、API 密钥、Basic)
- ✅ 支持路径/查询/头部参数
- ✅ 包括断路器和速率限制
- ✅ 根据模式验证请求
- ✅ 本地解析
$ref引用
配置参考
基本配置
字段说明
| 字段 | 类型 | 必需 | 默认值 | 描述 |
|---|---|---|---|---|
enabled | boolean | 是 | - | 启用此工具集 |
spec_path | string | spec_* 之一 | - | OpenAPI 规范的本地文件路径 |
spec_url | string | spec_* 之一 | - | 用于获取规范的 URL(支持相对服务器 URL) |
spec_inline | string | spec_* 之一 | - | 内联 YAML/JSON 规范内容 |
auth_type | enum | 是 | none | 身份验证方法 |
auth_config | object | 如果 auth ≠ none | {} | 身份验证配置(因类型而异) |
category | string | 否 | "api" | 用于组织的工具类别 |
base_cost_per_use | float | 否 | 0.001 | 每次调用的估计成本(美元) |
rate_limit | integer | 否 | 30 | 每个工具每分钟的最大请求数 |
timeout_seconds | float | 否 | 30.0 | HTTP 请求超时 |
max_response_bytes | integer | 否 | 10485760 | 最大响应大小(10MB) |
operations | array[string] | 否 | 全部 | 筛选到特定的 operationIds |
tags | array[string] | 否 | 全部 | 按标签筛选操作 |
base_url | string | 否 | 来自规范 | 覆盖 API 基本 URL |
身份验证类型
无身份验证
Bearer 令牌
使用者:GitHub、GitLab、大多数现代 API头部中的 API 密钥
使用者:OpenAI、Anthropic、许多 SaaS API查询参数中的 API 密钥
使用者:OpenWeather、一些旧版 API基本身份验证
使用者:旧版 API、内部服务自定义头部
用于特定于供应商的身份验证:动态头部模板:
"${ENV_VAR}"- 从环境解析"{{body.field}}"- 在运行时从请求正文解析- 静态字符串 - 按原样使用
高级功能
操作筛选
按 operationId(推荐):基本 URL 覆盖
覆盖规范中的基本 URL:- 针对暂存/开发环境进行测试
- 内部代理或网关
- 本地开发
速率限制
保护外部 API 免于过载:- 通过令牌桶算法强制执行
- 在所有工具实例之间共享(单个 Shannon 实例)
- 如果超过限制则返回错误
断路器
自动故障保护: 配置(通过环境):- 关闭(正常):所有请求通过
- 打开(失败):所有请求立即被拒绝
- 半开(测试):允许一个试探性请求
- 连续 5 次故障后 → 打开电路
- 电路保持打开 60 秒
- 然后允许一个试探性请求(半开)
- 成功 → 关闭电路
- 失败 → 再次打开 60 秒
响应大小限制
防止内存耗尽:- 大于限制的响应将被截断
- 返回带有截断标记的错误
故障排除
工具未注册
症状:工具未出现在/tools/list 中
调试:
- 配置中
enabled: false - OpenAPI 规范无效
- 域不在
OPENAPI_ALLOWED_DOMAINS中 - 规范获取超时
- 循环的
$ref引用
域验证错误
症状:URL host 'example.com' not in allowed domains
修复:
规范获取超时
症状:Failed to fetch OpenAPI spec: timeout
修复:
断路器触发
症状:Circuit breaker open for https://api.example.com
调试:
- 等待 60 秒以自动恢复
- 修复潜在的 API 问题
- 如果 API 较慢,增加超时:
超过速率限制
症状:Rate limit exceeded for tool my_tool
修复:
身份验证失败
症状:401 Unauthorized 或 403 Forbidden
调试:
- 未设置环境变量
- 令牌已过期
- 错误的身份验证类型(应为
bearer而不是api_key) - API 密钥身份验证缺少
Bearer前缀
示例
示例 1:GitHub API
示例 2:OpenWeather API
示例 3:带供应商适配器的内部 API
python/llm-service/llm_service/tools/vendor_adapters/mycompany.py):
安全最佳实践
切勿硬编码机密
切勿硬编码机密
使用域白名单
使用域白名单
设置适当的速率限制
设置适当的速率限制
使用 HTTPS
使用 HTTPS
- Shannon 自动将外部 API 的 HTTP 升级到 HTTPS
- 允许在开发中使用 localhost/127.0.0.1 上的 HTTP
限制响应大小
限制响应大小