当前位置: 首页 > news >正文

第四章: 服务集成抽象

Chapter 4: 服务集成抽象


🌟 从上一章到本章

在第三章:传输机制中,我们学习了如何通过STDIO和SSE协议让LLM与不同服务器通信。现在想象这样的场景:你的AI助手需要同时操作本地文件和云端数据库。这时问题来了——如何让LLM像操作一个工具一样协调多个服务器?

本章将介绍服务集成抽象,它就像“交响乐指挥”,让多个服务器像合奏一样协同工作,为LLM提供无缝的工具使用体验!


🎯 中心用例:AI助手同时管理文件和数据

假设你要开发一个AI助手,需要以下功能:

  1. 读取本地PDF合同(通过文件系统服务器)
  2. 查询云端数据库中的订单记录(通过Third-Party服务器)
  3. 生成包含两者的报告
  • 挑战:两个服务器可能使用不同协议、不同参数,如何让LLM统一调用?
  • 目标:让LLM像使用一个工具一样操作多个服务

🔍 服务集成抽象的三个核心概念

通过以下三层结构,我们将复杂服务抽象成简单接口:

1. 统一接口层(Unified Interface)

  • 类比:把不同语言的菜单翻译成同一语言
  • 功能:将不同服务器的API参数、响应格式标准化
  • 示例
    # 调用文件系统和数据库的统一方式
    contract = mcp.invoke_tool("文件系统", "读取文件", {"路径": "/合同/2023合同.pdf"})
    订单数据 = mcp.invoke_tool("数据库", "查询", {"SQL": "SELECT * FROM 订单 WHERE 客户='张三'"})
    

2. 服务注册表(Service Registry)

  • 类比:电话簿,记录所有可用服务的联系方式
  • 功能:记录服务器名称、启动命令、参数配置
  • 示例配置
    {"服务列表": {"文件系统": {"启动命令": "npx @modelcontextprotocol/server-filesystem","参数": ["/安全目录"]},"数据库": {"启动命令": "npx @aws/server-postgres","传输协议": "sse"}}
    }
    

3. 抽象逻辑层(Abstraction Logic)

  • 类比:智能翻译官,自动处理不同协议和数据格式
  • 功能
    1. 根据工具名称查找对应服务器
    2. 将LLM的请求转换为服务器特定格式
    3. 将服务器响应转换为LLM可理解的格式

🛠️ 如何用抽象层解决用例?

步骤1:配置服务注册表

mcp_config.json中注册两个服务器:

{"mcpServers": {"文件系统": {"command": "npx","args": ["@modelcontextprotocol/server-filesystem", "/data"]},"数据库": {"command": "npx","args": ["@aws/server-postgres"],"transport": "sse"}}
}

步骤2:编写统一调用代码

LLM通过抽象层调用两个服务:

# 读取文件并查询数据库
合同内容 = mcp.invoke("文件系统", "读取文件", {"路径": "合同.pdf"})
订单数据 = mcp.invoke("数据库", "执行查询", {"SQL": "SELECT * FROM 订单"})# 生成报告
报告 = 生成报告(合同内容, 订单数据)

🕵️ 内部实现揭秘

时序图:抽象层协调两个服务

LLM 抽象层 文件系统服务器 数据库服务器 请求“生成带订单的合同报告” 调用“读取文件”接口 返回合同内容 调用“执行查询”接口 返回订单数据 合并数据并返回结果 LLM 抽象层 文件系统服务器 数据库服务器

关键代码片段(简化版)

统一接口层实现
class MCP抽象层:def invoke(self, 服务名, 工具名, 参数):# 步骤1:查找服务配置服务配置 = 注册表[服务名]# 步骤2:启动/连接服务器if 服务配置["transport"] == "stdio":响应 = 启动并执行STDIO命令(...)else:响应 = 通过SSE发送请求(...)# 步骤3:格式化响应return self.标准化响应(响应)

💡 总结与展望

本章我们学到:

  1. 服务集成抽象的三层结构:统一接口、注册表、逻辑层
  2. 如何让多个服务器协同工作:通过配置和服务调用
  3. 标准化带来的好处:LLM无需关心底层差异

接下来,我们将深入探索工具抽象框架,学习如何通过框架快速构建自己的MCP服务器——例如用几行代码创建数据库查询工具!

🚀 尝试将本地文件系统和云端API整合到一个项目中,让AI助手同时操作两者!

相关文章:

  • 3.ArkUI Image的介绍和使用
  • JSX介绍
  • django admin 添加自定义页面
  • C++学习:六个月从基础到就业——STL算法(三)—— 数值算法(上)
  • Linux电源管理(四),设备的Runtime Power Management(RPM)
  • 网络知识:路由器静态路由与动态路由介绍
  • YCDISM2025-更新
  • 接口测试和单元测试详解
  • connection.cursor() 与 models.objects.filter
  • [web]攻防世界 easyphp
  • [U-Net]DA-TRANSUNET
  • 前端数据库缓存
  • onnx注册cpu版flashattention
  • springboot基于hadoop的酷狗音乐爬虫大数据分析可视化系统(源码+lw+部署文档+讲解),源码可白嫖!
  • 自动化测试概念及常用函数篇 [软件测试 基础]
  • GIT 使用小记
  • C++ 类与对象(上):从基础定义到内存布局的深度解析
  • 直播预告 |【仓颉社区】第32期WORKSHOP
  • 02_java的运行机制以及JDKJREJVM基本介绍
  • 视频汇聚平台EasyCVR赋能高清网络摄像机:打造高性价比视频监控系统
  • AI翻译技术已走向大规模商用,应用场景覆盖多个关键领域
  • 青海西宁市公安局原党委委员、副局长王小华被“双开”
  • 中国海警登临铁线礁开展维权行动并展示五星红旗
  • 习近平对双拥工作作出重要指示
  • 降低血压可减少痴呆症发生风险
  • 税率飙至3500%!美国双反大棒重击东南亚光伏,中企如何应对