暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

6行代码入门RAG开发

alitrack 2024-05-10
986

什么是RAG?

检索增强生成(RAG)是指对大型语言模型输出进行优化,使其能够在生成响应之前引用训练数据来源之外的权威知识库。大型语言模型(LLM)用海量数据进行训练,使用数十亿个参数为回答问题、翻译语言和完成句子等任务生成原始输出。在 LLM 本就强大的功能基础上,RAG 将其扩展为能访问特定领域或组织的内部知识库,所有这些都无需重新训练模型。这是一种经济高效地改进 LLM 输出的方法,让它在各种情境下都能保持相关性、准确性和实用性。

更多关于RAG的介绍可以看这篇文章:

什么是RAG(检索增强生成)?

上代码

# 导入必要的类
from llama_index.core import SimpleDirectoryReader
from llama_index.core import VectorStoreIndex
# 加载文档
documents = SimpleDirectoryReader("./data").load_data()
# 创建文档索引
index = VectorStoreIndex.from_documents(documents)
# 创建聊天引擎
chat_engine = index.as_chat_engine(chat_mode="condense_question", verbose=True)
# 执行聊天
print(chat_engine.chat("DuckDB的VSS扩展主要功能, reply in Chinese"))

6行代码入门RAG

输出效果可还满意?这里使用的是 LiteLLM
+ollama
 的私有化模型来模拟 OpenAI
的,详情下次介绍。

上面的代码演示使用的是Vector Similarity Search in DuckDB 的英文原文。

代码解析

  1. 1. 安装必要的包

    pip install llama-index
  2. 2. 导入必要的类

    from llama_index.core import SimpleDirectoryReader
    from llama_index.core import VectorStoreIndex

    • • SimpleDirectoryReader
      :用于从指定目录加载文档的类。

    • • VectorStoreIndex
      :用于创建文档索引的类,它允许基于文档内容进行检索。

  3. 3. 加载文档

    documents = SimpleDirectoryReader("./data").load_data()
    • • 使用SimpleDirectoryReader
      类从当前目录下的./data
      文件夹加载文档。load_data()
      方法将文档加载为一个列表。

  4. 4. 创建文档索引

    index = VectorStoreIndex.from_documents(documents)
    • • 利用VectorStoreIndex
      类和加载的文档列表创建一个索引。这个索引将用于后续的检索和生成回答。

  5. 5. 创建聊天引擎

    chat_engine = index.as_chat_engine(chat_mode="condense_question", verbose=True)
    • • 使用index.as_chat_engine()
      方法创建一个聊天引擎,它将使用索引来生成回答。

    • • chat_mode="condense_question"
      参数指定了聊天引擎的模式,在这个例子中,它将尝试将用户的问题压缩成更简洁的形式。

    • • verbose=True
      参数表示在生成回答的过程中将打印出额外的详细信息。

  6. 6. 执行聊天

    print(chat_engine.chat("DuckDB的VSS扩展主要功能, reply in Chinese"))
    • • 使用chat_engine.chat()
      方法执行一次聊天交互。

llamaindex 简介

LlamaIndex[1] 是一个用于构建 上下文增强型 大型语言模型(LLM)应用程序的框架。上下文增强指的是任何在您的私有或特定领域数据之上应用 LLM 的用例。用例包括:

  • • 提示(Prompting)

  • • 问答(Question-Answering (RAG))

  • • 聊天机器人(Chatbots)

  • • 结构化数据抽取(Structured Data Extraction)

  • • 代理(Agents)

  • • 多模态应用(Multi-Modal Applications)

  • • 微调(Fine-Tuning)

LlamaIndex 提供了工具,使您能够将上述任何用例从原型构建到生产。这些工具允许您同时摄取(处理)这些数据,并实现复杂的查询工作流程,结合数据访问与 LLM 提示。

LlamaIndex 支持 Python 和 Typescript。

LlamaIndex

RAG 步骤拆解


一个最基本的 RAG 可以分解为如下5步:

  1. 1. 查询向量化:将用户查询输入嵌入模型,将自然语言查询转换成一个语义化的嵌入向量,以便于进行后续的数学运算和相似性比较。

  2. 2. 向量数据库查询:将得到的嵌入查询向量输入到向量数据库中,以便进行高效的信息检索。

  3. 3. 上下文检索:在知识库中检索与查询向量距离最近的前k个上下文块。这些上下文块与查询在语义上最为相关,它们将作为生成答案的依据。

  4. 4. 上下文与查询传递:将原始查询文本和检索到的相关上下文文本一起输入到大型语言模型(LLM)中。

  5. 5. 生成响应:利用LLM的强大生成能力,结合查询文本和检索到的上下文,生成一个准确、连贯且信息丰富的响应。

通过这五个步骤,RAG技术能够有效地结合检索和生成两个环节,以提供更加精准和丰富的信息回答。

引用链接

[1]
 LlamaIndex: https://www.llamaindex.ai/


文章转载自alitrack,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论