概述
供应商适配器模式允许您将特定领域的代理和工具集成到 Shannon 中,而不会污染核心代码库。此模式在以下两者之间保持清晰的分离:- 通用 Shannon 基础设施(提交到开源)
- 供应商特定实现(保持私有或在单独的仓库中)
零核心更改
无需修改 Shannon 的核心代码库
清晰分离
通用基础设施与供应商特定逻辑分离
易于维护
供应商逻辑隔离在单独的目录中
优雅降级
即使没有供应商模块,Shannon 也能正常工作
何时使用供应商适配器
使用供应商适配器的场景:- 集成具有特定领域要求的专有/内部 API
- 需要自定义请求/响应转换的 OpenAPI 工具
- 为特定业务领域构建专门的代理
- 字段命名约定与内部系统不同
- 需要从会话上下文动态注入参数
- 需要自定义身份验证或标头逻辑
- 分析平台(指标别名、时间范围规范化)
- 电子商务系统(产品字段映射、SKU 转换)
- CRM 集成(联系人字段规范化)
- 内部微服务(自定义身份验证令牌、租户 ID)
- 特定领域的数据验证
架构
文件结构
组件职责
快速入门示例
让我们为一个虚构的分析平台 “DataInsight” 创建一个完整的供应商集成。1
创建供应商适配器
创建
python/llm-service/llm_service/tools/vendor_adapters/datainsight.py:2
注册适配器
编辑
python/llm-service/llm_service/tools/vendor_adapters/__init__.py:3
创建配置覆盖
创建
config/overlays/shannon.datainsight.yaml:4
创建供应商角色(可选)
创建
python/llm-service/llm_service/roles/datainsight/analytics_agent.py:说明:在allowed_tools的语义(用于/agent/query):
- 省略/
null→ 由角色预设决定是否启用工具[]→ 禁用所有工具["name", …]→ 仅允许列出的工具(名称需与已注册工具一致)
python/llm-service/llm_service/roles/presets.py 中注册:5
添加环境变量
添加到
.env:6
测试集成
重建并测试:
组件指南
1. 供应商适配器类
目的: 为供应商特定的 API 约定转换请求/响应 常见转换模式:- 字段别名:
revenue→total_revenue - 指标前缀:
users→my:users - 时间范围规范化:
{start, end}→{startTime, endTime} - 排序格式转换:
{field, order}→{column, direction} - 过滤器结构重塑:列表 → 带逻辑运算符的对象
- 默认注入:从会话上下文添加缺失的必需字段
2. 配置覆盖
目的: 定义供应商特定的工具配置,而不修改基础配置 标头取值:"${ENV_VAR}"- 从环境变量解析- 静态字符串 - 按原样使用
从请求体动态模板化标头(例如
{{body.field}})当前不支持。若标头需要依赖请求体/会话值,请考虑:- 在 OpenAPI 规范中将其定义为显式的 header 参数,并在调用工具时传参;或
- 使用供应商适配器对请求体进行整形(标头仍通过静态/环境变量注入)。
3. 供应商角色
目的: 具有特定领域知识和工具限制的专门代理 模板:说明:当显式传入allowed_tools时,LLM 仅能使用所列出的工具;传入空列表[]可显式禁用工具。
最佳实践
保持适配器通用
保持适配器通用
✅ 好:转换字段名称,注入默认值❌ 坏:在适配器中编写业务逻辑
使用优雅降级
使用优雅降级
文档化转换
文档化转换
在环境中保密
在环境中保密
✅ 好:❌ 坏:
隔离测试
隔离测试
转换前验证
转换前验证
测试与验证
单元测试适配器
集成测试
故障排除
适配器未加载
适配器未加载
症状:日志显示 “Vendor adapter ” applied”(空字符串)修复:
导入失败
导入失败
症状:
ImportError: No module named 'myvendor'修复:转换未应用
转换未应用
症状:API 收到原始请求体,未转换调试:检查:
- 适配器已在
__init__.py中注册 - 配置中的供应商名称匹配
auth_config.vendor字段存在- 适配器返回修改后的字典(不是 None)
会话参数未注入
会话参数未注入
症状:适配器中的
prompt_params 为 None原因:编排器未发送会话上下文修复:确保在 gRPC 请求中发送上下文:总结
供应商适配器优势
- ✅ 清晰分离:通用代码与供应商特定代码
- ✅ 无需更改 Shannon 核心
- ✅ 条件加载,优雅降级
- ✅ 基于环境的密钥管理
- ✅ 可隔离测试
- ✅ 易于维护和扩展
- 供应商适配器 - 请求/响应转换
- 配置覆盖 - 工具配置
- 供应商角色 - 专门的代理(可选)
下一步
自定义工具
学习如何添加自定义工具
扩展 Shannon
探索其他扩展方法
配置
完整配置参考
架构
了解 Shannon 的架构