LlamaIndex 文档1

文章目录

  • 关于 LlamaIndex
    • 🚀 为什么要进行上下文增强?
      • 🦙 为什么使用 LlamaIndex 进行上下文增强?
      • 👨‍👩‍👧‍👦 LlamaIndex 适合谁?
    • 入门
    • 🗺️生态系统
    • 社区
    • 相关项目
  • 高级概念
    • 检索增强生成 (RAG)
    • RAG 中的阶段
    • 每个步骤中的重要概念
      • 装载阶段
      • 索引阶段
      • 查询阶段
      • 把它们放在一起
  • 安装和设置
    • 从 Pip 快速开始安装
      • 重要提示:OpenAI 环境设置
    • 从 Pip 进行自定义安装
    • 从源安装
  • 如何阅读这些文档
    • 在你开始之前
    • 这些文档的结构
  • 入门教程 (OpenAI)
    • 下载数据
    • 设置您的 OpenAI API 密钥
    • 加载数据并建立索引
    • 查询您的数据
    • 使用日志记录查看查询和事件
    • 存储您的索引
  • 入门教程(本地型号)
    • 下载数据
    • 设置
    • 加载数据并建立索引
    • 查询您的数据
  • 探索 LlamaIndex 视频系列
    • 自下而上的开发(Llama Docs Bot)
    • SubQuestionQueryEngine + 10K 分析
    • 不和谐文档管理
    • 联合文本到 SQL 和语义搜索
  • 常见问题 (FAQ)
    • “我想将我的文档解析成更小的块”
    • “我想使用不同的矢量存储”
    • “我想在查询时检索更多上下文”
    • “我想使用不同的LLM ”
    • “我想使用不同的响应模式”
    • “我想将响应流式传输回来”
    • “我想要一个聊天机器人而不是问答”
    • 下一步
  • 入门工具
    • create-llama:全栈 Web 应用程序生成器
    • SEC 见解:高级查询技术
    • Chat LlamaIndex:全栈聊天应用程序
    • LlamaBot:Slack 和 Discord 应用程序
    • RAG CLI:与任何文档进行快速命令行聊天
  • RAG命令行界面
    • 设置
    • 用法
      • 创建 LlamaIndex 聊天应用程序
      • 支持的文件类型
    • 定制化


本文翻译整理自:https://docs.llamaindex.ai/en/stable/


关于 LlamaIndex

LlamaIndex 是一个基于LLM的应用程序的数据框架,该应用程序受益于上下文增强。

这种LLM系统被称为RAG系统,代表“检索增强生成”。

LlamaIndex 提供了必要的抽象,可以更轻松地摄取、构建和访问私有或特定领域的数据,以便将这些数据安全可靠地注入 LLM 中,以实现更准确的文本生成。

它可以在 Python(这些文档)和Typescript中使用。


提示 : 更新到 LlamaIndex v0.10.0?查看迁移指南。


🚀 为什么要进行上下文增强?

LLM 在人类和数据之间提供自然语言界面。
广泛可用的模型是 根据大量公开数据(如维基百科、邮件列表、教科书、源代码等)进行预训练的。

然而,虽然LLM 接受了大量数据的训练,但他们并没有接受您的数据的训练,这些数据可能是私有的或特定于您试图解决的问题。
它隐藏在 API 后面、SQL 数据库中,或者隐藏在 PDF 和幻灯片中。


您可以选择用您的数据微调LLM,但是:

  • 训练LLM 的费用很高
  • 由于训练成本的原因,很难用最新信息更新LLM 。
  • 缺乏可观察性
    当你向LLM 提出问题时,LLM 是如何得出答案的并不明显。

我们可以使用一种称为检索增强生成 (RAG)的上下文增强模式,来获得与您的特定数据相关的更准确的文本生成,而不是进行微调。


RAG 涉及以下高级步骤:

  1. 首先从数据源检索信息,
  2. 将其作为上下文添加到您的问题中,并且
  3. 请LLM 根据丰富的提示进行回答。

通过这样做,RAG 克服了微调方法的所有三个弱点:

  • 无需训练,因此价格便宜
  • 仅当您请求时才会获取数据,因此数据始终是最新的
  • LlamaIndex可以向您显示检索到的文档,因此更值得信赖

🦙 为什么使用 LlamaIndex 进行上下文增强?

首先,LlamaIndex 对您如何使用 LLM 没有任何限制。
您仍然可以将 LLM 用作自动完成、聊天机器人、半自主代理等。
它只会让LLM 与您更相关。

LlamaIndex 提供以下工具来帮助您快速建立可用于生产的 RAG 系统:

  • 数据连接器从其本机源和格式获取现有数据。
    这些可以是 API、PDF、SQL 等等。
  • 数据索引以中间表示形式构建数据,这些中间表示形式对于LLM 来说既简单又高效。
  • 引擎提供对数据的自然语言访问。
    例如:
  • 查询引擎是用于知识增强输出的强大检索接口。
  • 聊天引擎是用于与数据进行多消息、“来回”交互的对话界面。
  • 数据代理是由 LLM 提供支持的知识工作者,并通过工具进行增强,从简单的辅助函数到 API 集成等。
  • 应用程序集成将 LlamaIndex 重新融入生态系统的其余部分。
    这可以是 LangChain、Flask、Docker、ChatGPT,或者……其他任何东西!

👨‍👩‍👧‍👦 LlamaIndex 适合谁?

LlamaIndex 为初学者、高级用户以及介于两者之间的每个人提供工具。

我们的高级 API 允许初学者使用 LlamaIndex 通过 5 行代码获取和查询他们的数据。

对于更复杂的应用程序,我们的较低级别 API 允许高级用户自定义和扩展任何模块(数据连接器、索引、检索器、查询引擎、重新排名模块)以满足他们的需求。


入门

要安装该库:

pip install llama-index

我们建议从如何阅读这些文档开始,这将根据您的经验水平为您指明正确的位置。


🗺️生态系统

要下载或贡献,请在以下位置找到 LlamaIndex:

  • Github
  • PyPi
  • npm (Typescript/Javascript):
  • LlamaIndex.TS Github
  • TypeScript Docs
  • LlamaIndex.TS

社区

需要帮忙?有功能建议吗?加入 LlamaIndex 社区:

  • twitter : https://twitter.com/llama_index
  • discord:https://discord.gg/dGcwcsnxhU

相关项目

  • 🏡 LlamaHub |大量(且不断增长!)的自定义数据连接器集合
  • SEC Insights|由 LlamaIndex 支持的金融研究应用程序
  • 创建 llama|用于快速搭建 LlamaIndex 项目的 CLI 工具

高级概念

这是构建 LLM 应用程序时经常遇到的高级概念的快速指南。

提示:如果还没有,请在阅读本文之前安装 LlamaIndex 并完成 入门教程。
它将有助于将这些步骤融入您的经验中。


检索增强生成 (RAG)

LLM 接受过大量数据的训练,但他们没有接受过您的数据的训练。
检索增强生成 (RAG) 通过将您的数据添加到LLM 已经有权访问的数据中来解决这个问题。
您将在本文档中经常看到对 RAG 的引用。

在 RAG 中,您的数据已加载并准备好用于查询或“索引”。
用户查询作用于索引,索引将数据过滤到最相关的上下文。
然后,此上下文和您的查询连同提示一起转到LLM ,LLM 会提供响应。

即使您正在构建的是聊天机器人或代理,您也会想了解将数据导入应用程序的 RAG 技术。

在这里插入图片描述


RAG 中的阶段

RAG 中有五个关键阶段,这将成为您构建的任何大型应用程序的一部分。
这些是:

  • 加载:这是指将数据从其所在位置(无论是文本文件、PDF、其他网站、数据库还是 API)获取到您的管道中。
    LlamaHub提供数百种连接器可供选择。
  • 索引:这意味着创建一个允许查询数据的数据结构。
    对于LLM 来说,这几乎总是意味着创建vector embeddings数据含义的数字表示,以及许多其他元数据策略,以便轻松准确地找到上下文相关的数据。
  • 存储:一旦数据被索引,您几乎总是希望存储索引以及其他元数据,以避免重新索引。
  • 查询:对于任何给定的索引策略,您可以通过多种方式利用 LLM 和 LlamaIndex 数据结构进行查询,包括子查询、多步查询和混合策略。
  • 评估:任何管道中的关键步骤是检查它相对于其他策略的有效性,或者何时进行更改。
    评估提供客观衡量您对查询的答复的准确性、忠实度和速度的程度。

在这里插入图片描述


每个步骤中的重要概念

您还会遇到一些术语,它们指的是每个阶段中的步骤。


装载阶段

节点和文档:ADocument是任何数据源的容器 - 例如 PDF、API 输出或从数据库检索数据。
ANode是 LlamaIndex 中数据的原子单位,表示源的“块”Document
节点具有将它们与它们所在的文档以及其他节点相关联的元数据。

连接器:数据连接器(通常称为 aReader)将来自不同数据源和数据格式的数据摄取到DocumentsNodes


索引阶段

索引:获取数据后,LlamaIndex 将帮助您将数据索引到易于检索的结构中。
这通常涉及生成vector embeddings存储在称为vector store。索引还可以存储有关数据的各种元数据。

嵌入LLM 生成称为 的数据的数字表示embeddings
在过滤数据的相关性时,LlamaIndex 会将查询转换为嵌入,并且您的向量存储将查找在数字上与查询的嵌入相似的数据。


查询阶段

检索器:检索器定义在给定查询时如何从索引有效检索相关上下文。
您的检索策略对于检索数据的相关性和检索效率至关重要。

路由器:路由器确定将使用哪个检索器从知识库中检索相关上下文。
更具体地说,该类RouterRetriever 负责选择一个或多个候选检索器来执行查询。
他们使用选择器根据每个候选人的元数据和查询来选择最佳选项。

节点后处理器:节点后处理器接收一组检索到的节点并对它们应用转换、过滤或重新排序逻辑。

响应合成器:响应合成器使用用户查询和给定的一组检索到的文本块从 LLM 生成响应。


把它们放在一起

有数据支持的 LLM 应用程序有无数的用例,但它们可以大致分为三类:

查询引擎:查询引擎是一个端到端管道,允许您对数据提出问题。
它接受自然语言查询,并返回响应,以及检索并传递给LLM 的参考上下文。

聊天引擎:聊天引擎是一个端到端的管道,用于与您的数据进行对话(多次来回而不是单个问答)。

代理:代理是由LLM 提供支持的自动化决策者,通过一组工具与世界进行交互。
代理可以采取任意数量的步骤来完成给定的任务,动态地决定最佳的行动方案,而不是遵循预先确定的步骤。
这赋予它额外的灵活性来处理更复杂的任务。


提示

  • 告诉我如何定制东西
  • 通过我们理解的 LlamaIndex指南继续学习
  • 准备好深入挖掘了吗?查看组件指南

安装和设置

LlamaIndex 生态系统是使用命名空间包的集合构建的。

这对用户来说意味着 LlamaIndex 附带一个核心入门包,并且可以根据需要安装其他集成。

我们的临时注册表中提供了软件包和可用集成的完整列表,该注册表很快就会转移到LlamaHub!


从 Pip 快速开始安装

要快速开始,您可以安装:

pip install llama-index

这是一个入门包,包含

  • llama-index-core
  • llama-index-legacy # temporarily included
  • llama-index-llms-openai
  • llama-index-embeddings-openai
  • llama-index-program-openai
  • llama-index-question-gen-openai
  • llama-index-agent-openai
  • llama-index-readers-file
  • llama-index-multi-modal-llms-openai

注意: LlamaIndex 可能会下载并存储各种软件包的本地文件(NLTK、HuggingFace 等)。
使用环境变量 LLAMA_INDEX_CACHE_DIR 来控制这些文件的保存位置。


重要提示:OpenAI 环境设置

默认情况下,我们使用 OpenAIgpt-3.5-turbo模型进行文本生成以及text-embedding-ada-002 检索和嵌入。
为了使用它,您必须将 OPENAI_API_KEY 设置为环境变量。
您可以通过登录您的 OpenAI 帐户并创建新的 API 密钥来获取 API 密钥。

提示:您还可以使用许多其他可用的LLM 之一。
您可能需要额外的环境密钥 + 令牌设置,具体取决于 LLM 提供商。


查看我们的 OpenAI 入门示例 : https://docs.llamaindex.ai/en/stable/getting_started/starter_example/


从 Pip 进行自定义安装

如果您不使用 OpenAI,或者想要更具选择性的安装,您可以根据需要安装单独的软件包。

例如,对于具有 Ollama 和 HuggingFace 嵌入的本地设置,安装可能如下所示:

pip install llama-index-core llama-index-readers-file llama-index-llms-ollama llama-index-embeddings-huggingface

  • 查看我们的本地模型入门示例
  • 此处提供了使用和配置LLM 的完整指南。
  • 此处提供了使用和配置嵌入模型的完整指南。

从源安装

Git 克隆此存储库,然后执行以下操作:

git clone https://github.com/jerryjliu/llama_index.git 

  • 安装 poetry - 这将帮助您管理包依赖项
  • poetry shell- 此命令创建一个虚拟环境,该环境将已安装的软件包包含在该项目中
  • poetry install- 这将安装核心入门包要求
  • (可选)poetry install --with dev, docs-这将安装大多数本地开发所需的所有依赖项

从那里,您可以根据需要使用 来安装集成pip,例如:

pip install -e llama-index-integrations/llms/llama-index-llms-ollama

如何阅读这些文档

欢迎来到 LlamaIndex 文档!无论您在 LlamaIndex、LLM 和生成式 AI 方面的经验水平如何,我们都尽力使这些文档变得平易近人。


在你开始之前

LlamaIndex 是一个 Python 库,因此您应该安装Python并且对如何编写它有基本的了解。
如果您更喜欢 JavaScript,我们建议您尝试我们的TypeScript 包。

我们的许多示例都被格式化为Notebook,即 Jupyter 风格的Notebook。
您不必安装 Jupyter;您可以在Google Colab等托管服务上尝试我们的大多数示例。


这些文档的结构

我们的文档是结构化的,因此您只需向下移动左侧的侧边栏,或者只需点击每个页面底部的“下一个”链接,就可以大致了解进度。

  1. 入门: 您现在所在的部分。
    我们可以帮助您摆脱对 LlamaIndex 和 LLM 的一无所知。
    安装该库 , 用五行代码编写您的第一个演示,了解有关LLM 应用程序的高级概念的更多信息,然后了解如何自定义五行示例来满足您的需求。
  2. 学习: 完成入门部分后,这是下一个要去的地方。
    在一系列简短的教程中,我们将引导您完成构建生产 LlamaIndex 应用程序的每个阶段,并帮助您总体上提高图书馆和LLM 的概念。
  3. 用例: 如果您是一名开发人员,试图弄清楚 LlamaIndex 是否适合您的用例,我们概述了您可以构建的事物类型。
  4. 示例: 我们为几乎所有功能提供了丰富的Notebook示例。
    探索这些内容以查找和了解有关 LlamaIndex 的新内容。
  5. 高级: 已经有了一个可用的 LlamaIndex 应用程序并希望进一步完善它?
    我们的高级部分将引导您完成您应该尝试优化的第一件事,例如通过逐渐更复杂和微妙的自定义来优化您的模型,例如嵌入模型和块大小。
  6. 组件指南: 按照与我们的理解部分构建 LLM 申请相同的顺序排列,这些是关于 LlamaIndex 各个组件以及如何使用它们的全面、较低级别的指南。

入门教程 (OpenAI)

这是我们著名的使用 OpenAI 的“5 行代码”入门示例。


提示:想使用本地模型吗?如果您想仅使用本地模型来完成我们的入门教程,请查看:
https://docs.llamaindex.ai/en/stable/getting_started/starter_example_local/。


下载数据

此示例使用 Paul Graham 的文章 “What I Worked On”的文本。
这个和许多其他示例可以在examples我们的存储库文件夹中找到。

获取它的最简单方法是通过此链接下载它并将其保存在名为 的文件夹中data


设置您的 OpenAI API 密钥

gpt-3.5-turboLlamaIndex默认使用 OpenAI 。
通过将 API 密钥设置为环境变量,确保您的代码可使用您的 API 密钥。
在 MacOS 和 Linux 中,命令如下:

export OPENAI_API_KEY=XXXXX

在 Windows 上是

set OPENAI_API_KEY=XXXXX

加载数据并建立索引

在创建data文件夹的同一文件夹中,创建一个名为starter.pyfile 的文件,其中包含以下内容:

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)

这会在文件夹中的文档上构建索引data(在本例中仅包含论文文本,但可能包含许多文档)。

您的目录结构应如下所示:

├── 启动器.py
└── 数据
    └── paul_graham_essay.txt

查询您的数据

将以下行添加到starter.py

query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
print(response)

这将创建一个针对索引的问答引擎并提出一个简单的问题。
您应该得到类似于以下内容的响应:The author wrote short stories and tried to program on an IBM 1401.


使用日志记录查看查询和事件

想看看幕后发生了什么吗?让我们添加一些日志记录。
将这些行添加到顶部starter.py

import logging
import sys

logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))

您可以将级别设置DEBUG为详细输出,或使用level=logging.INFO较少的输出。


存储您的索引

默认情况下,刚刚加载的数据作为一系列向量嵌入存储在内存中。
您可以通过将嵌入保存到磁盘来节省时间(以及对 OpenAI 的请求)。
这可以用这一行来完成:

index.storage_context.persist()

默认情况下,这会将数据保存到目录中storage,但您可以通过传递参数来更改它persist_dir

当然,除非加载数据,否则您无法获得持久化的好处。
因此,让我们修改starter.py为生成并存储索引(如果不存在),但如果存在则加载它:

import os.path
from llama_index.core import (
    VectorStoreIndex,
    SimpleDirectoryReader,
    StorageContext,
    load_index_from_storage,
)

# check if storage already exists
PERSIST_DIR = "./storage"
if not os.path.exists(PERSIST_DIR):
    # load the documents and create the index
    documents = SimpleDirectoryReader("data").load_data()
    index = VectorStoreIndex.from_documents(documents)
    # store it for later
    index.storage_context.persist(persist_dir=PERSIST_DIR)
else:
    # load the existing index
    storage_context = StorageContext.from_defaults(persist_dir=PERSIST_DIR)
    index = load_index_from_storage(storage_context)

# Either way we can now query the index
query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
print(response)

现在您可以高效地随心所欲地查询了!但这只是 LlamaIndex 功能的开始。

提示

  • 了解有关高级概念的更多信息。
  • 告诉我如何定制东西。
  • 对特定模块感到好奇吗?查看组件指南。

入门教程(本地型号)

提示:确保您首先遵循了自定义安装步骤

这是我们著名的 “5行代码”入门示例,其中包含本地 LLM 和嵌入模型。
我们将使用BAAI/bge-small-en-v1.5作为我们的嵌入模型,并通过Ollama 调用 Mistral-7B 来服务。


下载数据

此示例使用 Paul Graham 的文章 “What I Worked On”的文本。
这个和许多其他示例可以在examples我们的存储库文件夹中找到。

获取它的最简单方法是通过此链接下载它,并将其保存在名为 的文件夹中data


设置

Ollama 是一个帮助您在本地设置 LLM 的工具(目前在 OSX 和 Linux 上受支持。
您可以通过 WSL 2 在 Windows 上安装 Ollama)。

请按照自述文件了解如何安装它。

要加载 Mistral-7B 模型,只需执行以下操作ollama pull mistral

注意:您需要一台至少有 32GB RAM 的机器。


加载数据并建立索引

在创建data文件夹的同一文件夹中,创建一个名为starter.pyfile 的文件,其中包含以下内容:

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.core.embeddings import resolve_embed_model
from llama_index.llms.ollama import Ollama

documents = SimpleDirectoryReader("data").load_data()

# bge embedding model
Settings.embed_model = resolve_embed_model("local:BAAI/bge-small-en-v1.5")

# ollama
Settings.llm = Ollama(model="mistral", request_timeout=30.0)

index = VectorStoreIndex.from_documents(
    documents,
)

这会在文件夹中的文档上构建索引data(在本例中仅包含论文文本,但可能包含许多文档)。

您的目录结构应如下所示:

├── 启动器.py
└── 数据
    └── paul_graham_essay.txt

我们通过 resolve_embed_model 使用BAAI/bge-small-en-v1.5模型 ,它解析为我们的 HuggingFaceEmbedding 类。
我们还使用OllamaLLM 包装器加载 Mistra 模型。


查询您的数据

将以下行添加到starter.py

query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
print(response)

这将创建一个针对索引的问答引擎并提出一个简单的问题。
您应该得到类似于以下内容的响应:The author wrote short stories and tried to program on an IBM 1401.

您可以查看日志、保留/加载索引,类似于我们的入门示例。


提示

  • 了解有关高级概念的更多信息。
  • 告诉我如何定制东西。
  • 对特定模块感到好奇吗?查看组件指南。

探索 LlamaIndex 视频系列

如果您喜欢通过视频学习,现在是查看我们的“Discover LlamaIndex”系列的好时机。
如果没有,我们建议继续学习我们的了解 LlamaIndex教程。


自下而上的开发(Llama Docs Bot)

这是 Discover LlamaIndex 中的一个子系列,向您展示如何从头开始构建文档聊天机器人。

我们向您展示如何以“自下而上”的方式执行此操作 - 首先使用 LLM 和数据对象作为独立模块。
然后逐渐添加更高级别的抽象,例如索引和高级检索器/重新排序器。

完整仓库 [第 1 部分] LLM 和提示 [第 2 部分] 文档和元数据 [第 3 部分] 评估 [第 4 部分] 嵌入 [第 5 部分] 检索器和后处理器


SubQuestionQueryEngine + 10K 分析

该视频介绍了SubQuestionQueryEngine如何将其应用于财务文档,以帮助将复杂的查询分解为多个子问题。

  • YouTube
  • Notebook

不和谐文档管理

该视频介绍了如何管理不断更新的源(即 Discord)中的文档,以及如何避免文档重复并保存嵌入令牌。

  • YouTube
  • Notebook和补充材料
  • 参考文档

联合文本到 SQL 和语义搜索

该视频介绍了 LlamaIndex 中内置的工具,用于将 SQL 和语义搜索组合到单个统一的查询界面中。

  • YouTube
  • Notebook

常见问题 (FAQ)

在本节中,我们从您为入门示例编写的代码开始,并向您展示您可能希望根据您的用例自定义它的最常见方法:

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
print(response)

“我想将我的文档解析成更小的块”

# Global settings
from llama_index.core import Settings

Settings.chunk_size = 512

# Local settings
from llama_index.core.node_parser import SentenceSplitter

index = VectorStoreIndex.from_documents(
    documents, transformations=[SentenceSplitter(chunk_size=512)]
)

“我想使用不同的矢量存储”

首先,您可以安装要使用的矢量存储。
例如,要使用 Chroma 作为矢量存储,您可以使用 pip 安装它:

pip install llama-index-vector-stores-chroma

要了解有关所有可用集成的更多信息,请查看LlamaHub。

然后,您可以在代码中使用它:

import chromadb
from llama_index.vector_stores.chroma import ChromaVectorStore
from llama_index.core import StorageContext

chroma_client = chromadb.PersistentClient()
chroma_collection = chroma_client.create_collection("quickstart")
vector_store = ChromaVectorStore(chroma_collection=chroma_collection)
storage_context = StorageContext.from_defaults(vector_store=vector_store)

StorageContext定义存储文档、嵌入和索引的存储后端。
您可以了解有关存储以及如何自定义存储的更多信息。

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(
    documents, storage_context=storage_context
)
query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
print(response)

“我想在查询时检索更多上下文”

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine(similarity_top_k=5)
response = query_engine.query("What did the author do growing up?")
print(response)

as_query_engine 在索引之上 创建一个默认的retrieverquery engine
您可以通过传入关键字参数来配置检索器和查询引擎。
在这里,我们将检索器配置为 返回前 5 个最相似的文档(而不是默认的 2 个)。
您可以了解有关检索器 和 查询引擎的更多信息。


“我想使用不同的LLM ”

# Global settings
from llama_index.core import Settings
from llama_index.llms.ollama import Ollama

Settings.llm = Ollama(model="mistral", request_timeout=60.0)

# Local settings
index.as_query_engine(llm=Ollama(model="mistral", request_timeout=60.0))

您可以了解有关定制LLM 的更多信息。


“我想使用不同的响应模式”

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine(response_mode="tree_summarize")
response = query_engine.query("What did the author do growing up?")
print(response)

您可以了解有关查询引擎和响应模式的更多信息。


“我想将响应流式传输回来”

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine(streaming=True)
response = query_engine.query("What did the author do growing up?")
response.print_response_stream()

您可以了解有关流式响应的更多信息。


“我想要一个聊天机器人而不是问答”

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_chat_engine()
response = query_engine.chat("What did the author do growing up?")
print(response)

response = query_engine.chat("Oh interesting, tell me more.")
print(response)

了解有关聊天引擎的更多信息。


下一步

  • 想要彻底了解(几乎)您可以配置的所有内容吗?开始了解 LlamaIndex。
  • 想要更深入地了解具体模块?查看组件指南。

入门工具

我们创建了各种开源工具来帮助您启动生成式人工智能项目。


create-llama:全栈 Web 应用程序生成器

create-llama工具是一个 CLI 工具,可帮助您创建全栈 Web 应用程序,并选择前端和后端来索引您的文档并允许您与它们聊天。
运行它就像运行一样简单:

npx create-llama@latest

有关完整文档,请查看npm 上的 create-llama 自述文件。


SEC 见解:高级查询技术

索引和查询财务文件是生成人工智能的一个非常常见的用例。
为了帮助您入门,我们创建并开源了一个全栈应用程序,让您可以选择上市公司多年来的文件,并对它们进行总结和比较。
它使用先进的查询和检索技术来获得高质量的结果。

您可以在SECinsights.ai上自行使用该应用程序或查看GitHub上的代码。

在这里插入图片描述


Chat LlamaIndex:全栈聊天应用程序

Chat LlamaIndex 是另一个全栈开源应用程序,具有多种交互模式,包括流式聊天和图像多模式查询。
这是了解高级聊天应用技术的好方法。
您可以在chat.llamaindex.ai使用它或查看GitHub上的代码。

在这里插入图片描述


LlamaBot:Slack 和 Discord 应用程序

LlamaBot 是另一个开源应用程序,这次用于构建 Slack 机器人,该机器人可以侦听组织内的消息并回答有关正在发生的情况的问题。
您可以查看[GitHub 上的完整教程和代码]https://github.com/run-llama/llamabot)。
如果您更喜欢 Discord,可以选择社区贡献的 Discord 版本。

在这里插入图片描述


RAG CLI:与任何文档进行快速命令行聊天

我们提供了一个命令行工具,可让您快速与文档聊天。
请参阅RAG CLI 文档了解更多信息。


RAG命令行界面

一种常见的用例是与LLM 讨论您本地保存在计算机上的文件。

我们编写了一个 CLI 工具来帮助您做到这一点!您可以将 rag CLI 工具指向您在本地保存的一组文件,它会将这些文件提取到本地矢量数据库中,然后用于终端内的聊天问答 repl。

默认情况下,该工具使用 OpenAI 进行嵌入和 LLM 以及本地 Chroma Vector DB 实例。
警告:这意味着,默认情况下,您使用此工具摄取的本地数据发送到 OpenAI 的 API。

但是,您确实可以自定义此工具中使用的模型和数据库。
这包括在本地运行所有模型执行的可能性!请参阅下面的自定义部分。


设置

要设置 CLI 工具,请确保您已安装该库:

$ pip install -U llama-index

您还需要安装Chroma:

$ pip install -U chromadb

之后,您可以开始使用该工具:

$ llamaindex-cli rag -h
usage: llamaindex-cli rag [-h] [-q QUESTION] [-f FILES] [-c] [-v] [--clear] [--create-llama]

options:
  -h, --help            show this help message and exit
  -q QUESTION, --question QUESTION
                        The question you want to ask.
  -f FILES, --files FILES
                        The name of the file or directory you want to ask a question about,such as "file.pdf".
  -c, --chat            If flag is present, opens a chat REPL.
  -v, --verbose         Whether to print out verbose information during execution.
  --clear               Clears out all currently embedded data.
  --create-llama        Create a LlamaIndex application based on the selected files.

用法

以下是一些帮助您入门的高级步骤:

  1. 设置OPENAI_API_KEY环境变量:

默认情况下,该工具使用OpenAI的API。
因此,

OPENAI_API_KEY

无论何时使用该工具 ,您都需要确保在环境变量下设置 OpenAI API 密钥。

$ export OPENAI_API_KEY=<api_key>

  1. 提取一些文件:

现在,您需要将工具指向一些可以提取到本地矢量数据库中的本地文件。
在此示例中,我们将提取 LlamaIndex

README.md

文件:

$ llamaindex-cli rag --files "./README.md"

您还可以指定文件 glob 模式,例如:

$ llamaindex-cli rag --files "./docs/**/*.rst"

  1. 提出问题

您现在可以开始询问有关您在上一步中获取的任何文档的问题:

$ llamaindex-cli rag --question "What is LlamaIndex?"
LlamaIndex is a data framework that helps in ingesting, structuring, and accessing private or domain-specific data for LLM-based applications. It provides tools such as data connectors to ingest data from various sources, data indexes to structure the data, and engines for natural language access to the data. LlamaIndex follows a Retrieval-Augmented Generation (RAG) approach, where it retrieves information from data sources, adds it to the question as context, and then asks the LLM to generate an answer based on the enriched prompt. This approach overcomes the limitations of fine-tuning LLMs and provides a more cost-effective, up-to-date, and trustworthy solution for data augmentation. LlamaIndex is designed for both beginner and advanced users, with a high-level API for easy usage and lower-level APIs for customization and extension.
  1. 打开聊天 REPL:您甚至可以在终端中打开聊天界面!只需运行$ llamaindex-cli rag --chat 并开始询问有关您所摄取的文件的问题即可。

创建 LlamaIndex 聊天应用程序

您还可以根据您选择的文件创建具有 FastAPI 后端和 NextJS 前端的全栈聊天应用程序。

要引导应用程序,请确保您的计算机上安装了 NodeJS 和 npx。
如果没有,请参阅LlamaIndex.TS文档以获取说明。

一旦完成所有设置,创建新应用程序就很容易了。
只需运行以下命令:

$ llamaindex-cli rag --create-llama

它将调用我们的create-llama工具,因此您需要提供几条信息来创建应用程序。
您可以在npmjs - create-llamacreate-llama上找到更多信息

❯ llamaindex-cli rag --create-llama

Calling create-llama using data from /tmp/rag-data/...

✔ What is your project named? … my-app
✔ Which model would you like to use? › gpt-3.5-turbo
✔ Please provide your OpenAI API key (leave blank to skip): …
? How would you like to proceed? › - Use arrow-keys. Return to submit.
   Just generate code (~1 sec)
   Generate code and install dependencies (~2 min)
❯  Generate code, install dependencies, and run the app (~2 min)
...

如果您选择该选项Generate code, install dependencies, and run the app (~2 min),将安装所有依赖项并且应用程序将自动运行。
然后,您可以通过以下地址访问该应用程序: http://localhost:3000 。


支持的文件类型

在内部,ragCLI 工具使用SimpleDirectoryReader 将本地文件系统中的原始文件解析为字符串。

该模块具有适用于各种文件类型的自定义阅读器。
其中一些可能需要您pip install使用解析该特定文件类型所需的另一个模块。

如果遇到SimpleDirectoryReader没有自定义读取器的文件扩展名的文件类型,它只会将该文件作为纯文本文件读取。

请参阅下一节,了解有关如何添加您自己的自定义文件阅读器 + 自定义 CLI 工具其他方面的信息!


定制化

CLI 工具rag是高度可定制的。
该工具通过在 RagCLI 模块内组合IngestionPipelineQueryPipeline 模块来提供支持。

要创建您自己的自定义 rag CLI 工具,您只需创建一个脚本,RagCLI用您自己配置的IngestionPipeline&实例化该类。
QueryPipeline从那里,您可以简单地rag_cli_instance.cli()在脚本中运行,以针对您自己选择的嵌入模型、LLM、矢量数据库等运行相同的摄取和问答命令。


以下是一些显示一般设置的高级代码:

#!/path/to/your/virtualenv/bin/python
import os
from llama_index.core.ingestion import IngestionPipeline, IngestionCache
from llama_index.core.query_pipeline import QueryPipeline
from llama_index.core.storage.docstore import SimpleDocumentStore
from llama_index.cli.rag import RagCLI

# optional, set any API keys your script may need (perhaps using python-dotenv library instead)
os.environ["OPENAI_API_KEY"] = "sk-xxx"

docstore = SimpleDocumentStore()

vec_store = ...  # your vector store instance
llm = ...  # your LLM instance - optional, will default to OpenAI gpt-3.5-turbo

custom_ingestion_pipeline = IngestionPipeline(
    transformations=[...],
    vector_store=vec_store,
    docstore=docstore,
    cache=IngestionCache(),
)

# Setting up the custom QueryPipeline is optional!
# You can still customize the vector store, LLM, and ingestion transformations without
# having to customize the QueryPipeline
custom_query_pipeline = QueryPipeline()
custom_query_pipeline.add_modules(...)
custom_query_pipeline.add_link(...)

# you can optionally specify your own custom readers to support additional file types.
file_extractor = {".html": ...}

rag_cli_instance = RagCLI(
    ingestion_pipeline=custom_ingestion_pipeline,
    llm=llm,  # optional
    query_pipeline=custom_query_pipeline,  # optional
    file_extractor=file_extractor,  # optional
)

if __name__ == "__main__":
    rag_cli_instance.cli()

从那里,您只需几步即可使用自定义 CLI 脚本:

  1. 确保将顶部的 python 路径替换为您的虚拟环境正在使用的路径*($ which python在激活虚拟环境时运行)*
  2. 假设您将文件保存在/path/to/your/script/my_rag_cli.py
    从那里,您可以使用诸如 之类的行简单地修改 shell 的配置文件*(如.bashrc.zshrc)*$ export PATH="/path/to/your/script:$PATH"
  3. 之后$ chmod +x my_rag_cli.py执行该文件的可执行权限。
  4. 就是这样!您现在只需打开一个新的终端会话并运行$ my_rag_cli.py -h.您现在可以使用相同的参数但使用自定义代码配置来运行脚本!
  5. 注意:如果您只想运行命令,则可以.py从文件中删除文件扩展名my_rag_cli.py``$ my_rag_cli --chat

2024-04-14(日)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/542573.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++引用和右值引用

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

计算机网络 Cisco静态路由实验

一、实验要求与内容 1、路由器的基本配置 &#xff08;1&#xff09;命名 &#xff08;2&#xff09;关闭域名解析 &#xff08;3&#xff09;设置路由接口IP地址 2、配置静态路由以实现所有客户机都能互相通信 3、配置默认路由 4、了解ping命令和trace&#xff08;跟踪…

Bug的定义生命周期

1、bug的定义 你们觉得bug是什么? 软件的Bug狭义概含是指软件程序的漏洞或缺陷&#xff0c; 广义概念除此之外还包括测试工程师或用户所发现和提出的软件可改进的细节(增强性&#xff0c;建议性)、或 与需求文档存在差异的功能实现等。 我们的职责就是&#xff0c;发现这些B…

正则表达式 速成

正则表达式的作用 正则表达式&#xff0c;又称规则表达式,&#xff08;Regular Expression&#xff0c;在代码中常简写为regex、regexp或RE&#xff09;&#xff0c;是一种文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a 到 z 之间的字母&#xff09;和特殊字…

轻量级 S3 协议存储客户端

目前大家一般不会把二进制文件直接放在应用服务器上&#xff0c;而是存在“对象存储”的方案中&#xff0c;例如亚马逊的 AWS&#xff0c;阿里云的 OSS、Cloudflare R2 等。AWS 为最早的始作俑者&#xff0c;因此其 S3 协议也近乎标准化&#xff0c;各大厂商的对象存储方案都实…

【C++类和对象】构造函数与析构函数

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

【grpc】grpc进阶二,grpc认证方式

本章把之前的工程结构改了一下&#xff0c;创建了 server 和 client 两个目录&#xff0c;分别把 server.go&#xff0c;client.go 移动过去。 接下来会介绍 grpc 的 TLS 认证和 Oauth2 一、TLS认证 在进行功能验证是需要使用 openssl 创建自有证书&#xff0c;下面是创建步骤…

Paddle实现人脸对比(二)

我之前发过一篇基于孪生网络的人脸对比的文章&#xff0c;这篇文章也到了百度的推荐位置&#xff1a; 但是&#xff0c;效果并不是很好。经过大量的搜索&#xff0c;我发现了一种新的方法&#xff0c;可以非常好的实现人脸对比。 原理分析 我们先训练一个普通的人脸分类模型&…

关于机器学习/深度学习的一些事-答知乎问(二)

进化算法与深度强化学习算法结合如何进行改进&#xff1f; &#xff08;1&#xff09;进化算法普遍存在着样本效率低下的问题&#xff0c;虽然其探索度较高&#xff0c;但其本质为全局随机性搜索&#xff0c;需要在整个回合结束后才能更新其种群&#xff0c;而深度强化学习在每…

深入理解计算机网络分层结构

一、 为什么要分层&#xff1f; 计算机网络分层的主要目的是将复杂的网络通信过程分解为多个相互独立的层次&#xff0c;每个层次负责特定的功能。这样做有以下几个好处&#xff1a; 模块化设计&#xff1a;每个层次都有清晰定义的功能和接口&#xff0c;使得网络系统更易于设…

023——搭建图形化客户端(基于pySimpleGUI)

目录 一、pysimplegui 1.1 安装 1.2 测试 二、 pysimplegui学习 2.1 学习地址 2.2 人类早期驯服pysimplegui珍贵流水账 三、 实现项目专属的界面 一、pySimpleGUI 1.1 安装 pip install pysimplegui -i https://pypi.tuna.tsinghua.edu.cn/simple Command pip not fo…

GAN:对抗生成网络【通俗易懂】

一、概述 对抗生成网络&#xff08;GAN&#xff09;是一种深度学习模型&#xff0c;由两个神经网络组成&#xff1a;生成器G和判别器D。这两个网络被训练来协同工作&#xff0c;以生成接近真实数据的新样本。 生成器的任务是接收一个随机噪声向量&#xff0c;并将其转换为与真…

【Web】DASCTF X GFCTF 2022十月挑战赛题解

目录 EasyPOP hade_waibo EasyLove BlogSystem EasyPOP 先读hint.php sorry.__destruct -> secret_code::secret() exp: $anew sorry(); $bnew secret_code(); $a->password"suibian"; $a->name"jay"; echo serialize($a); 真暗号啊&…

基于Java停车场管理系统设计与实现(源码+部署文档)

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…

即插即用模块之DO-Conv(深度过度参数化卷积层)详解

目录 一、摘要 二、核心创新点 三、代码详解 四、实验结果 4.1Image Classification 4.2Semantic Segmentation 4.3Object Detection 五、总结 论文&#xff1a;DOConv论文 代码&#xff1a;DOConv代码 一、摘要 卷积层是卷积神经网络(cnn)的核心组成部分。在本文中…

【Java虚拟机】简单易懂的ZGC原理分析

简单易懂的ZGC原理分析 GC垃圾收集器ZGC的特点ZGC相关技术Region染色指针 & 转发表 & 读屏障染色指针转发表读屏障 内存多重映射 ZGC流程详解ZGC与其他垃圾搜集器比较与CMS比较与G1比较 GC垃圾收集器 GC垃圾收集器的作用就是帮我们清理堆内存里面的垃圾&#xff0c;无…

第1章、react基础知识;

一、react学习前期准备&#xff1b; 1、基本概念&#xff1b; 前期的知识准备&#xff1a; 1.javascript、html、css&#xff1b; 2.构建工具&#xff1a;Webpack&#xff1a;https://yunp.top/init/p/v/1 3.安装node&#xff1a;npm&#xff1a;https://yunp.top/init/p/v/1 …

cmake制作并链接动静态库

cmake制作并链接动静态库 制作静态库add_library(库名称 STATIC 源文件1 [源文件2] ...)LIBRARY_OUTPUT_PATH指定库的生成路径 制作动态库add_library(库名称 SHARED 源文件1 [源文件2] ...) 连接动静态库link_libraries连接静态库link_directories到哪个路径去找库target_link…

UnityShader学习计划

1.安装ShaderlabVS,vs的语法提示 2. 常规颜色是fixed 3.FrameDebugger调试查看draw的某一帧的全部信息&#xff0c;能看到变量参数的值