跳转到主要内容

概述

Shannon 支持三种添加自定义工具的方式:
无需 Proto/Rust/Go 更改 - 所有工具都使用通用容器以获得最大灵活性。
主要特性:
  • ✅ 通过 API 或 YAML 配置动态注册
  • ✅ 内置速率限制和熔断器
  • ✅ 用于安全的域白名单
  • ✅ 成本跟踪和预算执行

快速开始:添加 MCP 工具

MCP(模型上下文协议)工具允许您将任何 HTTP 端点作为 Shannon 工具集成,无需任何代码更改。
1

添加工具定义

编辑 config/shannon.yaml 中的 mcp_tools 部分:
必需字段:
  • enabled: 设置为 true 以激活
  • url: HTTP 端点(必须是 POST,接受 JSON)
  • func_name: 内部函数名称
  • description: 向 LLM 显示的清晰描述
  • category: 工具类别(例如 searchdataanalyticscode
  • cost_per_use: 以美元计的估计成本
  • parameters: 参数定义数组
2

配置域访问

开发环境(宽松):添加到 .env
生产环境(推荐):
3

添加 API 密钥

将您的 API 密钥添加到 .env
4

重启服务

您必须重新创建服务(而不仅仅是重启):
等待健康检查:
5

验证注册

检查日志:
通过 API 列出工具:
获取工具架构:
6

测试您的工具

直接执行:
通过工作流:

MCP 请求约定

Shannon 以此格式发送 POST 请求:
您的端点应返回 JSON:

替代方案:运行时 API 注册

仅用于开发/测试(重启后工具丢失):

添加 OpenAPI 工具

对于具有 OpenAPI 3.x 规范的 REST API,Shannon 可以自动生成工具。
对于需要自定义转换的特定领域 API,请参阅下面的供应商适配器模式部分或综合供应商适配器指南

特性

支持:
  • ✅ OpenAPI 3.0 和 3.1 规范
  • ✅ 基于 URL 或内联规范加载
  • ✅ JSON 请求/响应体
  • ✅ 路径和查询参数
  • ✅ Bearer、API Key(header/query)、Basic 认证
  • ✅ 通过 operationId 或 tags 过滤操作
  • ✅ 熔断器(5 次失败 → 60 秒冷却)
  • ✅ 指数退避重试逻辑(2 次重试,可通过 OPENAPI_RETRIES 配置)
  • ✅ 可配置的速率限制和超时
  • ✅ 相对服务器 URL(根据规范 URL 解析)
  • ✅ 基本 $ref 解析(本地引用到 #/components/schemas/*

限制

Shannon OpenAPI 集成对于约 70% 的 REST API(基于 JSON 的简单认证)已经可以用于生产。以下功能尚不支持
  • 无法上传文件或二进制数据
  • 解决方法:在 JSON 体中使用 base64 编码的文件
  • 受影响:图像生成、文件处理、文档上传 API
  • 不支持 OAuth 2.0 流程(授权码、客户端凭据)
  • 只能使用 Bearer 令牌(手动获取)
  • 受影响:Google API、GitHub、Slack、Twitter 等
  • 解决方法:手动获取 OAuth 令牌并使用 bearer auth_type
  • 不支持 styleexplodedeepObject 序列化
  • 仅基本路径/查询参数替换
  • 受影响:具有复杂数组/对象查询参数的 API
  • 不支持远程 $ref 解析(例如 https://example.com/schemas/Pet.json
  • 仅支持本地引用(#/components/...
  • 解决方法:将外部架构合并到单个规范文件中
  • 不支持 allOfoneOfanyOf
  • 仅基本类型映射
  • 受影响:具有多态类型或复杂验证的 API
  • 不支持 application/x-www-form-urlencoded 内容类型
  • 仅支持 JSON 请求体
运行良好的场景:
  • ✅ 具有 JSON 请求/响应的简单 REST API
  • ✅ 使用 Bearer/API Key/Basic 认证的 API
  • ✅ 读取密集型操作(GET 请求)
  • ✅ 具有本地 $ref 引用的结构良好的规范
  • ✅ 路径和查询参数(原始类型)
对于具有相对服务器 URL 的规范(例如 /api/v3),您必须通过 spec_url(而不是 spec_inline)提供规范,以便 Shannon 可以解析完整的基础 URL。

快速开始

1

添加工具定义

openapi_tools 下编辑 config/shannon.yaml
2

配置环境

添加到 .env
3

重启服务

4

验证和测试

首先验证规范:
响应:
执行工具:

认证示例

添加内置 Python 工具

用于复杂逻辑、数据库访问或性能关键操作。

何时使用内置工具

使用内置工具的场景:
  • 需要直接的数据库/Redis 访问
  • 需要复杂的 Python 库(pandas、numpy)
  • 性能关键(避免 HTTP 往返)
  • 需要会话状态管理
  • 实现安全敏感的操作
使用 MCP/OpenAPI 的场景:
  • 集成外部 API
  • 需要无代码部署
  • 快速原型设计
  • 第三方服务集成
1

创建工具类

python/llm-service/llm_service/tools/builtin/my_custom_tool.py 中创建文件:
2

运行时注册(可选)

通过 API 动态注册 OpenAPI 工具(使用与 MCP 相同的管理员令牌):
响应包括已注册的操作和有效限制。
3

注册工具

编辑 python/llm-service/llm_service/api/tools.py 第 228 行附近:
4

重启服务

5

测试工具

高级:会话感知工具

对于需要在多次执行中维护状态的工具:

配置参考

MCP 工具配置

OpenAPI 工具配置

环境变量

MCP 配置:
OpenAPI 配置:

测试与验证

健康检查

列出工具

执行工具

直接执行:
批量执行:
通过工作流:

故障排除

症状:工具未出现在 /tools/list调试步骤:
症状:URL host 'example.com' not in allowed domains解决方案:
  1. 开发:使用通配符
  2. 生产:添加特定域
症状:ToolResult { success: false, error: "..." }调试:
症状:Circuit breaker open for <url> (too many failures)调试:
预防:
  • 增加失败阈值:MCP_CB_FAILURES=10
  • 增加恢复时间:MCP_CB_RECOVERY_SECONDS=120
  • 修复底层 API 问题

安全最佳实践

域白名单

API 密钥管理

永远不要在配置文件中硬编码 API 密钥!
❌ 坏:
✅ 好:
存储在 .env 中(不被 git 跟踪):
生产环境: 使用密钥管理
  • Docker secrets
  • Kubernetes secrets
  • HashiCorp Vault
  • AWS Secrets Manager

危险工具

标记修改状态或访问敏感资源的工具:

供应商适配器模式

用于特定领域的 API 和自定义代理 当集成需要特定领域转换的专有或内部 API 时,使用供应商适配器模式将供应商逻辑与 Shannon 的核心基础设施分离。

何时使用

使用供应商适配器的场景:
  • 自定义字段名称别名(例如 usersmy:unique_users
  • 请求/响应转换
  • 从会话上下文动态注入参数
  • 特定领域的验证或规范化
  • 具有自定义系统提示的专门代理角色

快速示例

1

创建供应商适配器

python/llm-service/llm_service/tools/vendor_adapters/myvendor.py:
2

注册适配器

python/llm-service/llm_service/tools/vendor_adapters/__init__.py:
3

使用供应商标志配置

config/overlays/shannon.myvendor.yaml:
4

使用环境

优势

  • 清晰分离: 供应商代码与 Shannon 核心隔离
  • 无核心更改: Shannon 基础设施保持通用
  • 条件加载: 如果供应商模块不可用,优雅降级
  • 易于测试: 隔离进行单元测试适配器
  • 密钥管理: 所有令牌通过环境变量

完整指南

有关以下内容的综合指南:
  • 专门领域的自定义代理角色
  • 会话上下文注入模式
  • 测试策略
  • 最佳实践和故障排除

供应商适配器指南

学习如何使用适配器模式构建供应商特定的集成

总结

添加工具的三种方式: 关键要点:
  • ✅ 零 proto/Rust/Go 更改(通用 google.protobuf.Struct 容器)
  • ✅ 内置安全性(域白名单、速率限制、熔断器)
  • ✅ 自动成本跟踪(在元数据中设置 cost_per_use
  • ✅ 架构驱动(OpenAI 兼容的 JSON 架构)

下一步

供应商适配器

构建供应商特定的集成

扩展 Shannon

探索所有扩展方法

配置

完整配置参考

API 参考

探索 REST API