合租网站设计广东涂料网站建设

张小明 2026/1/8 20:25:54
合租网站设计,广东涂料网站建设,vs怎么做网页,深圳网站建设公司公司前言 在之前的文章中我们使用 SpringBoot 配合 DeepSeek 构建了一个拥有聊天记忆的问答机器人#xff0c;如果没有看过的可以翻下我之前的帖子。这次构建企业知识库将基于之前的内容来添砖加瓦。 构建知识库 在开始之前#xff0c;我们需要了解 2 个概念#xff1a;向量数…前言在之前的文章中我们使用 SpringBoot 配合 DeepSeek 构建了一个拥有聊天记忆的问答机器人如果没有看过的可以翻下我之前的帖子。这次构建企业知识库将基于之前的内容来添砖加瓦。构建知识库在开始之前我们需要了解 2 个概念向量数据库和检索增强生成RAG**向量数据库**顾名思义存储向量的数据库。什么是向量可以简单理解为文本、图片、视频等数据在空间中的坐标语义相似的词在向量空间中距离更近AI 根据距离来判断相似度。**检索增强生成RAG**当需要将用户查询发送到 AI 模型时首先检索一组相似的文档。这些文档随后作为用户问题的上下文与用户查询一起发送给 AI 模型。这种技术被称为检索增强生成RAG。添加依赖之前我们是直接使用的 DeepSeek 的依赖包但是由于在硅基流动中没找到 DeepSeek 的嵌入模型这里使用的千问的嵌入模型 Open AI 都能兼容。dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-webflux/artifactId /dependency dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-advisors-vector-store/artifactId /dependency dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-model-openai/artifactId /dependency dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-rag/artifactId /dependency /dependencies dependencyManagement dependencies dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-bom/artifactId version1.1.2/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement配置嵌入模型为什么要配置嵌入模型前面提到 AI 通过向量可以判断相似度而嵌入模型就是用于生成向量。嵌入模型可以到硅基流动搜索 Embedding 关键字这里就直接使用的千问模型。spring: ai: openai: api-key: xxxx base-url: https://api.siliconflow.cn embedding: options: model: Qwen/Qwen3-Embedding-0.6B chat: options: model: deepseek-ai/DeepSeek-R1-0528-Qwen3-8B temperature: 0.7聊天客户端配置之前是直接在控制器中使用构造器的方式进行注入RestController RequestMapping(/chat) public class ChatBotController { private final ChatClient chatClient; public ChatBotController(ChatClient.Builder chatClientBuilder) { this.chatClient chatClientBuilder.build(); } }现在我们直接抽取成配置。Configuration public class ChatConfig { Bean public ChatClient chatClient(ChatModel chatModel, EmbeddingModel embeddingModel, ChatMemory chatMemory) { return ChatClient.builder(chatModel) .defaultSystem(你是一个客服人员针对用户的问题总是能以友好愉悦的方式去进行交流希望带给客户很好的体验。) .defaultAdvisors(MessageChatMemoryAdvisor.builder(chatMemory).build()) .defaultAdvisors(VectorStoreChatMemoryAdvisor.builder(SimpleVectorStore.builder(embeddingModel).build()).build()) .build(); } Bean public VectorStore vectorStore(EmbeddingModel embeddingModel) { return SimpleVectorStore.builder(embeddingModel).build(); } }我们可以看到ChatClient​ 的 bean 配置了defaultSystem​和defaultAdvisors​defaultSystem​用来生成默认的提示词这里我给了个提示让它作为一名客服人员去回答问题。defaultAdvisors​则是添加顾问可以理解为一种拦截器在请求 AI 前的一些操作这里告诉 AI 使用内存作为记忆并且使用内存作为向量数据库。当然实际企业不会直接使用内存作为记忆和向量数据库我们可以直接基于自身的项目的架构选择合适的向量数据库和记忆会话历史。比如使用 mysql 存储会话历史使用 redis-stack 做为向量数据库都是不错的选择。到目前为止已经解决了之前思考问题”我们怎么给 AI 预置一个角色比如让它作为一个智能客服或者作为一个营养师。“添加知识库这里为了方便直接使用了PostConstruct​模拟了知识库初始化真实数据可以从数据库中获取使用CommandLineRunner​接口加载数据。Autowired private VectorStore vectorStore; PostConstruct public void loadStore() { ListDocument documents List.of( new Document(lanjii是开箱即用的 RBAC 权限管理系统。后端基于 Spring Boot3 构建 集成了 JWT 认证、Spring Security 6、MyBatis-Plus\u200B 和 WebSocket\u200B 等核心技术。前端使用了 Vue3 Vite Element Plus Pinia 构建。它是一个简洁、高效、无过多依赖的项目支持按钮级别的权限控制使用简单开箱即用。) ); vectorStore.add(documents); }挂载知识库在聊天客户端中直接添加QuestionAnswerAdvisor​就可以让我们在问 AI 时先从知识库中获取数据然后经过 AI 整合后回答我们。RestController RequestMapping(/chat) public class ChatBotController_demo { Autowired private ChatClient chatClient; Autowired private VectorStore vectorStore; PostConstruct public void loadStore() { ListDocument documents List.of( new Document(lanjii是开箱即用的 RBAC 权限管理系统。后端基于 Spring Boot3 构建 集成了 JWT 认证、Spring Security 6、MyBatis-Plus\u200B 和 WebSocket\u200B 等核心技术。前端使用了 Vue3 Vite Element Plus Pinia 构建。它是一个简洁、高效、无过多依赖的项目支持按钮级别的权限控制使用简单开箱即用。) ); vectorStore.add(documents); } GetMapping(value /stream, produces MediaType.TEXT_EVENT_STREAM_VALUE) public FluxString chatStream(String message, String conversationId) { return chatClient.prompt() .advisors( a - a.param(ChatMemory.CONVERSATION_ID, conversationId) ) .advisors(QuestionAnswerAdvisor.builder(vectorStore).build()) .user(message) .stream() .content(); } }不知大家有没有注意到这里使用到了ChatMemory.CONVERSATION_ID​这是将聊天数据的上下文进行关联。上篇文章留下的思考中如果用户 A 和用户 B 同时对 AI 进行对话怎么让对话进行隔离这里直接让不同的会话使用不同的 conversationId 即可。至此一个简单的知识库就构建好了看下效果吧​更可以达到这样的效果​​这样一个即有记忆功能又能对话隔离并且能直接关联知识库的问答系统就构建好了。思考又到了思考环节按理说 AI 的场景运用到这里已经结束了但是如果通过对话直接让 AI 跟我们完成业务操作比如跟我下单或者说取消机票完整代码后续我会整理后将代码放在 Giteelanjii: 开箱即用的 RBAC 权限管理系统。后端基于 Spring Boot3 构建 集成了 JWT 认证、Spring Security 6、MyBatis-Plus这是一款 MIT 协议可商用的 SpringBoot 脚手架拥有完整的权限控制和常用的基础功能。希望大家给个 Star后面有新的功能和一些 BUG 的修复也会提交到 Gitee。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

嘉兴行业网站建设网页进不去是怎么回事

在软件开发的生命周期中,测试文档不仅是质量保证的重要载体,更是团队协作的关键纽带。规范的测试文档能够明确测试范围、统一测试标准、提升缺陷跟踪效率,并为产品迭代提供可靠依据。 一、测试计划文档规范 1.1 文档结构要求 测试计划文档…

张小明 2026/1/7 23:43:19 网站建设

怎么查网站的所有权长尾关键词挖掘爱站工具

Sendmail 配置宏与特性全解析 在邮件服务器配置中,sendmail 是一款功能强大且广泛使用的邮件传输代理。为了实现灵活的配置,sendmail 提供了丰富的 m4 宏,这些宏可以帮助我们根据不同的需求定制邮件服务器的行为。本文将详细介绍 sendmail 中常用的 m4 宏,包括 FEATURE 宏…

张小明 2026/1/8 7:21:47 网站建设

网站如何运营赚钱免费软件app网站下载大全

字符设备驱动开发指南 1. 引言 字符设备驱动适用于大多数简单硬件设备,相较于块驱动或网络驱动更易理解。本文将围绕 scull(Simple Character Utility for Loading Localities)字符设备驱动展开,它作用于内存区域,具有硬件无关性,可在不同 Linux 架构上编译运行。 2. …

张小明 2026/1/7 12:44:58 网站建设

淮北网站建设制作h5网站如何做

开源新星Kotaemon:重新定义RAG系统的开发体验 在企业级AI应用日益追求“可解释、可追溯、可落地”的今天,一个核心问题始终困扰着开发者:如何让大语言模型(LLM)不仅“说得漂亮”,还能“答得准确”&#xf…

张小明 2026/1/8 17:27:24 网站建设

网站维护很难吗代理公司注册商标

c-TF-IDF 和 TF-IDF 什么是 c-TF-IDF?传统 TF-IDFc-TF-IDF(基于类的 TF-IDF) c-TF-IDF 的计算公式直观理解在 BERTopic 中的工作流程代码示例:使用 c-TF-IDF与传统 TF-IDF 对比c-TF-IDF 的优势自定义 c-TF-IDF 参数可视化 c-TF-ID…

张小明 2026/1/9 7:36:10 网站建设

免费建设一个可以访问的网站设计公司网站建设费用

我们学完了系统文件IO,但是没有对磁盘文件做一个了解,于是这个系列将解答一下磁盘存储相关知识作为计算机系统里 “特殊” 的硬件 —— 机械磁盘是唯一带机械设备的外设,它不像 CPU、内存那样靠纯电子元件工作,却凭借 “大容量、低…

张小明 2026/1/9 0:30:48 网站建设