news 2026/6/9 18:54:53

点餐系统装上了“DeepSeek大脑”:基于 Spring AI + PgVector 的 RAG 落地指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
点餐系统装上了“DeepSeek大脑”:基于 Spring AI + PgVector 的 RAG 落地指南

大家好,我是Sail, pgsql版本的AI点餐已经完成了,代码已经提交到仓库,支持本地deepseeker1.5b模型(我电脑960显卡- -)和deepseeker API。

前段时间,我开源了[Sail-Food 扬帆点餐系统]的基础版,收到了很多朋友反馈。大部分同学觉得界面丝滑、部署简单,非常适合做毕设活商用,有同学说建议我弄个多商户版本的。这块后面看时间会考虑加pgsql版本的。

基于Spring AI + PostgreSQL (pgvector) + DeepSeek,给系统加上了一个“AI 智能导购”功能。

今天就来复盘一下,我是如何在Java 生态下落地 RAG(检索增强生成)技术的。


💡 架构设计:为什么选 PostgreSQL 而不是 Milvus?

在设计 AI 功能时,我面临一个选择:向量数据存哪里?

市面上主流方案是 MySQL (业务) + Milvus/Elasticsearch (向量)。
但我果断放弃了,选择了PostgreSQL All-in-One方案。

架构师的思考:

  1. 运维成本:对于中小项目,多维护一个 ES 或 Milvus 是灾难。PG 安装一个 pgvector 插件就能存向量,且支持 ACID 事务。

  2. 数据一致性:菜品改了价格,向量库也要改。在同一个库里,一个事务就能搞定;分库的话还得搞分布式事务或 MQ,太重。

  3. 混合查询能力:PG 支持 SQL 过滤 + 向量相似度 联合查询(比如:推荐 20 元以下 + 适合小孩吃的菜),这是独立向量库很难做到的。

最终架构图:

codeMermaid

graph LR User[用户提问] --> App[后端 SpringBoot] App --> DeepSeek_1.5B[意图识别 (本地/云端)] DeepSeek_1.5B --是点餐--> OrderService[下单逻辑] DeepSeek_1.5B --是咨询--> RAG[RAG 检索服务] RAG --语义检索--> PG[PostgreSQL (pgvector)] PG --返回相似菜品--> RAG RAG --组装Prompt--> DeepSeek_V3[DeepSeek V3 API] DeepSeek_V3 --生成回答--> User

🛠️ 核心代码实战

1. 依赖引入 (Maven)

拥抱官方生态,使用 spring-ai。

codeXml

<!-- PGVector --> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-pgvector-store</artifactId> </dependency> <!--Ollama --> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-ollama-spring-boot-starter</artifactId> </dependency> <!-- 接入deepseek API --> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> </dependency>

2. 数据向量化 (Embedding)

我们需要把菜品的描述(名称、口味、食材)转换成向量存入数据库。
技巧:不要只存菜名!要拼装成一段“人话”。

codeJava

@Async @Override public void syncAllProductsToVectorStore() { List<WyProducts> products = wyProductsMapper.selectWyProductsList(new WyProducts()); //先删除数据 jdbcTemplate.execute("DELETE FROM vector_store"); List<Document> documents = new ArrayList<>(); for (WyProducts p : products) { String aiDesc = String.format( "菜名:%s,价格:%s元,分类:%s,介绍:%s", p.getProductName(), p.getPrice(), p.getWyProductCategories().getCategoryName(), (p.getDescription() == null ? "暂无详细介绍" : p.getDescription()) ); Map<String, Object> metadata = Map.of("id", p.getProductId(), "price", p.getPrice()); documents.add(new Document(aiDesc, metadata)); } // 3. 写入向量库 vectorStore.add(documents); log.info("AI 数据同步完成,共 {} 条", documents.size()); }

3. 智能问答实现 (Retrieval & Generation)

当用户提问时,先通过deepseeker解析出菜单的json ,如果能获取到json则返回给app,否则走Rag流程。

codeJava

public OrderIntentDTO parseOrder(String userMessage) { PromptTemplate promptTemplate = new PromptTemplate(INTENT_PROMPT); Prompt prompt = promptTemplate.create(Map.of("user_input", userMessage)); System.out.println("发送给 AI 的完整 Prompt:\n" + prompt.getContents()); String jsonResult = chatClient.prompt(prompt) .options(ChatOptionsBuilder.builder().withTemperature(0.0).build()) .call() .content(); try { jsonResult = jsonResult.replace("```json", "").replace("```", "").trim(); log.info("jsonResult: " + jsonResult); OrderIntentDTO intent = JSON.parseObject(jsonResult,OrderIntentDTO.class); if ("ORDER".equals(intent.getType()) && intent.getItems() != null) { // 检查提取出的菜名是否在黑名单里 boolean isInvalid = intent.getItems().stream() .anyMatch(item -> INVALID_DISH_NAMES.contains(item.getName())); if (isInvalid) { log.warn("AI 误将抽象词识别为菜名,强制回退为 QA 模式。原始内容: {}", intent); intent.setType(IntentType.QA); intent.setItems(null); } } return intent; } catch (Exception e) { System.out.println(e); return null; // 或者抛出业务异常, } }

📱 效果展示

场景一:通过AI点餐自动加入购物车

  • 用户:“帮我来2份肉松崔崔卷”

  • 截图如下:

自动加入到购物车,用户点击结算就可以了。

场景二:

  • 用户:“推荐点好吃的”

  • Ai回复截图:


🧵 总结与预告

通过引入PostgreSQL + AI,这个点餐系统瞬间从一个“死板的工具”变成了一个“懂你的助手”。
这不仅提升了用户体验,更是Java 开发者转型 AI 全栈的一次最佳实践。

我本地用的是deepseeker1.5B ,支持deepseeker API使用。

下一步计划:
快过年了。这段时间天冷,想休息一段时间,年前加个Redis Lua 库存扣减。


👇 源码获取

  • 开源地址 (PostgreSQL 版):https://gitee.com/wyabsdai/sail-food

  • AI 旗舰版 / 架构交流:欢迎关注我的主页或私信,一起探讨技术变现!

(我是 Sail,37岁的高级架构师。如果不写代码,我就得去摆摊了,所以点个关注支持一下吧!)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 17:25:36

BetterNCM安装器完整使用手册:解锁网易云音乐隐藏功能

还在为网易云音乐功能单一而烦恼&#xff1f;BetterNCM安装器就是你的专属音乐管家&#xff01;这款基于Rust开发的专业级插件管理工具&#xff0c;将复杂的插件配置变得像挑选歌曲一样简单直观。无论你是音乐发烧友还是功能探索者&#xff0c;都能在这里找到属于你的音乐新体验…

作者头像 李华
网站建设 2026/6/9 17:25:17

BetterNCM插件增强终极技巧:打造个性化音乐世界

BetterNCM插件增强终极技巧&#xff1a;打造个性化音乐世界 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 你是否曾经觉得自己的音乐播放器界面太过单调&#xff1f;想要拥有与众不同…

作者头像 李华
网站建设 2026/6/9 17:19:41

一文搞懂提示词工程(初学者必看)

前言 你是否有过这样的经历&#xff1f;明明用的是口碑极好的大模型&#xff0c;输入问题后却得到答非所问的结果&#xff1b;想让模型生成一份规整的报告&#xff0c;出来的却是杂乱无章的文字&#xff1b;甚至想让它解决具体工作中的问题&#xff0c;得到的答案却漏洞百出、毫…

作者头像 李华
网站建设 2026/6/9 17:26:56

【求职招聘】2025年 AI Agent 开发岗位的面试题整理(+必过答案解析)

【求职招聘】2025年 AI Agent 开发岗位的面试题整理(+必过答案解析) 文章目录 【求职招聘】2025年 AI Agent 开发岗位的面试题整理(+必过答案解析) ======================================== 第一部分:核心 Agent 架构与原理 (高频必问) 第二部分:蚂蚁金服特色技术与场景…

作者头像 李华
网站建设 2026/6/9 17:27:28

开源阅读鸿蒙版:三步打造你的专属数字书房

想在鸿蒙设备上拥有一个完全免费、无广告干扰的私人阅读空间吗&#xff1f;开源阅读鸿蒙版正是为你量身打造的数字书房解决方案。这款专为鸿蒙生态优化的开源阅读器&#xff0c;通过简单的配置就能让你从全网抓取小说、漫画和资讯内容&#xff0c;享受纯净的阅读体验。 【免费下…

作者头像 李华
网站建设 2026/6/7 17:31:56

2025全球国内网络安全大事,一文看透未来走向

2025全球国内网络安全大事&#xff0c;一文看透未来走向 2025年&#xff0c;AI热潮席卷全球的同时&#xff0c;网络安全领域亦暗流涌动。远程办公的安全漏洞、量子计算对加密体系的冲击、地缘政治引发的政策变动&#xff0c;让这一年的网络空间格外不平静。 网络安全早已跳出…

作者头像 李华