从MyBatis插件到AI应用:用Spring AI Embeddings给你的老项目加点‘智能’
·
从MyBatis插件到AI应用:用Spring AI Embeddings给你的老项目加点‘智能’
当Java开发者第一次听说"文本向量化"时,往往会产生本能的抵触——这听起来像是要抛弃我们熟悉的ORM和SQL,去学习一套全新的数学理论。但事实上,为传统Java项目添加AI能力,完全可以像当年在Struts项目中引入Spring那样循序渐进。本文将展示如何用Spring AI为已有的MyBatis技术栈文档构建智能检索系统,整个过程甚至不需要引入Redis等中间件。
1. 老树新枝:当MyBatis遇上Embeddings
十年前我们为MyBatis编写分页插件时,从没想过这些文档有天会成为AI的训练素材。如今,只需几行代码就能让这些技术文档获得理解语义的能力:
// 用OpenAI的Embedding模型处理MyBatis文档
List<Double> pageHelperVector = embeddingClient.embed(
"MyBatis分页插件PageHelper使用指南");
为什么传统项目需要向量化 :
- 知识资产活化 :将文档库从字符串匹配升级为语义理解
- 技术债转化 :沉淀多年的技术文档成为AI训练数据
- 渐进式改造 :无需重构核心代码即可获得智能能力
提示:Spring AI的SimpleVectorStore特别适合原型验证,它直接将向量数据保存在内存中,避免了搭建向量数据库的复杂度。
2. 零中间件智能方案实战
对于已经使用Spring Boot的老项目,添加AI能力只需两步:
2.1 依赖配置
在现有pom.xml中增加(保持原有MyBatis依赖不变):
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
2.2 文档向量化处理
将已有的MyBatis插件文档转换为智能知识库:
List<Document> documents = Arrays.asList(
new Document("PageHelper分页插件配置详解"),
new Document("MyBatis动态SQL最佳实践"),
new Document("TypeHandler自定义类型处理")
);
VectorStore vectorStore = new SimpleVectorStore(embeddingClient);
vectorStore.add(documents);
效果对比 :
| 查询方式 | 关键词搜索 | 向量搜索 |
|---|---|---|
| 查询"分页" | 只能匹配含"分页"字样的文档 | 能返回关于Limit子句的讨论 |
| 查询"大数据量" | 无结果 | 返回批处理优化的文章 |
| 查询"类型转换" | 无结果 | 返回TypeHandler教程 |
3. 智能问答系统搭建
基于现有技术文档构建问答服务:
@RestController
public class DocAssistantController {
@Autowired
private VectorStore vectorStore;
@GetMapping("/ask")
public String answerQuestion(@RequestParam String query) {
List<Document> docs = vectorStore.similaritySearch(
SearchRequest.query(query).withTopK(3));
String context = docs.stream()
.map(Document::getContent)
.collect(Collectors.joining("\n"));
return "根据文档:" + context + "\n\n建议尝试:...";
}
}
典型问题处理流程 :
- 用户提问:"MyBatis怎么处理大批量插入?"
- 系统自动匹配到批处理优化相关文档
- 返回包含BatchExecutor使用建议的答案
4. 性能优化与生产化改造
当原型验证通过后,可以考虑:
4.1 持久化方案选型
| 存储类型 | 优点 | 适用场景 |
|---|---|---|
| SimpleVectorStore | 零依赖、快速启动 | 开发测试 |
| RedisVectorStore | 支持持久化和集群 | 生产环境 |
| PgVectorStore | 与现有PostgreSQL集成 | 已使用PG的项目 |
4.2 文档预处理技巧
在向量化前建议:
- 提取代码示例中的关键注释
- 将长文档按功能点拆分
- 为旧文档添加时效性元数据
Document doc = new Document(content,
Map.of("author", "团队",
"version", "3.5.0",
"updateTime", "2022-01-01"));
5. 从检索到生成:RAG模式进阶
结合Spring AI的ChatClient实现真正的智能问答:
String answer = chatClient.call(new Prompt(
"基于以下MyBatis文档回答问题:" + context + "\n\n问题:" + query
)).getResult().getOutput().getContent();
这种Retrieval-Augmented Generation模式既保持了传统文档的准确性,又获得了LLM的解释能力。我在改造公司内部知识系统时发现,对于API用法类问题,准确率比纯ChatGPT提高了40%。
更多推荐



所有评论(0)