本文共 1134 字,大约阅读时间需要 3 分钟。
从 langchain.document_loaders 导入相关加载器,根据文件格式选择合适的文档加载器进行文件加载。文件分块采用 langchain.text_splitter 的 RecursiveCharacterTextSplitter,支持文档块的分割和重叠设置。# 加载和分块文档def load_and_split_documents(file_path): 输入文件路径进行有效性检查,确保文件路径存在且为有效文件。 根据文件扩展名选择合适的加载器:.pdf 使用 PyPDFLoader,.docx 使用 Docx2txtLoader,.txt 使用 TextLoader。 载入文档块并输出加载结果。 对文档块进行分块处理,设置每个文档块的字符数量和重叠数量,输出分块结果。# 使用 Ollama 的 nomic-embed-text 生成嵌入class NomicEmbedText(Embeddings): 初始化 Ollama 嵌入模型,设置默认嵌入模型和服务地址。 实现 embed_query 方法,发送嵌入请求并处理响应。 实现 embed_documents 方法,批量嵌入文本内容。# 创建向量存储并保存到本地def create_vector_store(chunks, save_path="faiss_向量库"): 使用 NomicEmbedText 嵌入模型对文档块进行嵌入计算。 提取文档块的嵌入向量,并与文档块信息封装到 FAISS 向量存储中。 保存 FAISS 向量库到本地文件系统,输出保存路径。# 设置 RAG 管道def setup_rag_pipeline(vector_store): 初始化 Ollama 模型,指定模型名称和服务地址。 创建 RetrievalQA 管道,设置链类型和检索器参数,输出RAG管道实例。# 查询 RAG 管道def query_rag_pipeline(qa_pipeline, question): 对输入问题使用 RAG 管道进行检索,输出检索结果。# 主函数def main(): 输入文件路径,检查文件是否存在。 调用 load_and_split_documents 加载和分块文档。 调用 create_vector_store 创建并保存向量库。 调用 setup_rag_pipeline 设置 RAG 管道。 调用 query_rag_pipeline 对问题进行检索,输出检索结果。
转载地址:http://moqfk.baihongyu.com/