Spring AI与DeepSeek实战三:打造企业知识库
一、概述
企业应用集成大语言模型(LLM)落地的两大痛点:
- 知识局限性:LLM依赖静态训练数据,无法覆盖实时更新或垂直领域的知识;
- 幻觉:当LLM遇到训练数据外的提问时,可能生成看似合理但错误的内容。
用最低的成本解决以上问题,需要使用 RAG
技术,它是一种结合信息检索技术与 LLM 的框架,通过从外部 知识库
动态检索相关上下文信息,并将其作为 Prompt
融入生成过程,从而提升模型回答的准确性;
本文将以AI智能搜索为场景,基于 Spring AI 与 RAG 技术结合,通过构建实时知识库增强大语言模型能力,实现企业级智能搜索场景与个性化推荐,攻克 LLM 知识滞后与生成幻觉两大核心痛点。
关于 Spring AI 与 DeepSeek 的集成,以及 API-KEY 的申请等内容,可参考文章《Spring AI与DeepSeek实战一:快速打造智能对话应用》
二、RAG数据库选择
构建知识库的数据库一般有以下有两种选择:
| 维度| 向量数据库| 知识图谱| | --- | --- | --- | |数据结构| 非结构化数据(文本/图像向量) | 结构化关系网络(实体-关系-实体)| |查询类型|语义相似度检索|多跳关系推理| |典型场景|文档模糊匹配、图像检索| 供应链追溯、金融风控| |性能指标| QPS>5000 | 复杂查询响应时间>2s | | 开发成本 | 低(API即用)| 高(需构建本体模型) |
搜索推荐场景更适合选择 向量数据库
三、向量模型
向量模型是实现 RAG 的核心组件之一,用于将非结构化数据(如文本、图像、音频)转换为 高维向量
(Embedding)的机器学习模型。这些向量能够捕捉数据的语义或结构信息,使计算机能通过数学运算处理复杂关系。
向量数据库是专门存储、索引和检索高维向量的数据库系统
spring-ai-alibaba-starter
默认的向量模型为 text-embedding-v1
可以通过 spring.ai.dashscope.embedding.options.model
进行修改。
四、核心代码
4.1. 构建向量数据
创建 resources/rag/data-resources.txt
文件,内容如下:
1. {"type":"api","name":"测试api服务01","topic":"综合政务","industry":"采矿业","remark":"获取采矿明细的API服务"} 2. {"type":"api","name":"新能源车类型","topic":"能源","industry":"制造业","remark":"获取新能源车类型的服务"} 3. {"type":"api","name":"罚款报告","topic":"交通","industry":"制造业","remark":"获取罚款报告的接口"} 4. {"type":"api","name":"光伏发电","topic":"能源","industry":"电力、热力、燃气及水生产和供应业","remark":"获取光伏发电的年度报告"} 5. {"type":"api","name":"收益明细2025","topic":"综合政务","industry":"信息传输、软件和信息技术服务业","remark":"2025年的收益明细信息表"}
创建向量数据库的 Bean
@Bean public VectorStore vectorStore(EmbeddingModel embeddingModel , @Value("classpath:rag/data-resources.txt") Resource docs) { VectorStore vectorStore = SimpleVectorStore.builder(embeddingModel).build(); vectorStore.write(new TokenTextSplitter().transform(new TextReader(docs).read())); return vectorStore; }
SimpleVectorStore
是Spring AI
提供的一个基于内存的向量数据库;- 使用
TokenTextSplitter
来切分文档。
4.2. 创建ChatClient
private final ChatClient chatClient; public RagController(ChatClient.Builder builder, VectorStore vectorStore) { String sysPrompt = """ 您是一个数据产品的智能搜索引擎,负责根据用户输入的内容进行精准匹配、模糊匹配和近义词匹配,以搜索相关的数据记录。 您只能搜索指定的内容,不能回复其他内容或添加解释。 您可以通过[search_content]标识符来表示需要搜索的具体内容。要求您返回匹配内容的完整记录,以JSON数组格式呈现。 如果搜索不到内容,请返回[no_data]。 """; this.chatClient = builder .defaultSystem(sysPrompt) .defaultAdvisors( new QuestionAnswerAdvisor(vectorStore, new SearchRequest()) ) .defaultOptions( DashScopeChatOptions.builder() .withModel("deepseek-r1") .build() ) .build(); }
- 通过系统
Prompt
来指定智能体的能力; - 通过
QuestionAnswerAdvisor
绑定向量数据库。
4.3. 搜索接口
@GetMapping(value = "/search") public List<SearchVo> search(@RequestParam String search, HttpServletResponse response) { response.setCharacterEncoding("UTF-8"); PromptTemplate promptTemplate = new PromptTemplate("[search_content]: {search}"); Prompt prompt = promptTemplate.create(Map.of("search", search)); return chatClient.prompt(prompt) .call() .entity(new ParameterizedTypeReference<List<SearchVo>>() {}); }
这里通过 entity
方法来实现搜索结果以结构化的方式返回。
4.4. 测试接口
4.4.1. 搜索新能源
除了模糊匹配了新能源车之外,还匹配了和新能源相关的光伏数据。
4.4.21. 搜索收入
匹配同义词的收益数据。
五、总结
本文以智能搜索引擎场景,通过 RAG
技术,实现了全文搜索、模糊搜索、同义词推荐等功能,并以结构化的方式返回搜索结果。需要注意的是,在企业应用中,要把 SimpleVectorStore
改为成熟的第三方向量数据库,例如 milvus
、elasticsearch
、redis
等。
六、完整代码
- Gitee地址:
https://gitee.com/zlt2000/zlt-spring-ai-app
- Github地址:
https://github.com/zlt2000/zlt-spring-ai-app
扫码关注有惊喜!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
算法驯化人类?揭秘“刷不停”背后的流量操控战
再一次,刷小红书过了零点。脑子里想的是“还早,再过半小时就睡了”,然而手停不下来,直到凌晨1点。纠结了几分钟后,理智终于抢占了上风,放下发烫的手机睡觉。 这已经是第N 次。半年前,为了摆脱刷短视频停不下来的状态,我卸载了抖音。还有同样让我停不下来的知乎。然而并没有什么用,没有了抖音和知乎,还有小红书。 一觉醒来,接下来要面对的是精神内耗:要不要请假睡个懒觉的犹豫,熬夜刷手机的愧疚,对自制力的质疑,以及对于接下来一整天是否会顺利的担忧。我把这一些都归结为前一晚熬夜带来的后果,然后再一次为自己的行为感到懊悔。 我不是不知道,这种"停不下来"的体验,是APP 利用算法刻意制造的。但问题是:我一个普通人,如何能对抗得了精心编制的算法牢笼呢。 就在这样的日夜拉扯之间,我偶然听了一期播客——“知本论”对话算法专家傅聪。这期播客提到了平台如何设计算法让用户成瘾,如何捕捉用户注意力,用户画像可以精准到何种程度,以及信息茧房是如何形成的。最后令人意外的是,傅聪提到了作为用户如何驯化算法,为自己所用。 (下文根据播客内容整理) 01 商业目标驱动的算法设计 我是一名算法工程师。从浙江大学博士毕业之后,在阿...
- 下一篇
高效定位 Go 应用问题:Go 可观测性功能深度解析
作者:古琦 背景 自 2024 年 6 月 26 日,阿里云 ARMS 团队正式推出面向 Go 应用的可观测性监控功能以来,我们与程序语言及编译器团队携手并进,持续深耕技术优化与功能拓展。这一创新性的解决方案旨在为开发者提供更为全面、深入且高效的应用性能监控体验,助力企业在数字化转型中实现卓越的系统稳定性与性能表现。 从商业化版本的首次亮相至今,我们已历经五次重大版本迭代及若干次精细化的小版本更新。相较于初始版本,系统性能实现了翻倍提升,同时在功能层面亦展现出前所未有的丰富性与灵活性。新增特性包括但不限于智能化应用诊断、高度可定制的扩展能力、灵活的应用开关机制、接口全量采样以及代码热点分析等模块。这些功能的引入不仅显著提升了系统的实用性,也赢得了广大用户的广泛认可与积极反馈。而基于编译时插桩(Compile-time Instrumentation)的技术路径,更被实践证明是 Go 语言应用监控领域的一次突破性创举,堪称当前最优解。 为进一步赋能用户在复杂场景下快速定位与解决问题,我们结合近期发布的一系列全新功能,精心梳理了一套从接入到问题发现、再到问题排查与精准定位的最佳实践指南。 ...
相关文章
文章评论
共有0条评论来说两句吧...