Phi-3.5-mini-instruct本地知识库构建:PDF/Markdown解析+向量检索全流程

张开发
2026/4/21 6:54:15 15 分钟阅读

分享文章

Phi-3.5-mini-instruct本地知识库构建:PDF/Markdown解析+向量检索全流程
Phi-3.5-mini-instruct本地知识库构建PDF/Markdown解析向量检索全流程1. 项目概述Phi-3.5-mini-instruct是微软推出的轻量级开源指令微调大模型在长上下文代码理解RepoQA、多语言MMLU等基准测试中表现优异显著超越同规模模型部分任务甚至能与更大模型媲美。该模型轻量化部署友好单张RTX 4090显卡即可运行显存占用约7GB非常适合本地或边缘部署场景。本项目将指导您如何基于Phi-3.5-mini-instruct构建本地知识库系统实现PDF/Markdown文档的解析、向量化存储和智能检索全流程。2. 环境准备与快速部署2.1 硬件配置要求GPU: NVIDIA GeForce RTX 409023GB VRAM显存占用: 约7.7GB内存: 建议32GB以上存储: 至少50GB可用空间2.2 基础环境搭建# 创建conda环境 conda create -n phi35 python3.10 -y conda activate phi35 # 安装基础依赖 pip install torch2.8.0cu118 transformers4.57.6 gradio6.6.02.3 模型下载与部署# 下载模型 git clone https://github.com/microsoft/Phi-3.5-mini-instruct.git cd Phi-3.5-mini-instruct # 启动Gradio WebUI python webui.py服务启动后可通过http://localhost:7860访问Web界面。3. 文档解析模块实现3.1 PDF文档解析我们使用PyPDF2和pdfplumber库实现PDF内容提取import pdfplumber from PyPDF2 import PdfReader def extract_text_from_pdf(pdf_path): text with pdfplumber.open(pdf_path) as pdf: for page in pdf.pages: text page.extract_text() return text # 示例使用 pdf_text extract_text_from_pdf(example.pdf) print(f提取到{len(pdf_text)}个字符)3.2 Markdown文档解析对于Markdown文件我们使用markdown库进行解析import markdown from bs4 import BeautifulSoup def parse_markdown(md_path): with open(md_path, r, encodingutf-8) as f: md_content f.read() html markdown.markdown(md_content) soup BeautifulSoup(html, html.parser) return soup.get_text() # 示例使用 md_text parse_markdown(example.md)4. 文本向量化与存储4.1 使用Phi-3.5-mini-instruct生成嵌入向量from transformers import AutoModel, AutoTokenizer import torch model_path /root/ai-models/AI-ModelScope/Phi-3___5-mini-instruct tokenizer AutoTokenizer.from_pretrained(model_path) model AutoModel.from_pretrained(model_path).cuda() def get_embeddings(text): inputs tokenizer(text, return_tensorspt, truncationTrue, max_length512).to(cuda) with torch.no_grad(): outputs model(**inputs) return outputs.last_hidden_state.mean(dim1).cpu().numpy()4.2 向量数据库存储我们使用FAISS实现高效的向量相似度搜索import faiss import numpy as np class VectorDatabase: def __init__(self, dimension768): self.dimension dimension self.index faiss.IndexFlatL2(dimension) self.documents [] def add_document(self, text, embedding): self.documents.append(text) self.index.add(np.array([embedding])) def search(self, query_embedding, k5): distances, indices self.index.search(np.array([query_embedding]), k) return [(self.documents[idx], float(dist)) for idx, dist in zip(indices[0], distances[0])] # 初始化向量数据库 vector_db VectorDatabase()5. 知识库构建全流程5.1 文档处理流程def process_document(file_path, vector_db): if file_path.endswith(.pdf): text extract_text_from_pdf(file_path) elif file_path.endswith(.md): text parse_markdown(file_path) else: raise ValueError(不支持的文件格式) # 分块处理长文本 chunks [text[i:i512] for i in range(0, len(text), 512)] # 生成向量并存储 for chunk in chunks: embedding get_embeddings(chunk) vector_db.add_document(chunk, embedding)5.2 批量处理文档import os def build_knowledge_base(directory, vector_db): for root, _, files in os.walk(directory): for file in files: if file.endswith((.pdf, .md)): file_path os.path.join(root, file) print(f正在处理: {file_path}) process_document(file_path, vector_db) print(f知识库构建完成共存储{len(vector_db.documents)}个文档块)6. 知识检索与问答系统6.1 检索实现def retrieve_information(query, vector_db, top_k3): query_embedding get_embeddings(query) results vector_db.search(query_embedding, ktop_k) print(检索结果:) for i, (doc, score) in enumerate(results, 1): print(f\n结果 {i} (相似度: {1-score:.2f}):) print(doc[:200] ...) return results6.2 问答接口def answer_question(question, vector_db): # 检索相关文档 context retrieve_information(question, vector_db) # 构建提示词 prompt f基于以下上下文回答问题 {context} 问题: {question} 答案: # 使用Phi-3.5-mini-instruct生成答案 inputs tokenizer(prompt, return_tensorspt).to(cuda) outputs model.generate(**inputs, max_length256, temperature0.3) answer tokenizer.decode(outputs[0], skip_special_tokensTrue) return answer7. 系统优化与扩展7.1 性能优化技巧批量处理对多个文档块进行批量向量化GPU加速使用CUDA加速向量计算索引优化使用FAISS的IVF或HNSW索引结构缓存机制缓存已处理文档的向量7.2 功能扩展方向多模态支持添加图片、表格等内容处理增量更新支持知识库的动态更新权限管理实现多用户访问控制历史记录保存查询和交互历史8. 总结本文详细介绍了基于Phi-3.5-mini-instruct构建本地知识库的全流程从PDF/Markdown文档解析到向量化存储再到最终的智能检索和问答系统实现。这个方案具有以下优势轻量化单张RTX 4090显卡即可运行完整系统高效检索FAISS向量数据库提供毫秒级响应本地化所有数据处理和存储都在本地完成保障数据隐私可扩展支持多种文档格式和业务场景通过这套系统您可以轻松构建企业级知识库、个人学习助手或专业文档检索系统充分发挥Phi-3.5-mini-instruct在本地化场景下的强大能力。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章