Skip to main content

概述

Shannon 可以从 OpenAPI 3.x 规范自动生成工具,允许您无需编写代码即可集成任何 REST API。OpenAPI 加载器:
  • ✅ 解析 OpenAPI 3.0/3.1 规范
  • ✅ 每个操作生成一个工具
  • ✅ 处理身份验证(Bearer、API 密钥、Basic)
  • ✅ 支持路径/查询/头部参数
  • ✅ 包括断路器和速率限制
  • ✅ 根据模式验证请求
  • ✅ 本地解析 $ref 引用
快速入门:有关分步说明,请参阅添加自定义工具指南

配置参考

基本配置

字段说明

身份验证类型

无身份验证

Bearer 令牌

使用者:GitHub、GitLab、大多数现代 API
环境变量
发送的头部

头部中的 API 密钥

使用者:OpenAI、Anthropic、许多 SaaS API
环境变量
发送的头部

查询参数中的 API 密钥

使用者:OpenWeather、一些旧版 API
请求 URL

基本身份验证

使用者:旧版 API、内部服务
环境变量
发送的头部

自定义头部

用于特定于供应商的身份验证:
动态头部模板
  • "${ENV_VAR}" - 从环境解析
  • "{{body.field}}" - 在运行时从请求正文解析
  • 静态字符串 - 按原样使用

高级功能

操作筛选

按 operationId(推荐):
按标签

基本 URL 覆盖

覆盖规范中的基本 URL:
用例
  • 针对暂存/开发环境进行测试
  • 内部代理或网关
  • 本地开发

速率限制

保护外部 API 免于过载:
每个工具的限制:从规范生成的每个操作都继承此限制。 行为
  • 通过令牌桶算法强制执行
  • 在所有工具实例之间共享(单个 Shannon 实例)
  • 如果超过限制则返回错误

断路器

自动故障保护: 配置(通过环境):
状态
  1. 关闭(正常):所有请求通过
  2. 打开(失败):所有请求立即被拒绝
  3. 半开(测试):允许一个试探性请求
行为
  • 连续 5 次故障后 → 打开电路
  • 电路保持打开 60 秒
  • 然后允许一个试探性请求(半开)
  • 成功 → 关闭电路
  • 失败 → 再次打开 60 秒

响应大小限制

防止内存耗尽:
行为
  • 大于限制的响应将被截断
  • 返回带有截断标记的错误

故障排除

工具未注册

症状:工具未出现在 /tools/list 调试
常见原因
  • 配置中 enabled: false
  • OpenAPI 规范无效
  • 域不在 OPENAPI_ALLOWED_DOMAINS
  • 规范获取超时
  • 循环的 $ref 引用

域验证错误

症状URL host 'example.com' not in allowed domains 修复
在 docker-compose.yml 中

规范获取超时

症状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 Unauthorized403 Forbidden 调试
常见原因
  • 未设置环境变量
  • 令牌已过期
  • 错误的身份验证类型(应为 bearer 而不是 api_key
  • API 密钥身份验证缺少 Bearer 前缀

示例

示例 1:GitHub API

用法

示例 2:OpenWeather API

用法

示例 3:带供应商适配器的内部 API

供应商适配器 (python/llm-service/llm_service/tools/vendor_adapters/mycompany.py):

安全最佳实践

  • Shannon 自动将外部 API 的 HTTP 升级到 HTTPS
  • 允许在开发中使用 localhost/127.0.0.1 上的 HTTP

另请参阅

添加自定义工具

完整的工具集成指南

供应商适配器

特定领域的集成

扩展 Shannon

其他扩展方法

OpenAPI 测试

测试示例和验证

快速参考

需要帮助?
  • 报告问题:GitHub Issues
  • 示例:tests/e2e/06_openapi_petstore_test.sh