AI Agent白手起家23: 大模型速率限制应对与缓存机制实践
纲要速率限制的产生背景与影响LangChain 内置速率限制器InMemoryRateLimiter核心参数缓存机制的必要性与原理短期缓存内存与长期缓存持久化实战速率限制与缓存结合项目结构速率限制器配置缓存方案对比内存与 SQLite代码示例关键要点总结速率限制为什么需要关注当前主流大模型提供商OpenAI、DeepSeek、Anthropic 等都会对 API 实施速率限制。例如 OpenAI 对免费用户限制每分钟请求数RPM和每分钟 Token 数TPM付费用户则有更高的配额。一旦请求超过限制API 将返回错误如 429导致应用不可用严重影响用户体验。在 AI Agent 开发中如果不做任何防护高频调用很容易触发限流。因此必须在客户端侧主动实施流量整形确保请求速率始终在安全范围内。LangChain 中的速率限制器LangChain 提供了InMemoryRateLimiter作为内置速率控制组件。它位于langchain_core.rate_limiters模块中通过令牌桶算法限制单位时间内的请求数。核心参数如下参数说明示例requests_per_second每秒允许的最大请求数1.0每秒 1 次或0.1每 10 秒 1 次check_every_n_seconds每隔多少秒检查一次是否允许新请求0.1每 100 毫秒检查max_burst_size允许的最大突发请求数10使用时只需在实例化模型组件时传入rate_limiter参数即可。缓存机制减少不必要的 API 调用除了限制速率缓存也是降低 API 调用频率的有效手段。其流程如下是否用户请求缓存命中?返回缓存结果调用大模型 API获取响应写入缓存LangChain 的缓存分为两种内存缓存InMemoryCache存储在进程内存中重启即失适合短期重用。持久化缓存如基于 SQLite 的实现可长期保存适合跨会话复用。结合速率限制与缓存可以大幅提升应用稳定性和成本效率。项目结构本示例将实现使用InMemoryRateLimiter控制请求频率。对比内存缓存和 SQLite 缓存的实际效果。演示如何通过usage_metadata追踪 Token 消耗验证缓存是否真正减少了 API 调用。目录结构如下├── main.py └── requirements.txt依赖清单requirements.txtlangchain-openai0.3.0 langchain-core0.3.0 langchain-community0.3.0代码示例importos,timefromlangchain_openaiimportChatOpenAIfromlangchain_core.rate_limitersimportInMemoryRateLimiterfromlangchain_core.cachesimportInMemoryCachefromlangchain_community.cachesimportSQLiteCacheimportlangchain# ---------- 1. 配置速率限制器 ----------rate_limiterInMemoryRateLimiter(requests_per_second0.5,# 每 2 秒允许 1 次请求check_every_n_seconds0.1,# 每 0.1 秒检查一次max_burst_size1# 最大突发请求为 1)# ---------- 2. 初始化模型使用 GPT-3.5 以降低成本 ----------llmChatOpenAI(modelgpt-3.5-turbo,temperature0,max_tokens100,api_keyos.getenv(OPENAI_API_KEY),rate_limiterrate_limiter# 注入速率限制器)# ---------- 3. 辅助函数打印 Token 用量 ----------defprint_usage(response):usageresponse.usage_metadataifusage:print(f 输入:{usage.get(input_tokens)}, 输出:{usage.get(output_tokens)}, 总计:{usage.get(total_tokens)})else:print( 未获取到 Token 用量)# ---------- 4. 演示速率限制效果 ----------print( 速率限制演示连续发送 5 个相同请求 )start_timetime.time()prompt用一句话介绍深度学习。foriinrange(5):t0time.time()responsellm.invoke(prompt)t1time.time()print(f请求{i1}: 耗时{t1-t0:.2f}s)print_usage(response)print(f总耗时:{time.time()-start_time:.2f}s\n)# ---------- 5. 缓存机制对比 ----------# 先移除速率限制器以便专注于缓存测试llm_no_limitChatOpenAI(modelgpt-3.5-turbo,temperature0,max_tokens100,api_keyos.getenv(OPENAI_API_KEY),)# 5.1 无缓存print( 无缓存重复请求相同问题 )langchain.llm_cacheNone# 清除全局缓存foriinrange(3):t0time.time()resllm_no_limit.invoke(什么是 Transformer)t1time.time()print(f第{i1}次: 耗时{t1-t0:.2f}s, 返回前 20 字:{res.content[:20]}...)# 5.2 内存缓存print(\n 启用内存缓存 )langchain.llm_cacheInMemoryCache()foriinrange(3):t0time.time()resllm_no_limit.invoke(什么是 Transformer)t1time.time()print(f第{i1}次: 耗时{t1-t0:.2f}s, 返回前 20 字:{res.content[:20]}...)# 第一次会调用 API后续直接命中缓存# 5.3 SQLite 持久化缓存print(\n 启用 SQLite 缓存 )langchain.llm_cacheSQLiteCache(database_path.langchain_cache.db)foriinrange(3):t0time.time()resllm_no_limit.invoke(什么是 Transformer)t1time.time()print(f第{i1}次: 耗时{t1-t0:.2f}s, 返回前 20 字:{res.content[:20]}...)# 如果之前已缓存第一次也可能快速返回运行说明代码依赖langchain-openai、langchain-core、langchain-community。需要设置环境变量OPENAI_API_KEY为有效的 OpenAI API 密钥。速率限制演示部分会因requests_per_second0.5而明显降低请求速度。缓存演示中第一次调用会真正请求 API后续调用几乎瞬间完成表明缓存生效。SQLite 缓存文件.langchain_cache.db会在当前目录生成可跨脚本持久化。关键要点总结几乎所有的商用大模型 API 都有速率限制忽略它会导致应用频繁报错。LangChain 提供InMemoryRateLimiter用于客户端流量控制只需传入rate_limiter参数即可。缓存是减少 API 调用、降低成本的有效手段LangChain 支持内存缓存和 SQLite 持久化缓存切换非常方便。在实际 AI Agent 开发中建议将速率限制与缓存结合使用以保障服务的稳定性和经济性。

相关新闻

Unity AR/VR开发中UniWebView五大核心问题解决方案

Unity AR/VR开发中UniWebView五大核心问题解决方案

1. 项目概述:当AR/VR遇上WebView,为何“坑”特别多?在Unity 2020及更高版本中开发AR/VR项目,引入UniWebView来嵌入网页内容,已经成为一个越来越普遍的需求。无论是用于展示动态更新的产品手册、加载在线3D模型配置器&a…

2026/10/7 6:35:00 阅读更多 →
LTE扫频与小区搜索:从频谱扫描到精准同步的终端入网全解析

LTE扫频与小区搜索:从频谱扫描到精准同步的终端入网全解析

1. 从“盲人摸象”到“精准定位”:理解LTE扫频与小区搜索的本质如果你刚接触无线通信,或者从2G/3G时代的技术栈转向LTE,第一次听到“扫频”和“小区搜索”这两个词,可能会觉得它们既神秘又底层,仿佛是基站或核心网才需…

2026/10/7 14:08:41 阅读更多 →
MySQL MVCC机制深度解析:事务隔离与并发控制的实现原理

MySQL MVCC机制深度解析:事务隔离与并发控制的实现原理

1. 项目概述:一次面试引发的深度技术复盘前几天帮一个朋友复盘他的腾讯面试,其中一道关于MySQL事务与MVCC如何实现隔离级别的问题,让他卡壳了。他回来问我:“我知道四种隔离级别,也知道MVCC大概是个版本控制&#xff0…

2026/10/7 7:51:20 阅读更多 →

最新新闻

从设计到验收:产品埋点与埋点测试实践

从设计到验收:产品埋点与埋点测试实践

从设计到验收:产品埋点与埋点测试实践 埋点不是“多加几个日志”,而是把产品行为转化为可信、可解释、可验证的数据。好的埋点方案让产品、研发、测试和数据分析使用同一套语言。 https://github.com/lfl171/maidian_ceshi.git 一、什么是埋点 埋点是对…

2026/10/7 14:08:03 阅读更多 →
煤炭运输管理系统课设详解:从部署到答辩的完整指南

煤炭运输管理系统课设详解:从部署到答辩的完整指南

简介:《煤炭运输管理系统》是面向煤炭运输企业的信息管理软件工程资源,覆盖采购、装载、运输、卸货等核心业务,兼具订单状态管控、合同管理、路线优化与成本分析能力,将人工智能手段融入调度与决策,可作为信息系统分析…

2026/10/7 14:08:03 阅读更多 →
PS5破解与AI模拟器真相:全机型沦陷是炒作还是事实?

PS5破解与AI模拟器真相:全机型沦陷是炒作还是事实?

最近“索尼完蛋了?AI 模拟器 主机破解双线,PS5 全机型沦陷?”这个标题在玩家群里传得挺凶,我看不少群都在转。说实话,我第一次刷到的时候也愣了一下,毕竟PS5这代机器的加密和防护体系比PS4时代硬了不止一个…

2026/10/7 14:08:03 阅读更多 →
pdf转txt用哪个好?2026靠谱工具实测对比,新手直接抄

pdf转txt用哪个好?2026靠谱工具实测对比,新手直接抄

日常办公、学习经常遇到一个刚需问题:拿到PDF文档,想要提取纯文字保存、编辑、摘抄,pdf转txt用哪个好?很多人随便找工具转换,最后要么乱码、换行错乱,要么带水印、需要付费,甚至上传隐私文件有泄…

2026/10/7 14:08:03 阅读更多 →
JavaWeb学生选课管理系统源码部署:JSP+Servlet+JDBC+MySQL全链路解析

JavaWeb学生选课管理系统源码部署:JSP+Servlet+JDBC+MySQL全链路解析

简介:一套基于Servlet和JSP技术实现的学生选课管理系统,面向计算机相关专业需要毕业设计参考或项目实战练习的Java学习者,覆盖管理员、教师、学生三类角色的核心业务场景。系统后端采用JavaWeb与MySQL,前端结合JSP、CSS、Bootstra…

2026/10/7 14:08:03 阅读更多 →
AI 资讯日报 | 2026年10月5日:DeepSeek将中美顶尖模型差距缩至3%,Gemini 4 Argon百万Token输出,阿里确认Qwen 4训练中,智能体安全治理升温

AI 资讯日报 | 2026年10月5日:DeepSeek将中美顶尖模型差距缩至3%,Gemini 4 Argon百万Token输出,阿里确认Qwen 4训练中,智能体安全治理升温

一、模型与产品1. 谷歌发布Gemini 4 Argon旗舰模型:百万Token输出,主打长周期复杂工作流谷歌正式推出新一代旗舰大模型Gemini 4 Argon,单轮最大输出Token上限由上代6.4万提升至100万,可独立完成跨数万行代码迁移等长链路工程任务&…

2026/10/7 14:07:02 阅读更多 →

日新闻

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:01:58 阅读更多 →
用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →
芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 7:15:40 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 5:29:09 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 9:29:10 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 8:21:32 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 11:43:46 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 13:34:55 阅读更多 →