Advertisement

第8章:LangChain检索增强生成RAG--2.3Naive RAG

阅读量:

Naive RAG 是基于某种核心机制的一种基本RAG方法。该方法通过向量搜索从嵌入存储中提取相关信息,并将相关的内容注入到提示(prompt)中以帮助语言模型生成更准确的回答。

Naive RAG(简单 RAG)

一旦我们的文档被获取(参见前面的部分),我们可以通过创建一个 EmbeddingStoreContentRetriever 来启用简单的 RAG(检索增强生成)功能。

当使用 AI 服务时,可以按照以下方式配置简单的 RAG:

复制代码
    ContentRetriever contentRetriever = EmbeddingStoreContentRetriever.builder()
    .embeddingStore(embeddingStore)
    .embeddingModel(embeddingModel)
    .maxResults(5) // 最多返回 5 个结果
    .minScore(0.75) // 最小相似度分数为 0.75
    .build();
    
    Assistant assistant = AiServices.builder(Assistant.class)
    .chatLanguageModel(model) // 使用指定的语言模型
    .contentRetriever(contentRetriever) // 使用配置好的内容检索器
    .build();

深度解析

1. Naive RAG 的核心组件

Naive RAG 的实现依赖于以下核心组件:

  • EmbeddingStore主要负责管理嵌入向量的存储工作,并被广泛称为一种高效的向量数据库解决方案。
  • EmbeddingModel是一种用于生成表示文本内容的数学模型。
  • ContentRetriever是一个提供高效查询功能的工具类组件。

2. 配置 EmbeddingStoreContentRetriever

EmbeddingStoreContentRetriever 是一个专为从嵌入存储中提取和管理数据而设计的工具系统。该工具可通过以下途径进行参数设置:

  • embeddingStore:配置嵌入存储实例。
  • embeddingModel:配置嵌入模型实例。
  • maxResults:请设置最大返回数量。
  • minScore:请设置最低相似度阈值。
复制代码
    ContentRetriever contentRetriever = EmbeddingStoreContentRetriever.builder()
    .embeddingStore(embeddingStore)
    .embeddingModel(embeddingModel)
    .maxResults(5) // 最多返回 5 个结果
    .minScore(0.75) // 最小相似度分数为 0.75
    .build();

3. 配置 AI 服务

在 LangChain4j 系统中可通过 AiServices 开发一个 AI 服务 该服务借助配置好的 ContentRetriever 进行内容搜索 并将搜索结果整合进语言模型的提示字段

复制代码
    Assistant assistant = AiServices.builder(Assistant.class)
    .chatLanguageModel(model) // 使用指定的语言模型
    .contentRetriever(contentRetriever) // 使用配置好的内容检索器
    .build();

4. 示例代码

以下是一个完整的示例,展示如何配置和使用 Naive RAG:

复制代码
    // 创建嵌入存储实例
    EmbeddingStore embeddingStore = new InMemoryEmbeddingStore<>();
    
    // 创建嵌入模型实例
    EmbeddingModel embeddingModel = new OpenAiEmbeddingModel("your-api-key", "text-embedding-ada-002");
    
    // 配置内容检索器
    ContentRetriever contentRetriever = EmbeddingStoreContentRetriever.builder()
    .embeddingStore(embeddingStore)
    .embeddingModel(embeddingModel)
    .maxResults(5) // 最多返回 5 个结果
    .minScore(0.75) // 最小相似度分数为 0.75
    .build();
    
    
    // 配置 AI 服务
    Assistant assistant = AiServices.builder(Assistant.class)
    .chatLanguageModel(model) // 使用指定的语言模型
    .contentRetriever(contentRetriever) // 使用配置好的内容检索器
    .build();
    
    // 使用 AI 服务
    String userMessage = "How to do Naive RAG with LangChain4j?";
    String answer = assistant.chat(userMessage);
    
    System.out.println("Answer: " + answer);

5. 总结

Naive RAG 是一种简洁而高效的RAG方案,在实际应用中尤其适合于迅速部署RAG功能的需求场景。通过配置EmbeddingStoreContentRetriever与AiServices后,则能够方便地将文档内容检索功能整合至AI服务中。尽管这种方案较为基础,在多数情况下仍能展现出足够的效能;特别是在需要快速原型开发和概念验证时,则显得尤为实用和灵活。

官方示例

导读说明:
这是LangChain开发智能体的系列文档,欢迎连读

高级RAG

全部评论 (0)

还没有任何评论哟~