项目简介
'spring-ai-alibaba-demo' 是一个全面的Spring AI项目示例,涵盖了与阿里巴巴大模型生态集成的多种AI能力,包括聊天、图像生成、RAG(检索增强生成)、语音合成与识别,以及核心的 Model Context Protocol (MCP) 服务器实现。
本项目的MCP部分特别展示了如何将后端服务中的业务逻辑(如“富婆信息查询”)注册为工具,并通过MCP服务器对外提供,使得LLM客户端能够调用这些工具来完成更复杂的任务。
主要功能点
- MCP工具服务:核心功能,将Spring Boot服务中的Java方法(例如查询富婆信息)封装为可供LLM调用的工具,通过MCP协议进行通信。
- Chat聊天功能:演示如何使用阿里巴巴百炼和DeepSeek模型进行文本聊天,支持流式输出和多轮对话记忆。
- Image图像生成:展示如何基于阿里巴巴百炼模型生成图像。
- RAG知识库问答:集成向量数据库,实现基于自有知识库的智能问答。
- Audio语音功能:支持文字转语音(TTS)和语音转文字(STT)。
安装步骤
-
环境准备:
- 确保已安装JDK 17或更高版本。
- 安装Maven(推荐3.8+)或Gradle(推荐7.0+)构建工具。
-
克隆仓库:
git clone https://github.com/rstyro/spring-ai-alibaba-demo.git cd spring-ai-alibaba-demo -
构建项目:
- 使用Maven构建:
mvn clean install -DskipTests - 使用Gradle构建(如果项目配置了Gradle):
./gradlew clean build -x test
这将编译所有模块并生成可执行的JAR文件。
- 使用Maven构建:
服务器配置
本项目包含了多个MCP服务器实现,其中 'spring-ai-alibaba-mcp/quick-start/mcp-server' 是一个经典的MCP工具服务示例。
要让MCP客户端连接并使用这个服务器,客户端需要知道如何启动或连接到它。以下是MCP客户端配置此服务器的参考JSON信息,其中包含了服务器的启动命令和相关参数:
{ "server_name": "富婆信息查询工具服务", "command": "java", "args": [ "-jar", "path/to/spring-ai-alibaba-demo/spring-ai-alibaba-mcp/quick-start/mcp-server/target/mcp-server.jar" ], "comment": "这是启动Spring AI MCP服务器的命令和参数。服务器启动后,默认运行在8080端口,并通过HTTP或WebSocket协议在 /rpc 路径提供JSON-RPC服务,供LLM客户端调用其中的工具。" }
配置说明:
- 'server_name': 给MCP服务器起一个易于识别的名称。
- 'command': 启动MCP服务器所使用的执行命令,通常是'java'。
- 'args': 启动命令的参数列表。在这里,它指定了要运行的MCP服务器JAR文件路径。请将'path/to/spring-ai-alibaba-demo/...'替换为你的本地实际路径。
- 'comment': 关于服务器运行方式和连接方式的额外说明,提示服务器将监听8080端口并在'/rpc'路径提供服务。
基本使用方法
-
启动MCP服务器:
- 在命令行中,导航到MCP服务器模块的目录,例如:'cd spring-ai-alibaba-demo/spring-ai-alibaba-mcp/quick-start/mcp-server'
- 运行命令启动服务器:
java -jar target/mcp-server.jar - 服务器成功启动后,你会在控制台看到启动成功的日志,默认运行在8080端口。
-
MCP客户端集成:
- 你需要一个支持MCP协议的LLM客户端(例如另一个Spring AI应用或自定义客户端)。
- 客户端需配置其'ToolCallbackProvider'指向这个MCP服务器的地址(例如:'http://localhost:8080/rpc')。
- LLM客户端将能够通过MCP协议向该服务器发送工具调用请求,例如请求查询富婆信息。
-
示例工具调用 (概念性):
- 一旦MCP服务器与客户端连接建立,你可以通过LLM向客户端提问,例如:
- "帮我查一下深圳的富婆信息。" (这将触发 'findByCityName' 工具)
- "找一下资产超过50亿元的富婆。" (这将触发 'findByFortuneGreaterThan' 工具)
- "所有富婆的名单。" (这将触发 'findAll' 工具)
- "手机号是18812345678的富婆是谁?" (这将触发 'findByPhone' 工具)
- MCP服务器会执行相应的Java方法,并将结果返回给LLM客户端。
- 一旦MCP服务器与客户端连接建立,你可以通过LLM向客户端提问,例如:
信息
分类
AI与计算