【LlamaIndex】LlamaIndex与Milvus实现知识库
一、系统概述
本系统基于LlamaIndex框架和Milvus向量数据库实现了一个完整的知识库解决方案,支持从文本或文档创建知识库,并提供高效的语义相似度检索功能。核心功能包括:
- 利用通义千问嵌入模型生成文本向量
- 将向量数据存储到Milvus向量数据库
- 支持文本列表和文档目录两种知识库创建方式
- 提供基于语义的相似度检索能力
技术栈:
- 核心框架:LlamaIndex(数据处理与检索)
- 向量数据库:Milvus(向量存储与相似度计算)
- 嵌入模型:通义千问text-embedding-v4(文本向量化)
- 开发语言:Python 3.x
二、核心组件解析
1. DashScopeEmbedding类(通义千问嵌入模型)
该类继承自LlamaIndex的BaseEmbedding,实现了基于通义千问嵌入模型的文本向量化功能。
核心属性
_client:OpenAI兼容客户端,用于调用通义千问嵌入API
初始化参数
api_key:通义千问API密钥(当前代码中使用默认密钥,实际生产环境需替换)
核心方法
-
同步接口:
_get_query_embedding:生成查询文本的嵌入向量_get_text_embedding:生成单段文本的嵌入向量_get_text_embeddings:生成多段文本的嵌入向量_get_embeddings:底层实现,调用API生成向量(维度1024)
-
异步接口:
_aget_query_embedding/_aget_text_embedding/_aget_text_embeddings:对应同步方法的异步版本_aget_embeddings:通过事件循环实现异步调用
2. MilvusKnowledgeBase类(知识库核心类)
该类封装了知识库的创建、存储和检索功能,是系统的核心业务类。
初始化参数
collection_name:Milvus集合名称(默认:“knowledge_base”)milvus_uri:Milvus服务地址(默认:“http://127.0.0.1:19530”)
核心属性
embed_model:嵌入模型实例(DashScopeEmbedding)vector_store:Milvus向量存储实例(配置维度1024)storage_context:LlamaIndex存储上下文retriever:检索器实例(用于相似度查询)
核心方法
(1)知识库创建
# 从文本列表创建知识库
def create_from_texts(self, texts: List[str]) -> bool:# 将文本转换为Document对象# 通过VectorStoreIndex存储到Milvus# 初始化检索器(top_k=3)
# 从文档目录创建知识库
def create_from_documents(self, documents_directory: str) -> bool:# 使用SimpleDirectoryReader加载目录下的文档# 支持多种格式(依赖LlamaIndex的文档加载器)# 存储到Milvus并初始化检索器
(2)相似度检索
def similarity_search(self, query: str, top_k: int = 5) -> List[dict]:# 调用检索器获取相似节点# 格式化返回结果(文本、相似度分数、元数据)
三、使用流程
1. 初始化知识库
kb = MilvusKnowledgeBase(collection_name="demo_knowledge_base",milvus_uri="http://127.0.0.1:19530"
)
2. 构建知识库
- 从文本列表构建:
sample_texts = ["LlamaIndex是一个用于构建检索增强生成(RAG)应用的数据框架...",# 更多文本...
]
kb.create_from_texts(sample_texts)
- 从文档目录构建:
kb.create_from_documents("./documents_directory") # 目录包含各类文档
3. 执行检索
results = kb.similarity_search("什么是LlamaIndex?", top_k=3)
for i, doc in enumerate(results):print(f"{i+1}. {doc['text']} (相似度: {doc['score']:.4f})")
四、代码执行流程说明
-
初始化阶段:
- 创建DashScopeEmbedding实例,配置通义千问API客户端
- 初始化MilvusVectorStore,指定集合名称、服务地址和向量维度
- 创建StorageContext关联向量存储
-
知识库
