Spring AI + MCP 实战:让两个 Excel 内容比对效率提升 10 倍
你是否经历过这样的崩溃瞬间?领导甩来两个版本的 Excel 表,要求半小时内找出数据差异 —— 一个是上周的产品报价单,一个是刚更新的版本,密密麻麻的价格和规格参数看得人眼晕。传统的 VLOOKUP 公式套了三层还漏检,手动逐行比对更是错漏百出。今天就来分享一个硬核方案:用 Spring AI + MCP 实现 Excel 内容智能比对,让复杂文件的差异识别效率飙升。
一、技术组合:为什么是 Spring AI + MCP?
在开始实战前,先搞懂这对技术搭档的核心价值。
Spring AI 作为 Spring 生态的 AI 开发利器,最牛的地方在于把复杂的大模型调用封装成了标准化接口。比如它的ChatClient能一键对接 GPT、文心一言等主流模型,Tool机制可以让 AI 自主调用外部工具 —— 这正是处理 Excel 比对的关键:让模型不仅能 "思考",还能 "动手" 读取文件。
MCP(Model Connect Protocol) 则解决了大模型 "眼高手低" 的问题。作为连接大模型与外部数据源的标准化协议,它就像个万能适配器:不管你的 Excel 存在本地硬盘、云存储还是企业数据库,MCP 都能统一接口把数据喂给模型。更重要的是,它支持动态上下文管理,能智能处理超过模型 Token 限制的大文件。
当这两者结合,就形成了 "AI 大脑(Spring AI)+ 数据触手(MCP)" 的完美组合 —— 既懂分析差异,又能灵活读取各种来源的 Excel 文件。
二、实现原理:Excel 比对的技术流程图解
很多人好奇:AI 是怎么看懂 Excel 里的表格结构和数据逻辑的?其实整个流程可以拆解为三个核心步骤:
- 数据接入层
:MCP 服务器通过文件适配器(支持.xlsx/.xls/.csv 等格式)读取两个 Excel 文件,提取 Sheet 名称、行列坐标、单元格内容(包括公式计算结果),转换成模型能理解的结构化数据(比如 JSON 格式)。
- AI 分析层
:Spring AI 的PromptTemplate构建精准指令(例如 "对比两个 Excel 的产品 ID 列,找出价格变动超过 5% 的条目,并标注新旧值差异"),然后调用大语言模型进行语义级比对 —— 这步比传统的单元格逐个对比强太多,比如能识别 "张三" 和 "Zhang San" 是同一人,或者 "95 折" 与 "0.95 倍" 是相同折扣。
- 结果输出层
:模型返回的差异结果经 Spring AI 处理后,可生成格式化报告(支持 Markdown/HTML/Excel 差异表),甚至能自动高亮标注原文件中的差异位置。
整个过程中,MCP 解决 "读得到" 的问题,Spring AI 解决 "看得懂" 的问题,两者配合实现从原始文件到差异报告的端到端自动化。
三、实战代码:从 0 到 1 实现 Excel 比对功能
下面直接上干货,基于 Spring Boot 3.2 + Spring AI 0.8.1 + MCP 1.0.0 版本的完整实现步骤:
(一)环境准备
首先在pom.xml中引入核心依赖:
<!-- Spring AI 核心依赖 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
<version>0.8.1</version>
</dependency>
<!-- MCP 客户端 -->
<dependency>
<groupId>org.modelconnect</groupId>
<artifactId>spring-mcp-client</artifactId>
<version>1.0.0</version>
</dependency>
<!-- Excel处理工具 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.5</version>
</dependency>
在application.yml中配置 MCP 服务器地址和 AI 模型参数:
spring:
ai:
openai:
api-key: your-api-key
chat:
model: gpt-4o
mcp:
server-url: http://localhost:8081/mcp
timeout: 30000
(二)核心代码实现
第一步:编写 MCP 文件读取服务
@Service
public class ExcelReaderService {
private final McpClient mcpClient;
public ExcelReaderService(McpClient mcpClient) {
this.mcpClient = mcpClient;
}
// 读取Excel文件内容并转为结构化数据
public String readExcelContent(File file) {
McpRequest request = McpRequest.builder()
.resourceType("file")
.resourcePath(file.getAbsolutePath())
.operation("read")
.params(Map.of("format", "json", "includeSheets", "产品表,价格表")) // 指定需要读取的Sheet
.build();
return mcpClient.execute(request).getResult();
}
}
第二步:构建 AI 比对逻辑
@Service
public class ExcelCompareService {
private final ChatClient chatClient;
public String compareExcels(String excel1Data, String excel2Data) {
// 定义提示词模板,明确比对规则
String prompt = """
作为数据分析师,请对比两个Excel的结构化数据(JSON格式),完成以下任务:
1. 检查产品ID是否完全匹配,列出新增或删除的条目
2. 对相同ID的产品,比较价格、库存、供应商字段的差异
3. 用表格形式展示差异结果,标注"旧值→新值",并计算价格变动百分比
4. 最后给出差异总结(如:共12处差异,其中5处价格上涨)
第一个Excel数据:{excel1}
第二个Excel数据:{excel2}
""";
PromptTemplate promptTemplate = new PromptTemplate(prompt,
Map.of("excel1", excel1Data, "excel2", excel2Data));
return chatClient.prompt(promptTemplate.create()).call().content();
}
}
第三步:整合接口并测试
@RestController
public class CompareController {
@Autowired
private ExcelReaderService readerService;
@Autowired
private ExcelCompareService compareService;
@PostMapping("/compare")
public String compare(@RequestParam("file1") MultipartFile file1,
@RequestParam("file2") MultipartFile file2) throws IOException {
// 临时保存上传的文件
File tempFile1 = File.createTempFile("file1", ".xlsx");
file1.transferTo(tempFile1);
File tempFile2 = File.createTempFile("file2", ".xlsx");
file2.transferTo(tempFile2);
// 读取并比对
String data1 = readerService.readExcelContent(tempFile1);
String data2 = readerService.readExcelContent(tempFile2);
return compareService.compareExcels(data1, data2);
}
}
四、效果展示:实战测试案例
用两份电商产品 Excel(分别是 V1.0 和 V2.0 版本)进行测试,看看实际效果:
测试文件:
-
旧文件:包含 200 条产品数据,其中 3 条已下架
-
新文件:新增 5 条产品,8 条价格调整(最高涨幅 12%),2 条供应商变更
AI 比对结果:
-
精准识别出 3 条下架产品和 5 条新增产品,没有遗漏
-
价格差异表清晰展示:
|
产品 ID |
差异字段 |
旧值→新值 |
变动率 |
|
P0012 |
价格 |
99→109 |
+10.1% |
|
P0045 |
供应商 |
A 公司→B 公司 |
- |
-
总结部分自动计算:"本次更新共 18 处差异,其中价格调整占比 44.4%,建议重点审核涨幅超过 10% 的 3 条记录"
更惊艳的是,对于 Excel 中用颜色标记的单元格(比如红色表示降价),MCP 能读取格式信息,AI 会在结果中特别标注:"注意:P0078 的价格变动(150→130)已用红色标记,属于促销调整"。
五、技术优势与拓展场景
相比传统的 Excel 比对方法(如 VBA 宏、Python pandas 库),这个方案的优势很明显:
- 语义级理解
:不只是机械对比字符,能识别同义词、缩写、格式转换(如日期格式不同但值相同)
- 跨格式兼容
:通过 MCP 扩展,还能比对 Excel 与 CSV、PDF 表格、数据库表的数据差异
- 低代码扩展
:想增加比对规则?只需修改提示词模板,无需重写核心逻辑
除了日常办公,这个技术组合还能玩出更多花样:
-
财务审计:比对发票 Excel 与报销系统数据,自动识别金额不符项
-
法务审核:对比合同模板与实际签署文件的条款差异
-
版本管理:跟踪产品需求文档(Excel 版)的迭代变更记录
六、结语与资源获取
从代码实现到实际测试,Spring AI + MCP 确实让文件比对这件事变得更智能、更高效。如果你也经常被 Excel 比对折磨,不妨试试这个方案 —— 文末给大家准备了两个福利:
-
完整项目源码(含 MCP 服务器配置、Spring Boot 工程)
-
进阶提示词模板(针对复杂 Excel 的嵌套表格、合并单元格比对)
关注公众号回复【Excel 比对】即可获取。如果在实操中遇到技术问题,欢迎在评论区留言讨论,下期可能会出 MCP 服务器的本地部署教程哦~
更多推荐



所有评论(0)