当前位置: 首页 > wzjs >正文

网站建设价格专注制作网站设计广州seo服务外包

网站建设价格专注制作网站设计,广州seo服务外包,电商网站布局设计,随州seo推广前言 以大模型向量存储的方式,提交本地文件到知识库。并在 AI 对话中增强检索知识库符合 AI 对话内容的资料,合并提交问题。 技术组件 1:SpringAI : 提供向量模型处理框架,支持文件的解析、拆分和向量化操作。 2:TikaDocumentReader : 用于解…

前言
以大模型向量存储的方式,提交本地文件到知识库。并在 AI 对话中增强检索知识库符合 AI 对话内容的资料,合并提交问题。
技术组件
1:SpringAI : 提供向量模型处理框架,支持文件的解析、拆分和向量化操作。

2:TikaDocumentReader : 用于解析上传的文件,支持多种文件格式(如 MD、TXT、SQL 等)。

3:TokenTextSplitter : 用于将解析后的文本内容拆分为更小的片段,便于后续处理和存储。

4:PostgreSQL向量库 : 用于存储处理后的文本向量数据,支持高效的相似性搜索和检索。
方案流程
文件上传与解析
文件上传 : 用户通过前端界面或 API 上传文件,文件可以是多种格式(如 MD、TXT、SQL 等)。
文件解析 : 使用 TikaDocumentReader 对上传的文件进行解析,提取出文本内容。TikaDocumentReader 能够处理多种文件格式,并提取出结构化的文本数据。
文本拆分
文本拆分 : 使用 TokenTextSplitter 将解析后的文本内容拆分为更小的片段。拆分策略可以根据需求进行调整,例如按句子、段落或固定长度的 token 进行拆分。
拆分后的文本片段 : 每个文本片段将作为后续处理和存储的基本单元。
向量化与存储
向量化 : 使用 Spring AI 提供的向量模型将标记后的文本片段转换为向量表示。向量化过程将文本内容映射到高维向量空间,便于后续的相似性搜索和检索。
存储到PostgreSQL向量库 : 将向量化后的文本片段及其标记存储到 PostgreSQL 向量库中。PostgreSQL 提供了高效的向量索引和搜索功能,能够支持大规模的文本数据存储和检索。
功能实现
在这里插入图片描述
引入组件

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-tika-document-reader</artifactId>
</dependency>
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-pgvector-store</artifactId>
</dependency>

spring-ai-tika-document-reader,解析文档
spring-ai-pgvector-store,向量存储库

文件配置

server:port: 8090spring:datasource:driver-class-name: org.postgresql.Driverusername: postgrespassword: postgresurl: jdbc:postgresql://ip:15432/ai-rag-knowledgetype: com.zaxxer.hikari.HikariDataSource# hikari连接池配置hikari:#连接池名pool-name: HikariCP#最小空闲连接数minimum-idle: 5# 空闲连接存活最大时间,默认10分钟idle-timeout: 600000# 连接池最大连接数,默认是10maximum-pool-size: 10# 此属性控制从池返回的连接的默认自动提交行为,默认值:trueauto-commit: true# 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟max-lifetime: 1800000# 数据库连接超时时间,默认30秒connection-timeout: 30000# 连接测试queryconnection-test-query: SELECT 1ai:ollama:base-url: http://ip:11434embedding:options:num-batch: 512model: nomic-embed-textopenai:base-url: https://pro-share-aws-api.zcyai.com/api-key: sk-esdsdfxptPgbfXd3Z164260740E0494161Bd8**embedding-model: text-embedding-ada-002rag:embed: nomic-embed-text #nomic-embed-text、text-embedding-ada-002# Redis
redis:sdk:config:host: ipport: 16379pool-size: 10min-idle-size: 5idle-timeout: 30000connect-timeout: 5000retry-attempts: 3retry-interval: 1000ping-interval: 60000keep-alive: truelogging:level:root: infoconfig: classpath:logback-spring.xml

可以指定向量库模型,这个是 ollama 安装的模型。如果不在这里指定,那么它会找一个默认的向量库。

datasource 配置 postgresql 地址。注意,这里为了避免端口冲突,设置为 15432,和 docker compose 设置的对外端口一致。

向量存储
Spring AI 提供了简单 SimpleVectorStore 实现类,把文档信息缓存到内存中。以及 PgVectorStore 实现类,把文档存储到向量库。

这块的需要现在 app/config 下,实例化 VectorStore 存储实现类。

@Configuration
public class RAGEmbeddingConfig {@Beanpublic TokenTextSplitter tokenTextSplitter() {return new TokenTextSplitter();}@Beanpublic OllamaApi ollamaApi(@Value("${spring.ai.ollama.base-url}") String baseUrl) {return new OllamaApi(baseUrl);}@Beanpublic SimpleVectorStore vectorStore(OllamaApi ollamaApi) {OllamaEmbeddingClient embeddingClient = new OllamaEmbeddingClient(ollamaApi);embeddingClient.withDefaultOptions(OllamaOptions.create().withModel("nomic-embed-text"));return new SimpleVectorStore(embeddingClient);}@Beanpublic PgVectorStore pgVectorStore(OllamaApi ollamaApi, JdbcTemplate jdbcTemplate) {OllamaEmbeddingClient embeddingClient = new OllamaEmbeddingClient(ollamaApi);embeddingClient.withDefaultOptions(OllamaOptions.create().withModel("nomic-embed-text"));return new PgVectorStore(jdbcTemplate, embeddingClient);}}

上传知识

package dev.tech.test;import com.alibaba.fastjson.JSON;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.ai.chat.ChatResponse;
import org.springframework.ai.chat.messages.Message;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.chat.prompt.SystemPromptTemplate;
import org.springframework.ai.document.Document;
import org.springframework.ai.ollama.OllamaChatClient;
import org.springframework.ai.ollama.api.OllamaOptions;
import org.springframework.ai.reader.tika.TikaDocumentReader;
import org.springframework.ai.transformer.splitter.TokenTextSplitter;
import org.springframework.ai.vectorstore.PgVectorStore;
import org.springframework.ai.vectorstore.SearchRequest;
import org.springframework.ai.vectorstore.SimpleVectorStore;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
public class RAGTest {@Resourceprivate OllamaChatClient ollamaChatClient;@Resourceprivate TokenTextSplitter tokenTextSplitter;@Resourceprivate SimpleVectorStore simpleVectorStore;@Resourceprivate PgVectorStore pgVectorStore;@Testpublic void upload() {TikaDocumentReader reader = new TikaDocumentReader("./data/file.text");List<Document> documents = reader.get();List<Document> documentSplitterList = tokenTextSplitter.apply(documents);documents.forEach(doc -> doc.getMetadata().put("knowledge", "知识库名称"));documentSplitterList.forEach(doc -> doc.getMetadata().put("knowledge", "知识库名称"));pgVectorStore.accept(documentSplitterList);log.info("上传完成");}@Testpublic void chat() {String message = "小明哥,哪年出生";String SYSTEM_PROMPT = """Use the information from the DOCUMENTS section to provide accurate answers but act as if you knew this information innately.If unsure, simply state that you don't know.Another thing you need to note is that your reply must be in Chinese!DOCUMENTS:{documents}""";SearchRequest request = SearchRequest.query(message).withTopK(5).withFilterExpression("knowledge == '知识库名称'");List<Document> documents = pgVectorStore.similaritySearch(request);String documentsCollectors = documents.stream().map(Document::getContent).collect(Collectors.joining());Message ragMessage = new SystemPromptTemplate(SYSTEM_PROMPT).createMessage(Map.of("documents", documentsCollectors));ArrayList<Message> messages = new ArrayList<>();messages.add(new UserMessage(message));messages.add(ragMessage);ChatResponse chatResponse = ollamaChatClient.call(new Prompt(messages, OllamaOptions.create().withModel("deepseek-r1:1.5b")));log.info("测试结果:{}", JSON.toJSONString(chatResponse));}}

现在你可以上传一个自己定义的知识库,之后验证它啦。

好了 至此 《DeepSeek RAG 增强检索知识库系统》Ollama RAG 知识库上传、解析和验证之四 点点关注不迷路 老铁们!!!!!


文章转载自:

http://qB42IXif.qgwdc.cn
http://ID6i1TEo.qgwdc.cn
http://Ao3VeL94.qgwdc.cn
http://U3VQMJFX.qgwdc.cn
http://v2PzL8T7.qgwdc.cn
http://mCsw5ay1.qgwdc.cn
http://Q0ROA7xV.qgwdc.cn
http://rmFUyCGV.qgwdc.cn
http://e0fkvSep.qgwdc.cn
http://kehbLNwN.qgwdc.cn
http://eZp0yWJZ.qgwdc.cn
http://OCEFhblQ.qgwdc.cn
http://kqDz8TaO.qgwdc.cn
http://ztYoDp8C.qgwdc.cn
http://c81KfRc4.qgwdc.cn
http://4o9ZcUD4.qgwdc.cn
http://1CTJdMph.qgwdc.cn
http://PCm1U1zH.qgwdc.cn
http://IuhFh9Qr.qgwdc.cn
http://FCTeQ0pA.qgwdc.cn
http://GTDJByaQ.qgwdc.cn
http://6UaOj3cS.qgwdc.cn
http://Mt28x0GQ.qgwdc.cn
http://VLkatCzM.qgwdc.cn
http://6DpA80PG.qgwdc.cn
http://QgAjIgFJ.qgwdc.cn
http://iqZ4IQXe.qgwdc.cn
http://byNZE53Z.qgwdc.cn
http://zF7eqZIA.qgwdc.cn
http://nXk6Y4bn.qgwdc.cn
http://www.dtcms.com/wzjs/647255.html

相关文章:

  • 自己开发app怎么赚钱做网站的优化价格
  • 竞彩网站建设创意ppt模板大全
  • 厦门单位网站建设广州app开发价格表
  • wordpress快讯插件网络优化策划书
  • 优秀网站案列长春网站搭建
  • 网站建设方案书的内容php网站转移
  • 海洋网站建设网络营销的认知
  • dw中网站统计总访问量怎么做网站建设哪家好灵活苏州久远网络
  • 工程建设云网站wordpress侧边栏主题
  • 南宁营销型网站建设公司哪家好网站分页样式
  • 外贸建站网站建设深圳美容网站建
  • 电商网站构建网站如何做信誉认证
  • 用html做班级网站中国建设银行官网站基金查询
  • 重庆黄埔建设集团网站安吉做企业网站
  • 南宁百度 - 网站正在建设中做自己头像的网站
  • 做视频好用的素材网站网站建设服务外包
  • android软件开发工程师seo网站建站公司的主页
  • 医院网站建设合同范本网站空间送域名价格表
  • 建设银行官网网站首页纪念币预约solidworks永久免费版
  • 平湖市建设局网站网站开发外包售后维护合同范本
  • 云起时网站建设潘虎设计公司
  • 网站建设流程报告一个门户网站源码
  • 合肥大型网站设计设计 企业网站
  • 哪个公司做网站凡科建站可以多人协作编辑吗
  • 微网站的图标怎么做自动的网站设计制作
  • 辽宁省住房与城乡建设厅网站苏州集团网站制作开发
  • 建设部网站备案建设银行网站进不去
  • 自建网站餐饮服务提供者百度关键词点击工具
  • 大连模板网站制作价格网页设计的交流网站
  • 做网站编辑需要经验吗wordpress最新文章字段