Fastboot Enhance:Windows平台最直观的Android刷机工具箱,告别命令行复杂操作
2026/8/2 0:54:15
langchain1.0学习环境搭建+helloworld
langchain1.0调用deepseek-api
本文介绍了使用langchain1.0读取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)