你是否经历过这样的崩溃瞬间?领导甩来两个版本的 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 里的表格结构和数据逻辑的?其实整个流程可以拆解为三个核心步骤:

  1. 数据接入层

    :MCP 服务器通过文件适配器(支持.xlsx/.xls/.csv 等格式)读取两个 Excel 文件,提取 Sheet 名称、行列坐标、单元格内容(包括公式计算结果),转换成模型能理解的结构化数据(比如 JSON 格式)。

  1. AI 分析层

    :Spring AI 的PromptTemplate构建精准指令(例如 "对比两个 Excel 的产品 ID 列,找出价格变动超过 5% 的条目,并标注新旧值差异"),然后调用大语言模型进行语义级比对 —— 这步比传统的单元格逐个对比强太多,比如能识别 "张三" 和 "Zhang San" 是同一人,或者 "95 折" 与 "0.95 倍" 是相同折扣。

  1. 结果输出层

    :模型返回的差异结果经 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 比对结果

  1. 精准识别出 3 条下架产品和 5 条新增产品,没有遗漏

  1. 价格差异表清晰展示:

产品 ID

差异字段

旧值→新值

变动率

P0012

价格

99→109

+10.1%

P0045

供应商

A 公司→B 公司

-

  1. 总结部分自动计算:"本次更新共 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 比对折磨,不妨试试这个方案 —— 文末给大家准备了两个福利:

  1. 完整项目源码(含 MCP 服务器配置、Spring Boot 工程)

  1. 进阶提示词模板(针对复杂 Excel 的嵌套表格、合并单元格比对)

关注公众号回复【Excel 比对】即可获取。如果在实操中遇到技术问题,欢迎在评论区留言讨论,下期可能会出 MCP 服务器的本地部署教程哦~

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐