<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>AI编程 on Coder_Studio</title>
        <link>https://iamxurulin.github.io/tags/ai%E7%BC%96%E7%A8%8B/</link>
        <description>Recent content in AI编程 on Coder_Studio</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <copyright>iamxurulin</copyright>
        <lastBuildDate>Sun, 23 Aug 2026 17:21:42 +0000</lastBuildDate><atom:link href="https://iamxurulin.github.io/tags/ai%E7%BC%96%E7%A8%8B/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>从 MSE 到交叉熵：一文搞懂损失函数</title>
        <link>https://iamxurulin.github.io/p/%E4%BB%8E-mse-%E5%88%B0%E4%BA%A4%E5%8F%89%E7%86%B5%E4%B8%80%E6%96%87%E6%90%9E%E6%87%82%E6%8D%9F%E5%A4%B1%E5%87%BD%E6%95%B0/</link>
        <pubDate>Sun, 21 Jun 2026 11:48:50 +0000</pubDate>
        
        <guid>https://iamxurulin.github.io/p/%E4%BB%8E-mse-%E5%88%B0%E4%BA%A4%E5%8F%89%E7%86%B5%E4%B8%80%E6%96%87%E6%90%9E%E6%87%82%E6%8D%9F%E5%A4%B1%E5%87%BD%E6%95%B0/</guid>
        <description>&lt;h2 id=&#34;什么是损失函数&#34;&gt;什么是损失函数？
&lt;/h2&gt;&lt;p&gt;机器学习模型究竟依靠什么完成&amp;quot;学习&amp;quot;？&lt;/p&gt;
&lt;p&gt;它凭什么判断自身的表现是否达标、又该在哪些方面做出改进？&lt;/p&gt;
&lt;p&gt;我们可以通过一个类比来理解——学生在完成课后作业时，老师会给出一个分数。无论是80分、90分还是不及格，学生都能通过这个分数发现自己哪里掌握得不够牢固，并据此调整后续的学习策略，争取下一次取得更好的成绩。&lt;/p&gt;
&lt;p&gt;机器学习的模型同样具备类似的反馈机制，这个机制的名称就叫——损失函数。&lt;/p&gt;
&lt;p&gt;损失函数在机器学习中占据着比较重要的位置。&lt;/p&gt;
&lt;p&gt;如果无法理解损失函数的工作原理，就很难真正搞清楚模型是如何完成训练的。&lt;/p&gt;
&lt;p&gt;因此，想要真正掌握机器学习的核心原理，损失函数是一个必须深入理解的基础概念。&lt;/p&gt;
&lt;p&gt;从数学角度来讲，损失函数是用于衡量模型预测输出与真实标签之间差异的一种量化方法。&lt;/p&gt;
&lt;p&gt;设想这样一个场景：&lt;/p&gt;
&lt;p&gt;一个气象预报员，预测明天的气温是20℃，而实际观测值是22℃。&lt;/p&gt;
&lt;p&gt;预测值与真实值之间的偏差是多少？&lt;/p&gt;
&lt;p&gt;最直接的计算方式是用 20 减去 22 得到 -2，偏差为2℃。&lt;/p&gt;
&lt;p&gt;但这里出现了一个问题：&lt;/p&gt;
&lt;p&gt;如果有100次预报记录，将正偏差和负偏差直接相加会导致它们相互抵消，最终累加结果可能为零——意味着&amp;quot;零误差&amp;quot;，显然这与现实情况是不符的。&lt;/p&gt;
&lt;p&gt;解决这一问题的方法是对每次偏差进行平方处理，使所有数值都变为正数，然后求取平均值。这就是&amp;quot;均方误差&amp;quot;（Mean Squared Error，简称 MSE）。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://iamxurulin.github.io/images/b8159ffdc353d69478560d4f24a14215-7f6ab470.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;由此可见，损失函数的本质是一个&amp;quot;差距量化器&amp;quot;——它明确告诉模型：你的预测出现了偏差，偏差量为多少，需要做出调整。&lt;/p&gt;
&lt;p&gt;然而，这种差距信号如何真正转化为模型的改进能力呢？&lt;/p&gt;
&lt;p&gt;关键在于梯度。&lt;/p&gt;
&lt;p&gt;具体而言，我们可以通过反向传播算法，利用链式法则逐层计算损失函数对各参数的梯度，得到的梯度方向指示了参数应该增大还是减小，梯度的大小则给出了调整的幅度。&lt;/p&gt;
&lt;p&gt;模型根据这些梯度信息更新自身参数，持续缩小与真实值之间的距离。&lt;/p&gt;
&lt;p&gt;这一优化过程被称为梯度下降。&lt;/p&gt;
&lt;p&gt;需要明确的一个核心认知是：&lt;/p&gt;
&lt;p&gt;驱动模型学习的根本动力，来源于损失函数所提供的梯度信号。&lt;/p&gt;
&lt;p&gt;如果没有损失函数，就不会有梯度；&lt;/p&gt;
&lt;p&gt;没有梯度，模型就只能在参数空间中盲目搜索。&lt;/p&gt;
&lt;p&gt;因此，损失函数决定了模型能否有效学习，是整个学习过程的灵魂所在。&lt;/p&gt;
&lt;h2 id=&#34;什么样的损失函数才算合格&#34;&gt;什么样的损失函数才算合格？
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;第一，可导性。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;损失函数最好能够计算梯度，或者在不可导点存在次梯度（Subgradient），从而支持梯度优化算法。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二，单调性。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;模型的预测越接近真实值，损失值应当越小；&lt;/p&gt;
&lt;p&gt;预测偏离真实值越远，损失值应当越大。&lt;/p&gt;
&lt;p&gt;只有满足这一性质，模型才能形成明确的优化方向感，持续向最优解靠近。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三，良好的优化性质。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;理想情况下，损失函数及其对应优化目标具有良好的优化性质，能够帮助模型更稳定地收敛到低损失区域。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第四，计算高效。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在大规模数据集训练场景中，损失函数需要被频繁计算，因此计算效率十分重要。&lt;/p&gt;
&lt;p&gt;在这四项特性中，前两项属于硬性约束，后两项则是理想层面的加分项。&lt;/p&gt;
&lt;h2 id=&#34;具体损失函数分析&#34;&gt;具体损失函数分析
&lt;/h2&gt;&lt;h3 id=&#34;均方误差mse&#34;&gt;均方误差（MSE）
&lt;/h3&gt;&lt;p&gt;MSE 的全称为 Mean Squared Error，逐词拆解：Mean 表示&amp;quot;平均&amp;quot;，Squared 表示&amp;quot;平方&amp;quot;，Error 表示&amp;quot;误差&amp;quot;。&lt;/p&gt;
&lt;p&gt;组合起来的含义即——误差平方的平均值。&lt;/p&gt;
&lt;p&gt;其计算流程分为四个步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;对每个样本分别计算预测值与真实值之间的差值（也称为残差）。&lt;/li&gt;
&lt;li&gt;对每个残差执行平方运算。&lt;/li&gt;
&lt;li&gt;将所有平方后的残差累加求和。&lt;/li&gt;
&lt;li&gt;除以样本总数 N，得到平均值。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;为什么不直接使用残差的绝对值，而一定要选择平方？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一个理由：消除符号干扰。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;假设模型对样本 A 的预测偏高了 5 个单位，对样本 B 的预测偏低了 5 个单位。如果直接将两者相加，5 + (-5) = 0，表面上看起来误差为零，但实际上模型的两次预测都是错误的。&lt;/p&gt;
&lt;p&gt;经过平方运算后，5² = 25，(-5)² = 25，两项均为正数相加，真实误差便无法被掩盖。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二个理由：放大较大误差。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;假设有三个样本的绝对误差分别为 1、2、3。&lt;/p&gt;
&lt;p&gt;在不平方的情况下，误差总和为 6；&lt;/p&gt;
&lt;p&gt;而经过平方后，1 + 4 + 9 = 14，其中误差为 3 的样本贡献了 9，占总损失的比重超过六成。&lt;/p&gt;
&lt;p&gt;这说明平方机制天然地让模型更加重视那些预测严重失准的样本，尽量避免出现&amp;quot;离谱的错误&amp;quot;，这通常与实际需求相一致。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://iamxurulin.github.io/images/798c477b3bdaade06840cccaa54ffae4-4350ed7b.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三个理由：求导运算友好。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;平方函数在其定义域内处处可导，导数形式为线性表达式 2x，结构简洁，使得梯度下降算法的运行非常顺畅。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第四个理由：拥有深厚的统计学根基。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在正态分布假设下，MSE 与最大似然估计在数学上是等价的。&lt;/p&gt;
&lt;p&gt;它并非一种拍脑袋想出来的启发式技巧，而是建立在严格的概率论基础之上的。&lt;/p&gt;
&lt;h3 id=&#34;mse-的优势与局限&#34;&gt;MSE 的优势与局限
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;优势：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;计算极为简洁——仅需减法、平方、加法和除法四步运算，即便面对千万级甚至亿级规模的数据也能快速处理。&lt;/p&gt;
&lt;p&gt;在整个定义域内处处可导，梯度形式简洁干净，不存在任何断点或奇点来阻碍优化过程。&lt;/p&gt;
&lt;p&gt;数学性质优良，许多优化算法的理论分析都建立在 MSE 这类凸函数的框架之上。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;局限：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;最突出的短板是对异常值（离群点）极度敏感。&lt;/p&gt;
&lt;p&gt;平方的放大效应意味着一个极端异常值可能主导整个损失函数的值。&lt;/p&gt;
&lt;p&gt;例如假设有 10 个样本的偏差均为 1，另有 1 个样本的偏差为 10。&lt;/p&gt;
&lt;p&gt;前 10 个样本各自贡献 1，合计 10；&lt;/p&gt;
&lt;p&gt;而异常样本贡献了 100，占总损失的约 91%。&lt;/p&gt;
&lt;p&gt;模型因此可能被这一个异常样本带偏方向，从而忽略了大多数正常数据的分布特征。&lt;/p&gt;
&lt;p&gt;另一个问题是量纲失真。&lt;/p&gt;
&lt;p&gt;原始数据如果分布在 0 到 100 之间，MSE 的值域可能膨胀到 0 到 10000，损失值本身的直观含义变得模糊。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;适用场景：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;回归任务的首选方案——凡是预测连续型数值（如房价、气温、销量等），MSE 通常是最自然且最常用的选择。&lt;/p&gt;
&lt;p&gt;但如果数据中存在较多异常值，建议考虑 MAE（平均绝对误差）或 Huber Loss，它们对噪声数据具有更强的鲁棒性。&lt;/p&gt;
&lt;h3 id=&#34;梯度下降的训练循环&#34;&gt;梯度下降的训练循环
&lt;/h3&gt;&lt;p&gt;利用 MSE 的梯度来驱动模型参数更新，每一轮迭代包含以下四个步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;前向传播&lt;/strong&gt;：使用当前参数对输入数据进行预测。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;计算损失&lt;/strong&gt;：通过 MSE 公式量化预测值与真实标签之间的差距。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;反向传播&lt;/strong&gt;：沿计算图从输出层向输入层逐层回溯，依次计算每个参数的梯度，明确每个参数应该朝哪个方向调整、调整的幅度有多大。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;参数更新&lt;/strong&gt;：沿着梯度的反方向对参数值进行微调——梯度为正值时减小参数，为负值时增大参数。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;重复执行上述流程 50 次（或更多轮），模型便会在损失曲面上逐步滑动，不断逼近最优解。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://iamxurulin.github.io/images/8ab4d7da54ec8da8613c2469820776a6-762b6751.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;交叉熵分类问题的核心损失函数&#34;&gt;交叉熵：分类问题的核心损失函数
&lt;/h2&gt;&lt;p&gt;接下来介绍第二个重要的损失函数——交叉熵（Cross Entropy），它是分类任务中最常用的损失函数。&lt;/p&gt;
&lt;p&gt;设想这样一个应用场景：&lt;/p&gt;
&lt;p&gt;向模型输入一张图片，要求它判断图片中的动物是猫、狗还是鸟。&lt;/p&gt;
&lt;p&gt;有人可能会认为，模型直接输出一个整数编码即可——0 代表猫，1 代表狗，2 代表鸟，然后取最大值的对应类别就行了。&lt;/p&gt;
&lt;p&gt;这种思路在逻辑上看似合理，但存在一个缺陷：&lt;/p&gt;
&lt;p&gt;模型对自己的预测结果有多大把握？&lt;/p&gt;
&lt;p&gt;这种确定性完全无法从单一整数编码中获知。&lt;/p&gt;
&lt;p&gt;更为合理的方式是让模型输出一个概率向量。&lt;/p&gt;
&lt;p&gt;例如：猫 0.7、狗 0.2、鸟 0.1，三个概率值之和为 1，构成一个完整的概率分布。&lt;/p&gt;
&lt;p&gt;通过这种方式，我们不仅获得了模型的预测结果，还获得了衡量模型&amp;quot;自信程度&amp;quot;的依据。&lt;/p&gt;
&lt;p&gt;在很多实际应用场景中，这种置信度信息至关重要。&lt;/p&gt;
&lt;p&gt;例如医疗影像诊断：&lt;/p&gt;
&lt;p&gt;模型 A 判定为恶性肿瘤，置信度 0.95。&lt;/p&gt;
&lt;p&gt;模型 B 判定为恶性肿瘤，置信度 0.52。&lt;/p&gt;
&lt;p&gt;虽然两者结论一致，但前者的预测可信度明显更高，因此更值得进一步关注。&lt;/p&gt;
&lt;p&gt;那么问题就来了：&lt;/p&gt;
&lt;p&gt;如何衡量模型输出的概率分布与真实标签之间的差异？&lt;/p&gt;
&lt;p&gt;这就是交叉熵函数所要解决的问题。&lt;/p&gt;
&lt;h3 id=&#34;交叉熵到底在计算什么&#34;&gt;交叉熵到底在计算什么？
&lt;/h3&gt;&lt;p&gt;交叉熵的核心思想其实非常简单：&lt;/p&gt;
&lt;p&gt;如果模型把真实答案的概率预测得越高，那么损失就应该越小；&lt;/p&gt;
&lt;p&gt;如果模型把真实答案的概率预测得越低，那么损失就应该越大。&lt;/p&gt;
&lt;p&gt;例如有一个三分类任务：&lt;/p&gt;
&lt;p&gt;真实答案是：&lt;/p&gt;
&lt;p&gt;猫 = 1&lt;br&gt;
狗 = 0&lt;br&gt;
鸟 = 0&lt;/p&gt;
&lt;p&gt;模型 A 的预测结果为：&lt;/p&gt;
&lt;p&gt;猫：0.90&lt;br&gt;
狗：0.05&lt;br&gt;
鸟：0.05&lt;/p&gt;
&lt;p&gt;由于模型给正确类别“猫”分配了 90% 的概率，说明模型非常有把握地预测正确，此时交叉熵损失会非常小。&lt;/p&gt;
&lt;p&gt;而模型 B 的预测结果为：&lt;/p&gt;
&lt;p&gt;猫：0.01&lt;br&gt;
狗：0.98&lt;br&gt;
鸟：0.01&lt;/p&gt;
&lt;p&gt;虽然三个概率之和同样为 1，但模型几乎把全部概率都给了错误类别“狗”。&lt;/p&gt;
&lt;p&gt;这意味着模型不仅预测错误，而且错得非常自信。&lt;/p&gt;
&lt;p&gt;对于这种情况，交叉熵会给予极大的惩罚。&lt;/p&gt;
&lt;p&gt;因此可以把交叉熵理解为一种专门衡量“预测概率质量”的损失函数。&lt;/p&gt;
&lt;p&gt;它不仅关心模型有没有预测正确，更关心模型到底有多大的把握。&lt;/p&gt;
&lt;p&gt;预测正确且越自信，损失越小；&lt;/p&gt;
&lt;p&gt;预测错误且越自信，损失越大。&lt;/p&gt;
&lt;p&gt;正因为这种特性，交叉熵能够为分类模型提供更加清晰有效的优化方向，因此成为分类任务中最主流的损失函数。&lt;/p&gt;
&lt;h3 id=&#34;mse-与交叉熵的核心差异&#34;&gt;MSE 与交叉熵的核心差异
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;维度&lt;/th&gt;
					&lt;th&gt;MSE&lt;/th&gt;
					&lt;th&gt;交叉熵&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;适用任务&lt;/td&gt;
					&lt;td&gt;回归（预测连续值）&lt;/td&gt;
					&lt;td&gt;分类（预测离散类别）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;输出形式&lt;/td&gt;
					&lt;td&gt;实数（如 3.5、-2.1）&lt;/td&gt;
					&lt;td&gt;概率（0~1 之间的值）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;梯度特性&lt;/td&gt;
					&lt;td&gt;梯度受平方项影响较大，对异常敏感&lt;/td&gt;
					&lt;td&gt;梯度与误差成线性关系，传播更平稳&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;收敛行为&lt;/td&gt;
					&lt;td&gt;回归任务上收敛稳定&lt;/td&gt;
					&lt;td&gt;分类任务上收敛更快、更稳定&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src=&#34;https://iamxurulin.github.io/images/0edda457bfad1be6f15822089d879df6-463a1c78.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;如何选择损失函数&#34;&gt;如何选择损失函数
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;判断任务类型&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果输出为连续数值 → 回归问题，如果输出为类别标签 → 分类问题。&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;&lt;strong&gt;回归任务看数据质量&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果数据包含较多异常值 → 选择 MAE 或 Huber Loss&lt;/p&gt;
&lt;p&gt;如果数据较为干净、近似正态分布 → 选择 MSE&lt;/p&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;&lt;strong&gt;分类任务看类别数量&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果仅有两个类别 → 二元交叉熵（Binary Cross Entropy）&lt;/p&gt;
&lt;p&gt;如果两个以上类别 → 多元分类交叉熵（Categorical Cross Entropy）&lt;/p&gt;
&lt;h2 id=&#34;初学者常犯的三个错误&#34;&gt;初学者常犯的三个错误
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;用 MSE 做分类任务。&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这是新手最常犯的错误。&lt;/p&gt;
&lt;p&gt;因为在分类任务中，当分类模型使用 sigmoid 或 softmax 输出概率时，如果再配合 MSE 作为损失函数，梯度在饱和区域会迅速衰减，导致训练速度明显变慢。&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;&lt;strong&gt;用交叉熵做回归任务。&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;交叉熵要求输出为合法的概率分布（非负且和为 1），回归任务的输出为任意实数，计算框架通常会直接报错；&lt;/p&gt;
&lt;p&gt;即便绕过了框架检查，梯度也会完全失效，模型无法学到任何有效信息。&lt;/p&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;&lt;strong&gt;只监控训练损失，忽视验证损失。&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;许多初学者在训练过程中仅关注训练集损失持续下降这一现象便感到满意，却忽略了验证集损失可能已经开始反弹——这标志着过拟合正在发生。&lt;/p&gt;
&lt;p&gt;正确的方法是同时监控训练损失和验证损失两条曲线，当验证损失不再下降甚至开始上升时，即使训练损失仍在降低，也应当停止训练或引入正则化手段来抑制过拟合。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Claude Code 免费接入讯飞星辰 Qwen3.6-35B-A3B 模型，白嫖攻略来了！</title>
        <link>https://iamxurulin.github.io/p/claude-code-%E5%85%8D%E8%B4%B9%E6%8E%A5%E5%85%A5%E8%AE%AF%E9%A3%9E%E6%98%9F%E8%BE%B0-qwen3.6-35b-a3b-%E6%A8%A1%E5%9E%8B%E7%99%BD%E5%AB%96%E6%94%BB%E7%95%A5%E6%9D%A5%E4%BA%86/</link>
        <pubDate>Tue, 09 Jun 2026 00:55:09 +0000</pubDate>
        
        <guid>https://iamxurulin.github.io/p/claude-code-%E5%85%8D%E8%B4%B9%E6%8E%A5%E5%85%A5%E8%AE%AF%E9%A3%9E%E6%98%9F%E8%BE%B0-qwen3.6-35b-a3b-%E6%A8%A1%E5%9E%8B%E7%99%BD%E5%AB%96%E6%94%BB%E7%95%A5%E6%9D%A5%E4%BA%86/</guid>
        <description>&lt;blockquote&gt;
&lt;p&gt;限时免费到6月30日，手慢无！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;最近讯飞星辰 MaaS 平台可以免费领取Qwen3.6-35B-A3B、Qwen3.5-35B-A3B两个 Qwen 系列模型的调用权益，这意味着你可以&lt;strong&gt;零成本&lt;/strong&gt;把这个强大的模型接入到 Claude Code 中，享受免费的高质量代码生成和智能编程体验。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://iamxurulin.github.io/images/2880eb7ae777ea1e797d08877755c2a8-c039eadf.jpeg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;本文就来手把手教你，如何把Qwen3.6-35B-A3B模型接入 Claude Code。&lt;/p&gt;
&lt;h2 id=&#34;接入流程&#34;&gt;接入流程
&lt;/h2&gt;&lt;h3 id=&#34;1在讯飞星辰平台找到模型&#34;&gt;1.在讯飞星辰平台找到模型
&lt;/h3&gt;&lt;p&gt;登录讯飞星辰 MaaS 平台，进入【模型集市】，找到 Qwen3.6-35B-A3B 模型卡片，点击【API调用】按钮。
&lt;img src=&#34;https://iamxurulin.github.io/images/8117181adacd01c23c793b61b781aee2-07c14427.jpeg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;2创建-api-服务&#34;&gt;2.创建 API 服务
&lt;/h3&gt;&lt;p&gt;在 API 调用页面，填写模型服务 API 名称（例如 &lt;code&gt;Chatxunfei&lt;/code&gt;），选择要授权的应用。&lt;/p&gt;
&lt;p&gt;重点来了——&lt;strong&gt;计费方式显示输入和输出费用均为 0 元/百万 tokens&lt;/strong&gt;，免费有效期到 &lt;strong&gt;6月30日&lt;/strong&gt;，7月1日10点后转为后付费。&lt;/p&gt;
&lt;p&gt;所以趁现在赶紧用起来！
&lt;img src=&#34;https://iamxurulin.github.io/images/cee1b73c4bac21c63e47b70c0f1acd78-a08c1ad8.jpeg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;3创建应用如尚未创建&#34;&gt;3.创建应用（如尚未创建）
&lt;/h3&gt;&lt;p&gt;如果你还没有应用，需要先前往讯飞开放平台创建一个应用。&lt;/p&gt;
&lt;p&gt;填写应用名称、分类和功能描述，提交即可。
&lt;img src=&#34;https://iamxurulin.github.io/images/aa72c783675436d9a1e6d072dc030e1d-0db867f7.jpeg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;4获取modelid和apikey&#34;&gt;4.获取modelId和APIKey
&lt;/h3&gt;&lt;p&gt;创建完成后，在&lt;strong&gt;推理服务&lt;/strong&gt;页面可以看到你部署的服务信息，包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;modelId&lt;/strong&gt;：&lt;code&gt;xopqwen36v35b&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;APIKey&lt;/strong&gt;：用于身份认证&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://iamxurulin.github.io/images/35b0430a85e3b772e1d90a501592bcfc-f4004e3b.jpeg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;5在cc-switch-中配置模型&#34;&gt;5.在CC Switch 中配置模型
&lt;/h3&gt;&lt;p&gt;先进入CC Switch的网址：
&lt;a class=&#34;link&#34; href=&#34;https://github.com/farion1231/cc-switch/releases/tag/v3.16.0&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/farion1231/cc-switch/releases/tag/v3.16.0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;下载好CC Switch。
&lt;img src=&#34;https://iamxurulin.github.io/images/9dbd77dc040f827b4b4d23135e9aa3ad-afc42003.jpeg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;如果访问Github有困难，也可以通过以下方式下载&lt;/p&gt;
&lt;p&gt;链接：&lt;a class=&#34;link&#34; href=&#34;https://pan.quark.cn/s/46e3a4a215bd&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://pan.quark.cn/s/46e3a4a215bd&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;打开 CC Switch，添加新供应商：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://iamxurulin.github.io/images/00600569868d8312157ccc8476fb4c56-e77edd85.jpeg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;参数填写可参考：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://iamxurulin.github.io/images/f8ca4f1ada4b88a5a8769ef3d8b5ffd3-2c1ebe9b.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://iamxurulin.github.io/images/a1f61700206b9ed96f7b324758ea7646-723338e5.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;配置完成后，CC Switch 会自动将 Claude Code 的请求路由到讯飞星辰的 API 端点。&lt;/p&gt;
&lt;h3 id=&#34;6在-claude-code-中测试&#34;&gt;6.在 Claude Code 中测试
&lt;/h3&gt;&lt;p&gt;配置完成后，打开 Claude Code，测试一下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://iamxurulin.github.io/images/5b485435e62ec246ac46b9c7876d0c70-2862aa12.jpeg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;如上图所示模型显示为：&lt;code&gt;xopqwen36v35b&lt;/code&gt;，而且正常返回了结果，说明接入成功。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>让 AI Agent 跨会话接住工作：一场对照实验</title>
        <link>https://iamxurulin.github.io/p/%E8%AE%A9-ai-agent-%E8%B7%A8%E4%BC%9A%E8%AF%9D%E6%8E%A5%E4%BD%8F%E5%B7%A5%E4%BD%9C%E4%B8%80%E5%9C%BA%E5%AF%B9%E7%85%A7%E5%AE%9E%E9%AA%8C/</link>
        <pubDate>Sun, 07 Jun 2026 14:38:00 +0000</pubDate>
        
        <guid>https://iamxurulin.github.io/p/%E8%AE%A9-ai-agent-%E8%B7%A8%E4%BC%9A%E8%AF%9D%E6%8E%A5%E4%BD%8F%E5%B7%A5%E4%BD%9C%E4%B8%80%E5%9C%BA%E5%AF%B9%E7%85%A7%E5%AE%9E%E9%AA%8C/</guid>
        <description>&lt;blockquote&gt;
&lt;p&gt;当 AI 编程助手越来越强大，一个关键问题浮出水面：&lt;strong&gt;它能接住别人（或昨天的自己）没干完的活吗？&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;问题的起源&#34;&gt;问题的起源
&lt;/h2&gt;&lt;p&gt;真实开发不是一次会话就干完的。
你昨天写了一半，今天开新会话，agent 需要从仓库状态里搞清楚：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;项目是干什么的？&lt;/li&gt;
&lt;li&gt;怎么启动？&lt;/li&gt;
&lt;li&gt;哪些功能已经做了？&lt;/li&gt;
&lt;li&gt;哪些还没做？&lt;/li&gt;
&lt;li&gt;下一个该做什么？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果 agent 要靠&amp;quot;猜&amp;quot;来回答这些问题，那它本质上是在&lt;strong&gt;重新发现&lt;/strong&gt;已经存在的信息。
这既浪费时间，又容易出错。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;实验设计&#34;&gt;实验设计
&lt;/h2&gt;&lt;p&gt;我们在同一个 Electron 知识库应用上做了两组对照实验，任务完全一致——实现三个功能：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;功能&lt;/th&gt;
					&lt;th&gt;描述&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;kb-005 文档导入&lt;/td&gt;
					&lt;td&gt;从本地导入 .txt/.md 文件&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;kb-006 文档详情视图&lt;/td&gt;
					&lt;td&gt;点击文档查看完整内容&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;kb-007 文档持久化&lt;/td&gt;
					&lt;td&gt;重启后文档仍在&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;两组实验的区别只在于：&lt;strong&gt;仓库里有没有&amp;quot;可读的上下文&amp;quot;&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;实验组-a弱-harnessbaseline&#34;&gt;实验组 A：弱 Harness（Baseline）
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;仓库里有什么？&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;├──&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;js&lt;/span&gt;          &lt;span class=&#34;c1&#34;&gt;# 代码&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;├──&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;preload&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;js&lt;/span&gt;       &lt;span class=&#34;c1&#34;&gt;# 代码&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;├──&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;html&lt;/span&gt;       &lt;span class=&#34;c1&#34;&gt;# 代码&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;├──&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;renderer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;js&lt;/span&gt;      &lt;span class=&#34;c1&#34;&gt;# 代码&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;├──&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;# 依赖&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;└──&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;task&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prompt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;md&lt;/span&gt;   &lt;span class=&#34;c1&#34;&gt;# 任务描述&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;仓库里没有什么？&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;✗&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ARCHITECTURE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;md&lt;/span&gt;    &lt;span class=&#34;err&#34;&gt;—&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;没有架构文档&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;✗&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PRODUCT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;md&lt;/span&gt;         &lt;span class=&#34;err&#34;&gt;—&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;没有产品文档&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;✗&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;session&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;handoff&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;md&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;—&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;没有交接文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;✗&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feature_list&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;—&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;有，但&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;agent&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;不知道要先读&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;会话 A&lt;/strong&gt;：agent 完成了文档导入（kb-005），然后被中断。没有写任何交接文件。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;会话 B&lt;/strong&gt;：开全新会话，只说了一句：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;继续开发。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;发生了什么&#34;&gt;发生了什么？
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;┌─────────────────────────────────────────────────────────┐&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;会话&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;B&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;的探索过程&lt;/span&gt;                                       &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;                                                         &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;Step&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;读&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;js&lt;/span&gt;          &lt;span class=&#34;err&#34;&gt;→&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;哦，这是&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Electron&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;应用&lt;/span&gt;    &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;Step&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;读&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;     &lt;span class=&#34;err&#34;&gt;→&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;启动命令是&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;npm&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;start&lt;/span&gt;      &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;Step&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;读&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;preload&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;js&lt;/span&gt;       &lt;span class=&#34;err&#34;&gt;→&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;用&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;contextBridge&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;暴露&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;API&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;Step&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;读&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;html&lt;/span&gt;       &lt;span class=&#34;err&#34;&gt;→&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;这是&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;UI&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;布局&lt;/span&gt;              &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;Step&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;读&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;renderer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;js&lt;/span&gt;      &lt;span class=&#34;err&#34;&gt;→&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;哦，已经有一个导入按钮了&lt;/span&gt;   &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;Step&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;读&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feature_list&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;json&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;→&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kb&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;001&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;004&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;已完成&lt;/span&gt;         &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;Step&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;对比代码差异&lt;/span&gt;        &lt;span class=&#34;err&#34;&gt;→&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;所以&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kb&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;005&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;做完了？&lt;/span&gt;       &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;Step&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;终于开始写代码&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;    &lt;span class=&#34;err&#34;&gt;→&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;但已经过去很久了&lt;/span&gt;          &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;└─────────────────────────────────────────────────────────┘&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;核心问题&lt;/strong&gt;：
agent 花了大量时间在&lt;strong&gt;重新发现&lt;/strong&gt;——项目结构、启动方式、数据流、已完成的功能。
这些都是会话 A 已经知道的信息。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;实验组-b强-harnessimproved&#34;&gt;实验组 B：强 Harness（Improved）
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;仓库里有什么？&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;├──&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ARCHITECTURE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;md&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;# 项目架构、数据流、IPC 接口清单&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;├──&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PRODUCT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;md&lt;/span&gt;         &lt;span class=&#34;c1&#34;&gt;# 产品功能范围和当前阶段目标&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;├──&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;AGENTS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;md&lt;/span&gt;          &lt;span class=&#34;c1&#34;&gt;# 启动命令、工作规则&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;├──&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feature_list&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# 功能状态（已更新）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;├──&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;session&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;handoff&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;md&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 本轮做了什么、没做什么、下一步&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;├──&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;js&lt;/span&gt;            &lt;span class=&#34;c1&#34;&gt;# 代码&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;├──&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;preload&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;js&lt;/span&gt;         &lt;span class=&#34;c1&#34;&gt;# 代码&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;├──&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;html&lt;/span&gt;         &lt;span class=&#34;c1&#34;&gt;# 代码&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;├──&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;renderer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;js&lt;/span&gt;        &lt;span class=&#34;c1&#34;&gt;# 代码&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;└──&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;task&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prompt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;md&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;# 任务描述&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;会话 A&lt;/strong&gt;：
同样完成了文档导入（kb-005），中断前更新了 &lt;code&gt;session-handoff.md&lt;/code&gt; 和 &lt;code&gt;feature_list.json&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;会话 B 的 session-handoff.md&lt;/strong&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## 本轮会话做了什么
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; kb-005 文档导入：已完成并验证通过
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## 没做什么（遗留功能）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; kb-006 文档详情视图：未开始
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; kb-007 文档持久化：未开始
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## 下一步
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;1.&lt;/span&gt; 实现 kb-006：文档详情视图
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;2.&lt;/span&gt; 实现 kb-007：文档持久化
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;会话 B&lt;/strong&gt;：开全新会话，发送：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;请先阅读 session-handoff.md、feature_list.json、ARCHITECTURE.md、PRODUCT.md，
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;然后继续开发未完成的功能。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;发生了什么-1&#34;&gt;发生了什么？
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;┌─────────────────────────────────────────────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│  会话 B 的探索过程                                       │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                                                         │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│  Step 1: 读 session-handoff.md  → 知道了！kb-005 已完成  │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                                   下一步是 kb-006        │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│  Step 2: 读 feature_list.json   → 确认功能状态           │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│  Step 3: 读 ARCHITECTURE.md     → 确认项目结构           │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│  Step 4: 直接开始写代码！        → 零浪费                  │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└─────────────────────────────────────────────────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;数据对比&#34;&gt;数据对比
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    弱 Harness          强 Harness
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    ─────────          ─────────
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;接手所需文件数      ████████ 6-8       ██ 2-3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;重新发现次数        ██████ 6+          ░ 0~1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;重复工作比例        ██████ ~30%        ░ ~5%
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;上下文理解准确度    可能有偏差          准确无误
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;关键洞察&#34;&gt;关键洞察
&lt;/h2&gt;&lt;h3 id=&#34;1-代码不是文档&#34;&gt;1. 代码不是文档
&lt;/h3&gt;&lt;p&gt;代码能告诉你&amp;quot;怎么做&amp;quot;，但很难告诉你&amp;quot;做了什么、为什么没做、下一步做什么&amp;quot;。
一个 500 行的 &lt;code&gt;main.js&lt;/code&gt; 不会告诉你 kb-006 还没开始——agent 必须自己推断，而推断经常出错。&lt;/p&gt;
&lt;h3 id=&#34;2-交接文件是会话的-checkpoint&#34;&gt;2. 交接文件是&amp;quot;会话的 checkpoint&amp;quot;
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;session-handoff.md&lt;/code&gt; 就像一个游戏存档。
没有它，每次新会话都相当于从第一关重打。
有了它，agent 可以直接从上次中断的地方继续。&lt;/p&gt;
&lt;h3 id=&#34;3-最重要的三行信息&#34;&gt;3. 最重要的三行信息
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;做了什么：kb-005 文档导入 ✓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;没做什么：kb-006 文档详情、kb-007 文档持久化
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;下一步：从 kb-006 开始
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;就这三行，节省了 agent 6+ 步探索。&lt;/p&gt;
&lt;h3 id=&#34;4-一份大指令文件不够&#34;&gt;4. 一份大指令文件不够
&lt;/h3&gt;&lt;p&gt;如果把所有规则塞进一个巨大的 system prompt，agent 会&amp;quot;迷失在细节里&amp;quot;。
仓库中的多个小文件（ARCHITECTURE.md、PRODUCT.md、session-handoff.md）各司其职，按需读取，效果更好。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;结论&#34;&gt;结论
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;仓库必须是唯一的事实来源。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;不是某个 agent 的记忆，不是聊天记录，不是某个巨大的指令文件——而是仓库里的结构化文档。&lt;/p&gt;
&lt;p&gt;当你的 agent 能在一分钟内搞清&amp;quot;这是哪、到哪了、下一步去哪&amp;quot;，你就有了一个真正可交接的 AI 工作流。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>只写提示词让 agent 做，和定好规则再让它做，差多少</title>
        <link>https://iamxurulin.github.io/p/%E5%8F%AA%E5%86%99%E6%8F%90%E7%A4%BA%E8%AF%8D%E8%AE%A9-agent-%E5%81%9A%E5%92%8C%E5%AE%9A%E5%A5%BD%E8%A7%84%E5%88%99%E5%86%8D%E8%AE%A9%E5%AE%83%E5%81%9A%E5%B7%AE%E5%A4%9A%E5%B0%91/</link>
        <pubDate>Sun, 07 Jun 2026 08:21:47 +0000</pubDate>
        
        <guid>https://iamxurulin.github.io/p/%E5%8F%AA%E5%86%99%E6%8F%90%E7%A4%BA%E8%AF%8D%E8%AE%A9-agent-%E5%81%9A%E5%92%8C%E5%AE%9A%E5%A5%BD%E8%A7%84%E5%88%99%E5%86%8D%E8%AE%A9%E5%AE%83%E5%81%9A%E5%B7%AE%E5%A4%9A%E5%B0%91/</guid>
        <description>&lt;h2 id=&#34;实验背景&#34;&gt;实验背景
&lt;/h2&gt;&lt;p&gt;AI Agent 写代码越来越强，但&amp;quot;强&amp;quot;不等于&amp;quot;可靠&amp;quot;。同样的模型、同样的提示词，为什么有时候一次就过，有时候反复翻车？答案往往不在模型本身，而在&lt;strong&gt;你给它的规则和约束&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;这个实验用 Electron 搭建一个知识库应用壳子，跑两次：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;弱 Harness&lt;/strong&gt;：只给一段提示词，什么都不准备&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;强 Harness&lt;/strong&gt;：提前准备好 AGENTS.md、feature_list.json、claude-progress.md，用结构化方式告诉 Agent 该干什么、怎么验证、什么时候算做完&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;任务定义&#34;&gt;任务定义
&lt;/h2&gt;&lt;p&gt;用 Electron 做一个知识库应用，包含四个核心功能：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;编号&lt;/th&gt;
					&lt;th&gt;功能&lt;/th&gt;
					&lt;th&gt;要求&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;kb-001&lt;/td&gt;
					&lt;td&gt;窗口启动&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;npm start&lt;/code&gt; 后 Electron 窗口正常打开&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;kb-002&lt;/td&gt;
					&lt;td&gt;左侧文档列表&lt;/td&gt;
					&lt;td&gt;左侧面板显示文档列表区域&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;kb-003&lt;/td&gt;
					&lt;td&gt;右侧问答面板&lt;/td&gt;
					&lt;td&gt;右侧面板包含输入框和对话区域&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;kb-004&lt;/td&gt;
					&lt;td&gt;本地数据目录&lt;/td&gt;
					&lt;td&gt;应用启动时创建数据目录，包含 documents/、qa/ 子目录&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;harness-是什么&#34;&gt;Harness 是什么
&lt;/h2&gt;&lt;p&gt;Harness 不是代码，是一套&lt;strong&gt;告诉 Agent 怎么干活、怎么验证、什么时候算做完&lt;/strong&gt;的规则文件。这个实验用的 Harness 核心包含三个文件，实际仓库中还会配合 init.sh 等辅助脚本：&lt;/p&gt;
&lt;h3 id=&#34;agentsmd&#34;&gt;AGENTS.md
&lt;/h3&gt;&lt;p&gt;定义 Agent 的核心行为规则：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-plain&#34; data-lang=&#34;plain&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- 一次只做一个功能
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- 实现后必须运行 npm start 验证
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- 不要因为&amp;#34;代码已经写了&amp;#34;就把功能标记为完成
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- 验证证据记录在 feature_list.json 或 claude-progress.md
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- 一个功能只有在目标行为已实现、npm start 成功、证据已记录才算完成
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;feature_listjson&#34;&gt;feature_list.json
&lt;/h3&gt;&lt;p&gt;每个功能的唯一事实来源，包含验收标准、证据槽位：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;kb-001&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;窗口启动&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;not_started&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;verification&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;运行 npm start&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;确认 Electron 窗口成功打开&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;确认窗口标题显示应用名称&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;evidence&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;claude-progressmd&#34;&gt;claude-progress.md
&lt;/h3&gt;&lt;p&gt;会话进度日志，记录当前状态、已完成功能、已知风险、下一步动作。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;第一次实验弱-harness&#34;&gt;第一次实验：弱 Harness
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;分支&lt;/strong&gt;：&lt;code&gt;p01-baseline&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;提示词&lt;/strong&gt;：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;用 Electron 做一个知识库应用，窗口左边是文档列表区域，右边是问答面板区域，应用需要创建并使用本地数据目录。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;仓库状态&lt;/strong&gt;：空的 package.json，没有 AGENTS.md，没有 feature_list.json&lt;/p&gt;
&lt;h3 id=&#34;过程&#34;&gt;过程
&lt;/h3&gt;&lt;p&gt;Agent 自由发挥，一次性完成了所有四个功能。代码质量很好，UI 布局清晰，IPC 通信正确。&lt;/p&gt;
&lt;h3 id=&#34;结果&#34;&gt;结果
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;功能&lt;/th&gt;
					&lt;th&gt;状态&lt;/th&gt;
					&lt;th&gt;备注&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;kb-001 窗口启动&lt;/td&gt;
					&lt;td&gt;✅ 完成&lt;/td&gt;
					&lt;td&gt;一次通过&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;kb-002 文档列表&lt;/td&gt;
					&lt;td&gt;✅ 完成&lt;/td&gt;
					&lt;td&gt;左侧 300px 面板&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;kb-003 问答面板&lt;/td&gt;
					&lt;td&gt;✅ 完成&lt;/td&gt;
					&lt;td&gt;右侧 flex 面板&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;kb-004 数据目录&lt;/td&gt;
					&lt;td&gt;✅ 完成&lt;/td&gt;
					&lt;td&gt;目录结构正确&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;应用截图&#34;&gt;应用截图
&lt;/h3&gt;&lt;p&gt;&lt;img src=&#34;https://iamxurulin.github.io/images/611af7b17e7175ab76abb5ea3e88ccb1-1874a76c.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;弱-harness-的问题&#34;&gt;弱 Harness 的问题
&lt;/h3&gt;&lt;p&gt;虽然任务完成了，但存在以下问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;没有验证证据&lt;/strong&gt;：功能完成了，但没有记录&amp;quot;怎么验证的&amp;quot;、&amp;ldquo;验证结果是什么&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;没有风险记录&lt;/strong&gt;：遇到 EPERM 权限问题，但没有记录到任何地方&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;没有可接续性&lt;/strong&gt;：下一轮会话必须重新理解代码，无法从上次中断的地方继续&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;没有完成定义&lt;/strong&gt;：Agent 不知道&amp;quot;什么时候算做完&amp;quot;，全靠自己判断&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id=&#34;第二次实验强-harness&#34;&gt;第二次实验：强 Harness
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;分支&lt;/strong&gt;：&lt;code&gt;p01-improved&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;提示词&lt;/strong&gt;：完全相同&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;仓库状态&lt;/strong&gt;：AGENTS.md、CLAUDE.md、init.sh、feature_list.json、claude-progress.md 已就位&lt;/p&gt;
&lt;h3 id=&#34;过程-1&#34;&gt;过程
&lt;/h3&gt;&lt;p&gt;Agent 严格按照 AGENTS.md 的流程执行：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;读取 claude-progress.md&lt;/strong&gt; → 确认 kb-001 为最高优先级&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;读取 feature_list.json&lt;/strong&gt; → 获取 4 个功能的验收标准&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;发现状态不一致&lt;/strong&gt; → feature_list.json 中功能标为 passing，但代码已清空，先修复基础状态&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;逐功能实现&lt;/strong&gt; → 每完成一个功能，运行验证，记录证据&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;遇到 Blocker&lt;/strong&gt; → Windows EPERM 阻止在 userData 目录创建子目录，按规则在窄范围修复&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新 Harness 文件&lt;/strong&gt; → 所有功能标记为 passing，记录风险&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;强-harness-的行为差异&#34;&gt;强 Harness 的行为差异
&lt;/h3&gt;&lt;p&gt;以下是 Agent 在关键决策点上的行为重构示意（非原始逐字日志）：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-plain&#34; data-lang=&#34;plain&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Agent 读到的不一致状态时的反应：
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;#34;feature_list.json 中所有功能标为 passing，但 main.js 不存在。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 这违反了 AGENTS.md 规则。先修复基础状态。&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 遇到 Blocker 时的反应：
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;#34;EPERM 权限错误。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; AGENTS.md 规则：窄范围修复，不扩大到其他功能。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 将数据目录路径改为项目根目录，功能行为不变。&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 完成后的动作：
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;#34;更新 feature_list.json：
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  - status → passing
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  - evidence 字段填入验证证据
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 更新 claude-progress.md：
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  - 记录风险（EPERM）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  - 记录下一步动作&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;结果-1&#34;&gt;结果
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;功能&lt;/th&gt;
					&lt;th&gt;状态&lt;/th&gt;
					&lt;th&gt;证据&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;kb-001 窗口启动&lt;/td&gt;
					&lt;td&gt;✅ passing&lt;/td&gt;
					&lt;td&gt;BrowserWindow 创建，index.html 加载&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;kb-002 文档列表&lt;/td&gt;
					&lt;td&gt;✅ passing&lt;/td&gt;
					&lt;td&gt;#left-panel 300px，border-right 边界&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;kb-003 问答面板&lt;/td&gt;
					&lt;td&gt;✅ passing&lt;/td&gt;
					&lt;td&gt;#right-panel flex:1，含输入交互&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;kb-004 数据目录&lt;/td&gt;
					&lt;td&gt;✅ passing&lt;/td&gt;
					&lt;td&gt;data/documents/ + data/qa/ 已创建&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;应用截图-1&#34;&gt;应用截图
&lt;/h3&gt;&lt;p&gt;&lt;img src=&#34;https://iamxurulin.github.io/images/58b1c4ac684bf0b1a3fb18e4e3318ed0-50d1b639.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;对比分析&#34;&gt;对比分析
&lt;/h2&gt;&lt;h3 id=&#34;核心指标&#34;&gt;核心指标
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;指标&lt;/th&gt;
					&lt;th&gt;弱 Harness&lt;/th&gt;
					&lt;th&gt;强 Harness&lt;/th&gt;
					&lt;th&gt;备注&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;首次成功启动&lt;/td&gt;
					&lt;td&gt;一次通过&lt;/td&gt;
					&lt;td&gt;三次&lt;/td&gt;
					&lt;td&gt;强 Harness 因主动发现并修复 EPERM 权限问题而多次重启，非代码质量问题&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;遗漏项&lt;/td&gt;
					&lt;td&gt;无&lt;/td&gt;
					&lt;td&gt;无&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;过早停止&lt;/td&gt;
					&lt;td&gt;否&lt;/td&gt;
					&lt;td&gt;否&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;验证证据&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;无&lt;/td&gt;
					&lt;td&gt;feature_list.json 结构化证据&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;风险记录&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;无&lt;/td&gt;
					&lt;td&gt;claude-progress.md 记录 EPERM&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;可接续性&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;需重新理解代码&lt;/td&gt;
					&lt;td&gt;读 claude-progress.md 即可&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;状态一致性检查&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;无&lt;/td&gt;
					&lt;td&gt;主动发现并修复不一致&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;深层差异&#34;&gt;深层差异
&lt;/h3&gt;&lt;p&gt;这个实验里，两个版本最终都完成了任务，UI 效果完全一样。但这不代表 Harness 没用——恰恰相反，&lt;strong&gt;简单的任务看不出 Harness 的价值，复杂的任务看不出 Harness 的边界&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;真正体现差异的地方：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. 状态一致性检查&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;强 Harness 下，Agent 发现 feature_list.json 中功能标记为 &amp;ldquo;passing&amp;rdquo; 但代码不存在时，主动停下来修复基础状态。弱 Harness 下，Agent 不会注意到这种不一致，会在坏的起点上继续叠加代码。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Blocker 处理策略&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;强 Harness 下，遇到 EPERM 权限错误时，AGENTS.md 的&amp;quot;窄范围修复&amp;quot;规则防止了 Agent 去修改其他无关代码。弱 Harness 下，Agent 可能过度修改，也可能直接放弃。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. 证据链&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;强 Harness 下，feature_list.json 每个功能都有 evidence 字段记录了验证证据。claude-progress.md 记录了风险和下一步动作。下一轮会话直接读这两个文件就能接续，不需要重新理解代码。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. 完成定义&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;强 Harness 有明确的完成定义：目标行为实现 + npm start 成功 + 证据记录在案。弱 Harness 下，Agent 自己判断&amp;quot;差不多完成了&amp;quot;，没有外部验证标准。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;关键结论&#34;&gt;关键结论
&lt;/h2&gt;&lt;h3 id=&#34;1-简单任务中harness-的价值是防御性的&#34;&gt;1. 简单任务中，Harness 的价值是&amp;quot;防御性&amp;quot;的
&lt;/h3&gt;&lt;p&gt;这次实验任务简单，两个版本都完成了。但 Harness 的价值在于&lt;strong&gt;防止意外&lt;/strong&gt;——状态不一致、权限错误、风险遗漏，这些在简单任务中可能不致命，但在复杂任务中会累积成灾难。&lt;/p&gt;
&lt;h3 id=&#34;2-harness-解决的是接续问题不是完成问题&#34;&gt;2. Harness 解决的是&amp;quot;接续&amp;quot;问题，不是&amp;quot;完成&amp;quot;问题
&lt;/h3&gt;&lt;p&gt;Agent 的单次执行能力很强，但多轮会话之间的接续是短板。Harness 通过 feature_list.json（状态）和 claude-progress.md（上下文）让下一轮会话能无缝接续。&lt;/p&gt;
&lt;h3 id=&#34;3-规则的价值在于约束行为不在于提升质量&#34;&gt;3. 规则的价值在于&amp;quot;约束行为&amp;quot;，不在于&amp;quot;提升质量&amp;quot;
&lt;/h3&gt;&lt;p&gt;Harness 不会让 Agent 写出更好的代码，但会让 Agent 的行为更可预测、更规范。feature_list.json 的验收标准不是为了让代码更好，而是为了让&amp;quot;完成&amp;quot;有一个客观的判断标准。&lt;/p&gt;
&lt;h3 id=&#34;4-好的-harness-是最小可行约束&#34;&gt;4. 好的 Harness 是&amp;quot;最小可行约束&amp;quot;
&lt;/h3&gt;&lt;p&gt;Harness 不是越多越好。AGENTS.md 的核心规则只有几条：一次一个功能、必须验证、证据必须记录。过多的规则会让 Agent 过度遵循流程，反而降低效率。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
