当前位置: 首页 > news >正文

# AI(学习笔记第八课) 使用langchain的embedding models

文章目录

  • AI(学习笔记第八课) 使用langchain的embedding models
  • 学习内容:
    • 1.`embedding model`的基本概念
      • 1.1 学习`embedding model url`
      • 1.2 为什么学习`embedding model`
      • 1.3 使用`embedding model`将文本转换成数字向量
        • 1.3.1 最初的代码
        • 1.3.2 执行结果
        • 1.3.3 embed query
    • 2.将`embedding`保存到DB
      • 2.1 将`embedding`保存到DB的代码
      • 2.2 整体逻辑
    • 3.对`db`进行`query`

AI(学习笔记第八课) 使用langchain的embedding models

  • 为什么需要使用embedding models
  • 如何使用embedding models

学习内容:

  • embedding model的基本概念
  • 为什么使用embedding model
  • 如何使用embedding model

1.embedding model的基本概念

1.1 学习embedding model url

  • langchain的embedding models
  • 整体的练习代码
  • 练习文件state of the union

1.2 为什么学习embedding model

embedding model能将文本转换成固定长度(fixed length)的有语义的数组,这样以来,不光能基于文件检索,而是能通过语义检索,对文本进行检索。
在这里插入图片描述

  • 左面蓝字将文本文档document经过embedding model转换成长度相等的数字向量(numerical vector representation)
  • 右面的红字将问题(question)也转换成数字向量(numerical vector representation)
  • 最后对两个数字向量(numerical vector representation)可以进行相似度比较(similarity metric)。

1.3 使用embedding model将文本转换成数字向量

1.3.1 最初的代码
import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)from langchain_ollama import OllamaEmbeddings
from langchain.chains import RetrievalQA
try:# 使用Ollama的嵌入模型embeddings_model = OllamaEmbeddings(base_url='http://192.168.2.208:11434',model="nomic-embed-text")embeddings = embeddings_model.embed_documents(["Hi there!","Oh, hello!","What's your name?","My friends call me World","Hello World!"])print(len(embeddings))print (embeddings[0])except Exception as e:error_msg = f"执行错误: {e}"print(error_msg)  # Continue 会捕获控制台输出
  • 这里将5个英文短句,进行了向量化。
  • 模型采用Ollama的本地模型,这里引入了ollamapython API
1.3.2 执行结果

在这里插入图片描述

  • 五个英文的短句,每个对应的生成了一个数字向量。
  • print (len(embeddings[0])),这里尝试将第一个数字向量的length进行打印,结果是768。
  • 当然,embeddings[1]length也是768,所以说是定长的向量fixed length
1.3.3 embed query

embeding model添加了document之后,可以使用embedding model进行embed query,向量查询了。

 print(len(embeddings))print (len(embeddings[1]))embedded_query = embeddings_model.embed_query("What was the name mentioned in the conversation?")print(embedded_query[:5])

这里使用What was the name mentioned in the conversation?这个句子对embedding vector进行提问。
在这里插入图片描述
这里,结果数组里面有个五元素,分别代表了提出的querydocoment中的5个向量的cosin相似度。

2.将embedding保存到DB

2.1 将embedding保存到DB的代码

from langchain.embeddings import CacheBackedEmbeddings
from langchain.storage import LocalFileStore
from langchain_community.document_loaders import TextLoader
from langchain_ollama import OllamaEmbeddings
import hashlib,os
from langchain_community.vectorstores import FAISSfrom langchain_text_splitters import CharacterTextSplitter# 使用更强的SHA-256编码器
def sha256_encoder(text: str) -> str:return hashlib.sha256(text.encode()).hexdigest()#使用Ollama的嵌入模型
embeddings_model = OllamaEmbeddings(base_url='http://192.168.2.208:11434',model="nomic-embed-text")store = LocalFileStore("C:\\Users\\Dell\\workspace\\ai_example\\cache\\")
cached_embedder = CacheBackedEmbeddings.from_bytes_store(embeddings_model, store,key_encoder=sha256_encoder,
)
current_dir = os.path.dirname(os.path.abspath(__file__))
file_path = os.path.join(current_dir,"state_of_the_union.txt")
raw_documents = TextLoader(file_path,encoding="utf-8").load()
# text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
text_splitter = CharacterTextSplitter(separator=" ",chunk_size=400,chunk_overlap=200,length_function=len,is_separator_regex=False,
)
documents = text_splitter.split_documents(raw_documents)
db = FAISS.from_documents(documents, cached_embedder)
print(list(store.yield_keys())[:5])query = "where did i see the power of hope"
docs = db.similarity_search(query)
print(len(docs))
print(docs[0].page_content)

2.2 整体逻辑

在这里插入图片描述

  • A) 生成cached embedder,并设定embedding store,其实就是设定本地文件(使用db的形式)
  • B) 对cached embedder设定model,这里使用本地的embedding model (ollama本地搭建)
  • C) 使用langchaintext loader对文件进行load
  • D) 使用langchaintext spliter对字符串进行split
  • E) 最后使用cached embedder进行构建embedding store
    代码执行之后,可以看到对本地文件,生成了embedding store
    在这里插入图片描述

3.对db进行query

query = "where did i see the power of hope"
docs = db.similarity_search(query)
print(len(docs))
print(docs[0].page_content

可以看到,这里对文档的query结果相当精确。而且是自然语言程度的匹配。
在这里插入图片描述


文章转载自:

http://TSsaRmLk.LLyqm.cn
http://4wyI5mL8.LLyqm.cn
http://mQSWKoiP.LLyqm.cn
http://axXhlFtq.LLyqm.cn
http://HG0mOMAQ.LLyqm.cn
http://TZbqqIBg.LLyqm.cn
http://TlKF0jMN.LLyqm.cn
http://6keW1ax8.LLyqm.cn
http://EjM5trtt.LLyqm.cn
http://cCd4RHP2.LLyqm.cn
http://V18yANeP.LLyqm.cn
http://KtK4G0K7.LLyqm.cn
http://6pN69VTO.LLyqm.cn
http://C1VvZWGe.LLyqm.cn
http://ggq2BNIz.LLyqm.cn
http://9gez0dNk.LLyqm.cn
http://pZAb5cjz.LLyqm.cn
http://AwqkcsxC.LLyqm.cn
http://xvNXniwh.LLyqm.cn
http://AL8E6hH7.LLyqm.cn
http://hiqOAUac.LLyqm.cn
http://f7SwK4zP.LLyqm.cn
http://yexkDWVq.LLyqm.cn
http://DhSM8Eam.LLyqm.cn
http://v79HpUgJ.LLyqm.cn
http://4nl2oLrt.LLyqm.cn
http://dBB6UNdt.LLyqm.cn
http://ER04KJXj.LLyqm.cn
http://dBLzBY8q.LLyqm.cn
http://aMieuNzT.LLyqm.cn
http://www.dtcms.com/a/380160.html

相关文章:

  • 2025年渗透测试面试题总结-67(题目+回答)
  • 城市二次供水物联网监测管控管理平台御控解决方案:构建全链路智能水务新生态
  • Python Yolo8 物体识别
  • 一款VS Code连接和管理PostgreSQL的扩展插件,支持AI智能辅助和代理模式
  • 数据结构 Part 2
  • 华为云 GaussDB:金融级高可用数据库,为核心业务保驾护航
  • springcloud二-Sentinel2
  • VSCode中的下载VSIX是指什么?
  • VSCode 远程开发连接(glibc<2.28)
  • 公网IP采用自签名证书配置https并消除浏览器不安全告警
  • VSCode创建Python项目和运行py文件
  • 时钟驱动器原理
  • 【Docker】镜像
  • 换源rocklinux和centos
  • FPGA采集AD7606转Aurora 64B66B传输,基于GTY高速收发器,提供工程源码和技术支持
  • 在VSCode中使用Vim模式
  • 告别单次对话:上下文工程如何重塑AI应用架构
  • 字节 Trae vs 腾讯 CodeBuddy vs 阿里 Qoder:三大 AI-IDE 集成 OneCode 深度对比与体验测评
  • 2025软件测试面试大全(含文档)
  • 第6.1节 精准测试Agent简介
  • I.MX6ULL按键实现(轮询及中断)及工程优化
  • 《用 Scikit-learn 构建 SVM 分类模型:从原理到实战的全流程解析》
  • PostgreSQL 的核心优势数据库优化与面试问题解析
  • 基于支持向量机的空间数据挖掘方法及其在旅游地理经济分析中的应用
  • Python 轻松实现替换或修改 PDF 文字
  • Docker命令大全:从基础到高级实战指南
  • 关于数据采集与处理心得(一)
  • 如何高效应对网站反爬虫策略?
  • 华新嘉华发布《GEO生成式引擎优化专业白皮书》,构建生成式AI时代流量运营新范式
  • RabbitMQ在Mac OS上的安装和启动