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