[{"data":1,"prerenderedAt":1060},["ShallowReactive",2],{"post-\u002Fposts\u002Fllm-context-compression":3,"all-posts-nav":782},{"id":4,"title":5,"body":6,"categories":767,"date":769,"description":12,"draft":770,"extension":771,"hidden":770,"meta":772,"navigation":87,"path":773,"published":770,"seo":774,"stem":775,"tags":776,"__hash__":781},"posts\u002Fposts\u002Fllm-context-compression.md","LLM 上下文五层压缩机制详解",{"type":7,"value":8,"toc":756},"minimark",[9,13,17,28,31,37,40,44,51,105,108,114,116,120,125,132,138,144,149,151,155,160,175,181,186,191,193,197,202,358,364,369,374,380,382,386,391,394,458,463,479,484,486,489,494,497,569,574,583,588,591,596,599,605,607,610,719,721,724,727,733,739,745,752],[10,11,12],"p",{},"做 Agent 项目时，对话持续进行，token 会不断累积，迟早超出模型的 context window。这篇文章整理一套五层上下文压缩机制，从轻到重依次触发，核心思路是\"能少压就少压，实在不行再大压\"。",[14,15,16],"h2",{"id":16},"整体逻辑",[18,19,24],"pre",{"className":20,"code":22,"language":23},[21],"language-text","对话持续进行 → Token 接近上限 → 触发压缩 → 压缩成功继续 → 压缩失败升级到下一层\n","text",[25,26,22],"code",{"__ignoreMap":27},"",[10,29,30],{},"五层从左到右，压缩力度递增，成本也递增：",[18,32,35],{"className":33,"code":34,"language":23},[21],"Tool Result Replace → Snip Compact → Micro Compact → Context Collapse → Auto Compact\n      极低成本              低               低              高              最高\n",[25,36,34],{"__ignoreMap":27},[38,39],"hr",{},[14,41,43],{"id":42},"第一层tool-result-replace","第一层：Tool Result Replace",[10,45,46,50],{},[47,48,49],"strong",{},"做什么："," 把工具调用的返回结果替换掉，只保留占位符。",[18,52,56],{"className":53,"code":54,"language":55,"meta":27,"style":27},"language-python shiki shiki-themes github-dark-dimmed github-light","# 原来\ntool_result = \"这是一段很长的日志输出，有几千行...\"\n\n# 替换后\ntool_result = \"[已压缩，原始结果已清除]\"\n","python",[25,57,58,67,82,89,95],{"__ignoreMap":27},[59,60,63],"span",{"class":61,"line":62},"line",1,[59,64,66],{"class":65},"sgHix","# 原来\n",[59,68,70,74,78],{"class":61,"line":69},2,[59,71,73],{"class":72},"ssh_m","tool_result ",[59,75,77],{"class":76},"s6PUj","=",[59,79,81],{"class":80},"sXfbr"," \"这是一段很长的日志输出，有几千行...\"\n",[59,83,85],{"class":61,"line":84},3,[59,86,88],{"emptyLinePlaceholder":87},true,"\n",[59,90,92],{"class":61,"line":91},4,[59,93,94],{"class":65},"# 替换后\n",[59,96,98,100,102],{"class":61,"line":97},5,[59,99,73],{"class":72},[59,101,77],{"class":76},[59,103,104],{"class":80}," \"[已压缩，原始结果已清除]\"\n",[10,106,107],{},"工具返回了大量原始数据（日志、代码、搜索结果），但后续对话其实不需要完整内容，只需要知道\"调用过这个工具、拿到了结果\"。",[10,109,110,113],{},[47,111,112],{},"成本："," 极低，只是字符串替换，不需要调用 LLM。",[38,115],{},[14,117,119],{"id":118},"第二层snip-compact","第二层：Snip Compact",[10,121,122,124],{},[47,123,49],{}," 精准裁剪，找到对话里最占空间的片段，把它们缩短，但保留上下文结构。",[10,126,127,128,131],{},"比如一个很长的 ",[25,129,130],{},"tool_result"," 块，只保留前几行 + 末尾摘要，中间截断：",[18,133,136],{"className":134,"code":135,"language":23},[21],"[原始内容前100行]\n... [中间 2000 行已截断] ...\n[原始内容最后20行]\n",[25,137,135],{"__ignoreMap":27},[10,139,140,143],{},[47,141,142],{},"适用场景："," 有几个特别大的消息拖累了整体 token 数，其他消息都正常。",[10,145,146,148],{},[47,147,112],{}," 低，基于规则裁剪，不需要 LLM。",[38,150],{},[14,152,154],{"id":153},"第三层micro-compact","第三层：Micro Compact",[10,156,157,159],{},[47,158,49],{}," 清理掉已经没用的工具调用记录。",[10,161,162,163,166,167,170,171,174],{},"比如 ",[25,164,165],{},"cache_read","、",[25,168,169],{},"cache_write"," 这类中间过程的工具调用，任务完成后这些记录对后续对话没有价值，直接标记为 ",[25,172,173],{},"[tool cleared]"," 删掉。",[18,176,179],{"className":177,"code":178,"language":23},[21],"# 删除前\n[tool_use: cache_write, params: {...}, result: \"ok\"]\n[tool_use: cache_read, params: {...}, result: \"...大量内容...\"]\n\n# 删除后\n[tool cleared]\n[tool cleared]\n",[25,180,178],{"__ignoreMap":27},[10,182,183,185],{},[47,184,142],{}," 对话里有大量中间步骤的工具调用，但最终结果已经体现在后续消息里了。",[10,187,188,190],{},[47,189,112],{}," 低，规则删除，不需要 LLM。",[38,192],{},[14,194,196],{"id":195},"第四层context-collapse","第四层：Context Collapse",[10,198,199,201],{},[47,200,49],{}," 不再保留原始消息，把整段历史对话喂给 LLM，让它生成一个 summary，用 summary 替代原始历史。",[18,203,205],{"className":53,"code":204,"language":55,"meta":27,"style":27},"def context_collapse(history):\n    prompt = f\"\"\"\n请将以下对话历史压缩为简洁摘要，保留：\n- 用户的核心目标和需求\n- 已完成的重要操作\n- 关键决策和结论\n- 当前任务状态\n\n对话历史：\n{format_history(history)}\n\"\"\"\n    summary = llm.call(prompt)\n    \n    # 用摘要替代原始历史\n    return [{\"role\": \"system\", \"content\": f\"[历史摘要]\\n{summary}\"}]\n",[25,206,207,219,232,237,242,247,253,259,264,270,283,288,299,305,311],{"__ignoreMap":27},[59,208,209,212,216],{"class":61,"line":62},[59,210,211],{"class":76},"def",[59,213,215],{"class":214},"saVmf"," context_collapse",[59,217,218],{"class":72},"(history):\n",[59,220,221,224,226,229],{"class":61,"line":69},[59,222,223],{"class":72},"    prompt ",[59,225,77],{"class":76},[59,227,228],{"class":76}," f",[59,230,231],{"class":80},"\"\"\"\n",[59,233,234],{"class":61,"line":84},[59,235,236],{"class":80},"请将以下对话历史压缩为简洁摘要，保留：\n",[59,238,239],{"class":61,"line":91},[59,240,241],{"class":80},"- 用户的核心目标和需求\n",[59,243,244],{"class":61,"line":97},[59,245,246],{"class":80},"- 已完成的重要操作\n",[59,248,250],{"class":61,"line":249},6,[59,251,252],{"class":80},"- 关键决策和结论\n",[59,254,256],{"class":61,"line":255},7,[59,257,258],{"class":80},"- 当前任务状态\n",[59,260,262],{"class":61,"line":261},8,[59,263,88],{"emptyLinePlaceholder":87},[59,265,267],{"class":61,"line":266},9,[59,268,269],{"class":80},"对话历史：\n",[59,271,273,277,280],{"class":61,"line":272},10,[59,274,276],{"class":275},"sxsTv","{",[59,278,279],{"class":72},"format_history(history)",[59,281,282],{"class":275},"}\n",[59,284,286],{"class":61,"line":285},11,[59,287,231],{"class":80},[59,289,291,294,296],{"class":61,"line":290},12,[59,292,293],{"class":72},"    summary ",[59,295,77],{"class":76},[59,297,298],{"class":72}," llm.call(prompt)\n",[59,300,302],{"class":61,"line":301},13,[59,303,304],{"class":72},"    \n",[59,306,308],{"class":61,"line":307},14,[59,309,310],{"class":65},"    # 用摘要替代原始历史\n",[59,312,314,317,320,323,326,329,332,335,337,340,343,346,349,352,355],{"class":61,"line":313},15,[59,315,316],{"class":76},"    return",[59,318,319],{"class":72}," [{",[59,321,322],{"class":80},"\"role\"",[59,324,325],{"class":72},": ",[59,327,328],{"class":80},"\"system\"",[59,330,331],{"class":72},", ",[59,333,334],{"class":80},"\"content\"",[59,336,325],{"class":72},[59,338,339],{"class":76},"f",[59,341,342],{"class":80},"\"[历史摘要]",[59,344,345],{"class":275},"\\n{",[59,347,348],{"class":72},"summary",[59,350,351],{"class":275},"}",[59,353,354],{"class":80},"\"",[59,356,357],{"class":72},"}]\n",[18,359,362],{"className":360,"code":361,"language":23},[21],"原来：[20轮完整对话，8000 token]\n压缩后：[1条 summary 消息，500 token]\n",[25,363,361],{"__ignoreMap":27},[10,365,366,368],{},[47,367,142],{}," 前三层都压不下去，token 还是超限。",[10,370,371,373],{},[47,372,112],{}," 高，需要调用一次 LLM 生成摘要，有延迟和费用。",[10,375,376,379],{},[47,377,378],{},"注意："," 这一层只压 Model-Facing 部分（发给模型的消息），不压 Raw Messages（原始记录），保留审计能力。",[38,381],{},[14,383,385],{"id":384},"第五层auto-compact","第五层：Auto Compact",[10,387,388,390],{},[47,389,49],{}," 完全重建上下文。生成一个新的 compact prompt 作为全新对话的起点，原始历史全部丢弃。",[10,392,393],{},"新的起点包含三部分：",[18,395,397],{"className":53,"code":396,"language":55,"meta":27,"style":27},"compact_prompt = {\n    \"boundary\": \"当前任务边界和约束\",      # 告诉模型它在做什么\n    \"summary\": \"历史摘要\",                 # 之前发生了什么\n    \"assistant_context\": \"必要的角色设定\"  # 模型应该以什么状态继续\n}\n",[25,398,399,409,425,441,454],{"__ignoreMap":27},[59,400,401,404,406],{"class":61,"line":62},[59,402,403],{"class":72},"compact_prompt ",[59,405,77],{"class":76},[59,407,408],{"class":72}," {\n",[59,410,411,414,416,419,422],{"class":61,"line":69},[59,412,413],{"class":80},"    \"boundary\"",[59,415,325],{"class":72},[59,417,418],{"class":80},"\"当前任务边界和约束\"",[59,420,421],{"class":72},",      ",[59,423,424],{"class":65},"# 告诉模型它在做什么\n",[59,426,427,430,432,435,438],{"class":61,"line":84},[59,428,429],{"class":80},"    \"summary\"",[59,431,325],{"class":72},[59,433,434],{"class":80},"\"历史摘要\"",[59,436,437],{"class":72},",                 ",[59,439,440],{"class":65},"# 之前发生了什么\n",[59,442,443,446,448,451],{"class":61,"line":91},[59,444,445],{"class":80},"    \"assistant_context\"",[59,447,325],{"class":72},[59,449,450],{"class":80},"\"必要的角色设定\"",[59,452,453],{"class":65},"  # 模型应该以什么状态继续\n",[59,455,456],{"class":61,"line":97},[59,457,282],{"class":72},[10,459,460],{},[47,461,462],{},"内部还分两档：",[464,465,466,473],"ul",{},[467,468,469,472],"li",{},[47,470,471],{},"Session Memory Compact（轻量）："," 用已有的 session memory 替代，成本低，但信息可能不完整，适合对话内容不太重要的场景",[467,474,475,478],{},[47,476,477],{},"Full Compact（兜底）："," 完整重建，成本最高，但保证能继续运行，是最后的兜底手段",[10,480,481,483],{},[47,482,142],{}," 对话极长，前四层都无法把 token 压到窗口以内。",[38,485],{},[14,487,488],{"id":488},"机制设计要点",[10,490,491],{},[47,492,493],{},"容量精准计算",[10,495,496],{},"不用固定阈值，而是动态计算可用窗口：",[18,498,500],{"className":53,"code":499,"language":55,"meta":27,"style":27},"def get_effective_context_window():\n    total = model.context_window          # 模型总窗口\n    reserved_output = max_output_tokens   # 预留给输出的空间\n    reserved_system = system_prompt_size  # 系统 prompt 占用\n    return total - reserved_output - reserved_system\n",[25,501,502,512,525,538,551],{"__ignoreMap":27},[59,503,504,506,509],{"class":61,"line":62},[59,505,211],{"class":76},[59,507,508],{"class":214}," get_effective_context_window",[59,510,511],{"class":72},"():\n",[59,513,514,517,519,522],{"class":61,"line":69},[59,515,516],{"class":72},"    total ",[59,518,77],{"class":76},[59,520,521],{"class":72}," model.context_window          ",[59,523,524],{"class":65},"# 模型总窗口\n",[59,526,527,530,532,535],{"class":61,"line":84},[59,528,529],{"class":72},"    reserved_output ",[59,531,77],{"class":76},[59,533,534],{"class":72}," max_output_tokens   ",[59,536,537],{"class":65},"# 预留给输出的空间\n",[59,539,540,543,545,548],{"class":61,"line":91},[59,541,542],{"class":72},"    reserved_system ",[59,544,77],{"class":76},[59,546,547],{"class":72}," system_prompt_size  ",[59,549,550],{"class":65},"# 系统 prompt 占用\n",[59,552,553,555,558,561,564,566],{"class":61,"line":97},[59,554,316],{"class":76},[59,556,557],{"class":72}," total ",[59,559,560],{"class":76},"-",[59,562,563],{"class":72}," reserved_output ",[59,565,560],{"class":76},[59,567,568],{"class":72}," reserved_system\n",[10,570,571],{},[47,572,573],{},"缓存优先策略",[10,575,576,577,579,580,582],{},"压缩时优先保留 ",[25,578,165],{},"\u002F",[25,581,169],{}," 相关内容，避免缓存失效导致重复计算费用。",[10,584,585],{},[47,586,587],{},"结构完整性保障",[10,589,590],{},"压缩后保证 thinking\u002Ftool_use 配对完整，不出现孤立的工具调用（没有对应 tool_result 的 tool_use 会导致 API 报错）。",[10,592,593],{},[47,594,595],{},"失败兜底",[10,597,598],{},"每层失败都有明确的升级路径：",[18,600,603],{"className":601,"code":602,"language":23},[21],"第1层失败 → 升级到第2层\n第2层失败 → 升级到第3层\n...\n第5层失败 → 报错，人工介入\n",[25,604,602],{"__ignoreMap":27},[38,606],{},[14,608,609],{"id":609},"五层对比",[611,612,613,635],"table",{},[614,615,616],"thead",{},[617,618,619,623,626,629,632],"tr",{},[620,621,622],"th",{},"层级",[620,624,625],{},"方式",[620,627,628],{},"成本",[620,630,631],{},"信息损失",[620,633,634],{},"触发条件",[636,637,638,656,671,686,703],"tbody",{},[617,639,640,644,647,650,653],{},[641,642,643],"td",{},"Tool Result Replace",[641,645,646],{},"替换工具结果为占位符",[641,648,649],{},"极低",[641,651,652],{},"低",[641,654,655],{},"工具结果过大",[617,657,658,661,664,666,668],{},[641,659,660],{},"Snip Compact",[641,662,663],{},"裁剪大消息中间部分",[641,665,652],{},[641,667,652],{},[641,669,670],{},"单条消息过大",[617,672,673,676,679,681,683],{},[641,674,675],{},"Micro Compact",[641,677,678],{},"删除无用工具调用记录",[641,680,652],{},[641,682,649],{},[641,684,685],{},"中间步骤堆积",[617,687,688,691,694,697,700],{},[641,689,690],{},"Context Collapse",[641,692,693],{},"LLM 生成历史摘要",[641,695,696],{},"高",[641,698,699],{},"中",[641,701,702],{},"前三层不够用",[617,704,705,708,711,714,716],{},[641,706,707],{},"Auto Compact",[641,709,710],{},"完全重建上下文",[641,712,713],{},"最高",[641,715,696],{},[641,717,718],{},"最后兜底",[38,720],{},[14,722,723],{"id":723},"实际项目怎么选",[10,725,726],{},"大多数 Agent 项目不需要实现全部五层，按场景选：",[10,728,729,732],{},[47,730,731],{},"短会话 Agent（每次对话独立，如运维告警）："," 滑动窗口就够，不需要压缩机制。",[10,734,735,738],{},[47,736,737],{},"中等长度对话（如代码助手、问答）："," 实现第1层（Tool Result Replace）+ 第4层（Context Collapse）基本够用，覆盖了 80% 的场景。",[10,740,741,744],{},[47,742,743],{},"超长会话（如长期任务执行、个人助手）："," 需要完整五层，或者引入向量库做长期记忆。",[10,746,747,748,751],{},"面试被问到\"你的 Agent 怎么处理长对话\"，不要只说\"我用了摘要压缩\"，说清楚",[47,749,750],{},"在哪一层触发、为什么不需要更重的层","，才能体现你对整个方案空间的理解。",[753,754,755],"style",{},"html pre.shiki code .sgHix, html code.shiki .sgHix{--shiki-default:#768390;--shiki-light:#6A737D}html pre.shiki code .ssh_m, html code.shiki .ssh_m{--shiki-default:#ADBAC7;--shiki-light:#24292E}html pre.shiki code .s6PUj, html code.shiki .s6PUj{--shiki-default:#F47067;--shiki-light:#D73A49}html pre.shiki code .sXfbr, html code.shiki .sXfbr{--shiki-default:#96D0FF;--shiki-light:#032F62}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html pre.shiki code .saVmf, html code.shiki .saVmf{--shiki-default:#DCBDFB;--shiki-light:#6F42C1}html pre.shiki code .sxsTv, html code.shiki .sxsTv{--shiki-default:#F47067;--shiki-light:#005CC5}",{"title":27,"searchDepth":69,"depth":84,"links":757},[758,759,760,761,762,763,764,765,766],{"id":16,"depth":69,"text":16},{"id":42,"depth":69,"text":43},{"id":118,"depth":69,"text":119},{"id":153,"depth":69,"text":154},{"id":195,"depth":69,"text":196},{"id":384,"depth":69,"text":385},{"id":488,"depth":69,"text":488},{"id":609,"depth":69,"text":609},{"id":723,"depth":69,"text":723},[768],"技术","2026-04-24",false,"md",{},"\u002Fposts\u002Fllm-context-compression",{"title":5,"description":12},"posts\u002Fllm-context-compression",[777,778,779,780],"LLM","Agent","上下文压缩","面试","mLy2EUg5OyHfrF_pHyL5v18lkrMRU31xzQnEmgdPdmw",[783,796,807,813,825,834,843,853,864,873,882,894,907,919,928,938,950,961,971,979,990,995,998,1004,1012,1021,1029,1035,1043,1051],{"slug":784,"path":785,"title":786,"date":787,"tags":788,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":266},"multimodal-rag-from-scratch","\u002Fposts\u002Fmultimodal-rag-from-scratch","从零实现多模态 RAG：BM25、Dense 检索、RRF 融合、MMR 重排全部手写","2026-06-30 18:00:00",[789,790,791,792,793,794,795],"RAG","多模态","AI Infra","BM25","向量检索","混合检索","实习求职",{"slug":797,"path":798,"title":799,"date":800,"tags":801,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":285},"mini-llm-engine-deep-dive","\u002Fposts\u002Fmini-llm-engine-deep-dive","讲透 mini-llm-engine：从显存碎片到六大推理优化","2026-06-30 14:00:00",[777,791,802,803,804,805,806,795],"vLLM","PagedAttention","KV Cache","推理优化","投机解码",{"slug":808,"path":809,"title":810,"date":811,"tags":812,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":272},"mini-llm-engine-from-scratch","\u002Fposts\u002Fmini-llm-engine-from-scratch","从零实现 LLM 推理引擎：深挖 vLLM 的六大核心优化","2026-06-30 10:00:00",[777,791,802,803,805,806,795],{"slug":814,"path":815,"title":816,"date":817,"tags":818,"description":823,"draft":770,"hidden":770,"published":87,"readingTime":824},"bytedance-recommendation-architecture-intern-interview","\u002Fposts\u002Fbytedance-recommendation-architecture-intern-interview","字节推荐架构实习生 Data 面试准备：推荐系统、实时特征与高并发八股","2026-06-09",[780,819,820,821,822],"推荐系统","后端架构","实时计算","字节跳动","面向字节跳动推荐架构团队实习岗位的八股准备清单，覆盖推荐系统链路、实时数据、特征服务、高并发后端、分布式系统与项目包装。",18,{"slug":826,"path":827,"title":828,"date":817,"tags":829,"description":833,"draft":770,"hidden":770,"published":87,"readingTime":290},"high-concurrency-rate-limiting-algorithms","\u002Fposts\u002Fhigh-concurrency-rate-limiting-algorithms","高并发限流算法：固定窗口、滑动窗口、漏桶与令牌桶",[830,831,820,832,780],"高并发","限流","系统设计","面试和工程都常见的限流算法总结，讲清楚固定窗口、滑动窗口、漏桶、令牌桶、并发数限制以及分布式限流如何落地。",{"slug":835,"path":836,"title":837,"date":817,"tags":838,"description":842,"draft":770,"hidden":770,"published":87,"readingTime":261},"kafka-producer-broker-consumer","\u002Fposts\u002Fkafka-producer-broker-consumer","Kafka 入门：生产者、Broker、消费者和“消费”到底是什么意思",[839,840,841,780,819],"Kafka","消息队列","后端","用推荐系统里的用户行为日志为例，讲清楚 Kafka 的作用、Producer、Broker、Consumer、Topic、Partition、Offset 和消费语义。",{"slug":844,"path":845,"title":846,"date":817,"tags":847,"description":852,"draft":770,"hidden":770,"published":87,"readingTime":249},"leetcode-lru-merge-k-reverse-list","\u002Fposts\u002Fleetcode-lru-merge-k-reverse-list","链表与缓存高频题：LRU Cache、合并 K 个有序链表、反转链表",[848,849,850,851,780],"算法","链表","LRU","LeetCode","面试高频算法题速记，整理 LRU Cache、合并 K 个有序链表、反转链表的核心思路、复杂度和 C++ 代码。",{"slug":854,"path":855,"title":856,"date":857,"tags":858,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":863},"meddococr-interpreter-source-analysis","\u002Fposts\u002Fmeddococr-interpreter-source-analysis","MedDocOCR-Interpreter 源码导读：医疗文档 OCR、结构化抽取与报告解读原型","2026-05-22 10:30:00",[859,790,860,789,861,862],"OCR","医疗 AI","Python","源码分析",16,{"slug":865,"path":866,"title":867,"date":868,"tags":869,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":272},"cet6-writing-model-essays","\u002Fposts\u002Fcet6-writing-model-essays","六级写作范文背诵包：10 个高频话题","2026-05-20 09:00:00",[870,871,872],"English","CET6","Writing",{"slug":874,"path":875,"title":876,"date":877,"tags":878,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":881},"claude-code-context-management","\u002Fposts\u002Fclaude-code-context-management","Claude Code 上下文管理机制：从 Microcompact 到 Auto Compact","2026-05-19 10:00:00",[879,778,777,791,880],"Claude Code","上下文工程",27,{"slug":883,"path":884,"title":885,"date":886,"tags":887,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":893},"nanotron-llm-pretraining-framework-analysis","\u002Fposts\u002Fnanotron-llm-pretraining-framework-analysis","Nanotron 项目详解：Hugging Face 的大模型预训练框架怎么做分布式训练","2026-05-10 12:10:00",[777,888,889,890,891,791,892],"大模型训练","分布式训练","Nanotron","Hugging Face","PyTorch",19,{"slug":895,"path":896,"title":897,"date":898,"tags":899,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":906},"gofoundry-go-backend-foundation-framework","\u002Fposts\u002Fgofoundry-go-backend-foundation-framework","GoFoundry 项目详解：基于 Go 的后端基础框架套件设计","2026-05-10 11:20:00",[900,901,902,903,904,840,905],"Go","后端框架","ORM","分布式缓存","分布式锁","项目架构",25,{"slug":908,"path":909,"title":910,"date":911,"tags":912,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":881},"cloudvault-go-cloud-storage-system","\u002Fposts\u002Fcloudvault-go-cloud-storage-system","CloudVault 项目详解：基于 Go 的云端存储与网盘系统架构设计","2026-05-10 10:30:00",[900,913,914,915,905,916,917,918],"云存储","网盘系统","分布式系统","Redis","RabbitMQ","Elasticsearch",{"slug":920,"path":921,"title":922,"date":923,"tags":924,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":927},"openclaw-source-code-analysis","\u002Fposts\u002Fopenclaw-source-code-analysis","OpenClaw 源码导读：个人 AI 助手的网关、通道、插件与运行时架构","2026-05-08 16:30:00",[925,778,791,926,862],"OpenClaw","TypeScript",20,{"slug":929,"path":930,"title":931,"date":932,"tags":933,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":272},"flow-matching-generative-models","\u002Fposts\u002Fflow-matching-generative-models","Flow Matching：从噪声到数据的连续流生成模型","2026-05-07 00:00:00",[934,935,936,937],"生成模型","Diffusion","Flow Matching","深度学习",{"slug":939,"path":940,"title":941,"date":942,"tags":943,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":313},"database-ai-week4","\u002Fposts\u002Fdatabase-ai-week4","Week 4：数据库速成——从 Storage、Index、Query Optimization 到 Vector DB 与 RAG","2026-05-05 12:00:00",[944,945,946,789,947,948,949],"数据库","CMU 15-445","Vector DB","LLM Memory","Query Optimization","Caching",{"slug":951,"path":952,"title":953,"date":954,"tags":955,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":863},"distributed-systems-week3","\u002Fposts\u002Fdistributed-systems-week3","Week 3：分布式系统速成——MapReduce、Raft、容错与 Distributed KV Store","2026-05-05 11:00:00",[915,956,957,958,959,960,778],"MIT 6.824","MapReduce","Raft","KV Store","Ray",{"slug":962,"path":963,"title":964,"date":965,"tags":966,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":313},"gpu-inference-acceleration-week2","\u002Fposts\u002Fgpu-inference-acceleration-week2","Week 2：GPU 与推理加速——从 Kernel、算子融合到 LLM Serving","2026-05-05 10:00:00",[937,967,968,777,969,802,970],"GPU","推理加速","CMU 10-414","TensorRT",{"slug":972,"path":973,"title":974,"date":975,"tags":976,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":824},"dl-framework-autograd-mini","\u002Fposts\u002Fdl-framework-autograd-mini","Week 1：DL 框架与 Autograd——从计算图、反向传播到 Mini Autograd 实现","2026-05-05 09:00:00",[937,977,892,969,978],"Autograd","Mini Framework",{"slug":980,"path":981,"title":982,"date":983,"tags":984,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":290},"lock-free-concurrency-notes","\u002Fposts\u002Flock-free-concurrency-notes","无锁并发入门：从 CAS 到 Atomic Ring Buffer","2026-04-25",[985,986,987,988,989],"C++","并发","无锁编程","性能优化","量化开发",{"slug":991,"path":992,"title":993,"date":769,"tags":994,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":97},"agent-memory","\u002Fposts\u002Fagent-memory","Agent 对话记忆化：从原理到实现",[777,778,789,780],{"slug":996,"path":773,"title":5,"date":769,"tags":997,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":249},"llm-context-compression",[777,778,779,780],{"slug":999,"path":1000,"title":1001,"date":1002,"tags":1003,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":266},"cpp-concurrency-basics","\u002Fposts\u002Fcpp-concurrency-basics","C++ 并发编程入门：从数据竞争到线程池","2026-04-15",[985,986,780,989],{"slug":1005,"path":1006,"title":1007,"date":1008,"tags":1009,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":62},"travel-in-shenzhen","\u002Fposts\u002Ftravel-in-shenzhen","XCPC 深圳游记","2026-04-13",[1010,985,1011],"XCPC","比赛",{"slug":1013,"path":1014,"title":1015,"date":1016,"tags":1017,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":255},"backend-stack-deep-dive","\u002Fposts\u002Fbackend-stack-deep-dive","后端五件套：FastAPI \u002F Node.js \u002F SQLAlchemy async \u002F PostgreSQL \u002F Docker 面试速通","2026-04-07",[841,1018,1019,1020,780],"FastAPI","PostgreSQL","Docker",{"slug":1022,"path":1023,"title":1024,"date":1025,"tags":1026,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":249},"deepscientist-tech-stack","\u002Fposts\u002Fdeepscientist-tech-stack","DeepScientist 技术栈全解析：一个 AI 科研平台的架构设计","2026-04-06",[1027,1018,1028,1019,780],"全栈","Next.js",{"slug":1030,"path":1031,"title":1032,"date":1025,"tags":1033,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":261},"minicode-source-analysis","\u002Fposts\u002Fminicode-source-analysis","MiniCode 源码解析：用 5000 行 TypeScript 实现一个 AI 编程助手",[926,1034,777,862,780],"CLI",{"slug":1036,"path":1037,"title":1038,"date":1025,"tags":1039,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":97},"nova-theme-implementation","\u002Fposts\u002Fnova-theme-implementation","我是怎么从零实现 Nova 主题的",[1040,1041,1042],"Hexo","前端","开源",{"slug":1044,"path":1045,"title":1046,"date":1047,"tags":1048,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":69},"git-cheatsheet","\u002Fposts\u002Fgit-cheatsheet","Git 常用操作备忘","2026-04-05 14:00:00",[1049,1050],"Git","工具",{"slug":1052,"path":1053,"title":1054,"date":1055,"tags":1056,"description":27,"draft":770,"hidden":770,"published":87,"readingTime":84},"github-actions-intro","\u002Fposts\u002Fgithub-actions-intro","GitHub Actions 入门：自动化你的工作流","2026-04-04 09:00:00",[1057,1058,1059],"GitHub Actions","CI\u002FCD","自动化",1782796012377]