Spring AI Alibaba 框架入门及 MCP 集成指南
Spring AI Alibaba 框架的基础使用,涵盖包依赖引入、阿里百炼大模型调用、消息交互、工具调用、结构化输出及 RAG 功能。同时讲解了 MCP(模型上下文协议)的概念,包括客户端与服务端开发示例,以及基于 Nacos 的服务注册发现方案。旨在帮助开发者快速接入国内友好的大模型对接框架。

Spring AI Alibaba 框架的基础使用,涵盖包依赖引入、阿里百炼大模型调用、消息交互、工具调用、结构化输出及 RAG 功能。同时讲解了 MCP(模型上下文协议)的概念,包括客户端与服务端开发示例,以及基于 Nacos 的服务注册发现方案。旨在帮助开发者快速接入国内友好的大模型对接框架。

国内可以使用 springAI-alibaba,文档默认支持阿里百炼大模型。
参考文档:https://java2ai.com/docs/frameworks/agent-framework/tutorials/agents
<!-- Spring AI Alibaba Agent Framework -->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-agent-framework</artifactId>
<version>1.1.2.0</version>
</dependency>
<!-- DashScope ChatModel 支持(如果使用其他模型,请跳转 Spring AI 文档选择对应的 starter) -->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
<version>1.1.2.1</version>
</dependency>
/**
* 示例 2:简单调用
*/
public static void simpleCall() {
DashScopeApi dashScopeApi = DashScopeApi.builder()
.apiKey(System.getProperty("AI_DASHSCOPE_API_KEY"))
.build();
ChatModel chatModel = DashScopeChatModel.builder()
.dashScopeApi(dashScopeApi)
.build();
// 使用字符串直接调用
String response = chatModel.call("介绍一下 Spring 框架");
System.out.println(response);
}
/**
* 示例 6:流式响应
*/
public static void streamingResponse() {
DashScopeApi dashScopeApi = DashScopeApi.builder()
.apiKey(System.getProperty("AI_DASHSCOPE_API_KEY"))
.build();
ChatModel chatModel = DashScopeChatModel.builder()
.dashScopeApi(dashScopeApi)
.build();
// 使用流式 API
Flux<ChatResponse> responseStream = chatModel.stream(new Prompt("详细解释 Spring Boot 的自动配置原理"));
// 订阅并处理流式响应
responseStream.subscribe(
chatResponse -> {
String content = chatResponse.getResult().getOutput().getText();
System.out.print(content);
},
error -> System.err.println("错误:" + error.getMessage()),
() -> System.out.println("\n流式响应完成")
);
}
Messages 是 Spring AI Alibaba 中模型交互的基本单元。它们代表模型的输入和输出,携带在与 LLM 交互时表示对话状态所需的内容和元数据。
Messages 是包含以下内容的对象:
/**
* 示例 5:详细的角色设定
*/
public static void detailedSystemMessage() {
DashScopeApi dashScopeApi = DashScopeApi.builder()
.apiKey(System.getenv("AI_DASHSCOPE_API_KEY"))
.build();
ChatModel chatModel = DashScopeChatModel.builder()
.dashScopeApi(dashScopeApi)
.build();
// 详细的角色设定
SystemMessage systemMsg = new SystemMessage("""
你是一位资深的 Java 开发者,擅长 Web 框架。
始终提供代码示例并解释你的推理。
在解释中要简洁但透彻。
""");
List<Message> messages = List.of(
systemMsg,
new UserMessage("如何创建 REST API?")
);
ChatResponse response = chatModel.call(new Prompt(messages));
}
许多 AI 应用程序通过自然语言与用户交互。然而,某些业务场景需要模型使用结构化输入直接与外部系统(如 API、数据库或文件系统)进行交互。
Tools 是 agents 调用来执行操作的组件。它们通过定义良好的输入和输出让模型与外部世界交互,从而扩展模型的能力。
工具调用的工作原理非常简单,并不是 AI 服务器自己调用这些工具、也不是把工具的代码发送给 AI 服务器让它执行,它只能提出要求,表示"我需要执行 XX 工具完成任务"。而真正执行工具的是我们自己的应用程序,执行后再把结果告诉 AI,让它继续工作。
工具调用的流程:
- 工具定义:程序告诉 AI"你可以使用这些工具",并描述每个工具的功能和所需参数
- 工具选择:AI 在对话中判断需要使用某个工具,并准备好相应的参数(所以工具的描述至关重要)
- 返回意图:AI 返回"我想用 XX 工具,参数是 XXX"的信息
- 工具执行:我们的程序接收请求,执行相应的工具操作
- 结果返回:程序将工具执行的结果发回给 AI
- 继续对话:AI 根据工具返回的结果,生成最终回答给用户
结构化输出允许 Agent 以特定的、可预测的格式返回数据。相比于解析自然语言响应,您可以直接获得 JSON 对象或 Java POJO 形式的结构化数据,应用程序可以直接使用。
当 outputFormat 或 outputType 被指定时,Spring AI Alibaba 会自动选择:
参考文档:https://java2ai.com/docs/frameworks/agent-framework/advanced/rag
参考文档:https://java2ai.com/integration/chatmodels/comparison
MCP (Model Context Protocol, 模型上下文协议) 是一种开放标准,目的是增强 AI 与外部系统的交互能力。MCP 为 AI 提供了与外部工具、资源和服务交互的标准化方式,让 AI 能够访问最新数据、执行复杂操作,并与现有系统集成。
本质是 Tools 远程调用。
参考文档:https://java2ai.com/integration/mcps/mcp-overview
import org.springaicommunity.mcp.annotation.McpTool;
import org.springaicommunity.mcp.annotation.McpToolParam;
import org.springframework.stereotype.Component;
@Component
public class McpTools {
/**
* 简单操作,无状态
*/
@McpTool(name = "getCityWeather", description = "获取指定城市当天天气")
public String getCityWeather(@McpToolParam(description = "城市", required = true) String city) {
System.out.println("查询天气:" + city);
return city + "今天天气为上午小雨,下午转阴";
}
@McpTool(name = "getTime", description = "获取当前时间")
public String getTime() {
System.out.println("获取时间");
return "当前时间是:" + java.time.LocalDateTime.now();
}
}
# application.yml
spring:
ai:
mcp:
server:
name: mcp-server
version: 1.0.0
type: SYNC
protocol: STREAMABLE # or STDIO, STREAMABLE
capabilities:
tool: true
resource: true
prompt: true
completion: true
streamable-http:
mcp-endpoint: /mcp # 默认/mcp
启动之后可以访问 localhost:8080/mcp,看响应

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online