【Azure 架构师学习笔记 】- Azure AI(23) -AI知识库Agent平台(2)-文档向量化与向量库存储
本文属于【Azure 架构师学习笔记】系列。本文属于【Azure AI】系列。接上文 【Azure 架构师学习笔记 】- Azure AI(22) -AI知识库Agent平台1- 项目启动及基础搭建前言在上一篇内容中我们已经完成了整个项目的环境底座搭建成功配置并连接了 Azure OpenAI 服务。实现了文本向量生成与大模型对话功能。同时完成了 Milvus 向量数据库的连接验证。本文开始我们正式进入 RAG 架构的核心环节 ——文档处理与向量入库。这一步是 AI 知识库能够理解并应用文档知识的关键我们会将本地的文本文件转化为向量数据并存储到 Milvus 中让静态的文档变成 AI 可以快速检索、调用的知识资源。核心目标核心工作分为四步读取本地文档内容对长文本进行智能分段处理调用 Azure Embedding 模型生成向量将文本片段与对应向量存入 Milvus 向量库完成这一步后我们的系统就具备了知识录入的能力这是 AI 能够基于文档回答问题的前提核心流程简单来说就是把人类能看懂的文字转换成 AI 能理解、能检索的向量数据永久存储在向量库中。向量库简介向量库就像给每段文字做一张独一无二的 “语义身份证”把文字变成一串数字。它能快速算出两段文字的意思像不像比普通数据库快得多、准得多专门用来给 AI 找相关知识。简单说向量库就是AI 的高效记忆仓库。Milvus 是一款专为向量数据设计的开源数据库专注于高效存储和快速检索 AI 生成的向量。它能在海量数据中快速找到语义相似的内容是构建检索、推荐、RAG 知识库系统的主流底层工具。代码实现我们新建一个文档处理模块基于上一篇已经封装好的 Azure 客户端和 Milvus 客户端进行开发无需重复编写基础连接代码。文档处理核心代码新建文件 document_processor.pyimportosimportrefromtypingimportListfromutils.loggerimportloggerfromllm.azure_llmimportAzureLLMfromstorage.milvus_clientimportMilvusStorageclassDocumentProcessor:def__init__(self):# 复用前一初始已经初始化的AI客户端与向量库客户端self.llmAzureLLM()self.milvusMilvusStorage()defload_text_file(self,file_path:str)-str:读取本地文本文件兼容UTF-8与GBK编码try:withopen(file_path,r,encodingutf-8)asf:returnf.read()except:withopen(file_path,r,encodinggbk)asf:returnf.read()defsplit_text(self,text:str,max_chunk_size:int500)-List[str]:智能文本分段按标点拆分保证段落语义完整# 清理多余换行符textre.sub(r\n,\n,text)# 按照句号、问号、换行符等分割句子sentencesre.split(r(?[。\n]),text)chunks[]current_chunk# 拼接句子控制单段长度forsentenceinsentences:iflen(current_chunk)len(sentence)max_chunk_size:current_chunksentenceelse:ifcurrent_chunk:chunks.append(current_chunk.strip())current_chunksentence# 添加最后一段内容ifcurrent_chunk:chunks.append(current_chunk.strip())returnchunksdefprocess_and_store(self,file_path:str):文档处理主流程读取→分段→向量化→入库logger.info(f开始处理文件{file_path})# 读取文档内容textself.load_text_file(file_path)logger.info(文件读取完成)# 文本分段处理chunksself.split_text(text)logger.info(f文本分段完成共计{len(chunks)}个段落)# 批量生成向量并入库forindex,chunkinenumerate(chunks):vectorself.llm.get_embedding(chunk)self.milvus.insert(textchunk,vectorvector,sourcefile_path,chunk_idindex)logger.info(f第{index1}段内容入库成功)logger.info(✅ 全部文档处理完成知识已存入向量库)if__name____main__:# 执行文档处理processorDocumentProcessor()processor.process_and_store(test.txt)测试文档准备在项目根目录新建 test.txt写入任意你想要让 AI 学习的文本内容比如企业AI知识库能够帮助团队快速检索内部文档与经验知识。系统采用RAG技术架构将文档分割为合理长度的片段通过向量模型转化为数值向量。用户提出问题时系统会从向量库中匹配最相关的内容结合大模型生成精准的回答。向量数据库Milvus负责高效存储和检索向量数据保证响应速度与检索精度。运行与验证确保第一天的 Milvus 服务保持运行在cmd命令下导航到文件所在目录执行命令python document_processor.py预期运行结果文件读取完成文本分段完成共计4个段落第1段内容入库成功第2段内容入库成功第3段内容入库成功第4段内容入库成功✅ 全部文档处理完成知识已存入向量库看到这个结果代表第二天的功能已经完全实现。可以用下面的Python代码查看向量数据库的内容在根目录创建一个文件check_milvus.pyfromstorage.milvus_clientimportMILVUS_CLIENTdefcheck_milvus_data():# 集合名称coll_nameenterprise_knowledge_base# 查看集合是否存在has_collMILVUS_CLIENT.client.has_collection(coll_name)print(集合是否存在,has_coll)# 统计数据条数countMILVUS_CLIENT.client.query(collection_namecoll_name,filter,output_fields[count(*)])print(数据总条数,count)# 查询前 5 条数据查看真实文本resMILVUS_CLIENT.client.query(collection_namecoll_name,filter,output_fields[id,text,doc_name],limit5)print(\n 前 5 条数据 )foriteminres:print(fID:{item[id]})print(f文档:{item[doc_name]})print(f文本:{item[text][:100]})print(-*50)if__name____main__:check_milvus_data()小结文本分段的重要性我们没有直接将整篇文档存入向量库而是做了分段处理。合理的段落长度500 字符左右既能保证语义完整又能让向量检索更精准是 RAG 系统效果的关键。向量的作用每一段文本都会生成一个 3072 维的向量这个向量是文本的语义特征表示语义相似的文本对应的向量在数学空间中距离更近。架构复用价值我们完全复用了第一天的 Azure OpenAI 和 Milvus 客户端这是标准化项目开发的优势基础服务只编写一次后续所有功能都可以直接调用大幅提升开发效率。阶段成果至此我们已经完成了基础环境搭建 服务连接验证 和 文档处理 文本向量化 向量库存储系统已经具备了知识录入的能力下一篇我们将实现最核心的功能用户提问 → 向量检索 → AI 回答完成整个 RAG 系统的闭环。