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

CacheBackEmbedding 组件的运行流程和使用注意事项

1. CacheBackEmbedding 的使用与应用场景

背景介绍

使用嵌入模型计算数据向量需要消耗大量算力。对于重复内容,Embeddings 的计算结果是固定的,重复计算不仅效率低下,还会造成资源浪费。

解决方案

LangChain 提供了 CacheBackEmbedding 包装类来解决这个问题。通常通过 from_bytes_store 类方法进行实例化。

资料推荐

  • 💡大模型中转API推荐
  • ✨中转使用教程

主要参数说明

  • underlying_embedder

    • 作用:指定用于嵌入的基础模型
    • 类型:嵌入模型对象
  • document_embedding_cache

    • 作用:用于缓存文档嵌入的存储库
    • 类型:ByteStore
  • batch_size

    • 作用:控制存储更新间的文档嵌入数量
    • 默认值:None
    • 可选参数
  • namespace

    • 作用:文档缓存的命名空间,用于避免缓存冲突
    • 默认值:“”
    • 建议设置为所使用的嵌入模型名称
  • query_embedding_cache

    • 作用:用于缓存查询/文本嵌入的存储库
    • 默认值:None(不缓存)
    • 可设置为 True 以使用与 document_embedding_cache 相同的存储

注意事项

  1. CacheBackEmbedding 默认不会缓存 embed_query 生成的向量
  2. 如需缓存查询向量,需要明确设置 query_embedding_cache 参数
  3. 强烈建议设置 namespace 参数,避免不同嵌入模型间的缓存冲突

示例代码

import dotenv
import numpy as np
from langchain.embeddings import CacheBackedEmbeddings
from langchain.storage import LocalFileStore
from langchain_openai import OpenAIEmbeddings
from numpy.linalg import normdotenv.load_dotenv()def cosine_similarity(vector1: list, vector2: list) -> float:"""计算传入两个向量的余弦相似度"""# 1.计算内积/点积dot_product = np.dot(vector1, vector2)# 2.计算向量的范数/长度norm_vec1 = norm(vector1)norm_vec2 = norm(vector2)# 3.计算余弦相似度return dot_product / (norm_vec1 * norm_vec2)embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
embeddings_with_cache = CacheBackedEmbeddings.from_bytes_store(embeddings,LocalFileStore("./cache/"),namespace=embeddings.model,query_embedding_cache=True,
)query_vector = embeddings_with_cache.embed_query("你好,我是xxx,我喜欢打篮球")
documents_vector = embeddings_with_cache.embed_documents(["你好,我是xxx,我喜欢打篮球","这个喜欢打篮球的人叫xxx","求知若渴,虚心若愚"
])print(query_vector)
print(len(query_vector))print("============")print(len(documents_vector))
print("vector1与vector2的余弦相似度:", cosine_similarity(documents_vector[0], documents_vector[1]))
print("vector2与vector3的余弦相似度:", cosine_similarity(documents_vector[0], documents_vector[2]))

2. CacheBackEmbedding 底层运行流程

核心原理

CacheBackEmbedding 本质是一个封装了持久化存储功能的数据仓库系统。

详细流程

  1. 数据检索

    • 从数据存储仓库中检索对应向量
    • 对输入文本进行匹配查找
  2. 缓存比对

    • 逐个匹配数据是否存在
    • 筛选出缓存中不存在的文本
  3. 向量生成

    • 对未缓存的文本调用嵌入模型
    • 生成新的向量表示
  4. 数据存储

    • 将新生成的向量存入数据仓库
    • 完成向量的持久化存储

工作机制

通过以上流程,CacheBackEmbedding 实现了对重复数据的高效处理,避免了重复计算,提高了系统效率。

资料推荐

  • 💡大模型中转API推荐
  • ✨中转使用教程

图示

在这里插入图片描述

相关文章:

  • Python-MCPAgent开发-DeepSeek版本
  • iOS实名认证模块的具体实现过程(swift)
  • 【C++】16.继承
  • 【东枫科技】使用LabVIEW进行深度学习开发
  • SaaS场快订首页的前端搭建【持续更新】
  • 【每日一题 | 2025年5.5 ~ 5.11】搜索相关题
  • JavaWeb, Spring, Spring Boot
  • 《Go小技巧易错点100例》第三十一篇
  • 画立方体软件开发笔记 js-pytorch xlsx 导出 excel pnpm安装
  • Apache Flink 与 Flink CDC:概念、联系、区别及版本演进解析
  • 【EBNF】EBNF:扩展巴克斯-诺尔范式文件格式与实用写法详解
  • Active-Prompt:结合思维链的主动提示用于大型语言模型
  • ElasticSearch入门详解
  • Git初始化相关配置
  • GO语言内存管理结构
  • Nginx的增强与可视化!OpenResty Manager - 现代化UI+高性能反向代理+安全防护
  • Flutter基础()
  • 【C/C++】无符号调试:GDB解栈实战指南
  • 学习和测试WebApi项目限制客户端ip访问接口(基于中间件)
  • 深度学习入门:从神经网络基础到前向传播全面解析
  • 石家庄推动城市能级与民生福祉并进
  • 乘联分会:上半年车市价格竞争温和,下半年价格战或再开启
  • 阚吉林任重庆市民政局党组书记,原任市委组织部主持日常工作的副部长
  • 开局良好,我国第一季度广告业务收入保持较快增速
  • 前瞻|美联储明晨“按兵不动”几无悬念:关税战阴霾下,会否释放降息信号
  • 外交部介绍中国赞比亚共同举办人工智能能力建设主题活动情况