项目简介

'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)。

安装步骤

  1. 环境准备

    • 确保已安装JDK 17或更高版本。
    • 安装Maven(推荐3.8+)或Gradle(推荐7.0+)构建工具。
  2. 克隆仓库

    git clone https://github.com/rstyro/spring-ai-alibaba-demo.git
    cd spring-ai-alibaba-demo
  3. 构建项目

    • 使用Maven构建:
      mvn clean install -DskipTests
    • 使用Gradle构建(如果项目配置了Gradle):
      ./gradlew clean build -x test

    这将编译所有模块并生成可执行的JAR文件。

服务器配置

本项目包含了多个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'路径提供服务。

基本使用方法

  1. 启动MCP服务器

    • 在命令行中,导航到MCP服务器模块的目录,例如:'cd spring-ai-alibaba-demo/spring-ai-alibaba-mcp/quick-start/mcp-server'
    • 运行命令启动服务器:
      java -jar target/mcp-server.jar
    • 服务器成功启动后,你会在控制台看到启动成功的日志,默认运行在8080端口。
  2. MCP客户端集成

    • 你需要一个支持MCP协议的LLM客户端(例如另一个Spring AI应用或自定义客户端)。
    • 客户端需配置其'ToolCallbackProvider'指向这个MCP服务器的地址(例如:'http://localhost:8080/rpc')。
    • LLM客户端将能够通过MCP协议向该服务器发送工具调用请求,例如请求查询富婆信息。
  3. 示例工具调用 (概念性)

    • 一旦MCP服务器与客户端连接建立,你可以通过LLM向客户端提问,例如:
      • "帮我查一下深圳的富婆信息。" (这将触发 'findByCityName' 工具)
      • "找一下资产超过50亿元的富婆。" (这将触发 'findByFortuneGreaterThan' 工具)
      • "所有富婆的名单。" (这将触发 'findAll' 工具)
      • "手机号是18812345678的富婆是谁?" (这将触发 'findByPhone' 工具)
    • MCP服务器会执行相应的Java方法,并将结果返回给LLM客户端。

信息

分类

AI与计算