来源:互联网 更新时间:2026-08-11 17:00
自动合并检索的核心思路其实很直观,它利用了

文件一般拆分成三层就够用了,当然也可以继续往下拆,但越往上父块越大,得权衡一下。下图展示了这个召回过程:
下面具体看看怎么用代码实现自动合并检索 RAG。
读取文档这部分之前已经演示过很多次了,这里直接合并成一个 Document 对象:
from llama_index import Document
document = Document(text="
".join([doc.text for doc in documents]))
然后用 HierarchicalNodeParser 把文档解析成父子层次结构。这里指定 chunk 大小分别为 2048、512 和 128,正好对应前面图示的三层:
from llama_index.node_parser import HierarchicalNodeParser
node_parser = HierarchicalNodeParser.from_defaults(
chunk_sizes=[2048, 512, 128]
)
平时开发测试时,可以用 get_leaf_nodes 查看叶子节点(最小子块):
from llama_index.node_parser import get_leaf_nodes
nodes = node_parser.get_nodes_from_documents([document])
leaf_nodes = get_leaf_nodes(nodes)
LLM 使用 OpenAI 的 GPT-3.5-turbo:
from llama_index.llms import OpenAI
llm = OpenAI(model="gpt-3.5-turbo", temperature=0.1)
嵌入模型则用本地的 BAAI/bge-small-en-v1.5:
from llama_index import ServiceContext
auto_merging_context = ServiceContext.from_defaults(
llm=llm,
embed_model="local:BAAI/bge-small-en-v1.5",
node_parser=node_parser,
)
构建 Index 并设置本地持久化:
from llama_index import VectorStoreIndex, StorageContext
storage_context = StorageContext.from_defaults()
storage_context.docstore.add_documents(nodes)
automerging_index = VectorStoreIndex(
leaf_nodes, storage_context=storage_context, service_context=auto_merging_context
)
automerging_index.storage_context.persist(persist_dir="./merging_index")
定义检索器来执行查询。LlamaIndex 提供了高级检索器 AutoMergingRetriever,可以直接拿来用:
from llama_index.indices.postprocessor import SentenceTransformerRerank
from llama_index.retrievers import AutoMergingRetriever
from llama_index.query_engine import RetrieverQueryEngine
automerging_retriever = automerging_index.as_retriever(
similarity_top_k=12
)
retriever = AutoMergingRetriever(
automerging_retriever,
automerging_index.storage_context,
verbose=True
)
rerank = SentenceTransformerRerank(top_n=6, model="BAAI/bge-reranker-base")
auto_merging_engine = RetrieverQueryEngine.from_args(
automerging_retriever, node_postprocessors=[rerank]
)
执行查询并打印结果:
from llama_index.response.notebook_utils import display_response
auto_merging_response = auto_merging_engine.query(
"网络在人工智能中的重要性是什么?"
)
display_response(auto_merging_response)
输出如下:
Final Response:人工智能中的网络至关重要,
因为它允许个人建立一个强大的专业社区,
可以提供有价值的信息、支持和机会。
通过与该领域的其他人建立联系,
个人可以获得指导、建议和潜在的雇主推荐。
此外,网络有助于识别专业知识、
鼓励持续发展并培养人工智能社区内的归属感。
接下来构建两个应用来做对比评估。App0 把文件切成两层,块大小分别 2048 和 512:
auto_merging_index_0 = build_automerging_index(
documents,
llm=OpenAI(model="gpt-3.5-turbo", temperature=0.1),
embed_model="local:BAAI/bge-small-en-v1.5",
sa ve_dir="merging_index_0",
chunk_sizes=[2048,512],
)
auto_merging_engine_0 = get_automerging_query_engine(
auto_merging_index_0,
similarity_top_k=12,
rerank_top_n=6,
)
App1 则切成三层,块大小分别是 2048、512 和 128:
auto_merging_index_1 = build_automerging_index(
documents,
llm=OpenAI(model="gpt-3.5-turbo", temperature=0.1),
embed_model="local:BAAI/bge-small-en-v1.5",
sa ve_dir="merging_index_1",
chunk_sizes=[2048,512,128],
)
auto_merging_engine_1 = get_automerging_query_engine(
auto_merging_index_1,
similarity_top_k=12,
rerank_top_n=6,
)
然后执行评估,并通过 Dashboard 查看结果。可以看到 App1 的
--- END ---
黄金价格不断创新高!黄金稳定币XAU、PAXG市值达11亿美元
新浪机器学习热点小时报丨2026年07月25日18时_今日实时机器学习热点速递
CC币价格预测(2026-2035):Canton币今日价格走势+长期价格预测
新浪互联网热点小时报丨2026年07月26日16时_今日实时互联网热点速递
腾讯ima怎么创建共享知识库?
腾讯ima怎么把微信内容一键导入知识库?
今日比特币暴涨分析:Metaplanet的比特币BTC投资推动股价上涨17%
蚂蚁庄园今日答案7月21日(今日已更新) 蚂蚁庄园今天正确答案是什么呢
区块链OTC交易所有哪几家比较正规?
2026热门直线加速赛车手游推荐:高人气、爽快加速体验的精品榜单
kimi提示词专家使用方法新手指南
Intel喜讯连连:18A工艺良率提升到85%、CPU将涨价15%
原神霜月三处月灵龛具体位置汇总
《幻兽帕鲁》不触发通缉捕捉传说商人方法
Windy卫星云图怎么看?云层变化识别技巧
新浪人工智能热点小时报丨2026年07月30日18时_今日实时人工智能热点速递
为什么推特KOL都在BRC20赚钱 我一冲就亏?
抖音怎么取消申请退货退款?抖音上取消退货怎么操作
一加手机如何设置三指长按屏幕局部截图
合集38个项目筹集5.406亿美元 Figure融资2亿
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc