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

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

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架构师,欢迎私信交流

相关文章

C++与Java“相爱相杀”:一个步步紧逼,一个节节败退

近日,2022年6月TIOBE编程语言排行榜正式发布。不出意外的是,Python继续稳居榜首,C语言、Java、C++、C#分列第2-5位。相比去年同期,C++的占有率大幅提升,而Java的热度和流行...

从事Java开发四年的程序员想再学习一门语言,该选择C还是Python

首先,对于已经从事Java开发工作四年的同学来说,如果想再开一门编程语言,应该结合自己的发展规划来选择C或者是Python,如果未来想进入大数据、人工智能领域发展,选择Python会更方便一些,而且P...

Rust、C语言、Python和Java的本质区别

Rust被设计为能编写操作系统(OS)内核的系统级编程语言,使用静态编译,不采用GC(Garbage Collection)机制。Rust具备现代编程语言的高效率语法,且开发的应用程序具有类似C语言的...

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

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