给AI助手加持久记忆:基于SQLite的轻量级上下文记忆层设计实践
每次新开一个会话AI 就从记得所有事的同事退化成了考场里刚拿到卷子的学霸。昨天刚确认过的项目目录结构、已经调通的参数组合、反复讨论后定下的命名规则今天必须从头解释一遍。这种失忆循环用一阵子真的会把手感磨没。所以我把给 AI 助手加持久记忆这件事认真做了一次工具代号就叫 claude-mem。它解决的核心问题很直白在一个长期使用 AI 的工作流里把那些不该被反复交代的背景信息沉淀下来在需要的时候自动塞回上下文。这不是什么重型的通用人工智能记忆方案而是一套轻量的、自己可以掌控的记忆层。适合两类人看一类是重度使用 AI 辅助开发、写作、研究的同学另一类是想给自己的小工具加记忆能力、又不想一上来就上重型向量库的开发者。下文我会把设计思路、存储选型、召回策略、代码实现、踩坑经历一次性讲清楚。全程不依赖任何云服务核心存储就是一台普通电脑上的本地数据库。1. claude-mem 要解决的核心问题AI 会话的失忆症1.1 为什么我们总觉得 AI 忘了事情现在主流的大语言模型本身没有跨会话记忆。每次对话模型看到的上下文往往只包含当前会话窗口里能塞得进去的内容。窗口再大也有清空和压缩的时候。表面上你觉得它记得我们上次聊了什么其实那只是你把上一次的关键结论又一次贴进了提示词。我在实际使用中最明显的感受是我经常花十几分钟做背景同步——跟 AI 说明我维护的项目结构是三层还是两层、数据库里有哪些关键表、我习惯用什么风格命名分支。这类信息一旦换会话就归零。如果一天开五六个会话那么一大半的 token 预算都浪费在重复介绍上真正该解决的问题反而没空间展开了。claude-mem 的做法很朴素把这类跨会话稳定信息单独存起来存进本地数据库。在下一次会话开始前或者对话中途的某个合适节点把相关条目查出来拼进上下文。让 AI 看起来记得你之前交代过的东西但本质是我们的工具在做记忆管理。1.2 记忆系统的设计边界该记住什么不该记住什么给 AI 加记忆最怕的不是记得少而是记得太杂。我见过一些方案把所有历史对话全部灌给模型结果 AI 输出里到处都是上次我们说过根据之前的讨论这类废话而且彼此冲突的观点打架可用度反而下降。所以我一开始就给 claude-mem 划了三条边界只存事实不存情绪。比如用户喜欢用 pytest 而不是 unittest可以存用户上次很生气坚决不存。只存低变化率信息不存高频噪音。项目技术栈、代码规范、部署流程这类几个月不变的信息最值得存今天下午三点开会这种就别进记忆库了。只存可被复述的信息不存大段原文。原始代码、长文摘录直接留在历史文件里就行记忆库应该存摘要、结论、链接、指向性描述。这个边界想清楚之后工具就变得很克制。它不会尝试记住所有东西只负责把真正有价值的那 10% 提炼出来。2. 记忆引擎的设计关键存储、召回、注入、遗忘2.1 存储选型为什么本地 SQLite 是合理起点一开始我也差点上了向量数据库。后来冷静算了一笔账个人工作流的记忆量级一天撑死几百条检索场景是低并发的人在回路里提问根本不需要分布式、不需要毫秒级高并发。这种情况下 SQLite 是最扎实的起点。SQLite 的好处业内人士都清楚但落到记忆场景里我有几个具体体会单文件部署整个记忆库就是一个.db文件备份、迁移、删除都非常简单。我甚至直接把它丢进同步盘里实现两台电脑共享同一份记忆。事务可靠写入记忆这种操作虽然简单但发生频率不低。SQLite 的 ACID 保证让多线程下写入也不会出现稀奇古怪的损坏。检索能力够用字符串匹配、时间范围过滤、基础倒排索引这三样已经覆盖了 80% 的记忆召回场景。当然如果你真的积累到了几十万条结构化记忆或者想对记忆内容做深层的语义关联那再引入向量库不迟。但作为个人工具我认为顺序应该是先用 SQLite 跑通再用数据说话。2.2 召回策略关键词匹配为主嵌入计算为辅claude-mem 的核心召回逻辑我设计成了双通道关键词通道于语义相关的主题通道。关键词通道很好理解当用户问上次说的部署脚本放哪了我会先把部署脚本拆成几个 token然后用 SQL 的LIKE或者基础分词去匹配title、tags、content字段。这个通道速度快逻辑透明出了问题也好排查。语义通道是可选项。如果机器上已经装了本地 embedding 模型我会把记忆条目的摘要向量化查询时同样向量化算个余弦相似度做召回排序。但这里有个关键设计向量结果只做初筛不会直接作为最终输出。最终交给 AI 的记忆块一定还是人类可读的文本形式。为什么这样做因为 AI 提示词需要的是能直接被模型读懂的上下文不是向量碎片。向量召回只是用来找出哪几条记忆最可能和当前问题相关找出来之后仍然是整条文本进入上下文。这种二分设计让系统既拿到了语义相似度的表达能力又保住了提示词的可解释性。2.3 注入时机三种触发方式记忆注入的时机决定这个系统会不会惹人烦。我的经验是只在三个节点注入会话开始启动新会话时把最近 7 天的活跃记忆条目摘要自动带出。这样 AI 会天然知道你的工作背景不用等你开口。任务边界当你准备开始一项新任务比如现在写个爬虫抓某网站数据工具会拿这个任务描述去做一次召回把和爬虫、数据抓取、反爬经验相关的记忆精确注入。这个时机比较容易被人忽略但实际效果最好。用户显式触发提供一个手动指令比如在对话框中输入/记忆 关键词可以强制拉取相关记忆。我习惯在做重大决策前手动过一遍防止漏掉早期讨论过的约束。注入的内容也会做数量控制。默认上限是 8 条单条长度超过 300 字的自动截短成 150 字摘要。宁可少给也不要把提示词塞爆。这个规律我在后面测试时会用数据说明。2.4 记忆卫生衰减、去重与合并长期使用的记忆库必然产生脏数据。我设计了一个轻量级的记忆卫生机制时间衰减每条记忆有last_access_at字段超过 30 天没被命中过的条目权重自动下降。超过 90 天没命中的进入待归档状态不再参与默认召回。但不物理删除防止你想翻旧账时找不到。去重合并如果新写入的记忆和现有条目在标题上高度相似比如相似度超过 0.85工具不会硬插入而是更新原条目的content追加最新结论并把version加一。人工复核每隔一周我会手动打开一次记忆库列表把明显过时的条目标记为archived。这个简单动作能保证记忆库反映的是当前真实状态而不是一个月前的过期观点。记忆系统最忌讳只进不出。没有衰减和合并机制库会越来越大召回的准确率反而会下降。所以我把忘掉什么和记住什么放在同等重要的位置来设计。3. 从零开始搭一套 claude-mem 的轻量实现3.1 数据表结构和初始化脚本实际代码我尽量保持精简。整个记忆库只用一张主表结构如下CREATE TABLE IF NOT EXISTS memories ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, content TEXT NOT NULL, tags TEXT DEFAULT , source TEXT DEFAULT manual, importance INTEGER DEFAULT 5, created_at TEXT NOT NULL, updated_at TEXT NOT NULL, last_access_at TEXT NOT NULL, access_count INTEGER DEFAULT 0, status TEXT DEFAULT active );字段含义一句话就能说清title是记忆标题content是正文tags用逗号分隔方便检索importance是 1-10 的重要度status区分 active / archived。没有设计外键也没有复杂关联因为个人工具不需要。初始化时我顺手建了两个索引CREATE INDEX idx_memories_status ON memories(status); CREATE INDEX idx_memories_tags ON memories(tags);status索引用于快速过滤有效记忆tags索引用于打标签查询。对几千条数据来说这两个索引已经让查询速度在毫秒级。3.2 写入路径三种触发方式写入逻辑封装成了一个remember()函数支持三种调用场景。第一种是手动写入。直接在命令行调claude-mem add 项目部署脚本位置 \ --content 正式环境的部署脚本统一放在 ops/deploy.sh测试环境是 ops/deploy-test.sh \ --tags 部署,运维 \ --importance 8这个命令适用于自己捕捉到的关键信息。我会在完成一次技术决策、确认一个路径、定下一个规范后立刻手动录入几秒钟的事。第二种是自动提取。把 AI 的一轮对话内容丢给一个小的摘要模型让模型生成如果下个会话还要继续这个话题最需要记住什么然后写入记忆库。提取模板大概长这样以 Python 为例省略了模型调用细节def auto_extract_and_save(dialogue_text): summary summarize_for_memory(dialogue_text) if not summary: return remember( titlesummary[title], contentsummary[content], tagssummary.get(tags, ), sourceauto_extract )这种方式的坑在于会写入大量低价值信息所以自动提取的条目默认importance3比手动写入低一等。第三种是定时快照。每天的固定时间把当天处理过的事务性笔记做一次批量提炼生成今日要记住的事清单。这个快照不以单条入库而是合并成一个每日摘要条目避免一天十几条碎记忆把库刷屏。3.3 读取路径召回排序与上下文格式化读取是记忆系统的高频操作我单独写了一个recall()函数。核心流程分四步解析查询语句里的关键词去掉停用词。先跑 SQL 关键词匹配拿到候选集。如果配置了 embedding再用向量相似度给候选集重新排序。按(importance * 0.4 最近访问权重 * 0.3 匹配度 * 0.3)的加权分取前 N 条。加权分公式是我多次试出来的。你会发现没让importance权重超过 0.5因为过分依赖重要度会把冷门但相关的记忆挤掉。最近访问权重能让近期常用记忆保持活跃匹配度则保证相关性优先。最终输出给 AI 的上下文模板如下【记忆参考 #1】 标题项目部署脚本位置 标签部署,运维 内容正式环境的部署脚本统一放在 ops/deploy.sh测试环境是 ops/deploy-test.sh 最近访问2 天前这种格式化文本进来后AI 能很明确地区分这是记忆库里的背景信息和这是用户当前的问题不会混在一起。我测试过加入分隔标记后回答跑偏的概率低了很多。4. 实际应用中的踩坑记录与排查链路4.1 记忆碎片太多召回结果反而不可用第一次跑满一个月后我明显发现召回质量下降。明明查数据库备份策略返回的候选里却混着备份文件路径“备份脚本报错”备份依赖库安装好几条内容互相覆盖又互相没什么补充关系。问题的根子在于我把一次性问题和长期结论混在同一个库里。排查链路是这样的先按标题统计重复度发现大量条目都以相同关键词开头比如备份。再看内容里面既有备份命令是什么这样的一次性操作记录也有备份策略应该保留七天这样的长期约定。一次性记录当然会被频繁命中因为它们和关键词相关但真正该被 AI 记住的长期约定被埋没了。修复方案分两步。第一步把所有一次性操作记录从主记忆表里移到一张event_log表只作历史查询用不参与召回。第二步引入主题归并机制凡是标题里出现相同领域词的条目查询时按领域分组每组最多取一条优先级最高的。这样既保留了信息的多样性又避免了自说自话。4.2 时间衰减设太激进关键背景被洗没了首次配置时我天真地把衰减周期设成了 7 天。结果一周后之前记录的很重要的项目背景被自动降权第二次会话里 AI 就忘了我之前确过的技术选型。排查时我看了last_access_at发现这些记忆不是不重要而是那段时间没有触发相关话题所以一直没被访问过。衰减逻辑把低频和过期画了等号但这在个人工作流里是不成立的。修复方式不再单纯用时间衰减降权而是加入首次创建后 45 天保护期。在保护期内即使没有被访问也不会因为时间而降低权重。同时把importance 8的高优记忆默认豁免衰减。只有常规级别的记忆才参与时间衰减。这样既保住了长期事实也保留了自动淘汰噪音的能力。4.3 多进程并发写入导致 SQLite 锁冲突早期我给 claude-mem 接了一个定时任务会在每天固定时间批量写入快照。结果那段时间偶尔会出现database is locked错误。一开始我以为是磁盘问题后来看日志才发现定时任务和用户手动写入同时发生SQLite 默认的写锁机制不允许两个写事务同时进行。排查链路并不复杂先复现再定位再改配置。复现很简单写一个脚本同时发起 10 并发写入即可稳定触发。定位后改了三件事把数据库连接模式设为WALWrite-Ahead Logging读和写可以并发。给写操作加了busy_timeout5000冲突时等待而不是立刻报错。对批量写入使用单事务包裹几百条一次提交而不是一条一条 commit。改完之后持续压测一整天没再出现锁冲突。这里建议所有把 SQLite 作为在线存储的人尽早把 WAL 模式打开体验提升非常明显。4.4 没有脱敏记忆库变成了风险点这个坑说实话是后知后觉。某天我在整理记忆库备份时发现里面竟然躺着一条完整的 API 密钥记录。那是之前排查问题时 AI 助手帮我贴进去的当时没在意它就这么进了长期记忆。如果这个库文件被同步到网盘、被其他工具读取风险一下就上来了。修复方案分三层第一层在写入路径上做敏感信息过滤。用正则匹配常见的密钥特征长随机字符串、位密钥前缀等匹配到就不允许入库直接扔到隔离区。第二层对记忆库文件本体加密。我用了本机的加密卷存放.db文件至少在文件层面多一层保护。第三层备份时做脱敏导出。导出之前跑一遍扫描脚本把所有疑似密钥的字段替换成[REDACTED]。这三层作完之后记忆库才敢放开用。这里也给所有做记忆工具的人一个提醒记忆库收集的往往是高度上下文化的信息它比普通聊天记录更容易暴露你的工作习惯、技术栈、内部系统结构。脱敏不做工具就是个定时炸弹。5. 效果测试与实际使用建议5.1 我的评测样例三组对比为了验证这套记忆系统有没有实际价值我做了三个测试场景。每个场景都开两次会话中间清空上下文看第二次会话 AI 能不能给出知道我之前交代过的回答。第一个场景是技术偏好记忆。第一次会话我说明本项目的测试框架用 pytest所有新增模块必须配套测试。第二次会话我问帮我在新模块里加个测试文件不提任何框架信息。没有 claude-mem 的时候AI 问了一堆你想用什么测试框架有记忆库之后它直接生成了 pytest 风格的测试文件。第二个场景是路径记忆。第一次会话我确认了一个文件的存放路径第二次会话我问部署那个脚本在哪有记忆时它能直接给出准确路径。这个场景虽然简单但省掉了大量来回确认的时间。第三个场景是反向测试我故意在记忆库里存了一条过期的技术选型比如项目使用 Python 3.8。然后在新的会话里问当前项目的 Python 版本要求是什么。结果发现如果记忆库没有及时更新AI 会忠实复述过期信息。这个测试暴露出的问题不是记忆系统本身而是记忆没有版本控制导致的。所以我后来给content更新时强制保留变更摘要字段每次更新都记录为什么改。5.2 哪些内容真正值得写入记忆根据三个月的实际使用我给可写入内容分了个优先级。下面这张表可以直接当参考内容类型是否写入重要度典型例子项目技术栈与版本约束强烈建议8-10后端用 FastAPI SQLAlchemy 2.0目录结构、部署路径强烈建议7-9脚本统一放 ops/ 目录团队/个人的代码规范强烈建议7-9提交信息必须带模块前缀已排除的错误方案建议5-7不要再用 XX 方案因为会遇到 XX 问题进行中任务的中间结论建议4-6当前正在做的模块是订单导出一次性问题解答不建议—某函数的参数怎么传情绪性/临时性内容禁止—今天心情很差敏感密钥、隐私信息禁止—API Key、密码、身份证号我个人之所以特别看重已排除的错误方案是因为人类很容易重复踩同一个坑AI 也一样。如果把为什么这个方案不行沉淀下来下次它会默认绕开而不是重新探索一遍。这是记忆库对效率提升最明显的一类内容。5.3 后续扩展方向从关键词检索到更聪明的召回我现在用的检索主体仍是关键词匹配对大多数场景够用。但如果记忆条目涨到几万条或者记忆之间的关联关系变得复杂我会考虑三条扩展路径引入基于词向量的本地召回但注意控制 embedding 模型的体积和响应时间本地推理比云 API 延迟可控。引入图结构记忆把条目之间的关系做成有向边比如A 依赖 BA 解决了 B 的问题。这样在召回时可以沿着图做一跳扩散找到间接相关的记忆。引入定时复核流程每周自动生成一份记忆健康报告列出长时间未访问、重复度高的条目清单辅助人工清理。扩展的前提还是那句话先把基础功底打牢。存储结构清晰、召回逻辑可解释、写入和检索链路都是可控的后面接任何算法都能接得住。反过来如果一味的堆新技术可能只是把记忆库变成一个需要更高运维成本的黑盒。我个人在实际使用中最深的体会是记忆系统的价值不在于记得多而在于记得准和忘得掉。给 AI 配记忆层其实是在给自己的工作流做知识管理它倒逼你去思考哪些信息真正值得沉淀哪些信息应该任由它消失。这个思考过程本身价值甚至比工具本身还大。后面我会继续沿着更准的召回、更聪明的遗忘这个方向打磨届时再拿新数据来复盘。

相关新闻

stm32mp157项目

stm32mp157项目

1.led点亮查询设备树中led的节点找到匹配的compatible属性根据compatible属性查找内核的led驱动代码查询到内核驱动代码为leds/leds-gpio.c阅读内核的led驱动代码发现,驱动只获取了gpio的属性信息,其控制led亮灭是靠gpio子系统来进行的查询内核的led设备…

2026/10/10 13:09:07 阅读更多 →
拆解玮创速擎(EnginePro):智能选型+3D建模+一键报价,制造企业的选型设计神器

拆解玮创速擎(EnginePro):智能选型+3D建模+一键报价,制造企业的选型设计神器

在制造业自动化输送设备、产线布局搭建中,选型设计往往不只是“画图报价”这么简单。产品参数多、配置复杂、客户需求个性化、价格变动灵活——传统的手动画图或人工Excel报价,有时会显得速度不够快、容易疏忽,甚至可能因为设备/产线模型不够…

2026/10/9 7:51:22 阅读更多 →
Python pip包管理从入门到精通:安装、虚拟环境与镜像源配置

Python pip包管理从入门到精通:安装、虚拟环境与镜像源配置

1. 为什么pip值得你花时间搞明白很多人第一次接触Python,卡住的地方根本不是语法,而是装不上包。你兴冲冲打开教程,照着敲下pip install requests,结果终端甩给你一句pip 不是内部或外部命令,或者更气人的是——装完了…

2026/10/10 12:11:42 阅读更多 →

最新新闻

从LaTeX排版到AI润色:论文写作工具集实操与避坑指南

从LaTeX排版到AI润色:论文写作工具集实操与避坑指南

最近帮一位朋友看他的论文初稿,发现一个很现实的问题:内容本身没什么大毛病,但排版、引用、语言这些小问题来回折腾了他将近两周。这让我想起自己在测试一套智能论文创作工具集时的经历——总共11项功能,核心是LaTeX兼容排版和AI辅…

2026/10/10 13:09:01 阅读更多 →
DSH深度解析:从安装部署到插件体系与实战避坑指南

DSH深度解析:从安装部署到插件体系与实战避坑指南

1. 先搞清楚DSH到底是个什么东西1.1 从名字拆解开始理解DSH这个词,全称是DeepSeek Harness,直译过来就是"深度求索挂具"或者说"深度求索框架"。你可以把它理解成一个给大语言模型套上的"外骨骼装甲"——模型本身是那个有劲…

2026/10/10 13:09:01 阅读更多 →
基于DBSCAN的风电-负荷场景削减方法及MATLAB实现

基于DBSCAN的风电-负荷场景削减方法及MATLAB实现

做风电、光伏或者负荷预测的朋友,应该都被“场景生成”这件事折磨过。不确定性建模要生成几百上千个随机场景,可真正扔进优化调度模型里一跑,计算量直接爆炸。这时候就需要做场景削减:在保留原始分布特征的前提下,用少…

2026/10/10 13:09:01 阅读更多 →
单词重音怎么找?2026年最新方法帮你避坑

单词重音怎么找?2026年最新方法帮你避坑

先说一个我自己踩过的坑。刚入行那会儿,我觉得单词重音全靠“语感”,结果带的学生里,十个有八个把 record(名词)读成 /rɪˈkɔːd/,把 present(名词)读成 /prɪˈzent/。后来我才意…

2026/10/10 13:09:01 阅读更多 →
计算机实习报告怎么写?五份技术复盘框架与实战案例

计算机实习报告怎么写?五份技术复盘框架与实战案例

简介:这份文档面向计算机专业在校生与即将进入毕业实习阶段的同学,整理了五篇完整的毕业实习总结报告,可作为撰写实习报告、实习心得与毕业论文的参考范本。内容围绕实习目的、实习工作情况及内容、实习总结和心得三大板块展开,以…

2026/10/10 13:09:01 阅读更多 →
软件检测实验室CNAS认可,设备档案十大内容与验证要点

软件检测实验室CNAS认可,设备档案十大内容与验证要点

做软件检测实验室的CNAS认可,设备档案这块儿看着不起眼,但恰恰是现场评审最容易翻车的地方。我帮好几个实验室整理过这套东西,也作为技术负责人全程经历过评审,这里面的坑和门道,我掰开揉碎了跟你讲讲。这篇文章适用三…

2026/10/10 13:08:00 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

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/10 11:14:25 阅读更多 →
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/10 1:36:08 阅读更多 →
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/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/10 5:23:50 阅读更多 →
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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →