石家庄市网站建设_网站建设公司_ASP.NET_seo优化
2026/1/21 17:06:13 网站建设 项目流程

文章目录

  • AI(学习笔记第十五课)从langchain的v0.3到v1.0
    • 1. `langchain v1.0`的`semantic search`
      • 1.1 从`semantic search`开始
      • 1.2 从`pdf loader`开始练习
        • 1.2.1 `pdf file`的准备
        • 1.2.2 `pdf loader`将`pdf`分成`documents`对象
        • 1.3 使用`text splitter`对docs进行`split`
        • 1.4 使用`embeddings`的`model`构建向量库`embeding vector`
    • 2. 执行`vector stores and retrievers`
      • 2.1 使用`InMemoryVector`来保存`vector`
      • 2.2 使用`InMemoryVector`来进行`query`
        • 2.2.1 执行代码
        • 2.2.2 执行结果

AI(学习笔记第十五课)从langchain的v0.3到v1.0

  • langchain v1.0的semantic search
  • Documents and document loaders
  • Text splitters
  • Embeddings
  • Vector stores and retrievers

1. langchain v1.0semantic search

langchain v1.0 learn
从这里开始继续学习。
在这里插入图片描述

1.1 从semantic search开始

示例代码
这里需要解释的是,在前面的文章AI(学习笔记第四课) 使用langchain进行AI开发 load documents(pdf)
中,已经学习过同样的内容,但是全新的langchain v1.0已经开始了,从这里继续学习。在这里插入图片描述

1.2 从pdf loader开始练习

1.2.1 pdf file的准备

示例的代码工程中已经准备好了pdf文件,可以作为示例使用。
langchain_from_v1.0/docs/examples_data/nke-10k-2023.pdf
在这里插入图片描述

1.2.2 pdf loaderpdf分成documents对象
from langchain_core.documents import Document
from langchain_community.document_loaders import PyPDFLoader
def main():
"""Main entry point for the application."""
print("Starting My Python Project...")
file_path = "./docs/examples_data/nke-10k-2023.pdf"
loader = PyPDFLoader(file_path)
docs = loader.load()
print(len(docs))
print(f"{docs[0].page_content[:200]}\n")
print(docs[0].metadata)

这里看到,整个一个pdf文件已经被load成复数的docs

1.3 使用text splitter对docs进行split
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000, chunk_overlap=200, add_start_index=True
)
all_splits = text_splitter.split_documents(docs)
print(len(all_splits))

可见,langchain对文本的处理是基于split之后的chunk的。

  • 每个chunksize可以设定,这里设定成1000
  • 另外这里的chunk_overlap=200也是有意义的,这里表示每个chunk之间的互相overlapsize,因为如果不互相overlap,那么chunk交界的部分很容易就会弄错,因为边界的文本会有很大的关系。
1.4 使用embeddingsmodel构建向量库embeding vector
embeddings = OllamaEmbeddings(
model="nomic-embed-text",
base_url=OLLAMA_BASE_URL)
vector_1 = embeddings.embed_query(all_splits[0].page_content)
vector_2 = embeddings.embed_query(all_splits[1].page_content)
# Example command line arguments
assert len(vector_1) == len(vector_2)
print(f"Generated vectors of length {len(vector_1)}\n")
print(vector_1[:10])

执行结果如下
在这里插入图片描述
可见,每个chunksize1000,但是最终被embeding model向量化之后,每个chunkvector的尺寸就是768,这个vector就代表了这个chunk。这些vector是可以做相似性(cosine similarity)比较。

2. 执行vector stores and retrievers

2.1 使用InMemoryVector来保存vector

在这里插入图片描述
这里可以看到,516chunks都被生成了768的固定长度的vector。接下来学习如何进行InMemoryVector的使用。

# create an empty InMemoryVectorStu'using embeding model
vector_store = InMemoryVectorStore(embeddings)
# add documents into vector store
ids = vector_store.add_documents(documents=all_splits)

2.2 使用InMemoryVector来进行query

2.2.1 执行代码
results = vector_store.similarity_search(
"How many distribution centers does Nike have in the US?"
)
print(results[0])
2.2.2 执行结果

在这里插入图片描述
可见,使用vector store很容易将需要的文本查询到,但是这里还没有使用big model进行分析,还只是使用了embeding model

到这里,从langchain v0.3过渡到了langchain v1.0,接下俩继续学习langchain v1.0

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

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

立即咨询