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

[LangChain] 03. 缓存

在实际开发 AI 应用的过程中,我们经常会遇到重复输入的情况:

  • 同一用户多次询问相同的问题
  • 刷新页面或误触按钮触发了相同请求
  • 不同用户提出了内容高度相似的问题

如果每次都让大模型重新生成响应,不仅效率低下,还会带来不必要的计算成本。为了解决这个问题,我们可以引入“缓存机制”。

启用缓存的好处

  1. 提升响应速度:重复问题无需重新调用模型,直接命中缓存结果
  2. 降低调用成本:尤其对于调用远程 LLM(如 GPT-4),可节省大量费用
  3. 避免冗余请求:减少系统负担,提升整体并发性能

要启用缓存,非常简单,只需要在模型实例中一行代码就可以启用:

import { Ollama } from "@langchain/ollama";const model = new Ollama({model: "llama3",cache: true, // 启用缓存机制
});

课堂练习

  1. 快速上手案例

  2. 解决缓存默认使用的哈希算法不够安全的问题

我们在开启缓存的时候,官方会给出提示。未来会更新成更安全的算法。

  1. 流式输出下想要实现缓存
import { Ollama } from "@langchain/ollama";
import { SecureCache } from "./utils.js";// 创建安全缓存实例
const secureCache = new SecureCache();// 配置模型并启用安全缓存
const model = new Ollama({model: "llama3",cache: secureCache, // 使用自定义的安全缓存stream: true,
});async function callWithStreamAndCache(inputText) {const start = Date.now();const stream = await model.stream(inputText);let fullResponse = "";for await (const chunk of stream) {process.stdout.write(chunk); // 实时打印fullResponse += chunk; // 累积结果,用于缓存比较}const end = Date.now();console.log(`\n⏱️ 本次耗时:${end - start}ms`);return fullResponse;
}// 第一次调用(无缓存)
console.log("\n🎯 第一次调用(无缓存):");
await callWithStreamAndCache("请用中文介绍一下AI的影响");// 第二次调用(应命中缓存)
console.log("\n\n🎯 第二次调用(命中缓存):");
await callWithStreamAndCache("请用中文介绍一下AI的影响");

🤔 为什么流式模式下没有命中缓存?

这是因为 LangChain 的默认缓存机制目前只对同步调用接口(如 .invoke().predict())生效。这些方法会在调用前先检查是否存在缓存结果,如果有,就直接返回;否则才会请求模型。

.stream() 方法返回的是一个异步迭代器(AsyncIterable),数据是一块一块地实时生成的。当前在 LangChain.js 的实现中,大多数模型(包括 Ollama)对 .stream() 并未内建完整的缓存处理逻辑

课堂练习

综合案例:实现如下特性:

  • 流式输出
  • 支持缓存
  • 内容高度相似的问题也采用缓存的方式

import { Ollama, OllamaEmbeddings } from "@langchain/ollama";
import cosineSimilarity from "cosine-similarity";const model = new Ollama({model: "llama3",stream: true,
});const embeddings = new OllamaEmbeddings({model: "nomic-embed-text",
});const cache = [];async function callLLM(inputText, threshold = 0.7) {const queryEmbedding = await embeddings.embedQuery(inputText);for (const item of cache) {const similarity = cosineSimilarity(queryEmbedding, item.embedding);if (similarity >= threshold) {process.stdout.write(item.response);return;}}const stream = await model.stream(inputText);let fullResponse = "";for await (const chunk of stream) {process.stdout.write(chunk);fullResponse += chunk;}cache.push({input: inputText,embedding: queryEmbedding,response: fullResponse,});
}// 第一次调用(无缓存)
console.log("\n🎯 第一次调用(无缓存):");
await callLLM("请用中文介绍一下AI的影响,最多200字");// 第二次调用(应命中缓存)
console.log("\n\n🎯 第二次调用(命中缓存):");
await callLLM("请用中文介绍一下AI时代的影响,最多200字");
http://www.hskmm.com/?act=detail&tid=33797

相关文章:

  • 面试 / 答辩总卡壳?这款 AI 面试辅助新功能:上传专属资料,精准应答不翻车
  • C语言编程之旅:从入门到实战
  • 引用
  • 实用指南:大数据毕业设计 python智慧交通监控系统 Flask+Echarts可视化 百度地图 毕业设计(源码)✅
  • Selenium元素定位总失败?这8种定位策略你必须掌握
  • 2025 年钢闸门厂家最新推荐排行榜:涵盖不锈钢 / 渠道 / 河道 / 水库 / 平面 / 手动 / 电动 / 液压钢闸门,聚焦十大实力厂家核心优势
  • 2025 年最新铸铁闸门源头厂家推荐排行榜,涵盖四川 / 镶铜 / 渠道 / 圆形 / 方形等类型,助力一站式采购优质供应商
  • 内存四区
  • 2025 年钢闸门源头厂家最新推荐口碑排行榜:聚焦防腐技术与密封性能,助力水利工程采购精准选型固定卷扬/四川卷扬/螺杆/螺杆式启闭机厂家推荐
  • 2025 年耐火砖厂家最新推荐排行榜:绝热/轻质/莫来石等类型优质厂家权威榜单发布氧化铝泡沫/氧化铝空心球/抗渗碳/高温轻质莫来石耐火砖厂家推荐
  • 【转】[C#] Web API 中的常见层次
  • 【Azure Developer】使用Azure Developer CLI (azd)部署项目时候遇见无法登录中国区Azure的报错
  • 2025 年清污机源头厂家最新推荐榜单:聚焦耐腐蚀与智能清污实力,权威筛选优质品牌供采购参考回转式/回转式格栅/不锈钢/四川清污机厂家推荐
  • Intellij IDEA里的各种快捷键
  • 2025年西安买房推荐与西安学区新房推荐排名前十榜单
  • 2025年西安买房终极指南:十大高性价比楼盘权威推荐
  • AI教育应用隐忧:技术普及与培训缺失
  • JBoltAI 智能混剪:零门槛搞定 “会说话” 的专业视频,新手也能当创作高手 - 那年-冬季
  • Java技术公司如何借力AIGS,开启人工智能融合新篇章? - 那年-冬季
  • AITCA联盟生态:基于JBoltAI框架的产业格局重构前瞻 - 那年-冬季
  • jiangly 模板
  • 基于JBoltAI框架的AITCA联盟生态:渠道商转型与升级的新契机 - 那年-冬季
  • QOJ #14426. Grid Problem 题解
  • 2025 10 18
  • 【Linux】备份
  • 2025年铝单板品牌Top10推荐:行业权威榜单终极指南
  • 题解:洛谷-P8548 小挖的买花
  • QT从入门到放弃
  • 【光照】UnityURP为什么要[Gamma矫正]?
  • 2025年国内木饰面板品牌Top10权威排名及选购指南