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 应用。
用法#
以下是一些高层次的步骤,帮助你入门:
- 设置
OPENAI_API_KEY
环境变量: 默认情况下,此工具使用 OpenAI 的 API。因此,每次使用该工具时,你需要确保在OPENAI_API_KEY
环境变量下设置了 OpenAI API 密钥。$ export OPENAI_API_KEY=<api_key>
- 摄入一些文件: 现在,你需要将工具指向一些本地文件,以便将其摄入到本地向量数据库中。例如,我们将摄入 LlamaIndex 的
README.md
文件:你还可以指定文件通配符模式,例如:$ llamaindex-cli rag --files "./README.md"
$ llamaindex-cli rag --files "./docs/**/*.rst"
- 提问问题: 现在,你可以开始询问有关之前摄入的任何文档的问题了:
$ llamaindex-cli rag --question "What is LlamaIndex?" LlamaIndex 是一个数据框架,可帮助摄入、结构化和访问基于 LLM 的应用程序的私有或领域特定数据。它提供诸如数据连接器以从各种来源摄入数据、数据索引以结构化数据以及用于自然语言访问数据的引擎等工具。LlamaIndex 遵循检索增强生成(RAG)方法,它从数据源中检索信息,将其添加到问题作为上下文,然后要求 LLM 基于丰富的提示生成答案。这种方法克服了对 LLM 进行微调的局限性,并为数据增强提供了一种更具成本效益、最新且可信赖的解决方案。LlamaIndex 面向初学者和高级用户,提供了高级 API 以便于使用,以及用于定制和扩展的低级 API。
- 打开聊天 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 工具是高度可定制的!该工具通过组合IngestionPipeline
和QueryPipeline
模块在RagCLI
模块中实现。
要创建自己的自定义 rag CLI 工具,您只需创建一个脚本,该脚本实例化了您自己配置的IngestionPipeline
和QueryPipeline
的RagCLI
类。然后,您只需在您的脚本中运行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 脚本:
- 确保将顶部的 Python 路径替换为您的虚拟环境正在使用的路径(在激活虚拟环境时运行
$ which python
) - 假设您将文件保存在
/path/to/your/script/my_rag_cli.py
。然后,您只需修改您的 shell 配置文件(如.bashrc
或.zshrc
),添加一行$ export PATH="/path/to/your/script:$PATH"
。 - 然后运行
$ chmod +x my_rag_cli.py
,为文件赋予可执行权限。 - 就这样!您现在只需打开一个新的终端会话,并运行
$ my_rag_cli.py -h
。您现在可以使用相同的参数运行脚本,但使用您自定义的代码配置! - 注意:如果只想运行命令作为
$ my_rag_cli --chat
,可以删除my_rag_cli.py
文件扩展名。