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

文章目录

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

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对象
python 复制代码
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
python 复制代码
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
python 复制代码
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的使用。

python 复制代码
# 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 执行代码
python 复制代码
    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

相关推荐
浪子小院2 分钟前
ModelEngine 智能体全流程开发实战:从 0 到 1 搭建多协作办公助手
大数据·人工智能
程序员打怪兽5 分钟前
详解YOLOv8网络结构
人工智能·深度学习
Yuer20255 分钟前
全国首例“AI 幻觉”侵权案判了:这不是 AI 准不准的问题,而是谁该为 AI 负责
人工智能·edca os·可控ai
三水不滴7 分钟前
计网ping原理
经验分享·笔记·计算机网络
一切尽在,你来21 分钟前
1.1 AI大模型应用开发和Langchain的关系
人工智能·langchain
prog_610323 分钟前
【笔记】思路分享:各种大模型免费当agent后台
笔记·大语言模型·agent·cursor
Coder_Boy_28 分钟前
基于Spring AI的分布式在线考试系统-事件处理架构实现方案
人工智能·spring boot·分布式·spring
凯尔萨厮39 分钟前
Maven(Windows下载安装)
笔记·maven
wdfk_prog41 分钟前
[Linux]学习笔记系列 -- [drivers][input]serio
linux·笔记·学习
Light6042 分钟前
智链未来:彭山物流园区从物理基建到数据智能体的全维度构建方案
人工智能·系统架构·数字孪生·智慧物流·实施路径·彭山项目