如何在langchain4j中快速使用RAG技术?
LangChain4j 提供了“简单 RAG”功能,使你尽可能轻松使用 RAG。无需学习嵌入技术、选择向量存储、寻找合适的嵌入模型、了解如何解析和拆分文档等操作。只需指向你的文档,LangChain4j 就会自动处理!
导入 langchain4j-easy-rag 依赖
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-easy-rag</artifactId>
<version>${latest}</version>
</dependency>
代码示例(langchain4j 0.35.0)
OpenAiStreamingChatModel model = OpenAiStreamingChatModel.builder()
.baseUrl("****")
.apiKey("***")
.modelName("***")
.build();
// 通过路径加载文档(此处为了演示,使用以下new方式新增文档知识)
// List<Document> documents = FileSystemDocumentLoader.loadDocuments("path");
List<Document> documents = List.of(
Document.from("人往往在做梦的时候会打呼噜"),
Document.from("小猪在睡觉的时候会扭屁股"),
Document.from("有一只蟑螂在床底下跳舞"),
Document.from("小狗在睡觉的时候会磨牙"),
Document.from("我家的小鸡喜欢吃虫子")
);
// 创建一个内存存储器,用于存储文档和其嵌入
InMemoryEmbeddingStore<TextSegment> embeddingStore = new InMemoryEmbeddingStore<>();
// 使用easy-rag,可以最快捷的方式使用rag
EmbeddingStoreIngestor.ingest(documents, embeddingStore);
Assistant assistant = AiServices.builder(Assistant.class)
.streamingChatLanguageModel(model)
.chatMemory(MessageWindowChatMemory.withMaxMessages(10))
.contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
.build();
assistant.chatStream("小猪在睡觉时会干什么")
.onNext(System.out::print)
.onError(throwable -> System.err.println("Error: " + throwable.getMessage()))
.onComplete(chatResponse -> System.out.println("Complete Response: "))
.start();
代码示例(langchain4j 1.0.0-beta1)
// 通过路径加载文档(此处为了演示,使用以下new方式新增文档知识)
// List<Document> documents = FileSystemDocumentLoader.loadDocuments("path");
List<Document> documents = List.of(
new DefaultDocument("人往往在做梦的时候会打呼噜"),
new DefaultDocument("小猪在睡觉的时候会扭屁股"),
new DefaultDocument("有一只蟑螂在床底下跳舞"),
new DefaultDocument("小狗在睡觉的时候会磨牙"),
new DefaultDocument("我家的小鸡喜欢吃虫子")
);
// 创建一个内存存储器,用于存储文档和其嵌入
InMemoryEmbeddingStore<TextSegment> embeddingStore = new InMemoryEmbeddingStore<>();
// 将文档和嵌入存储器进行关联
EmbeddingStoreIngestor.ingest(documents, embeddingStore);
// 创建一个助手接口
interface Assistant {
String chat(String userMessage);
}
ChatLanguageModel chatModel = OllamaChatModel.builder()
.baseUrl("****")
.modelName("***")
.logRequests(true)
.logResponses(true)
.build();
Assistant assistant = AiServices.builder(Assistant.class)
.chatLanguageModel(chatModel)
.chatMemory(MessageWindowChatMemory.withMaxMessages(10))
.contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
.build();
// 问题
String[] questions = new String[]{
"人在做梦的时候会干什么",
"小猪在睡觉的时候会干什么",
"小狗在睡觉的时候会干什么"
};
// 回答
for (String question : questions) {
System.out.println("问题:" + question);
String chat = assistant.chat(question);
System.out.println("回答:" + chat);
}
控制台:
问题:人在做梦的时候会干什么
回答:从您提供的信息来看,人在做梦的时候可能会打呼噜。不过需要注意的是,关于人在做梦时的行为描述,这些信息更可能指的是人在睡眠状态下的某些生理反应或习惯性动作,并不一定与梦境内容直接相关。而小狗在睡觉时会磨牙和小猪在睡觉时会扭屁股,这些通常是动物在无梦状态下的一种自然行为表现。
问题:小猪在睡觉的时候会干什么
回答:小猪在睡觉的时候会扭屁股。
问题:小狗在睡觉的时候会干什么
回答:小狗在睡觉的时候会磨牙。