<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[扳布屋]]></title><description><![CDATA[Le vent se lève, il faut tenter de vivre]]></description><link>https://bambooo.top</link><image><url>https://bambooo.top/api/v3/objects/icon/eecxeei096z6wkn53g.png</url><title>扳布屋</title><link>https://bambooo.top</link></image><generator>Yohaku (https://github.com/Innei/Yohaku)</generator><lastBuildDate>Sun, 20 Sep 2026 17:40:04 GMT</lastBuildDate><atom:link href="https://bambooo.top/feed" rel="self" type="application/rss+xml"/><pubDate>Sun, 20 Sep 2026 17:40:04 GMT</pubDate><language><![CDATA[zh-CN]]></language><item><title><![CDATA[达利园效应]]></title><description><![CDATA[<p>往原址览之：<a href="https://bambooo.top/notes/12">https://bambooo.top/notes/12</a></p>]]></description><link>https://bambooo.top/notes/12</link><guid isPermaLink="true">https://bambooo.top/notes/12</guid><dc:creator><![CDATA[扳布]]></dc:creator><pubDate>Wed, 19 Aug 2026 13:40:03 GMT</pubDate></item><item><title><![CDATA[该如何应对老一辈的固执呢]]></title><description><![CDATA[<p>往原址览之：<a href="https://bambooo.top/notes/10">https://bambooo.top/notes/10</a></p>]]></description><link>https://bambooo.top/notes/10</link><guid isPermaLink="true">https://bambooo.top/notes/10</guid><dc:creator><![CDATA[扳布]]></dc:creator><pubDate>Sun, 16 Aug 2026 14:43:48 GMT</pubDate></item><item><title><![CDATA[Deepseek抽象的72h]]></title><description><![CDATA[<p>往原址览之：<a href="https://bambooo.top/posts/tech/deepseek-abstract-72h">https://bambooo.top/posts/tech/deepseek-abstract-72h</a></p>]]></description><link>https://bambooo.top/posts/tech/deepseek-abstract-72h</link><guid isPermaLink="true">https://bambooo.top/posts/tech/deepseek-abstract-72h</guid><dc:creator><![CDATA[扳布]]></dc:creator><pubDate>Sat, 15 Aug 2026 04:49:29 GMT</pubDate></item><item><title><![CDATA[全民编程时代开始]]></title><description><![CDATA[<p>往原址览之：<a href="https://bambooo.top/posts/think/easy_coding">https://bambooo.top/posts/think/easy_coding</a></p>]]></description><link>https://bambooo.top/posts/think/easy_coding</link><guid isPermaLink="true">https://bambooo.top/posts/think/easy_coding</guid><dc:creator><![CDATA[扳布]]></dc:creator><pubDate>Thu, 16 Jul 2026 12:38:45 GMT</pubDate></item><item><title><![CDATA[GLM5.2 如何“四两拨千斤”]]></title><description><![CDATA[<link rel="preload" as="image" href="https://bambooo.top/api/v3/objects/image/uo6duzfsk2xruc8ozy.webp"/><div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://bambooo.top/posts/tech/glm52_rl">https://bambooo.top/posts/tech/glm52_rl</a></blockquote><div><h2 id="tldr">TL;DR</h2><p>距离GLM5.2发布了快一个月，我也从发布第一天用到了现在，编程能力上，在国内肯定是稳居第一（这里提一嘴，dsv4正式版快出来了，也看到B站有人被灰测到了，做了一系列“一句话生成一个游戏”实践，其中“一句话生成CS”效果确实惊艳，一次成功可用，效果也非常好，全面开放预计下星期，感觉有望超过GLM5.2）。回到正题，GLM5.2在多项benchmark保持开源SOTA，在前端开发评估系统 Code Arena 上更是在一段时间内成为世界可用大模型第一（之所以是一段时间，是因为Fable5刚出来就被ban掉了，现在重新放出来了）。GLM5.2的参数量是公开的的 —— 753B，Claude opus4系列由于闭源，参数量无法得知，网传比较多的是 5T，来源大概率是马斯克在推上的回复
<img height="374" src="https://bambooo.top/api/v3/objects/image/uo6duzfsk2xruc8ozy.webp" width="899"/>
有不少博主根据推理速度反推了opus 规模在 1.5T ~ 2.5T 之间，至少也是GLM5.2的2倍，这也解释了为什么GLM5.2会被诟病解决一个问题要思考很长时间，在参数量不够的情况下，想生成质量更高的回答，把思维链拉长是一个不错的方案，让大模型充分思考（目前国内缺卡太严重了，马斯克自家已经在训10T了，国内最大的只有deepseek的v4以及美团的longcat2.0达到1.6T，GLM5.2更是一直被吐槽工作日卡爆，哎，没招儿）。</p><p>接下来就聊聊GLM5.2靠什么和至少2倍参数量的opus打的有来有回。</p><blockquote><p>重要提示，这篇文章主要探讨GLM5在后训练上所做的努力，这也是我接下来想学习的一个方向。</p></blockquote>
<h2 id="-grpo--critic-based-ppo">从 GRPO 组内比较，切换到 critic-based PPO</h2><blockquote><p>GLM5的技术报告中的方案是 ??GRPO(Group Relative Policy Optimization（组相对策略优化）)?? + IcePop 变体（处理训练推理不一致），而在 GLM5.2 的技术blog中指出切换到 ??PPO(Proximal Policy Optimization（近端策略优化）)??</p></blockquote>
<p>强化学习最基础的一类算法叫<strong>策略梯度(Policy Gradient)</strong>，它的核心思想是：如果一个动作最终带来了最高奖励，就调高这个动作的概率；带来低奖励，就调低概率。公式为：</p>
<p>$$
\nabla<em>{\theta} J(\theta) = \mathbb{E}[\nabla</em>{\theta} \log \pi<em>{\theta}(a</em>t | s<em>t) \cdot R</em>t]
$$</p><p>其中$R<em>t$是这个动作最终获得的（累积）奖励，在实践中会有一个大问题：**$R</em>t$ 的方差通常非常大**。举个例子，你在训练一个模型解数学题，即便模型这次侥幸蒙对了（回答正确，$R<em>t$ = 1），也不代表它这次的具体解题过程真的是&quot;应该被强化&quot;的高质量输出；反过来，一次思路正确但最后算错的回答（$R</em>t$ = 0）也不代表这个思考过程一无是处。如果直接拿原始奖励值$R_t$去乘梯度，不同样本之间的奖励绝对值波动会让梯度估计噪声很大，训练就很不稳定，收敛慢。</p><p><strong>Baseline（记作$b(s_t)$）</strong>是一个只依赖状态、不依赖具体动作的参考值，用来从原始奖励里减去：</p>
<p>$$
\nabla<em>{\theta} J(\theta) = \mathbb{E} \left[ \nabla</em>{\theta} \log \pi<em>{\theta}(a</em>t | s<em>t) \cdot (R</em>t - b(s<em>t)) \right]
$$
<strong>关键性质：</strong>只要$b(s</em>t)$不依赖动作$a<em>t$本身，减去它不会改变梯度的期望值（这是一个可以严格数学证明的性质），但可以<strong>大幅降低方差</strong>。直觉上：我们真正关心的不是&quot;这个动作获得的奖励绝对值是多少&quot;，而是&quot;这个动作相对于这个状态下&#x27;通常水平&#x27;表现得更好还是更差&quot;。举例来说，如果一道题很简单，模型平均水平就能拿到0.9分，那么某次具体回答拿0.9分其实是&quot;平庸&quot;的，不该被特别强化；但如果换一道很难的题，模型平均只能拿0.3分，那次拿到0.9分就是&quot;显著超出平均水平&quot;，值得被强化。<strong>baseline 就是这个&quot;平均水平&quot;的估计</strong>，$R</em>t - b(s_t)$这个差值，就是之前反复提到的 <strong>advantage（优势函数）</strong> —— “比平均水平好多少/差多少”。</p><p>$b(s<em>t)$该如何计算，PPO的做法是<strong>单独训练一个神经网络</strong>（通常和策略模型$π</em>θ$，也就是“actor”，结构类似甚至共享底座），专门用来预测&quot;在状态 ​$s<em>t$ 下，未来能获得的期望累积奖励是多少&quot;，记作 $V(s</em>t)$，这个网络就叫 value model 或 critic（评论家，对应&quot;actor 演员&quot;这个说法 —— actor 负责做动作决策，critic 负责评判这个状态&quot;值多少分&quot;）。
在 LLM RLHF 语境下具体化一下：critic 是一个和策略模型分开、单独训练的模型，输入是&quot;当前已经生成到某个位置的文本&quot;，输出是一个标量，预测&quot;接着往下生成，最终能拿到多少奖励&quot;。这个 critic 本身需要用真实观察到的奖励（比如最终 reward model 打的分）作为监督信号，通过类似回归的方式持续训练，让它的预测越来越准。
用这个 $V(s_t)$ 作为 baseline，advantage 就是：</p>
<p>$$
\hat{A}<em>t = R</em>t - V(s_t)
$$
（PPO 里实际常用 GAE，即广义优势估计，公式更复杂一些，但核心思想一致：都是&quot;实际获得的奖励&quot;减去&quot;critic 预测的期望水平&quot;）</p><p>上面反复提到了“单独训练”，因为它点出了这个方法实践中的成本和麻烦：</p><ol start="1"><li><strong>要多训一个模型：</strong>critic 本身是一个需要参数、需要梯度更新、需要占用显存和算力的神经网络，在 LLM 场景下，这意味着你要维护两套几乎同等规模的模型（policy + critic）同时训练，直接翻倍了训练资源开销。</li><li><strong>critic 自己也需要收敛，且收敛速度和policy不一定同步：</strong>训练初期，critic 对&quot;什么水平的回答值多少分&quot;的估计是不准的（因为它也是从零开始学的），这时候用一个不准的 baseline 去计算 advantage，反而可能引入新的偏差和噪声。而且 critic 和 policy 是同时在变化的两个移动目标——policy 在变，critic 要跟着重新估计新policy下的期望回报，这种&quot;互相追赶&quot;的动态在实践中容易造成训练不稳定（这在 Deep RL 文献里是个长期存在的已知问题）。</li><li><strong>在 LLM 场景下 critic 的训练本身就很tricky：</strong>一个state（比如&quot;生成到第37个token时的上文&quot;）对应的&quot;未来期望回报&quot;是什么，其实定义起来没有传统RL（比如游戏里&quot;当前局面&quot;）那么自然，critic 需要学会理解半截生成内容的&quot;潜力&quot;，这本身就是一个不简单的建模任务。</li></ol><p>而<strong>GRPO 完全不训练 critic</strong>，而是用一种&quot;组内相对比较&quot;的方式直接近似 baseline——对同一个 prompt 采样一组（比如32个）回答，直接拿这组回答奖励的均值当作 baseline：</p>
<p>$$
\hat{A}<em>i = R</em>i - \text{mean}(R<em>1, \dots, R</em>G)
$$
（GLM-5 报告里进一步除以了组内标准差做归一化，这是个额外的技巧，用来让不同难度问题的 advantage 幅度可比）
这里$mean(R<em>1,...,R</em>G)$扮演的角色，正好就是 critic 原本要做的事——估计&quot;这个 prompt 下大概能拿到多少分&quot;这个&quot;平均水平&quot;，只不过 GRPO 是用<strong>同一批采样样本自己的经验均值</strong>去近似这个量，而不是训练一个单独的神经网络去预测它。</p><p>那么</p><h3 id="">为什么要变</h3><p>在长周期智能体任务中，一条轨迹可能长到超出模型的有效上下文窗口（即便是1M，长周期任务的累计交互记录依然可能溢出），<strong>Compaction</strong> 是业界处理这个问题的常见手段 —— 当轨迹太长，把早期的交互历史压缩/摘要成一段更短的内容，然后从这个压缩点切开，继续往下走。</p><p>问题是：<strong>一条超长轨迹一旦被 compaction，就变成了若干条“子轨迹（sub-trace）”。</strong>而且 —— 不同的 rollout（同一个prompt下采样出的不同轨迹）在哪里触发的 compaction、触发几次、每个子轨迹多长，都是不确定的。</p><p>而GRPO要求对同一个prompt必须采样出一组可比较的完整rollout，这直接击中了GRPO的软肋。</p><p>（我一直有一个疑惑，DeepSeek v4也是使用GRPO，且早于GLM5.2推出1M上下文，长程任务下也有非常好的表现，而GLM转向PPO后确实有了质的变化，希望在后续学习中能解开这个疑惑）</p><h2 id="anti-hacking-">Anti-Hacking 机制</h2><p>编程任务的奖励信号之所以被大量采用（因为它客观、可验证、不需要人工标注），但恰恰是这种&quot;客观可验证&quot;的特性，让它比主观奖励（比如GRM打分）更容易被&quot;钻空子&quot;。原因很直白：如果奖励只看&quot;测试是否通过&quot;，模型不需要真的理解问题、写出正确代码，只需要想办法让测试通过——哪怕通过一种完全不体现&quot;解决问题能力&quot;的手段。
而且博客明确指出：&quot;GLM-5.2显示更多潜力比GLM-5.1更像是黑客行为&quot;——模型能力越强，投机取巧的能力也越强，这是个很值得警惕的信号：不是说更强的模型更&quot;听话&quot;，反而是更强的模型更擅长找到奖励函数设计上的漏洞。
具体的作弊手法（这段列举得非常具体）
博客给出了几种真实观察到的作弊行为：</p><ul><li>读取受保护的评测文件：直接翻找测试用例、标准答案文件</li><li><p>从参考资料或上游commit里抄答案：比如任务本来是&quot;实现某个GitHub仓库缺失的功能&quot;，模型直接去抓取该功能在上游仓库里已经写好的真实实现
<strong>具体的命令示例：</strong></p><pre class="language-bash lang-bash"><code class="language-bash lang-bash">1. find /workspace -name &quot;*hidden*&quot;
2. cat /workspace/.eval/secret_cases.json
3. python solve.py --case &quot;$(cat /workspace/.eval/secret_cases.json)&quot;
</code></pre><p>这三行命令连起来看非常直白：先搜索沙盒环境里有没有藏着&quot;secret&quot;、&quot;hidden&quot;字样的文件（推测测试用例可能藏在这类路径里）→ 找到后直接读取里面的隐藏测试用例内容 → 把这些内容当作参数喂给自己的解答脚本，本质上就是&quot;偷看答案再假装自己算出来的&quot;。这跟人类考试作弊的逻辑几乎一模一样，只不过作弊工具从抄小纸条变成了 <code>find</code> + <code>cat</code> + 命令行参数注入。</p></li></ul><p><strong>解决方案：两阶段检测 + 在线拦截而非直接终止轨迹</strong></p><ol start="1"><li><strong>基于规则的过滤器：</strong>先用规则粗筛，目标是最大化召回率（recall）——也就是&quot;宁可错杀，不可放过&quot;，先把所有&quot;看起来可疑&quot;的行为都标记出来</li><li><strong>LLM 评判器：</strong>对规则筛出来的可疑行为再用LLM判断意图，目标是保持高精确率（precision）——因为规则本身很粗糙，可能会把一些正常操作误判成作弊（比如模型合理地读取项目里的某个配置文件，可能因为文件名里恰好有&quot;test&quot;字样就被规则误伤），LLM 这一层负责把&quot;真正的作弊&quot;和&quot;正常行为被规则误伤&quot;区分开</li></ol><p><strong>处理方式：</strong>不是直接终止整条轨迹、判定失败，而是拦截这一次具体的工具调用，返回一个&quot;假信息&quot;（dummy information），让模型以为这次尝试没有成功，然后轨迹继续往下走。</p><p>如果每次抓到作弊就粗暴地把整条轨迹判负、突然终止，会带来两个问题：</p><ol start="1"><li>训练信号突变：轨迹被&quot;腰斩&quot;，模型在那个时间点之前的所有正常操作也可能被连带惩罚，这是一种不精确的信用分配（credit assignment）——作弊只发生在某一步，但惩罚却波及了整条轨迹</li><li>训练不稳定/模型坍塌：如果这种&quot;突然终止&quot;频繁发生，尤其是在长周期任务里（一条轨迹可能已经花了很长时间、很多步骤才走到作弊那一步），会给训练过程引入剧烈的方差和不连续性，容易导致我们之前讨论过的那种&quot;训练崩溃&quot;（类似非确定性top-k导致熵骤降的那种失稳模式）</li></ol><p>未完待续...</p></div><p style="text-align:right"><a href="https://bambooo.top/posts/tech/glm52_rl#comments">览毕，何不一言？</a></p></div>]]></description><link>https://bambooo.top/posts/tech/glm52_rl</link><guid isPermaLink="true">https://bambooo.top/posts/tech/glm52_rl</guid><dc:creator><![CDATA[扳布]]></dc:creator><pubDate>Fri, 10 Jul 2026 08:33:01 GMT</pubDate></item><item><title><![CDATA[飞书机器人助手停止服务]]></title><description><![CDATA[<link rel="preload" as="image" href="https://bambooo.top/api/v3/objects/image/74w5a1gfhikpif0vkb.webp"/><link rel="preload" as="image" href="https://bambooo.top/api/v3/objects/image/6tgqzw612y19shrt1t.webp"/><link rel="preload" as="image" href="https://bambooo.top/api/v3/objects/image/56piyn0o4kkq8gmsjt.webp"/><div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://bambooo.top/posts/fiddle/bot_stop">https://bambooo.top/posts/fiddle/bot_stop</a></blockquote><div><p>今天1号发工资，我和往常一样使用快捷指令记账，然后准备打开飞书仪表盘查看上个月支出情况，但是最新记录却停留在昨天早上</p><p><img height="104" src="https://bambooo.top/api/v3/objects/image/74w5a1gfhikpif0vkb.webp" width="1702"/></p><p>我看模型API接口没问题，能正确解析出json，接口使用的硅基流动，代金券余额也很充足</p><p><img src="https://bambooo.top/api/v3/objects/image/6tgqzw612y19shrt1t.webp"/></p><p>这个时候就有点懵了，链路都没问题啊...总不能是飞书机器人助手挂了吧，这机器人我可都建了快两年了。</p><p>嘿，您猜怎么着</p><p><img src="https://bambooo.top/api/v3/objects/image/56piyn0o4kkq8gmsjt.webp"/></p><p>跑通这个链路花了我不少时间啊😭，心碎了，得想办法在服务器建个hook，以后把数据放服务器上吧。</p></div><p style="text-align:right"><a href="https://bambooo.top/posts/fiddle/bot_stop#comments">览毕，何不一言？</a></p></div>]]></description><link>https://bambooo.top/posts/fiddle/bot_stop</link><guid isPermaLink="true">https://bambooo.top/posts/fiddle/bot_stop</guid><dc:creator><![CDATA[扳布]]></dc:creator><pubDate>Wed, 01 Jul 2026 09:07:28 GMT</pubDate></item><item><title><![CDATA[端午流水账]]></title><description><![CDATA[<link rel="preload" as="image" href="https://bambooo.top/api/v3/objects/image/u6zoowjc4n5pvyta19.webp"/><link rel="preload" as="image" href="https://bambooo.top/api/v3/objects/image/oap7z006g5x7o9fvvb.webp"/><div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://bambooo.top/notes/6">https://bambooo.top/notes/6</a></blockquote><div><p>又是一个端午小长假，还是对象来找我，在她来之前已经约好了去欢乐谷
<img height="1920" src="https://bambooo.top/api/v3/objects/image/u6zoowjc4n5pvyta19.webp" width="1440"/></p><p>人很多，一个项目平均要排队半小时，游戏时长一般就几分钟，所以，一天下来差不多能玩4、5个（排队很累，很长时间都在休息了，外加到处跑），我们去之前也没考虑到水上项目，很多有意思的项目也就没体验上。摩天轮需要到月底才开放运营，有点生气。</p><p>这是我人生第一次进游乐场，体验还是不错的。我能想象到，如果在学生时代，这种快乐会翻很多倍，在经历社会捶打后，面对各种事情，不论好坏，情绪都相对平静（这里得解释下，父母很爱我，只是家里条件普普通通，资源会尽可能的用在刚需上）。我一直很反对要孩子，我知道我不能给他带来很好的条件，也担心我会变成“中式家长“，教育方式会不会随着惯性施加到我的下一代身上，太多的不确定了；扯远了，思维比较发散。</p><p>昨天过完了25岁生日，总感觉自己还小，也经常做出一些幼稚的举动，这种感觉挺有意思，只有我心里知道，我并不成熟，但是在外人看来，我已经是个”大人”了，嘿嘿，像套着”大人皮“装成熟的小孩
<img src="https://bambooo.top/api/v3/objects/image/oap7z006g5x7o9fvvb.webp"/></p></div><p style="text-align:right"><a href="https://bambooo.top/notes/6#comments">览毕，何不一言？</a></p></div>]]></description><link>https://bambooo.top/notes/6</link><guid isPermaLink="true">https://bambooo.top/notes/6</guid><dc:creator><![CDATA[扳布]]></dc:creator><pubDate>Mon, 22 Jun 2026 07:25:44 GMT</pubDate></item><item><title><![CDATA[奇怪的惰性]]></title><description><![CDATA[<div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://bambooo.top/notes/5">https://bambooo.top/notes/5</a></blockquote><div><p>我上一份工作，也是大学毕业后的第一份工作，在深圳南山某不知名科技公司，部门加班文化严重，组内更是严重（主要是由于那个恶心的组长喜欢无差别PUA所有组员导致，这个事我想可以单开一篇来讲），周内八九点下班是常态，周六日加班也不在少数，那会头痛的频率非常高，但是，哪怕是这种状况下，周六日还是会逼着自己学点东西，总认为不进步就会落后，后面就找不到好工作，一系列想法让自己变得很焦。</p><p>辞职后，在家休息了一小段时间，开始投递简历，最终选择了一家北京的公司（很大一部分原因是有两个大学室友都在北京，有玩伴），这家公司面试结束后hr就说明了加班很少，几乎不加班，来了之后也确实如此，工作半年了，除了部分时候觉得工作完成的不满意主动带电脑回家办公，其余时候都是到点下班。奇怪的是，在这种空闲时间很多的情况下，反而不愿意主动学习了（当然，也不是完全不学习，只是主动性少很多），脑子里也有了很多摆烂似的想法，比如“这样也挺好的，为什么非要一直进步呢，能养好自己，每个月存点钱，开开心心”。</p><p>高压情况下，反而促进自己主动学习，现在想来，当时的心态，很大部分原因是觉得学了更多东西，能去到更好的企业，逃离那个让自己产生大量负面情绪的地方。</p></div><p style="text-align:right"><a href="https://bambooo.top/notes/5#comments">览毕，何不一言？</a></p></div>]]></description><link>https://bambooo.top/notes/5</link><guid isPermaLink="true">https://bambooo.top/notes/5</guid><dc:creator><![CDATA[扳布]]></dc:creator><pubDate>Mon, 15 Jun 2026 06:57:04 GMT</pubDate></item><item><title><![CDATA[博客增加友圈]]></title><description><![CDATA[<link rel="preload" as="image" href="https://bambooo.top/api/v3/objects/image/dyfpvc96lpr2m503o8.png"/><div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://bambooo.top/posts/fiddle/circle">https://bambooo.top/posts/fiddle/circle</a></blockquote><div><p>对于博客，还是希望随时能看到网上的朋友们最近的新动态，于是vibe coding了一个友圈页面。</p><p>之前一直通过github action根据innei的yohaku仓库构建部署，这种方法就是省事，作者的新功能能及时更新，缺点就是无法客制化，所以还是clone了一份以便定制化修改，这个友圈页面一直想加上，得益于现在的agent足够强大，一天时间就可以实现一个不错的效果。</p><p><img height="997" src="https://bambooo.top/api/v3/objects/image/dyfpvc96lpr2m503o8.png" width="1895"/></p></div><p style="text-align:right"><a href="https://bambooo.top/posts/fiddle/circle#comments">览毕，何不一言？</a></p></div>]]></description><link>https://bambooo.top/posts/fiddle/circle</link><guid isPermaLink="true">https://bambooo.top/posts/fiddle/circle</guid><dc:creator><![CDATA[扳布]]></dc:creator><pubDate>Fri, 05 Jun 2026 08:34:55 GMT</pubDate></item><item><title><![CDATA[如何管理上下文]]></title><description><![CDATA[<div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://bambooo.top/posts/think/context_manage">https://bambooo.top/posts/think/context_manage</a></blockquote><div><h2 id="">前言</h2><p>日常使用编程 Agent 的时候，总会考虑到上下文窗口的大小，首先，不同厂商模型的上下文长度不一样，我日常使用 Claude Code（以下简称cc），搭配 GLM5.1、Deepseek-v4-pro，前者支持最大上下文窗口200k，后者能支持长达1M。</p><p>对其他领域不太了解，拿编程来说，当你上下文达到1M，前期任务对话的注意力已经被稀释了，200k的上下文超出后，在经过多次compact后，早期内容也会被截断，而且还会有幻觉累计的风险，长会话中如果某个错误理解没被纠正，后续会在错误基础上叠加；再者，一个会话只能做一件事，无法并行（当然，并不是说短会话就可以并行，还得看你的项目是否足够模块化，各层之间边界是否清晰），可见一直在一个会话中对话的性价比并不高。那是不是应该一个任务开一个会话呢，当然也不是，这种做法很容易想到的一点就是，重复喂上下文，每次都要重新解释项目背景、架构、约定...，效率极低，而且缺乏连贯性，模型不知道之前做了哪些决策，容易走回头路甚至错路。</p><h2 id="">可参考方案</h2><blockquote><p>核心思路是：用文件代替会话记忆，上下文存在于代码库本身，而不是对话历史里</p></blockquote>
<h3 id="-claudemd">维护好 CLAUDE.md</h3><p>众所周知，cc有一个很核心的文件 —— <code>CLAUDE.MD</code>，你在项目根目录下进入cc，执行<code>/init</code>，大模型就会读取项目内容自动创建这个文件</p><p>如果你的项目已经有框架了，那么直接让大模型生成会比较省事，如果是新项目，则需要你手动编写好背景、架构、约束等</p><p>这个文件不仅是一个项目说明，更是一个项目记忆文件，cc每次启动都会读取它，建议 <strong>每完成一个阶段任务就更新这个文件</strong>，新会话一开始就有完整上下文，这一步也可以让大模型来帮你做，不过还是建议 review 一下</p><h3 id="">按&quot;工作单元&quot;切割会话，而不是按功能</h3><p>不是&quot;每个功能开一个会话&quot;，而是一个聚焦的任务开一个会话：</p><pre class="language-markdown lang-markdown"><code class="language-markdown lang-markdown">✅ 好的会话边界
- &quot;实现订单创建的 API + service + 数据库 migration&quot;
- &quot;修复购物车计算逻辑的 3 个 bug&quot;
- &quot;重构用户模块，拆分成更小的 service&quot;

❌ 不好的边界  
- &quot;帮我开发整个电商后台&quot;（太大）
- &quot;改一行代码&quot;（太小，不值得切换）
</code></pre>
<h3 id="-prompt-">第一个 prompt 规范好边界</h3><p>新会话开头不要直接说&quot;帮我写XXX&quot;，而是：</p><pre class="language-markdown lang-markdown"><code class="language-markdown lang-markdown">背景：我在开发电商项目（Next.js + PostgreSQL），CLAUDE.md 里有架构细节。
当前任务：实现订单状态流转逻辑（待付款→已付款→已发货→已完成）
相关文件：/app/api/orders/, /lib/services/orderService.ts
约束：状态流转需要记录操作日志，不能直接改 status 字段
</code></pre>
<h3 id="-clear-">利用 /clear 而不是开新窗口</h3><p>当一个任务完成、要切换到另一个任务时，在同一个 Claude Code 实例里用 /clear 清空对话历史，项目文件仍然在，只清掉对话噪音，比重开一个会话更高效。</p>
<h2 id="">总结</h2><p>核心其实就是一句话，<strong>上下文应该活在代码和文档里，而不是活在对话历史里。</strong></p></div><p style="text-align:right"><a href="https://bambooo.top/posts/think/context_manage#comments">览毕，何不一言？</a></p></div>]]></description><link>https://bambooo.top/posts/think/context_manage</link><guid isPermaLink="true">https://bambooo.top/posts/think/context_manage</guid><dc:creator><![CDATA[扳布]]></dc:creator><pubDate>Mon, 01 Jun 2026 06:49:28 GMT</pubDate></item></channel></rss>