langchain1.0语义搜索(一)——建立索引
2026/8/2 0:55:37 网站建设 项目流程

系列文章目录

langchain1.0学习环境搭建+helloworld
langchain1.0调用deepseek-api

文章目录

  • 系列文章目录
  • 前言
  • 一、读取pdf
  • 二、分割文本
  • 三、向量化
  • 四、文本段/向量存储
  • 总结

前言

本文介绍了使用langchain1.0读取pdf,分割文本,完成向量化转换并存储到向量库的过程

一、读取pdf

1.使用python读取pdf,需要安装pypdf,在cmd激活conda虚拟环境后,执行pip install pypdf
2.需要在项目目录下准备一个pdf文件(作为练习,不要使用太大文件)

# 1. 读取pdf,按照页来管理,Document,List[Document]fromlangchain_community.document_loadersimportPyPDFLoader file_path="成人肥胖食养指南.pdf"# 文件路径loader=PyPDFLoader(file_path)docs=loader.load()print(len(docs))# 69 页print(type(docs[0]))# <class 'langchain_core.documents.base.Document'>print(docs[0])# page_content='成人肥胖食养指南# (征求意见稿)# 成人肥胖食养指南专家工作组# 2023 年 12 月11 日'# metadata={# 'producer': '',# 'creator': 'WPS 文字',# 'creationdate': '2023-12-12T10:22:23+02:22',# 'author': '袁帆',# 'comments': '',# 'company': '',# 'keywords': '',# 'moddate': '2023-12-12T10:22:23+02:22',# 'sourcemodified': "D:20231212102223+02'22'",# 'subject': '',# 'title': '',# 'trapped': 'False',# 'source': '成人肥胖食养指南.pdf',# 'total_pages': 69,# 'page': 0,# 'page_label': '1'# }

二、分割文本

# 2. 分割文本,文本段(chunk), Document, List[Document]fromlangchain_text_splittersimportRecursiveCharacterTextSplitter text_splitter=RecursiveCharacterTextSplitter(chunk_size=1000,chunk_overlap=200,add_start_index=True)all_splits=text_splitter.split_documents(docs)# List[Documents]print(len(all_splits))# 89print(all_splits[0])# page_content='成人肥胖食养指南# (征求意见稿)# 成人肥胖食养指南专家工作组# 2023 年 12 月11 日'# metadata={# 'producer': '',# 'creator': 'WPS 文字',# 'creationdate': '2023-12-12T10:22:23+02:22',# 'author': '袁帆',# 'comments': '',# 'company': '',# 'keywords': '',# 'moddate': '2023-12-12T10:22:23+02:22',# 'sourcemodified': "D:20231212102223+02'22'",# 'subject': '',# 'title': '',# 'trapped': 'False',# 'source': '成人肥胖食养指南.pdf',# 'total_pages': 69,# 'page': 0,# 'page_label': '1',# 'start_index': 0# }

三、向量化

# 3. 向量化:文本段 <=> 向量,需要嵌入模型来辅助fromlangchain_ollamaimportOllamaEmbeddings embedding=OllamaEmbeddings(model="nomic-embed-text")vector_0=embedding.embed_query(all_splits[0].page_content)print(len(vector_0))# 768,长度跟大模型有关,固定长度print(vector_0)# 768个浮点数组成的list

四、文本段/向量存储

# 4.文本段/向量存储fromlangchain_chromaimportChroma vector_store=Chroma(collection_name="example_collection",embedding_function=embedding,persist_directory="./chroma_langchain_db")ids=vector_store.add_documents(documents=all_splits)print(len(ids))# 89print(ids)# ['001d7dd8-8492-4eb5-9478-bcf5a2ad4fb4', '22e22870-c5b6-417a-8f83-6cd494cf345a', '229e97b4-722e-4b5b-a13b-b544ae8d7257'...]

会在当前目录下创建chroma_langchain_db目录,并创建一个sqllite3文件以及一个包含4个bin文件的uuid名的目录


总结

完整代码如下

# 1. 读取pdf,按照页来管理,Document,List[Document]fromlangchain_community.document_loadersimportPyPDFLoader file_path="成人肥胖食养指南.pdf"loader=PyPDFLoader(file_path)docs=loader.load()print(len(docs))# 69 页print(type(docs[0]))# <class 'langchain_core.documents.base.Document'>print(docs[0])# page_content='成人肥胖食养指南# (征求意见稿)# 成人肥胖食养指南专家工作组# 2023 年 12 月11 日'# metadata={# 'producer': '',# 'creator': 'WPS 文字',# 'creationdate': '2023-12-12T10:22:23+02:22',# 'author': '袁帆',# 'comments': '',# 'company': '',# 'keywords': '',# 'moddate': '2023-12-12T10:22:23+02:22',# 'sourcemodified': "D:20231212102223+02'22'",# 'subject': '',# 'title': '',# 'trapped': 'False',# 'source': '成人肥胖食养指南.pdf',# 'total_pages': 69,# 'page': 0,# 'page_label': '1'# }# 2. 分割文本,文本段(chunk), Document, List[Document]fromlangchain_text_splittersimportRecursiveCharacterTextSplitter text_splitter=RecursiveCharacterTextSplitter(chunk_size=1000,chunk_overlap=200,add_start_index=True)all_splits=text_splitter.split_documents(docs)# List[Documents]print(len(all_splits))# 89print(all_splits[0])# page_content='成人肥胖食养指南# (征求意见稿)# 成人肥胖食养指南专家工作组# 2023 年 12 月11 日'# metadata={# 'producer': '',# 'creator': 'WPS 文字',# 'creationdate': '2023-12-12T10:22:23+02:22',# 'author': '袁帆',# 'comments': '',# 'company': '',# 'keywords': '',# 'moddate': '2023-12-12T10:22:23+02:22',# 'sourcemodified': "D:20231212102223+02'22'",# 'subject': '',# 'title': '',# 'trapped': 'False',# 'source': '成人肥胖食养指南.pdf',# 'total_pages': 69,# 'page': 0,# 'page_label': '1',# 'start_index': 0# }# 3. 向量化:文本段 <=> 向量,需要嵌入模型来辅助fromlangchain_ollamaimportOllamaEmbeddings embedding=OllamaEmbeddings(model="nomic-embed-text")# vector_0 = embedding.embed_query(all_splits[0].page_content)# print(len(vector_0)) # 768,长度跟大模型有关,固定长度# print(vector_0)# 4.文本段/向量存储fromlangchain_chromaimportChroma vector_store=Chroma(collection_name="example_collection",embedding_function=embedding,persist_directory="./chroma_langchain_db")ids=vector_store.add_documents(documents=all_splits)print(len(ids))print(ids)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询