AI编程之手把手教你使用JAVA语言编写大模型RAG

createh51个月前 (02-01)技术教程13

RAG是通过把本地知识库检索结果和用户的交互信息,一同提交给大模型,由大模型再次加工后,形成最终结果的一个过程。RAG是最简单的使用大模型为我们工作的模式,有着广泛的应用,例如,让大模型成为我们专业领域的客服,让大模型根据我们专业领域知识产生文档等。

本文手把手教你用langchain4j编写一个最简单的RAG。

STEP1: 安装Postgresql+pgvector向量库

请参考我前面的文章: AI编程之手把手教你在CentOS安装Postgresql的Vector向量数据库

STEP2: 建设简单的知识库

请参考我前面的文章: AI编程之手把手教你使用postgresql向量数据库建设知识库JAVA版

STEP3: 编写本地知识库检索代码

本地知识库检索能力,包含建设好的向量库和从向量库里检索知识的能力:

LeoPostgresVectorEmbeddingStore embeddingStore = LeoPostgresVectorEmbeddingStore.builder()
.host(host)
.port(Integer.parseInt(port))
.database(databaseName)
.user(dataBaseUserName)
.password(dataBasePassword)
.dimension(384)
.createTable(true)
.dropTableFirst(false)
.table(tableName)
.build();
int maxResults = 1;
double minScore = 0.6;
EmbeddingModel embeddingModel = new AllMiniLmL6V2EmbeddingModel();
ContentRetriever contentRetriever = EmbeddingStoreContentRetriever.builder()
.embeddingStore(embeddingStore)
.embeddingModel(embeddingModel)
.maxResults(maxResults)
.minScore(minScore)
.build();



STEP4: 编写具体的RAG过程代码

RAG过程需要一个大模型调用,以及本地知识库检索内容。使用langchain4j,这个过程就相对简化很多,而且可以非常方便的通过ChatMemory支持历史记录。

OpenAiChatModel chatModel = OpenAiChatModel.builder().baseUrl("https://xxx.yyy ")
.apiKey("sk-1234567890abcdef").modelName("gpt-3.5-turbo").build();

//建立一个可存储10条历史记录的ChatMemory
ChatMemory chatMemory = MessageWindowChatMemory.withMaxMessages(10);
//通过AiServices实例化一个LLM调用代理
LLMAssistant agent = AiServices.builder(LLMAssistant.class)
.chatLanguageModel(chatModel)
.contentRetriever(contentRetriever) //在调用LLM之前,会自动从本地知识库检索相关知识
.chatMemory(chatMemory)
.build();
String answer = agent.chat("介绍一下五一出游趋势");


STEP5: 看看背后干了啥

我们debug代码,跟踪到发请求前,可以看到,最终调用ChatCompletion接口



背后调用的chat/completion接口。



这个接口有较多的参数可用,常用的有如下几个:

  • temperature: 为0表示让模型不要自我创造,每次返回的结果都一样,为1表示让模型极大的自我创造。
  • n:返回的备选文档条数。
  • message中的:system参数设定AI行为的角色和背景,比如“你是一名算法工程师”;user参数是我们输入的问题,或者请求;assistant参数是一些期待AI回应的示例。

STEP6: 后续

后续将使用Langchain和postgresql实现更多的CASE,敬请关注。


作者简介:

leo,互联网大厂AI架构师,欢迎私信交流

相关文章

Java 17 采用率增长 430%、Java 11 稳居第一,最新 Java 编程语言报告来了!

编译 | 苏宓出品 | CSDN(ID:CSDNnews)1995 年,Sun Microsystem 公司发布了 Java 程序设计语言,为开发现代多媒体应用程序提供了一种更加可移植和交互的方式。从...

不用怀疑,Java的地位确实根深蒂固

编程语言千千万,但在编程江湖屹立不倒的没有几个,Java便是其中的佼佼者。对于Java这种“王者”级别的编程语言,不少人开始讨论“如何推翻Java的统治地位”。看到这个问题,程序员们坐不住了,纷纷表示...

非计算机专业该学习Java还是Python,有哪些不同

首先,从大的层面来看,计算机专业的同学应该重点关注一下Java语言,而非计算机专业的同学应该关注一下Python语言,因为虽然Java和Python都是比较典型的全场景编程语言,但是相对来说,Java...

什么是Java语言(何为java语言)

Java是一种通过解释方式来执行的语言,其语法规则和C++类似。同时,Java也是一种跨平台的程序设计语言。用Java语言编写的程序,可以运行在任何平台和设备上,比如IBM个人电脑、MAC苹果计算机,...