Skip to content

RAG 命令行工具#

一个常见的使用场景是与大型语言模型(LLM)讨论您本地计算机上保存的文件。

我们开发了一个CLI工具来帮助您实现这一需求!您可以将rag CLI工具指向本地保存的一组文件,它会将这些文件摄取到本地向量数据库中,然后在终端中用于聊天问答交互。

默认情况下,该工具使用OpenAI进行嵌入和LLM处理,以及本地Chroma向量数据库实例。警告:这意味着默认情况下,使用此工具摄取的本地数据_将会_被发送到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 [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(s) or directory you want to ask a question about,such
                        as "file.pdf". Supports globs like "*.py".
  -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密钥已设置为OPENAI_API_KEY环境变量。
    $ 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 "LlamaIndex是什么?"
    LlamaIndex是一个数据框架,帮助在基于LLM的应用中摄取、构建和访问私有或特定领域数据。它提供诸如从各种来源摄取数据的数据连接器、构建数据的数据索引以及自然语言访问数据的引擎等工具。LlamaIndex采用检索增强生成(RAG)方法,从数据源检索信息,将其作为上下文添加到问题中,然后要求LLM基于丰富的提示生成答案。这种方法克服了微调LLM的局限性,为数据增强提供了更具成本效益、更新及时且可靠的解决方案。LlamaIndex设计面向初级和高级用户,提供易于使用的高级API和可定制扩展的低级API。
    
  4. 开启聊天交互界面:您甚至可以在终端中打开一个聊天界面!只需运行$ 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

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

✔ 您的项目名称是?  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工具,您可以简单地创建一个脚本,实例化RagCLI类,并配置您自己的IngestionPipelineQueryPipeline。然后,您只需在脚本中运行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文件中删除.py扩展名