RAG应用实践-基于大模型构建知识库(Java版本)

目前大部分基于大模型的应用都是用python写的,本文使用java实现一个基于大模型的知识库(RAG系统)。

一、技术栈

1.1 开发框架:SpringBoot、langchain4j

1.2 数据库: Postgresql(需要安装pgvector插件以支持向量数据)

1.3 嵌入模型(embedding model):all-minilm-l6-v2、e5-small-v2、bge-small-en、bge-small-zh

1.4 大语言模型(LLM):GPT

二、RAG基本流程

主要分为两步:

步骤一:知识库数据预处理(向量化)

由分词器将知识切块,再交由embeding model向量化,接着将向量数据存储向量数据库中(此时我们将这些数据存储到postgres中)

Ingestion

步骤二:用户提问

用户提问(搜索)这一流程也可以分为两步:

  • 文档召回:用户的问题交由embedding model向量化,并从向量数据库中进行近似搜索,返回匹配的top k个向量数据(此时通常将对应的文本块也一并返回)

  • 向LLM提问:程序自动将匹配的内容与用户问题组装成一个Prompt,向大语言模型提问,大语言模型返回答案

Retrieval

三、代码

知识库预处理核心代码:

EmbeddingStoreIngestor.builder()
 .documentSplitter(documentSplitter)
 .embeddingModel(embeddingModel)
 .embeddingStore(embeddingStore)
 .build()
 .ingest(document);

用户提问逻辑核心代码:

ContentRetriever contentRetriever = EmbeddingStoreContentRetriever.builder()
                .embeddingStore(embeddingStore)
                .embeddingModel(embeddingModel)
                .maxResults(2) // on each interaction we will retrieve the 2 most relevant segments
                .minScore(0.5) // we want to retrieve segments at least somewhat similar to user query
                .build();
CustomerSupportAgent agent = AiServices.builder(CustomerSupportAgent.class)
                .chatLanguageModel(chatModel)
                .contentRetriever(contentRetriever)
                .chatMemory(chatMemory)
                .build();
agent.answer("用户的问题");

四、最终效果

4.1 上传知识库文件

4.2 文本分块并向量化

向量数据

4.3 搜索效果

完整代码见:GitHub - moyangzhan/langchain4j-aideepin: JAVA版本的检索增强(RAG)大模型知识库项目

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值