LlamaIndex 高级开发
本文介绍多种索引、检索策略、与外部向量库的集成及 Agent 工作流。
多种索引类型
向量索引(默认)
from llama_index.core import VectorStoreIndex
index = VectorStoreIndex.from_documents(documents)
树索引(层次摘要)
from llama_index.core import TreeIndex
tree_index = TreeIndex.from_documents(documents)
query_engine = tree_index.as_query_engine()
关键词索引
from llama_index.core import KeywordTableIndex
keyword_index = KeywordTableIndex.from_documents(documents)
检索策略
Top-K 与相似度阈值
from llama_index.core.retrievers import VectorIndexRetriever
retriever = VectorIndexRetriever(index=index, similarity_top_k=5)
# 或在 QueryEngine 中配置
query_engine = index.as_query_engine(similarity_top_k=5)
混合检索(Hybrid)
结合向量检索与 BM25 等关键词检索,提高召回质量。
重排序(Reranker)
使用 Cohere、BGE Reranker 等对初筛结果重排,提升精确度。
与外部向量库集成
LlamaIndex 支持 Chroma、Pinecone、Milvus、Qdrant 等:
from llama_index.vector_stores.chroma import ChromaVectorStore
import chromadb
chroma_client = chromadb.Client()
chroma_collection = chroma_client.get_or_create_collection("docs")
vector_store = ChromaVectorStore(chroma_collection=chroma_collection)
index = VectorStoreIndex.from_documents(documents, vector_store=vector_store)
Agent 与工具
将检索封装为工具,供 Agent 调用:
from llama_index.core.tools import QueryEngineTool
from llama_index.core.agent import ReActAgent
tool = QueryEngineTool.from_defaults(query_engine=query_engine, name="knowledge_base")
agent = ReActAgent.from_tools([tool])
response = agent.chat("根据知识库总结...")
子问题分解
from llama_index.core.query_engine import SubQuestionQueryEngine
sub_query_engine = SubQuestionQueryEngine.from_defaults(query_engine=query_engine)
response = sub_query_engine.query("请分别回答:A 是什么?B 与 C 的关系?")