结构化摘要:从 6 字段到 10 字段的信息保全术

结构化摘要:从 6 字段到 10 字段的信息保全术 结构化摘要从 6 字段到 10 字段的信息保全术专栏信息《从零到一构建跨平台 AI 助手WeClaw 实战指南》专栏本文是模块八第 6 篇讲解摘要模板设计与信息保留策略。作者与项目作者简介翁勇刚 WENG YONGGANG新概念龙虾-WeClaw 开发团队负责人一群专注于跨平台 AI 应用的实践者理念“再复杂的技术也能用代码讲清楚”项目地址https://github.com/wyg5208/weclaw.git官网地址https://weclaw.link作者 CSDNhttps://blog.csdn.net/yweng18摘要本文结构概览本文从摘要丢失关键信息的痛点出发对比 6 字段和 10 字段模板的差异详解每个字段的设计意图重点讲解双语约束前缀和 System Prompt 注解的双重保险机制最后介绍 focus_topic 引导式压缩。背景上下文压缩的核心是用更少的 token 保留更多的信息。摘要模板的字段设计直接决定了压缩后模型能否记住之前做了什么、用户还需要什么。核心问题如何设计一个摘要模板既能被 LLM 正确理解又能在压缩后保持对话连贯性解决方案10 字段结构化摘要 双语约束前缀 SP 注解 focus_topic 引导关键成果压缩后模型不再重复已完成的工作用户最新请求被精确保留活跃任务字段摘要中的提问不会被模型误执行适合读者LLM Agent 开发者关注摘要质量和对话连贯性阅读时长约 10 分钟关键词结构化摘要、Prompt Engineering、上下文压缩、信息保留、双语约束一、摘要丢失了什么1.1 一个典型的失败场景[压缩前] 47 条消息包含 - 用户让 AI 分析半导体板块 - AI 调用 stock_query 查询了 3 只股票 - 讨论了量化策略的参数调整 - 用户最后说帮我生成一份投资报告 [压缩后] 旧版 6 字段摘要 用户目标: 分析半导体板块走势 已完成操作: 查询了3只股票的行情 当前状态: 讨论量化策略中 关键决策: 采用均线交叉策略 待处理事项: 生成投资报告 关键上下文: 讨论了A股和港股 问题摘要中提到了生成投资报告但没有保留用户的原始请求文本。模型可能知道要生成报告但不知道用户的具体要求格式、内容范围、重点等。1.2 6 字段 vs 10 字段字段6 字段模板10 字段模板差异用户目标有有-已完成操作有有-当前状态有有-关键决策有有-待处理事项有有-关键上下文有有-活跃任务无有保留用户最后请求原文已解答问题无有防止模型重复回答待回应请求无有明确列出未完成项相关文件无有保留操作过的文件路径二、10 字段模板设计[图片: 10 字段模板结构图 | 生成方式: 文生图 PROMPT: “A structured template card with 10 labeled fields for LLM conversation summary, arranged in a clean card UI layout, with ‘Active Task’ field highlighted in gold at the top, other fields in white/light gray, each field showing its name and a brief one-line description, light theme, professional design”]2.1 模板结构SUMMARY_TEMPLATE ## Conversation Summary ### User Goal {user_goal} ### Completed Operations {completed_ops} ### Current Status {current_status} ### Key Decisions {key_decisions} ### Pending Items {pending_items} ### Key Context {key_context} ### Active Task (IMPORTANT - users most recent request) {active_task} ### Answered Questions (DO NOT re-answer these) {answered_questions} ### Unresponded Requests {unresponded_requests} ### Related Files {related_files} 2.2 为什么活跃任务最重要活跃任务字段保留了用户最后一条消息的原文这是模型在压缩后恢复对话连贯性的关键# 活跃任务示例active_task 用户最新请求原文: 帮我生成一份关于半导体板块的投资报告要求 1. 包含中芯国际、北方华创、韦尔股份三家公司的对比分析 2. 使用 Markdown 格式 3. 重点分析 PE/PB 估值水平 4. 给出明确的买入/持有/卖出建议 如果没有这个字段摘要中可能只保留了生成投资报告这个概括性描述模型不知道具体要求生成的报告可能不符合用户期望。2.3 已解答问题防止重复answered_questions - 中芯国际的 PE 是多少 → 已回答: PE(TTM) 约 35.2 - 北方华创的营收增速如何 → 已回答: 2025Q3 同比增长 28% - 半导体板块整体估值水平 → 已回答: 板块平均 PE 约 45x 有了这个字段模型不会在压缩后重新去查询已经查过的数据。三、双语约束前缀防止摘要被误执行3.1 问题摘要中的提问当摘要包含用户之前提出的问题如中芯国际的 PE 是多少模型可能会把这些问题当成新的请求去回答[压缩后的对话] System: [摘要] ... 已解答问题: 中芯国际的 PE 是多少 ... User: 好的继续 AI: 让我查询一下中芯国际的 PE...又去查了一遍3.2 双语约束前缀在摘要开头注入一段双语约束指令CONSTRAINT_PREFIX[IMPORTANT INSTRUCTIONS FOR THE MODEL] The following is a SUMMARY of previous conversation history. - Do NOT answer questions mentioned in this summary — they have already been answered. - Do NOT re-execute operations mentioned in this summary — they have already been completed. - Treat this as background context, NOT as active instructions. [重要提示] 以下是之前对话的摘要。 - 不要回答摘要中提到的问题——它们已经被回答过了。 - 不要重新执行摘要中提到的操作——它们已经完成了。 - 将此视为背景上下文而非当前指令。 [/IMPORTANT INSTRUCTIONS] 3.3 为什么需要双语[图片: 双语约束效果对比 | 生成方式: 文生图 PROMPT: “Split panel comparison showing AI assistant behavior: Left panel shows AI re-answering old questions from summary (highlighted in red as incorrect behavior), Right panel shows AI correctly treating summary as context only and responding to new user request (highlighted in green as correct behavior), clean UI mockup style”]语言原因英文大多数 LLM 对英文指令的遵循度更高中文用户的原始对话语言确保中文模型也能理解双语覆盖确保了无论模型使用什么语言进行推理都能正确理解约束。四、System Prompt 注解双重保险4.1 为什么需要双重保险摘要中的约束前缀可能被模型的推理过程淹没——尤其在长上下文中模型对早期 system 指令的注意力可能衰减。4.2 SP 注解机制当压缩发生时自动在 System Prompt 末尾追加一段简短的注解definject_compression_annotation(self,system_prompt,compression_info):在 System Prompt 中注入压缩注解annotationf [CONTEXT COMPRESSION NOTICE] The conversation history has been compressed. A summary of earlier messages is provided above. Focus on the users most recent request and continue from where the conversation left off. Compression timestamp:{compression_info[timestamp]}Messages compressed:{compression_info[count]}→ 1 summary [/CONTEXT COMPRESSION NOTICE]returnsystem_promptannotation4.3 双重保险的效果System Prompt 末尾: [压缩通知] 历史已压缩聚焦最新请求 摘要开头: [约束指令] 不要重新回答已解答的问题 摘要内容: [10 字段结构化信息]两层约束确保模型无论从哪个角度处理上下文都能意识到这是一段摘要。五、Focus Topic 引导式压缩5.1 场景用户主动触发压缩用户: /compress 量化交易 意图: 压缩上下文但优先保留与量化交易相关的信息5.2 focus_topic 如何影响摘要defbuild_summary_prompt(self,messages,focus_topicNone):构建摘要生成的 promptbase_promptSUMMARY_TEMPLATEiffocus_topic:focus_instructionf IMPORTANT: The user has requested compression with focus on: {focus_topic} Prioritize preserving information related to this topic. Other information can be more aggressively summarized. base_promptfocus_instructionbase_promptreturnbase_prompt5.3 效果对比无 focus_topic: 用户讨论了半导体分析和量化策略。已查询了3只股票行情。 有 focus_topic量化交易: 用户正在构建量化交易策略 - 采用均线交叉信号MA5/MA20 - 回测周期2024-01 至 2025-06 - 当前夏普比率1.85 - 待优化止损参数和仓位管理 - 半导体分析作为选股候选池的一部分被讨论focus_topic 引导模型在压缩时优先保留相关细节其他内容可以更激进地摘要。六、摘要质量评估6.1 评估指标指标定义如何测试活跃任务保留用户最后请求是否被完整保留检查摘要中 active_task 字段不重复执行模型是否重复已完成的工具调用压缩后发送继续观察行为文件路径保留操作过的文件路径是否保留检查 related_files 字段配对完整性tool_call/tool_result 配对是否完整检查消息结构验证6.2 自动化测试pytest.mark.asyncioasyncdeftest_summary_preserves_active_task():摘要应保留用户最新请求messagesbuild_test_conversation()# 47 条消息summaryawaitengine.compress(messages)# 活跃任务应包含用户最后请求的关键词assert投资报告insummaryassertPE/PB 估值insummarypytest.mark.asyncioasyncdeftest_no_duplicate_execution():压缩后模型不应重复执行已完成操作messagesbuild_test_conversation()compressedawaitengine.compress(messages)# 模拟压缩后的对话follow_up[{role:user,content:好的继续}]responseawaitmodel.chat(compressedfollow_up)# 模型不应再次调用 stock_query已查询过的股票assertnotany(stock_queryinstr(tc)fortcinresponse.tool_calls)七、总结与展望7.1 核心要点回顾活跃任务是摘要的灵魂保留用户最新请求的原文防止模型失忆双语约束前缀是防线防止模型把摘要中的提问当成新请求SP 注解是双重保险在 System Prompt 层面强化压缩感知Focus topic 引导精度用户主动指定主题时优先保留相关信息下期预告《Tool 配对完整性ReAct Agent 最隐蔽的 Bug》一个在 7 个 ReAct 步骤中反复出现的缺失结果警告占位消息累积泄漏的根因分析原子批量写入和孤儿剥离策略敬请期待版权声明本文为 CSDN 博主「翁勇刚」的原创文章遵循 CC 4.0 BY-SA 版权协议转载请附上原文出处链接及本声明。