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

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

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

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

STEP1: 安装Postgresql+pgvector向量库

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

STEP2: 建设简单的知识库

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

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

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

Bash
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支持历史记录。

Bash
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编程语言入门(java编程语言入门教程)

Java编程语言:驱动Web、移动和企业应用。探索其历史、特性以及开发者喜爱它的原因。今天就学习Java译自 Introduction to Java Programming Language,作者...

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

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

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

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