基于LlamaIndex构建RAG应用

Llamaindex中使用百炼提供的检索增强服务

开始

前提条件

  • 您需要已获取API Key配置API Key到环境变量

  • 如果需要指定业务空间,还要获取指定业务空间的“业务空间ID”。具体操作,请参见如何使用业务空间

  • Python编程工具的终端中执行以下命令安装DashScopeCloudIndex的安装包(您的Python版本要求:>=3.8 且 <=3.12)

    pip install llama-index-core
    pip install llama-index-llms-dashscope
    pip install llama-index-indices-managed-dashscope

文件解析

准备您的知识库文件,可以将所有文件放在一个文件夹中也可以是多个独立的文件。目前支持的文件格式是docx、doc、pdf。准备好之后,使用DashScopeParse进行解析。

import os

from llama_index.readers.dashscope.base import DashScopeParse
from llama_index.readers.dashscope.utils import ResultType

os.environ['DASHSCOPE_API_KEY'] = "<Your API Key>"
os.environ['DASHSCOPE_WORKSPACE_ID'] = "<Your Workspace id, Default workspace is empty.>"

# 多个独立文件
file = [
    # 需要解析的文件,支持pdf,doc,docx
]
parse = DashScopeParse(result_type=ResultType.DASHSCOPE_DOCMIND)
documents = parse.load_data(file_path=file)

# 使用SimpleDirectoryReader读取文件夹下所有文件
from llama_index.core import SimpleDirectoryReader
parse = DashScopeParse(result_type=ResultType.DASHSCOPE_DOCMIND)
file_extractor = {".pdf": parse, '.doc': parse, '.docx': parse}
documents = SimpleDirectoryReader(
    "your_folder", file_extractor=file_extractor
).load_data(num_workers=1)

上传成功后,您可以登录阿里云百炼控制台在左侧导航栏中,选择数据管理数据管理非结构化数据页签下查看上传后的文档。

image

创建索引

使用得到的documents创建知识库索引。

from llama_index.indices.managed.dashscope import DashScopeCloudIndex

# create a new index
index = DashScopeCloudIndex.from_documents(
    documents,
    "my_first_index",
    verbose=True,
)

创建成功后,您可以在左侧导航栏中,选择数据应用 > 知识索引知识库索引页面查看已创建成功的索引。

image

读取索引

您可以使用知识库名称在Llamaindex中初始化您创建好的知识索引。

index = DashScopeCloudIndex("my_first_index")

获得retriever

您可以从index对象中快速获得您的retriever,或者使用知识库名称初始化您的DashScopeCloudRetriever。

# convert from index
retriever = index.as_retriever()

# initialize from DashScopeCloudRetriever
from llama_index.indices.managed.dashscope.retriever import DashScopeCloudRetriever
retriever = DashScopeCloudRetriever("my_first_index")

nodes = retriever.retrieve("my query")

获得query engine

from llama_index.llms.dashscope import DashScope, DashScopeGenerationModels

dashscope_llm = DashScope(
  model_name=DashScopeGenerationModels.QWEN_MAX, api_key=os.environ["DASHSCOPE_API_KEY"]
)

query_engine = index.as_query_engine(llm=dashscope_llm)

从索引新增/删除文档

# add documents to index
index._insert(documents)
# delete documents from index
index.delete_ref_doc([doc_id])