57.llama_index-查询引擎(显示配置、常见查询引擎)
·
内容参考于:图灵AI大模型全栈
效果图:

代码
from llama_index.core import StorageContext, load_index_from_storage, get_response_synthesizer
from base_llm import llm, embed_model
from llama_index.core.query_engine import RetrieverQueryEngine
from llama_index.core.response_synthesizers.type import ResponseMode
new_storage_context = StorageContext.from_defaults(persist_dir="test")
index = load_index_from_storage(new_storage_context, embed_model=embed_model)
# 创建检索器
retriever = index.as_retriever(
# 让检索器返回similarity_top_k个文档,这里返回2个文档
similarity_top_k=2,
)
# 配置响应合成器
response_synthesizer = get_response_synthesizer(
# 设置响应合成器拼接的模式
response_mode=ResponseMode.TREE_SUMMARIZE,
# 流式响应
streaming=True,
# streaming=False,
# 指定一个大模型,TREE_SUMMARIZE模式会做总结所以要指定一个大模型
llm=llm
)
# 组装查询引擎
query_engine = RetrieverQueryEngine(
# 指定查询引擎使用的检索器
retriever=retriever,
# 指定查询引擎使用的响应合成器
response_synthesizer=response_synthesizer
)
# 提问
response = query_engine.query("萧炎的妹妹叫什么名字?")
# 输出内容
# response.response可以查看大模型通过文档回答的内容,注意get_response_synthesizer里的streaming的值要为False才会有response这个东西
# response.source_nodes可以查看召回chunk,也就是通过文档找到的文档
# response.source_nodes[0].score可以查看相似度
# response.source_nodes[0].node.text可以查看文档的文本内容
# response.source_nodes[0].node.metadata查看metadata信息
# 打印,print方法会调用__str__或__repr__方法获取打印的内容,这里也就是会调用response对象的__str__或__repr__,如果response对象没有__str__方法就调用__repr__
# __repr__方法再Python中是必有的
print(response)
# 它自动流式打印,如果想获取流式的回答可以参考print_response_stream里面实现的逻辑
response.print_response_stream()
# 下方是print_response_stream的源码,它的流式回答的内容是通过获取response里的 response_txt 或 response_gen 来得到的
# 通过下方代码的逻辑可以看出 response_txt 里的内容是完成的回答内容,response_gen里的内容是流式获取的内容
# 但 response_txt 的内容也会流式获取,所以代码中是通过response_gen或response_txt来实现流式打印
#===============================================
# def print_response_stream(self) -> None:
# """Print the response stream."""
# if self.response_txt is None and self.response_gen is not None:
# response_txt = ""
# for text in self.response_gen:
# print(text, end="", flush=True)
# response_txt += text
# self.response_txt = response_txt
# else:
# print(self.response_txt)
#=================================================
常见的查询引擎
| 查询引擎 | 主要角色 | 关键能力 | 处理步骤(简化描述) | 适用任务 | 重要性 |
|---|---|---|---|---|---|
RetrieverQueryEngine |
RAG 基础构件 | 根据检索到的文档内容生成答案 | 接收查询 → 检索相关文档块 → 将上下文交给大模型 → 生成最终回复 | 知识库问答、FAQ、PDF 问答 | ⭐⭐⭐⭐⭐ |
RouterQueryEngine |
查询调度器 | 智能分发查询到最合适的引擎 | 查询输入 → 路由器判断意图 → 根据查询引擎的功能描述选定一个合适查询引擎 → 由该引擎回答问题 | 多知识库、多系统场景 | ⭐⭐⭐⭐⭐ |
NLSQLTableQueryEngine |
数据库智能接口 | 将自然语言请求转成 SQL 查询 | 用自然语言提问 → 使用大模型自动生成 SQL → 执行查询 → 归纳结果并回复 | BI 分析、报表、数据查询 | ⭐⭐⭐⭐⭐ |
TransformQueryEngine |
查询增强层 | 对原始查询进行改写与优化 | 查询输入 → 改写/增强查询 → 再执行检索 | HyDE、跨语言检索 | ⭐⭐⭐ |
RetryQueryEngine |
容错机制 | 查询执行失败时自动尝试重试 | 查询执行 → 检测到失败 → 自动重试(多次)→ 输出应答 | 提升结果召回与稳定性 | ⭐⭐⭐ |

更多推荐

所有评论(0)