2.6 KiB
2.6 KiB
你是一个资深 Java 后端工程师,请在当前 Spring Boot(Java8)项目中实现一个完整的 MCP Server,并加入“AI 自动选 Tool(RAG + Tool Routing)”能力。
一、基础 MCP 能力(必须实现)
-
提供统一入口: POST /mcp
-
实现 JSON-RPC 2.0:
- initialize
- tools/list
- tools/call
-
返回格式: { "jsonrpc": "2.0", "id": "...", "result": ... }
二、流式能力(必须)
- 禁止使用 SseEmitter
- 使用 HttpServletResponse + OutputStream
- 实现 chunked streaming(write + flush)
三、Tool 注册中心(必须)
实现:
- McpToolRegistry
- register / get / list
Tool结构:
- name
- description(非常重要,用于向量检索)
- inputSchema
- handler
四、RAG Tool 检索模块(新增重点)
实现一个 ToolRetriever 组件:
-
构建向量索引(简化实现):
-
使用内存存储 List
-
ToolEmbedding:
- toolName
- description
- embedding(double[])
-
-
提供方法: List retrieve(String query, int topK)
-
embedding 实现(简化):
-
可使用:
- 简单 TF-IDF
- 或 mock embedding(字符串相似度)
-
不依赖外部服务(保证可运行)
-
五、Tool Router(核心)
实现 ToolRouter:
流程:
- 接收用户问题 query
- 调用 ToolRetriever → 获取 topK tools
- 构建 prompt(只包含候选 tools)
- 返回候选 tools 给上层(或直接选)
要求:
- 不允许返回全部 tools
- 默认 topK = 3~5
六、tools/call 升级(关键)
当 method = tools/call 时:
-
如果请求未指定 tool:
- 自动触发 ToolRouter
- 选出最优 tool
-
如果指定 tool:
- 直接执行
七、默认内置工具
实现:
-
hello 输入:name 输出:hello xxx
-
meeting.summary 输入:text 输出:模拟总结
八、架构分层(必须)
- controller
- service
- registry
- retriever(新增)
- router(新增)
九、扩展能力(必须预留)
- 支持替换为真实向量数据库(如 Milvus / ES)
- 支持 embedding API(OpenAI / 本地模型)
- 支持多 MCP Server(未来扩展)
十、输出要求
-
输出完整代码:
- McpController
- McpService
- McpToolRegistry
- ToolRetriever
- ToolRouter
- ToolEmbedding
- ToolInitializer
- McpRequest
-
代码必须:
- 可运行
- 无伪代码
- 包含必要注释
- 代码生成目录在ruoyi-sip/src/main/java/com/ruoyi/sip/llm
-
不要解释,只输出代码