记录下学习agent应用开发的第四天(滑动窗口机制删除早期文本)

发布时间:2026/7/15 3:50:49
记录下学习agent应用开发的第四天(滑动窗口机制删除早期文本) 各位访问大哥能否留一些宝贵建议给小弟没人的话就当个人日常blog虽然我在之前创建了一个json文件来保存聊天会话内容但是模型读取的会话文本是有长度限制的在达到极限后的对话机器人就会拒绝输出影响使用体验。实际上开发人员并不会把用户和ai的聊天内容完全存储因为这样占内存大、维护困难且成本高。为了维护用户体验和延长模型“寿命”一般会采取滑动窗口、摘要压缩、按需检索等方式。我目前采取的是滑动窗口机制。滑动窗口机制是删除早期的记忆内容只保留最近 N 轮会话内容和System Prompt好处是极大地节省算力和资源成本保证最近会话的连贯和避免早期信息干扰。其实还有个类似的机制叫固定窗口同样是通过删除来避免内容超出文本限制与滑动窗口不同的是滑动窗口机制规定会话达到一定轮数后就强制清除所有内容处理更简单暴力但问题也很明显无法支持长期会话。所以一般是用来防止系统过载。有句比喻我觉得很恰当滑动窗口是“挤牙膏”固定窗口是“倒垃圾”。下面是添加了滑动窗口机制删除历史会话的第五代聊天机器人 day4: 带 Token 感知的聊天机器人 新增 - 计算对话历史的 token 数量 - 超出上限自动裁剪最老的对话 import json import os from pathlib import Path import tiktoken from openai import OpenAI from dotenv import load_dotenv root Path(__file__).parent.parent load_dotenv(root / .env) client OpenAI( api_keyos.getenv(DEEPSEEK_API_KEY), base_urlos.getenv(DEEPSEEK_BASE_URL), ) SYSTEM_PROMPT 你是一个编程老师名字叫小码。 规则 1. 用中文回答口语化像和朋友聊天一样 2. 解释概念时用通俗的例子不要堆术语 3. 如果用户让你写代码要逐行解释每一行是干什么的 4. 回答控制在 200 字以内除非用户明确要求详细 HISTORY_FILE Path(__file__).parent / chat_history.json # 分词器和 DeepSeek 兼容 encoder tiktoken.get_encoding(cl100k_base) # 安全阈值模型上限 128K留 28K 给 AI 回复用100K 开始裁剪 MAX_TOKENS 100_000 def count_tokens(messages: list) - int: 计算 messages 列表的总 token 数 total 0 for msg in messages: total len(encoder.encode(msg[content])) return total def trim_history(history: list) - list: 裁剪历史删除最老的对话对直到 token 数降到安全线以下 # 必须保留 system 角色 system_msg history[0] conversations history[1:] # 后面的才是对话 while count_tokens([system_msg] conversations) MAX_TOKENS and len(conversations) 2: # 每次删掉最前面的一组对话1 user 1 assistant conversations conversations[2:] return [system_msg] conversations def load_history() - list: if HISTORY_FILE.exists(): with open(HISTORY_FILE, r, encodingutf-8) as f: return json.load(f) return [{role: system, content: SYSTEM_PROMPT}] def save_history(history: list): with open(HISTORY_FILE, w, encodingutf-8) as f: json.dump(history, f, ensure_asciiFalse, indent2) def chat_stream(messages: list) - str: stream client.chat.completions.create( modeldeepseek-v3.2, messagesmessages, temperature0.7, max_tokens800, streamTrue, ) full_answer for chunk in stream: content chunk.choices[0].delta.content if content: print(content, end, flushTrue) full_answer content print() return full_answer def main(): history load_history() if len(history) 1: print(f[恢复了 {len(history) // 2} 轮历史对话]) # 启动时也裁剪一次防止历史文件里存的太长 old_len len(history) history trim_history(history) if len(history) old_len: print(f[自动裁剪了 {(old_len - len(history)) // 2} 轮旧对话]) token_count count_tokens(history) print(f[当前上下文: {token_count} / {MAX_TOKENS} tokens]) print( * 50) print( 小码 AI 编程老师 0.5 (quit 退出, !clear 清空记忆)) print( * 50) while True: user_input input(\n你: ).strip() if not user_input: continue if user_input.lower() in (quit, exit, q): print(小码: 再见! 有问题随时回来~) break if user_input !clear: history [{role: system, content: SYSTEM_PROMPT}] save_history(history) print([记忆已清空]) continue history.append({role: user, content: user_input}) # 发送前裁剪 old_len len(history) history trim_history(history) if len(history) old_len: print(f[自动裁剪了 {(old_len - len(history)) // 2} 轮旧对话]) print(小码: , end, flushTrue) try: answer chat_stream(history) history.append({role: assistant, content: answer}) save_history(history) except Exception as e: import traceback print(f\n出错了: {e}) traceback.print_exc() history.pop() if __name__ __main__: main()基于上述代码聊天要达到文本上限起码得聊个几百轮但为了演示滑动窗口删除效果我把token上限常量从100_000改为200这样只要聊几轮就能触发删除早期会话记录功能。效果如下所示加了打印功能可以知道记忆从什么时候开始丢失因为我设置的token上限常量很小只要聊几轮就会丢失前面的记忆内容和现实中的阿尔兹海默症患者比较相像无歧视。可以想象前几分钟还在和眼前熟悉的人谈笑风生下一秒他/她突然问你是谁站在患者的亲人朋友视角是很绝望的。类似地站在用户视角不久前还在和ai分享自己的生活或者使用ai办公因为token上限问题就把前面重要的内容删除了用户的心情会很糟糕甚至工作进度也会受影响。所以我认为直接使用滑动窗口机制去删除历史内容来控制文本体量是不可取的应该在考虑内存大小、维护难度及成本的前提下配合摘要压缩、按需检索等方式尽可能照顾用户体验来控制文本体量。总结今天就实现了利用滑动窗口机制来控制聊天文本体量的功能通过“删旧存新”的逻辑去避免记忆文本超出模型读取的上限。事实上这个方案并不完美后续我会进一步学习更好的方式来处理这个问题。今天健身晚了回来有点累写这篇博客时快要睡着了就没有精力多学点第四天就这样吧。

相关新闻

别被报价单吓跑:建设充值网站多钱?老站长掏心窝子说点真话

别被报价单吓跑:建设充值网站多钱?老站长掏心窝子说点真话

去年年底,有个做本地生活的小老板老张,急匆匆找我喝茶。他手里攥着一份报价单,眉头锁得能夹死苍蝇。他说:“我想搞个充值网站,别人报价三万,有人报五万,到底建设充值网站多钱?这水太深了。”看着老张那张焦虑的脸,我叹了口气。这行当里,报价单上的数字从来不是固定的…

发布时间:2026/7/15 3:49:46
郑州网站建设避坑指南:从源码到上线的实战干货

郑州网站建设避坑指南:从源码到上线的实战干货

很多老板找网站,第一句话就是“多少钱做个企业官网?”这时候销售报个价,有的三千,有的三万,差别巨大。别急着掏钱,这行水很深。我干了八年建站,见过太多因为贪便宜最后被坑的案例。今天不整虚的,直接说点真话,帮你省下冤枉钱。首先,你得明白,网站不是画个图那么简单…

发布时间:2026/7/15 3:49:23
中文语音识别模型选型实战指南:Whisper/WeNet/PaddleSpeech/FunASR对比

中文语音识别模型选型实战指南:Whisper/WeNet/PaddleSpeech/FunASR对比

1. 开源中文语音识别模型的现状:不是“有没有SOTA”,而是“在哪种SOTA上站稳了脚跟”最近三个月,我连续帮三支不同背景的团队落地语音识别模块——一支做老年健康监护硬件,一支开发方言客服质检系统,一支在做无监督儿童…

发布时间:2026/7/15 3:48:32
别瞎折腾!揭秘网站建设的运用场景,小白避坑指南

别瞎折腾!揭秘网站建设的运用场景,小白避坑指南

做网站最坑的不是技术难,而是你根本不知道这玩意儿到底该用在哪儿。我见过太多老板,花大几万做个花里胡哨的官网,结果除了自己没人看,连个询盘都没有。这钱扔水里还能听个响,扔进网站里连个屁都听不见。今天不聊虚的,就聊聊这钱到底该花在哪儿,哪些场景下建站才是真金白…

发布时间:2026/7/15 4:46:44
别再瞎折腾了!一份能落地的校园网站建设方案模板下载指南,少走弯路

别再瞎折腾了!一份能落地的校园网站建设方案模板下载指南,少走弯路

说实话,刚接手学校官网改版那会儿,我是真有点头大。以前总觉得做个网站就是挂个首页,放点新闻,现在想想太天真了。上周跟几个同行喝咖啡,聊起这个,大家普遍反映现在的学校家长、学生,对网站的要求早就不是“能看”就行,得“好用”、“好看”还得“安全”。我就在想,为…

发布时间:2026/7/15 4:46:33
做棋牌游戏网站建设文案,别整那些虚的,听听大实话

做棋牌游戏网站建设文案,别整那些虚的,听听大实话

最近好多老板找我聊,说想搞个棋牌平台,让我给写点宣传文案。我直接摆手,这活儿不能这么干。为啥?因为现在的用户精得很,你搞些花里胡哨的词,人家一眼就看出是套路。咱们得说人话,讲点实在的。先说个真事儿。前阵子有个朋友老张,搞了个棋牌APP,请了个所谓的“大神”写文…

发布时间:2026/7/15 4:46:27
民非企业网站建设费怎么记账才不踩坑?老会计掏心窝子说几句

民非企业网站建设费怎么记账才不踩坑?老会计掏心窝子说几句

本文关键词:民非企业网站建设费怎么记账最近好多做公益的朋友私信我, 问那个网站建好了, 发票开过来了, 这笔钱到底咋入账?别急,这事儿真没那么复杂, 但也别太随意。 很多民非机构, 财务制度其实挺松散的, 但这笔钱要是记错了, 年底审计或者税务检查, 那是真麻烦。首…

发布时间:2026/7/15 4:46:27
钮奇网站建设到底坑不坑?别被忽悠了,看完这篇再掏钱!

钮奇网站建设到底坑不坑?别被忽悠了,看完这篇再掏钱!

本文关键词:钮奇网站建设真的,我受够了那些吹得天花乱坠的建站公司。昨天有个朋友找我吐槽,说找了家叫钮奇的做网站,报价八千,说是高端定制。结果拿到手一看,好家伙,模板感重得像批发市场的货。这哪是定制啊,这简直是换皮。我对这种行径真的恨得牙痒痒。做网站这行水太…

发布时间:2026/7/15 4:46:22
打不通?广西住房与城乡建设厅网站电话 怎么找最靠谱

打不通?广西住房与城乡建设厅网站电话 怎么找最靠谱

你是不是也遇到过这种情况?想查个建筑资质,或者投诉个烂尾楼,结果在百度上一搜,全是广告。打过去不是空号,就是转接半天,最后告诉你“请去官网查询”。那一刻,真的想摔手机。别急,今天咱不整那些虚的。我就把我在广西住建厅官网摸爬滚打几年总结出来的“笨办法”和“真…

发布时间:2026/7/15 4:45:48
nRF Sniffer 在Wireshark中的高效过滤与实战技巧

nRF Sniffer 在Wireshark中的高效过滤与实战技巧

1. 初识nRF Sniffer与Wireshark黄金组合当你第一次把nRF52840 Dongle插入电脑时,可能没想到这个小玩意儿会成为BLE调试的"显微镜"。作为专为蓝牙低功耗设计的嗅探工具,nRF Sniffer配合Wireshark就像给开发者装上了X光眼镜,能清晰看…

发布时间:2026/7/15 0:00:38
别被忽悠了,普通人怎么选择五屏网站建设才不踩坑

别被忽悠了,普通人怎么选择五屏网站建设才不踩坑

前年我接手公司官网改版,当时脑子一热,觉得搞个“五屏自适应”听起来特别高大上。结果呢?上线第一周,客服电话被打爆,全是客户说手机上看图糊成马赛克,按钮还点不动。那几天我头发都愁白了,找技术对线,找设计扯皮,最后发现全是沟通不到位留下的坑。今天就把我踩过的雷…

发布时间:2026/7/15 0:00:52
泰州网站建设案例揭秘:从0到1的避坑指南与实战心得

泰州网站建设案例揭秘:从0到1的避坑指南与实战心得

泰州网站建设案例 你是否还在为网站打开速度慢而焦虑?是否因为转化率低下而怀疑自己的产品?这篇内容直接给你答案。我不讲虚的理论,只讲怎么把网站做成赚钱机器。做网站最怕什么?怕像绣花枕头,中看不中用。我见过太多泰州的企业老板,花了几万块做个高大上的首页。结果用户…

发布时间:2026/7/15 0:00:52
别装了,你的学院网站建设推进会就是场大型尴尬现场

别装了,你的学院网站建设推进会就是场大型尴尬现场

看着后台那点可怜的访问量,你急不急?方案改了八版,还是没人看。今天这文,只说怎么把会开成,把事做成。上周去隔壁职院蹭会,那场面,真叫一个窒息。会议室里坐满了人,领导在台上讲PPT,底下的人不是在玩手机,就是在发呆。投影仪闪了两下,灭了。没人去修,接着讲。这种会…

发布时间:2026/7/14 8:24:42
七彩建设集团官方网站怎么找?避坑指南与真实体验分享

七彩建设集团官方网站怎么找?避坑指南与真实体验分享

找官网找得头大?这篇直接告诉你怎么辨别真伪,别被假网站坑了钱。昨天半夜两点,我还在电脑前盯着屏幕,心里那个急啊。家里装修刚进场,工长突然说需要确认一份材料清单,说是七彩建设那边要求的。我手忙脚乱地打开浏览器,搜了一堆“七彩建设”,结果出来一堆广告,什么“七…

发布时间:2026/7/14 2:42:40
找可信赖的龙岗网站建设公司?别踩坑,看这几点就够

找可信赖的龙岗网站建设公司?别踩坑,看这几点就够

做企业,网站就是脸面。 在龙岗,想找个靠谱的网站公司,真不容易。 市面上广告满天飞。 承诺得天花乱坠。 最后交付的东西,却让人想砸电脑。 今天不聊虚的。 只聊怎么避坑。 怎么找到真正可信赖的龙岗网站建设团队。先说个大实话。 别信什么“三天上线”。 那是骗小白的。 正…

发布时间:2026/7/14 19:05:38
建站7年才悟出的网站建设思路,别再花冤枉钱了

建站7年才悟出的网站建设思路,别再花冤枉钱了

做建站这行整整7年了。 见过太多老板花几万块, 最后做出来的网站像个垃圾场。 今天不整那些虚头巴脑的术语。 就聊聊我踩过的坑, 和真正能落地的网站建设思路。很多老板一上来就问: “多少钱能做个高大上的?” 我通常直接劝退。 因为方向错了, 你给再多钱也是打水漂。 真正…

发布时间:2026/7/14 13:09:53
合肥的网站建设避坑指南:别被低价忽悠,这3个细节决定生死

合肥的网站建设避坑指南:别被低价忽悠,这3个细节决定生死

做企业官网最怕什么?不是技术难,是交钱后没人管,或者上线一个月连个访客都没有。这篇东西不扯虚的,直接告诉你怎么在合肥找个靠谱的团队,或者自己怎么避坑。先说个大实话,我在合肥混这行五年多,见过太多老板因为贪便宜吃大亏。你去百度搜“合肥的网站建设”,出来一堆报…

发布时间:2026/7/15 2:07:05
别被忽悠了!德州网站建设那些坑,我拿真金白银换来的教训

别被忽悠了!德州网站建设那些坑,我拿真金白银换来的教训

做这行久了,心里就憋着一股火。每次看到客户拿着网上抄来的模板,问我能不能做成“苹果官网”那种效果。我就想笑。真的,太想笑了。今天咱不整那些虚头巴脑的专业术语。就聊聊德州网站建设里,那些让人头秃的真实事儿。我有个客户,老张。他是做德州本地建材的,实在人。当初…

发布时间:2026/7/15 2:07:13