从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建议尝试:...";
    }
}

典型问题处理流程

  1. 用户提问:"MyBatis怎么处理大批量插入?"
  2. 系统自动匹配到批处理优化相关文档
  3. 返回包含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%。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐