OpenFic 章节记忆系统源码剖析:从摘要生成到上下文智能压缩的成本优化之道
AI 应用人工智能大模型AI AgentRAG后端前端桌面应用【免费下载链接】OpenFic专为小说创作打造的跨平台、用户友好、AI Native 的一站式 Vibe Writing 工具。A cross-platform, user-friendly, AI-native, all-in-one Vibe Writing tool designed specifically for novel writing.项目地址https://gitcode.com/gh_mirrors/op/OpenFic点击查看免费下载OpenFic是一款专为小说创作打造的跨平台、AI Native 的一站式 Vibe Writing 工具。它的章节记忆系统解决长篇写作中的两大痛点章节摘要自动生成把数千字正文压缩为 200 字结构化记忆与Agent 上下文智能压缩在 Token 预算内保住关键信息。本文带你剖析这套系统的设计思路与成本优化之道。一、为什么长篇写作需要记忆系统小说动辄几十万字但大模型上下文窗口有限。如果每次让 Agent 帮忙续写、检查伏笔都携带全部前文Token 成本会爆炸。OpenFic 的思路是分级记忆记忆层级内容默认范围Token 代价当前章章节原文1 章高近场前 9 章原文9 章中中场章节摘要前 10 章低远场远期区间摘要更早期极低目录最新 50 章标题50 章极低这个金字塔结构由 context_builder.py 中的build_context函数实现它以当前章节为锚点、基于全局阅读序位跨卷连续编号见 sequence.py分层取数让 Agent 用可控成本记住全书脉络。二、章节摘要结构化记忆的低成本生成1. 默认轻量模型 字数门槛摘要默认使用轻量模型summary_config.py 中SUMMARY_LIGHT_MODEL_REFERENCE而非主力写作模型同时设置了DEFAULT_SUMMARY_MIN_CHAPTER_WORD_COUNT 500的门槛——不足 500 字的章节直接跳过摘要避免为短章节浪费一次 LLM 调用。这是最朴素也最有效的成本优化。2. 工具调用输出而非自由文本生成摘要时模型被要求必须调用emit_chapter_summary工具输出结构化结果start_time/end_time章节内事件起止时间characters/locations人物与地点列表summary200 字以内默认的摘要这套提示词定义在 chapter-summary.yaml明确要求所有输出都不被用户可见除工具调用外不输出任何内容以节省 token 消耗。生成逻辑在 summary_generator.py 中还会把上一章原文 其摘要一并喂给模型_previous_chapter_message帮助它连贯地理解剧情时间线。3. 过期检测内容没大改就不重算修改一章正文后摘要需要重新生成吗OpenFic 的答案是用 diff 说话。summary_service.py 中的is_chapter_summary_stale会把摘要生成时的正文与当前正文都做归一化剔除空白和标点用SequenceMatcher计算差异字符数差异 ≤ 100 字SUMMARY_STALE_DIFF_THRESHOLD则视为新鲜直接复用旧摘要零成本。远期摘要更进一步它记录来源章节摘要的SHA-256 签名列表chapter_summary_signature任何一个来源摘要变化整个区间摘要才判定过期——批量校验一次查询完成。4. 远期摘要固定窗口聚合而非全文重读每 10 章DEFAULT_SUMMARY_LONG_TERM_INTERVAL为一个固定窗口生成一条 500 字以内的区间摘要summary_service.py 的_fixed_summary_windows。它只读取章节摘要而非原文来聚合Token 消耗再降一个数量级。所有摘要任务都走后台批量作业队列JOB_TYPE_SUMMARY_BATCH进度实时推送给前端不阻塞写作。三、上下文智能压缩Agent 会话的记忆瘦身章节记忆解决书的记忆而 Agent 会话多轮工具调用、读改文件同样会撑爆上下文。OpenFic 在 agent_runtime/context/ 下实现了两级瘦身策略。1. 第一级工具输出剪枝pruningpruning.py 的prune_tool_outputs从最新消息往回扫描历史工具输出最近 100K Token 内的工具输出受保护PRUNE_PROTECTED_TOKENS绝不动刀超出保护区的旧工具输出替换为模型可见的占位符[Old tool result content cleared]——模型仍知道自己调过什么工具但不再携带完整结果技能、子代理派发等受保护工具_PROTECTED_TOOL_NAMES的输出永不清除若预计节省不足 20K TokenPRUNE_MINIMUM_TOKENS则放弃本次剪枝避免无谓扰动。剪枝是纯本地字符串替换零 LLM 成本。2. 第二级窗口压缩compaction当剪枝仍不够或上下文使用率达到阈值AUTO_TRIGGER_RATIO 0.8config.py时触发真正的摘要压缩选窗口window.py 的select_compaction_window将历史按 LLM 轮次分组从尾部保留TAIL_TOKEN_BUDGET 20_000或窗口 50%的尾部预算消息原样保留只压缩其之前的部分门槛待压缩部分不足MIN_COMPACTABLE_TOKENS 2_000则跳过——小窗口不值得花一次 LLM 调用压缩service.py 的compact_window把窗口消息转成user/assistant/tool转录稿交给提示词链session-compactioncompaction.yaml生成简报。提示词强制使用固定小节结构目标 / 决策和理由 / 相关内容 / 错误与修复 / 待办事项并附当前任务计划_current_plan_block确保压缩后 Agent 能无损续接工作持久化 冲突保护摘要连同start_seq/end_seq范围、源 Token 数、摘要 Token 数一起入库compaction_repo同一范围并发压缩会触发compaction_conflict中止保证幂等。3. 压缩本身的成本也是被计量的每次压缩都会解析响应的usage按压缩模型的输入价、输出价、缓存读价计算费用通过usage_sink计入会话账单service.py 的_usage_payload压缩模型也可单独配置为轻量模型LIGHT_MODEL_REFERENCE。Token 统计统一走 tokens.py 的 tiktoken 本地计数不依赖模型侧返回。四、成本优化之道小结策略位置效果分级上下文金字塔context_builder.py远场只用摘要成本降一个数量级轻量模型 字数门槛summary_config.py摘要不用贵模型短章节不生成Diff 过期检测 签名校验summary_service.py正文小改零成本复用旧摘要纯本地工具输出剪枝pruning.py零 LLM 成本回收旧工具结果尾部预算 最小可压缩门槛window.py / config.py避免小窗口无效压缩结构化简报 计划注入compaction.yaml压缩后可续接不推翻既定边界压缩用量独立计价service.py每次压缩的花费透明可查五、结语OpenFic 的记忆系统给 AI 应用开发者的启发在于成本优化不是单一技巧而是一套分级 惰性 计量的组合拳——用金字塔结构减少输入用 diff 与签名避免重复计算用纯本地剪枝兜底用最小门槛抑制无效调用最后让每一次 LLM 花费都被记账。想深入了解推荐阅读源码入口 summary_service.py、context_builder.py 与 agent_runtime/context/ 目录。赞分享AI 应用人工智能大模型AI AgentRAG后端前端桌面应用【免费下载链接】OpenFic专为小说创作打造的跨平台、用户友好、AI Native 的一站式 Vibe Writing 工具。A cross-platform, user-friendly, AI-native, all-in-one Vibe Writing tool designed specifically for novel writing.项目地址https://gitcode.com/gh_mirrors/op/OpenFic点击查看免费下载相关推荐从文档到摘要Kernel Memory智能摘要生成的全流程技术解析从文档到摘要Kernel Memory智能摘要生成的全流程技术解析 你是否还在为处理海量文档而烦恼面对成百上千页的报告、论文和资料如何快速提取核心信息成为ImageScript完全指南零依赖JavaScript图像处理的终极解决方案ImageScript完全指南零依赖JavaScript图像处理的终极解决方案 ImageScript是一款零依赖的JavaScript图像处理工具为开发者Data-Science-EBooks数据科学学习者的终极免费资源宝库Data Science EBooks数据科学学习者的终极免费资源宝库 你是否正在寻找高质量的数据科学学习资源Data Science EBooks项目为你创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

六西格玛在小家电制造业的降本增效实践

六西格玛在小家电制造业的降本增效实践

1. 项目背景:小家电行业的生存困境与转型契机去年夏天,我在广东顺德拜访了一家专做厨房小家电的代工厂。走进车间时,老板老陈正对着满仓库的滞销空气炸锅发愁:"价格已经压到成本线,客户还在要求降价,这…

2026/10/14 0:54:00 阅读更多 →
Django登录模块全解析:从需求分析到安全加固的完整指南

Django登录模块全解析:从需求分析到安全加固的完整指南

1. 登录页面到底在做什么:从需求到方案的整体拆解登录页面看起来简单,不就是两个输入框加一个按钮吗?但真正动手写的时候,你会发现它是整个系统里最容易埋坑的地方。我在多个Django全栈项目里反复重构过登录模块,每次都…

2026/10/14 0:52:57 阅读更多 →
C++实现EDF文件读写:从二进制解析到数据存储的完整指南

C++实现EDF文件读写:从二进制解析到数据存储的完整指南

1. 从一次数据对接翻车说起:EDF文件到底难在哪前阵子帮一个做睡眠监测的团队处理一批设备导出的数据,对方甩过来几十个后缀为.edf的文件,说“就是标准格式,随便读一下就行”。结果我拿文本编辑器打开一看,满屏的乱码和…

2026/10/14 0:52:57 阅读更多 →

最新新闻

组合导航中的杆臂效应与外参标定:从原理到工程实践

组合导航中的杆臂效应与外参标定:从原理到工程实践

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

2026/10/14 1:43:13 阅读更多 →
单相逆变器下垂控制原理与工程实践

单相逆变器下垂控制原理与工程实践

1. 项目概述:下垂控制在单相逆变器并机中的核心价值在分布式发电系统中,多台逆变器并联运行是提升系统容量和可靠性的关键技术。传统控制方法在并联运行时往往面临环流问题、功率分配不均等挑战。下垂控制通过模拟同步发电机的调频特性,实现了…

2026/10/14 1:43:13 阅读更多 →
医美CRM客户生命周期管理:从咨询到复购的数据主干网

医美CRM客户生命周期管理:从咨询到复购的数据主干网

简介:宏脉医美系统使用手册是一份面向医疗美容机构运营管理人员、前台接待、咨询顾问及信息化实施人员的标准化操作指南,聚焦客户数据规范化采集、新老客户精准识别与全流程业务协同管理,切实解决医美行业客户信息分散、填写不全、跨部门衔接…

2026/10/14 1:43:13 阅读更多 →
串口通信稳定性实践:分帧、超时与断线重连机制详解

串口通信稳定性实践:分帧、超时与断线重连机制详解

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

2026/10/14 1:43:13 阅读更多 →
支腿反力与静态稳定性:吊装安全计算模块全解析

支腿反力与静态稳定性:吊装安全计算模块全解析

干吊装这行越久,越明白一个道理:绝大多数事故都不是“胆大胡来”造成的,而是“以为没问题”造成的。尤其是支腿反力和整车静态稳定性这两件事,现场最容易漏算,也最容易在临界工况上出问题。支腿反力大一点、重心偏一点…

2026/10/14 1:43:13 阅读更多 →
北航机试工程思维:输入解析、缓存优化与格式鲁棒性

北航机试工程思维:输入解析、缓存优化与格式鲁棒性

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

2026/10/14 1:42:11 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →