Skip to content

RAG CLI#

一个常见的用例是与你在本地计算机上保存的文件进行聊天。

我们编写了一个 CLI 工具来帮助你做到这一点!你可以将 rag CLI 工具指向你本地保存的一组文件,它将把这些文件摄入到一个本地向量数据库中,然后在你的终端内用于 Chat 问答环境。

默认情况下,此工具使用 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            显示此帮助消息并退出
  -q QUESTION, --question QUESTION
                        你想要问的问题。
  -f FILES, --files FILES
                        你想要询问问题的文件或目录的名称,比如 "file.pdf"  -c, --chat            如果存在该标志,将打开一个聊天 REPL。
  -v, --verbose         是否在执行过程中打印详细信息。
  --clear               清除当前所有嵌入的数据。
  --create-llama        基于所选文件创建一个 LlamaIndex 应用。

用法#

以下是一些高层次的步骤,帮助你入门:

  1. 设置 OPENAI_API_KEY 环境变量: 默认情况下,此工具使用 OpenAI 的 API。因此,每次使用该工具时,你需要确保在 OPENAI_API_KEY 环境变量下设置了 OpenAI API 密钥。
    $ export OPENAI_API_KEY=<api_key>
    
  2. 摄入一些文件: 现在,你需要将工具指向一些本地文件,以便将其摄入到本地向量数据库中。例如,我们将摄入 LlamaIndex 的 README.md 文件:
    $ llamaindex-cli rag --files "./README.md"
    
    你还可以指定文件通配符模式,例如:
    $ llamaindex-cli rag --files "./docs/**/*.rst"
    
  3. 提问问题: 现在,你可以开始询问有关之前摄入的任何文档的问题了:
    $ llamaindex-cli rag --question "What is LlamaIndex?"
    LlamaIndex 是一个数据框架,可帮助摄入、结构化和访问基于 LLM 的应用程序的私有或领域特定数据。它提供诸如数据连接器以从各种来源摄入数据、数据索引以结构化数据以及用于自然语言访问数据的引擎等工具。LlamaIndex 遵循检索增强生成(RAG)方法,它从数据源中检索信息,将其添加到问题作为上下文,然后要求 LLM 基于丰富的提示生成答案。这种方法克服了对 LLM 进行微调的局限性,并为数据增强提供了一种更具成本效益、最新且可信赖的解决方案。LlamaIndex 面向初学者和高级用户,提供了高级 API 以便于使用,以及用于定制和扩展的低级 API。
    
  4. 打开聊天 REPL: 你甚至可以在终端内打开一个聊天界面!只需运行 $ llamaindex-cli rag --chat,然后开始询问有关你摄入的文件的问题。

创建一个 LlamaIndex 聊天应用#

你还可以基于你选择的文件创建一个具有 FastAPI 后端和 NextJS 前端的全栈聊天应用程序。

要启动该应用程序,请确保你的计算机上已安装了 NodeJS 和 npx。如果没有,请参考 LlamaIndex.TS 文档中的说明。

一旦你设置好了一切,创建一个新应用程序非常简单。只需运行以下命令:

$ llamaindex-cli rag --create-llama

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

 llamaindex-cli rag --create-llama

使用来自 /tmp/rag-data/ 的数据调用 create-llama...

✔ 你的项目叫什么?  my-app
✔ 你想使用哪个模型?  gpt-3.5-turbo
✔ 请提供你的 OpenAI API 密钥(留空以跳过):…
? 你想如何继续?  - 使用箭头键。返回提交。
   仅生成代码(~1 秒)
   生成代码并安装依赖项(~2 分钟)
❯  生成代码,安装依赖项并运行应用程序(~2 分钟)
...
如果您选择生成代码,安装依赖项并运行应用程序(约2分钟)选项,所有依赖项将被安装,并且应用程序将自动运行。然后,您可以通过访问以下地址来访问应用程序:http://localhost:3000。

支持的文件类型#

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

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

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

请参阅下一节,了解如何添加自定义文件读取器以及自定义 CLI 工具的其他方面!

自定义#

rag CLI 工具是高度可定制的!该工具通过组合IngestionPipelineQueryPipeline模块在RagCLI模块中实现。

要创建自己的自定义 rag CLI 工具,您只需创建一个脚本,该脚本实例化了您自己配置的IngestionPipelineQueryPipelineRagCLI类。然后,您只需在您的脚本中运行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


# 可选的,设置您的脚本可能需要的任何 API 密钥(也许使用 python-dotenv 库代替)
os.environ["OPENAI_API_KEY"] = "sk-xxx"

docstore = SimpleDocumentStore()

vec_store = ...  # 您的向量存储实例
llm = ...  # 您的 LLM 实例 - 可选,将默认为 OpenAI gpt-3.5-turbo

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

# 设置自定义 QueryPipeline 是可选的!
# 您仍然可以自定义向量存储、LLM 和摄取转换,而无需自定义 QueryPipeline
custom_query_pipeline = QueryPipeline()
custom_query_pipeline.add_modules(...)
custom_query_pipeline.add_link(...)

# 您可以选择指定自己的自定义读取器以支持其他文件类型。
file_extractor = {".html": ...}

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

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. 注意:如果只想运行命令作为$ my_rag_cli --chat,可以删除my_rag_cli.py文件扩展名。