|
在企业级的RAG系统落地过程中,如何构建一个高效、可扩展、智能化的服务调度体系成为了关键挑战。 在本次实践中,我基于FastMCP工具,尝试构建一个完整的多服务协作框架,并将其引入企业RAG架构中,探索其在复杂工具链调度、上下文保持、智能决策等方面的能力。 
为什么选择 FastMCP?
FastMCP 是对 MCP 协议的轻量实现,支持标准化的能力注册、健康检查、工具调用等接口。它具有以下显著优势: 协议清晰、接口规范 多服务协作机制可插拔 天然支持 LLM+Tools 架构 易于构建 Agent 多轮决策流程
系统架构总览搭建基于 FastMCP 的智能服务系统,包含三个核心组件: 1. MCP Router(路由中心)系统的“中枢神经”。负责管理所有服务器、分发请求、维护健康状态。 核心职责如下: asyncdefroute_tool_call(self, tool_name:str, arguments ict[str,Any], session_id:str) ->Dict[str,Any]: """路由工具调用到对应的服务器""" target_server =None forserver_name, server_infoinself.servers.items(): ifserver_info.status =="active": fortoolinserver_info.tools: iftool.get("function", {}).get("name") == tool_name: target_server = server_info break # ...
2. MCP Server(服务提供者)每一个 MCP Server 即为一个类似微服务的提供者,提供特定的工具能力。 目前实现了如下服务: | |
|---|
main_server.py | | database_server.py | | file_server.py | | weather_server.py | |
每个 Server 都需遵循 MCP 标准协议,暴露以下三个 REST 接口: /health:返回当前服务状态
/capabilities:提供工具能力列表
/call_tool:接收具体调用请求,执行功能
通过 start_multi_server.sh脚本,我们可以一键启动所有服务:
启动MCP多服务器系统启动路由中心(8000)...启动主服务器(8001)...启动数据库服务器(8002)...启动文件服务器(8003)...启动天气服务器(8004)... 所有 Server 会自动向 Router 注册并上报能力,系统即刻具备完整工具协同能力。
3. Intelligent MCP Client(智能客户端)连接 LLM 与 MCP 服务的桥梁,具备如下功能: 获取可用工具:向路由中心查询所有注册服务器的工具列表 LLM 决策:使用 chat_with_functions 方法,让 DeepSeek 模型分析用户查询并决定是否需要调用工具 工具调用:如果需要工具,LLM 会生成 tool_calls 结构 路由执行:通过路由中心调用对应的工具 结果整合:将工具执行结果反馈给 LLM,生成最终用户回复
我们通过问题:查询知识库列表来举例一下处理逻辑: 1. 工具识别 :LLM 识别出需要调用数据库查询工具 2. 工具调用 : 调用工具:query_knowledge_bases,参数:{}工具调用路由:http://localhost:8000/call_tool请求数据:{'tool_name':'query_knowledge_bases','arguments':{},'session_id':'default'}3. 路由转发 :路由中心将请求转发给 database_server 4. 工具执行 :数据库服务器执行查询,返回 6 个知识库的详细信息 5. 结果处理 :LLM 将工具返回的 JSON 数据转换为用户友好的格式 输出结果: 系统成功查询到 6 个知识库,包括智能客服数据库、用户手册、简历知识库等,并格式化展示给用户。 |