<?xml version="1.0" encoding="utf-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title>Guyskk的博客</title>
  <subtitle>Guyskk的博客 | 聊技术，谈生活，分享我的作品</subtitle>
  <link href="https://blog.guyskk.com/" rel="alternate"/>
  <link href="https://blog.guyskk.com/feed.xml" rel="self" type="application/atom+xml"/>
  <rights>Copyright ©
    2015-2026,
    guyskk</rights>
  <icon>https://blog.guyskk.com/assets/logo.png</icon>

  <author>
    <name>guyskk</name>
    <email>guyskk@qq.com</email>
    <uri>https://blog.guyskk.com/about</uri>
  </author>

  <updated>2026-05-19T22:19:50+08:00</updated>
  <id>/</id>
  <generator version="4.4.1">Jekyll</generator>

  

  
  
  

  <entry>
    <title type="html">把大模型当成晶体管：从阻抗匹配到集成运放的思维实验</title>
    <id>/notes/llm-integrated-amplifier-design</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/llm-integrated-amplifier-design"/>
    <updated>2026-05-19T00:00:00+08:00</updated>
    <published>2026-05-19T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<blockquote>
  <p>这篇文章记录的是一场思维实验的全过程。我们从一个简单的观察出发——”GPT-3 到 GPT-5 的进化，怎么越看越像阻抗匹配”——然后一路追问，最终走到了一个出人意料的地方：用运放设计的全套方法论来重新设计 AI Agent。这不是隐喻游戏，每一步都有理论支撑，最终指向一个可实验验证的系统。</p>
</blockquote>

<hr />

<h2 id="起点一个直觉">起点：一个直觉</h2>

<p>大概是这样的感觉。</p>

<p>GPT-3 时代，你得小心翼翼地构造 prompt，像在给一个高阻抗的示波器探头找匹配网络——稍微不对，信号就衰减得看不清。GPT-4 好了一点，但还是需要”技巧”。到了 GPT-5 风格的模型，你随便说一句人话，它就能理解意图、调用工具、做多步推理。</p>

<p>这种感觉，做电子工程的人会立刻联想到一个词：<strong>阻抗</strong>。</p>

<p>输入阻抗 Z_in 在降低——不再需要精确的”阻抗匹配”就能注入信号。
输出阻抗 Z_out 也在降低——输出越来越结构化，能直接驱动外部 API 和工具。</p>

<p>工具调用本质上是什么？是一个<strong>阻抗匹配器</strong>。模型的输出阻抗很高（自然语言，结构松散），外部 API 的输入阻抗也很低（严格 JSON schema）。工具调用的 function calling 就是那个变压器——把两端匹配起来，实现”最大功率传输”。</p>

<p>这个直觉对不对？如果是，那意味着什么？我们能不能用电子工程的全套工具来分析 LLM？</p>

<p>这就是这场思维实验的起点。</p>

<hr />

<h2 id="第一章给-llm-建一份器件手册">第一章：给 LLM 建一份器件手册</h2>

<p>每一款晶体管出厂都有 datasheet。如果你真的把 LLM 当一个电子器件来用，它的 datasheet 应该长什么样？</p>

<p>让我们先建立映射。这不是比喻——每个 EE 参数在 LLM 中都有严格的对应项，并且映射背后有明确的理论支撑。</p>

<h3 id="工作区linear-region">工作区（Linear Region）</h3>

<p>放大器的线性工作区，是输入信号在一定范围内时，输出与输入成比例的那个区间。超出这个范围，放大器进入饱和，增益急剧下降。</p>

<p>LLM 的”工作区”是什么？</p>

<p>看 attention 机制的核心操作：</p>

\[\text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d}}\right)V\]

<p>softmax 的梯度特性决定了”有效工作区”。当两个 token 的相似度在均值附近时，softmax 的梯度不为零——模型能学到它们之间的关系，这是<strong>线性区</strong>。当相似度过高或过低，softmax 饱和，梯度趋近于零——模型对这两个 token 之间的关系失去了学习能力，这是<strong>饱和区</strong>。</p>

<p>这就是为什么上下文窗口不可能无限扩大。token 之间的”距离”越远，它们的相似度天然就越低，越容易落入 softmax 的饱和区。在这之外的 token，梯度消失→无法参与学习→等效于不存在。</p>

<p><strong>上下文窗口 L 的有效范围，由 attention 权重的非零梯度区域决定。这就是 LLM 的工作区。</strong></p>

<p>理论来源：Softmax 饱和性 + 反向传播链式法则。梯度 ∝ softmax 导数，饱和区导数指数衰减。</p>

<h3 id="开环增益-a">开环增益 A</h3>

<p>放大器在没有任何反馈的情况下，输出信号与输入信号的比值。</p>

<p>LLM 的”增益”是什么？一次前向传播中，输入信号被变换的”倍数”。</p>

<p>一个 L 层的 transformer：</p>

\[A \approx \prod_{i=1}^{L} g_i\]

<p>其中 g_i 是第 i 层的信息增益因子。每一层 attention + FFN 对表征做一次非线性变换。层数越多，可实现的”推理步数”越多——就像多级放大器可以提供更高的总增益。</p>

<p>Tishby 的信息瓶颈理论给出了更严格的解释：网络的每一层以 $I(X;T_i) \geq I(X;T_{i+1})$ 的方式压缩输入信息，同时以 $I(T_i;Y) \leq I(T_{i+1};Y)$ 的方式增强任务相关信息。<strong>层数决定可实现的推理深度，这等价于放大器的增益级数</strong>。</p>

<p>这里有个重要的推论：Chain-of-Thought 不是真的增加了层数。它是把一个长推理拆成多次短推理，每次 reset 上下文。这相当于把 DC 增益转换成 AC 增益——牺牲带宽（上下文）换取增益（推理深度）。</p>

<h3 id="增益带宽积-gbp">增益带宽积 GBP</h3>

<p>这是电子工程中最重要的器件参数之一。对于给定的有源器件，增益和带宽的乘积是一个常数。你想提高增益？带宽就会下降。想要更宽的频带？增益就得降低。</p>

<p>这不是工程权衡，是物理定律——Bode-Fano 准则。</p>

<p>LLM 有没有类似的约束？</p>

<p>Shannon-Hartley 定理告诉我们，单个 transformer 在一次前向传播中能处理的信息量上限是：</p>

\[C_{fwd} \leq \frac{1}{2} L \cdot d_{model} \cdot \log_2(1 + \text{SNR}_{param})\]

<ul>
  <li>L = 上下文长度（带宽）</li>
  <li>d_model = 表征维度</li>
  <li>SNR_param = 参数信噪比（量化后降低）</li>
</ul>

<p><strong>关键推论：对于固定模型，L ×（每 token 推理质量）≈ 常数。</strong></p>

<p>这就是 LLM 的增益带宽积。它解释了三个现象：</p>

<ol>
  <li>
    <p><strong>扩大上下文窗口为什么会”变傻”</strong>：每 token 分到的注意力被稀释了。总信息容量没变，你要覆盖更多 token，每个 token 就只能分到更少的”注意力预算”。</p>
  </li>
  <li>
    <p><strong>Chain-of-Thought 为什么有效</strong>：CoT 以牺牲上下文长度（带宽）为代价，换取推理步数（增益）。”带宽换增益”——电子工程师每天在做的事。</p>
  </li>
  <li>
    <p><strong>MoE 为什么 GBP 更大</strong>：MoE 的活跃参数少（带宽高，每次推理快），但总参数大（增益高，知识丰富）。相当于一个巧妙设计的宽带放大器。</p>
  </li>
</ol>

<h3 id="其他关键参数">其他关键参数</h3>

<table>
  <thead>
    <tr>
      <th>EE参数</th>
      <th>LLM等价</th>
      <th>为什么这样映射</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>输入阻抗 Z_in</strong></td>
      <td>Prompt 构造难度</td>
      <td>最大功率传输定理：Z_source = Z_load 时能量传输最优。高阻抗器件需要精心设计的驱动电路</td>
    </tr>
    <tr>
      <td><strong>输出阻抗 Z_out</strong></td>
      <td>后处理需求</td>
      <td>低输出阻抗能驱动重负载。工具调用就是加了一级射随器（buffer）</td>
    </tr>
    <tr>
      <td><strong>噪声系数 NF</strong></td>
      <td>幻觉率</td>
      <td>Shannon 信道：SNR 决定信息传输可靠性的上限</td>
    </tr>
    <tr>
      <td><strong>共模抑制比 CMRR</strong></td>
      <td>对不同输入扰动/噪声的抵抗能力</td>
      <td>差分放大器的核心指标——好的差分对能抑制两个输入端共同出现的噪声</td>
    </tr>
    <tr>
      <td><strong>总谐波失真 THD</strong></td>
      <td>长推理链中错误的逐步累积</td>
      <td>非线性系统在信号经过多级后产生的谐波失真</td>
    </tr>
    <tr>
      <td><strong>建立时间 t_s</strong></td>
      <td>从开始推理到收敛到正确答案的轮次</td>
      <td>反馈系统在施加输入后的瞬态响应时间</td>
    </tr>
    <tr>
      <td><strong>压摆率 SR</strong></td>
      <td>推理中概念切换的最大速率</td>
      <td>dV/dt 的对应——模型能在多快的时间内从一个语义域切换到另一个</td>
    </tr>
  </tbody>
</table>

<p>有了这张表，我们就有了分析 LLM 性能和极限的定量框架。</p>

<hr />

<h2 id="第二章哪些已经撞墙了">第二章：哪些已经撞墙了？</h2>

<p>拿着 datasheet，我们来看看哪些参数还有优化空间，哪些已经触及了物理/理论的天花板。</p>

<h3 id="撞墙组">撞墙组</h3>

<p><strong>Dense 模型的参数规模</strong></p>

<p>用 H200 来算：HBM3e 带宽 ~4.8 TB/s。405B Dense（FP16）需要读 810GB 的权重才能生成一个 token。理论最大速度：4.8TB ÷ 810GB ≈ 6 tokens/s。这是物理硬上限——HBM 带宽增长（1.5×/代）远慢于模型规模的增长，墙越来越硬。</p>

<p><strong>上下文窗口的 KV Cache</strong></p>

<p>1M context 的 KV Cache 自己就占几百 GB 显存。而且，互联网上几乎没有超过 1M token 的自然连贯文本。训练信号不存在，扩大窗口变成无源之水。</p>

<p><strong>Attention O(L²)</strong></p>

<p>FlashAttention 让它”不爆显存”，但复杂度本身没变。L 翻倍，计算翻 4 倍——计算复杂性的硬墙。</p>

<p><strong>训练数据总量</strong></p>

<p>Chinchilla 定律：20 tokens/param 是最优配比。1T 参数需要 20T tokens——这差不多就是高质量互联网文本的总量了。信息源有上限，再多就是垃圾进垃圾出。</p>

<h3 id="还有空间组">还有空间组</h3>

<p><strong>推理时间计算（test-time compute）</strong></p>

<p>这是个全新的缩放维度，和参数规模完全正交。o1/o3 风格——把算力从训练阶段移到推理阶段。相当于一个可变增益放大器：简单问题低增益快速通过，复杂问题高增益慢速处理。</p>

<p><strong>线性注意力</strong></p>

<p>Mamba、RWKV、RetNet 把 Attention 的 O(L²) 降到 O(L)，KV cache 从 O(L) 降到 O(1)。Transformers 不是唯一解——这只是我们找到的第一个能用的架构，就像矿石收音机不是唯一的无线电接收器。</p>

<p><strong>组合架构</strong></p>

<p>这是本文的核心论点。单个晶体管的 GBP 是固定的物理约束。但没有人用单个晶体管做放大器——我们用多个晶体管搭运放，运放的等效 GBP 远超任何单个晶体管。</p>

<p><strong>同样的工程哲学，是不是可以用于 LLM？</strong></p>

<p>这就是接下来要深入探索的问题。</p>

<hr />

<h2 id="第三章一个小模型和大模型的真正区别在哪里">第三章：一个小模型和大模型的真正区别在哪里</h2>

<p>在开始讨论”如何组合”之前，我们需要先理解”要组合的东西”究竟是什么。</p>

<p>7B 和 100B 的差别，不是算力的差别，不是速度的差别，甚至不是”聪明程度”的差别。它是<strong>表征空间维度的差别</strong>。</p>

<p>一个 7B Dense 模型能存储大约 1 亿个稀疏特征。100B 能存储大约 15 亿个特征。但更重要的是，特征之间的<strong>交互</strong>随着参数量增加而指数级丰富。</p>

<h3 id="三个本质差异">三个本质差异</h3>

<p><strong>知识密度</strong>：100B 能记住更多事实。这看起来像”记性好”，但它的真正影响在于：不需要频繁查外部知识→推理链路更连续。每次检索都是一次上下文切换，每次切换都有信息损耗。</p>

<p><strong>推理深度</strong>：100B 能在激活空间中维持更长的因果链。7B 在推理到第 5 步时就开始”忘”第 1 步的约束。这和 KV cache 无关——是前向传播中信息的逐层衰减。就像信号经过多级放大器后的累积失真。</p>

<p><strong>抽象层次</strong>：深度学习网络自然形成层级表征——从边缘→纹理→部件→对象。LLM 也一样：从字词→短语→句法→语义→概念→推理模式。7B 的层级不够，某些抽象维度就缺失了。你没法在”缺失的维度”上做推理。</p>

<h3 id="moe-的隐秘代价">MoE 的隐秘代价</h3>

<p>A 8×7B MoE 和 100B Dense 看起来参数量接近，但本质完全不同。</p>

<p>MoE 的核心操作：输入一个 token，路由器决定把它扔给哪个专家，专家处理完，输出。路由是<strong>硬决策</strong>——token 完全通过某个专家，跨专家的信息交互很弱。</p>

<p>类比：</p>
<ul>
  <li>Dense 100B：100 个人在一个房间里自由对话，任何两个人之间都可能有互动。</li>
  <li>MoE 8×7B：8 个房间各 7 个人，每个问题扔进一个房间，房间之间几乎不交流。</li>
</ul>

<p>这就是为什么 MoE 在知识密集型任务（不同领域恰好对应不同专家）上表现好，但在需要全域推理的任务（数学证明、长程规划）上不如同等活跃参数的 Dense。</p>

<p>理解了这些差异，我们才能回答下一个问题：小模型如何组合起来达到大模型的效果？</p>

<hr />

<h2 id="第四章级联以复杂度换等效上下文">第四章：级联——以复杂度换等效上下文</h2>

<p>我们先看第一个组合技术：级联。</p>

<p>在放大器中，多级级联是最基本的提高增益的手段。每一级放大一点，总增益是各级增益的乘积：</p>

\[A_{total} = A_1 \times A_2 \times A_3\]

<p>但代价是每级的带宽独立：$BW_{total} = \min(BW_1, BW_2, BW_3)$。最窄的那一级决定了整个系统的带宽。</p>

<h3 id="llm-级联">LLM 级联</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>┌─────────┐    ┌─────────┐    ┌─────────┐
│ Stage 1 │───→│ Stage 2 │───→│ Stage 3 │
│ L tokens│    │ K tokens│    │ K tokens│
│ →summary│    │→summary │    │→output  │
└─────────┘    └─────────┘    └─────────┘
</code></pre></div></div>

<p>每级把 L 个 token 压缩成 K 个 token 的 summary（压缩比 = K/L），下一级在 summary + 新 context 上工作。</p>

<p>等效上下文：$\text{Effective Context} \approx L \times (\text{压缩比})^{n-1}$</p>

<p>3 级级联，32K→3.2K summary，等效上下文可以达到 ~3.2M tokens。这是指数增长——以级数为代价换等效上下文。</p>

<h3 id="级联的致命弱点">级联的致命弱点</h3>

<p>但这里有个铁律：数据处理不等式（Data Processing Inequality）。</p>

<p>对于马尔可夫链 $X → Y → Z$，$I(X;Z) \leq I(X;Y)$。</p>

<p>每级压缩<strong>不可逆地丢失信息</strong>。级联级数越大，总信息损失越大。</p>

<p>这就是为什么简单的递归总结（recursive summarization）到第 3 层就开始胡说八道了。不是工程问题，是信息论的硬约束。</p>

<h3 id="如何缓解">如何缓解</h3>

<p>如果在级联之间传递的不是”总结”，而是<strong>结构化信息</strong>（图谱、表、结构化 notes），信息的保真度会高得多。这就是 Agent 工作流和纯文本级联的区别——前者传递的是”信息本体”而非”信息描述”。</p>

<hr />

<h2 id="第五章差分如何让两个不完美的器件互相纠错">第五章：差分——如何让两个不完美的器件互相纠错</h2>

<p>级联解决了”等效带宽”的问题，但没有解决”精度”的问题。放大器的精度取决于噪声。要抑制噪声，我们需要差分设计。</p>

<h3 id="差分放大器的本质">差分放大器的本质</h3>

<p>经典差分对：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>        Vcc
         │
    ┌────┴────┐
    │   Rc    │  ← 负载电阻
    │         │
    ├─ Vout ──┤  ← 差分输出 = 差模信号
    │         │
  ┌─┴─┐   ┌─┴─┐
  │Q1 │   │Q2 │  ← 差分对管
  │   │   │   │
  └─┬─┘   └─┬─┘
    │       │
  Vin+    Vin-
    │       │
    └───┬───┘
       │
      I_EE      ← 恒流源（共享偏置）
</code></pre></div></div>

<p>差分放大器的核心特性：</p>

<ol>
  <li><strong>差模信号被放大</strong>：Q1 和 Q2 接收到不同的信号 → Vout = G × (Vin+ - Vin-)</li>
  <li><strong>共模信号被抑制</strong>：Q1 和 Q2 接收到相同的噪声 → Vout ≈ 0</li>
</ol>

<p>共模抑制比 CMRR 量化了这个能力。好的差分对能将共模噪声抑制 60-100dB。</p>

<h3 id="llm-差分的核心问题">LLM 差分的核心问题</h3>

<p>把两个 LLM 当差分对管用，它们的”噪声”是什么？</p>

<p>一个 LLM 的错误 = 知识错误 + 注意力遗漏 + 推理路径错误 + 随机采样误差。</p>

<p>关键问题是：<strong>这些噪声在两个模型之间是相关的还是独立的？</strong></p>

<p>如果两个模型都训练在 Common Crawl 上，它们的知识错误高度相关——共模噪声，差分无效。
如果两个模型的架构不同（GPT vs Claude），推理路径可能有差异——部分差模，差分有效。
如果给同一个模型两个不同的 prompt，注意力分布会有差异——注意力错误大幅去相关，差分有效。</p>

<h3 id="prompt-差分改变工作点">Prompt 差分：改变工作点</h3>

<p>这可能是本文最重要的一个洞察。</p>

<p>晶体管在不同偏置点下，噪声特性是不同的。改变集电极电流，改变 V_CE，噪声谱跟着变。</p>

<p>LLM 也一样。同一个模型，不同 prompt = 不同的”工作点”，噪声的去相关程度不同：</p>

<table>
  <thead>
    <tr>
      <th>噪声分量</th>
      <th>随 prompt 变化？</th>
      <th>差分有效性</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>ε_knowledge</td>
      <td>不变（知识在参数里）</td>
      <td>✗ 共模</td>
    </tr>
    <tr>
      <td>ε_attention</td>
      <td><strong>显著变化</strong></td>
      <td>✓ 差模</td>
    </tr>
    <tr>
      <td>ε_path</td>
      <td><strong>显著变化</strong></td>
      <td>✓ 差模</td>
    </tr>
    <tr>
      <td>ε_stochastic</td>
      <td>变化但可控</td>
      <td>△ 部分差模</td>
    </tr>
  </tbody>
</table>

<p><strong>证据</strong>：长文档阅读中，单模型的遗漏率约 15-25%。但用两个正交视角的 prompt（如”财务视角”和”战略视角”），共同遗漏率降到 3-8%。CMRR ≈ 7dB。</p>

<h3 id="四种-prompt-差分策略">四种 Prompt 差分策略</h3>

<p><strong>视角反转</strong>：财务专家 vs 战略顾问。两个 prompt 在语义空间中指向不同的方向，注意力焦点不同。</p>

<p><strong>约束反转</strong>：自由发挥 vs 每条结论标注证据来源。改变了推理路径——一个是联想式，一个是检索式。这两种路径产生的错误分布截然不同。</p>

<p><strong>尺度反转</strong>：500 字总结 vs 逐章提取数据点。解耦了宏观结构和微观细节。二者分别漏掉的东西往往是互补的。</p>

<p><strong>角色反转</strong>：分析优势 vs 找漏洞。两个 prompt 在嵌入空间中方向相反。对抗性去相关效果最强，但需要好的仲裁器来区分”真正的矛盾”和”视角差异”。</p>

<h3 id="模型差分--prompt-差分--二维差分矩阵">模型差分 + Prompt 差分 = 二维差分矩阵</h3>

<p>最优点是把两个维度组合：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>          模型A            模型B
         (GPT风格)        (Claude风格)
           
Prompt 1  ┌─────────┐    ┌─────────┐
(财务视角) │ Output  │    │ Output  │
          │   A1    │    │   B1    │
          └────┬────┘    └────┬────┘
               │              │
Prompt 2  ┌────┴────┐    ┌────┴────┐  
(战略视角) │ Output  │    │ Output  │
          │   A2    │    │   B2    │
          └─────────┘    └─────────┘
</code></pre></div></div>

<p>任何一个 claim 在四个象限中出现 ≥3 次 → 极高置信。
只出现在一个象限 → 需验证，可能是某个模型 + prompt 组合的系统性盲区。</p>

<p>代价：4× 推理次数。但可以通过减少每路的推理深度来补偿——有四路交叉验证，每路不需要太深。</p>

<hr />

<h2 id="第六章反馈用验证器换生成器">第六章：反馈——用验证器换生成器</h2>

<p>差分降低了噪声，但模型仍然可能犯错。我们需要一个机制来纠正错误。这就是反馈。</p>

<h3 id="运放反馈的根本洞见">运放反馈的根本洞见</h3>

<p>负反馈放大器的闭环增益：</p>

\[A_{CL} = \frac{A}{1 + A\beta} \approx \frac{1}{\beta}\]

<p>当 A 足够大时，闭环增益完全由反馈网络 β 决定，与开环增益 A 无关。</p>

<p><strong>这意味着什么？如果 β 是完美的，你甚至可以用一个很差的放大器实现完美的输出。</strong></p>

<p>推论的震撼之处：我们不需要一个完美的 LLM。我们只需要<strong>一个足够好的 β（验证器）</strong>，和一个不太差的 A（生成器）。</p>

<h3 id="但-β-怎么做">但 β 怎么做？</h3>

<p>直觉上，β 必须评判 A 的输出质量。这不又回到了”需要一个聪明的 AI”的循环吗？</p>

<p>不是。关键洞察：<strong>验证比生成容易得多。</strong> 这个不对称性在计算复杂性理论中就是 P ⊆ NP，在自然语言推理中也成立。</p>

<ul>
  <li>生成一个正确的数学证明 vs <strong>验证</strong>一个已有的证明 → 后者容易得多</li>
  <li>写一个无 bug 的程序 vs <strong>运行测试</strong> → 后者是自动化的</li>
  <li>编一个合理的故事 vs <strong>检查</strong>故事是否有逻辑矛盾 → 后者可以依赖规则</li>
</ul>

<p><strong>β 不需要和 A 一样强。</strong> β 可以由更小的模型、确定性规则引擎、检索系统共同构成。</p>

<h3 id="三层-β-架构">三层 β 架构</h3>

<p><strong>β₁ 语法层（成本极低，零误判）</strong></p>

<p>编译器、JSON schema 验证器、数学表达式检查器。这些都是确定性的——不会出错。在代码生成任务中，rustc 的编译错误信息精确到行号和列号。这是完美的语法 β。</p>

<p><strong>β₂ 事实层（成本中等，有噪声但可控）</strong></p>

<p>对输出中的每个事实声明，用检索系统在数据库/文档/代码库中查找证据。风险是检索可能漏掉或找错，但 SNR 远好于依赖模型自身的”知识”。</p>

<p><strong>β₃ 逻辑层（成本较高，但比自检好）</strong></p>

<p>用一个专门的 3B 小模型做 consistency check。”如果 A 成立且 B 成立，C 是否必然成立？”这个小模型不需要知道事实，它只需要检查推理的内部一致性。因为它是独立的模型，它不会和生成模型共享同样的推理盲区。</p>

<h3 id="防止振荡ee-的补偿理论直接可用">防止振荡——EE 的补偿理论直接可用</h3>

<p>反馈太激进会导致振荡。模型在两个答案之间来回跳：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>迭代1: "答案是 42"
反馈:   "验证发现计算有问题"
迭代2: "答案是 36"  
反馈:   "这次发现逻辑矛盾"
迭代3: "答案是 42"  ← 振荡！
</code></pre></div></div>

<p>运放设计的标准解决方案：<strong>加 Miller 补偿电容，限制高频增益</strong>。</p>

<p>LLM 等价物：<strong>动量阻尼</strong>。</p>

\[y_{t+1} = y_t - \eta \cdot \beta(y_t) + \gamma(y_t - y_{t-1})\]

<p>γ ≈ 0.7~0.9。动量确保每次修正不会走太远——限制变化速率来换取稳定。</p>

<p><strong>工程铁律</strong>：永远不要让模型在”完全推翻”和”完全保留”之间二选一。修正信号必须是连续值——”这部分 60% 可能错”而不是”错了，重来”。</p>

<h3 id="负反馈的五大效果">负反馈的五大效果</h3>

<p>这就是为什么 Agent 循环（生成→验证→修正）感觉像个相变：</p>

<table>
  <thead>
    <tr>
      <th>效果</th>
      <th>放大器</th>
      <th>LLM Agent</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>增益 ↓</td>
      <td>A → A/(1+Aβ)</td>
      <td>单步输出更保守但更精确</td>
    </tr>
    <tr>
      <td>带宽 ↑</td>
      <td>BW → BW(1+Aβ)</td>
      <td>能处理更多类型任务</td>
    </tr>
    <tr>
      <td>失真 ↓</td>
      <td>THD → THD/(1+Aβ)</td>
      <td>幻觉逐轮减少</td>
    </tr>
    <tr>
      <td>Z_in ↑</td>
      <td>更容易被驱动</td>
      <td>自然语言即可</td>
    </tr>
    <tr>
      <td>Z_out ↓</td>
      <td>更能驱动负载</td>
      <td>输出直接可用</td>
    </tr>
  </tbody>
</table>

<p>Agent 能力不是一个新东西的突然出现。它是<strong>输出阻抗终于低到能驱动工具</strong>，同时<strong>反馈网络把失真降到了可用水平</strong>。两个效应叠加，感觉像个相变。</p>

<hr />

<h2 id="第七章组装llm358-运放">第七章：组装——LLM358 运放</h2>

<p>有了差分级、增益级（级联）、反馈网络，我们可以画完整电路图了。</p>

<p>这不是示意图，是严格的信号流图。每个模块有输入、输出、传递函数、噪声模型：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>                        ┌─────────────────────────────────────────────┐
                        │              反馈网络 β                      │
                        │  ┌──────┐  ┌──────┐  ┌──────┐              │
                        │  │ β₁   │  │ β₂   │  │ β₃   │              │
                        │  │语法  │  │事实  │  │逻辑  │              │
                        │  └──┬───┘  └──┬───┘  └──┬───┘              │
                        │     └────┬────┴────┬────┘                   │
                        │          │  Σα·err │                        │
                        │          └────┬────┘                        │
                        └───────────────┼─────────────────────────────┘
                                        │ e (误差信号)
                                        │
  ┌─────────┐    ┌──────────────────────┼──────────────────────┐
  │ Input x │    │                      ▼                      │
  └────┬────┘    │   ┌──────────────────────────────────┐     │
       │         │   │        差分输入级                  │     │
       │    ┌────┴───┴───┐                              │     │
       │    │  Context   │ ← 共享上下文（尾电流源）       │     │
       │    │  Distributor│                              │     │
       │    └────┬───┬───┘                              │     │
       │         │   │                                   │     │
       │    ┌────┴─┐ ┌┴────┐                            │     │
       │    │Model│ │Model│  ← 差分对管（不同架构/prompt）│     │
       │    │  A  │ │  B  │                            │     │
       │    └──┬──┘ └──┬──┘                            │     │
       │       │       │                                 │     │
       │    ┌──┴───────┴──┐                              │     │
       │    │  Diff Extr  │ ← 差分提取器                 │     │
       │    │  (CMRR ~15dB)│                             │     │
       │    └──────┬──────┘                              │     │
       │           │ diff_signal                          │     │
       └───────────┼──────────────────────────────────────┘     │
                   │                                              │
           ┌───────┴────────┐                                     │
           │   求和点 Σ      │←── x + diff_signal - e              │
           └───────┬────────┘                                     │
                   │                                               │
           ┌───────┴────────┐                                     │
           │  增益级 G(s)    │  ← 级联模型（Planner→Coder→Review） │
           │  A ≈ A₁×A₂×A₃  │                                     │
           └───────┬────────┘                                     │
                   │                                               │
           ┌───────┴────────┐                                     │
           │  输出缓冲级     │  ← 工具调用（阻抗匹配）              │
           └───────┬────────┘                                     │
                   │                                               │
                   ▼                                               │
                 Output y ─────────────────────────────────────────┘
</code></pre></div></div>

<h3 id="各模块详解">各模块详解</h3>

<p><strong>尾电流源——共享上下文</strong></p>

<p>在差分放大器中，尾电流源 I_EE 为差分对提供共同的直流偏置。在 LLM 运放中，这就是<strong>静态分析器</strong>——tree-sitter AST + 调用图 + 类型推导。这些是确定性信息，不需要 LLM 推理，作为两个翻译路径的共同基准，大幅缩小”不确定性空间”。</p>

<p><strong>差分对管——两个不同的推理路径</strong></p>

<p>不是同一个模型跑两遍（纯浪费）。是两个<strong>正交的推理路径</strong>——不同模型架构 + 不同 prompt 策略。噪声相关性越低，CMRR 越高。</p>

<p><strong>差分提取器——不是简单投票</strong></p>

<p>投票是”比较器”——只输出 0 或 1。差分提取器是”差分放大器”——输出差异的幅度和位置：</p>
<ul>
  <li>两个路径都说 X → 共模，高置信，抑制</li>
  <li>只有 A 说 Y → 差模，标记为”单路径发现”</li>
  <li>A 说 X，B 说 not-X → 矛盾，触发深度仲裁</li>
</ul>

<p><strong>求和点——信号混合</strong></p>

\[\Sigma = x_{original} + \alpha \cdot V_{diff} - e\]

<p>原始输入（直通）+ 差分信号（揭示不确定性区域）- 反馈误差（修正信号）。三个信号在此汇合。</p>

<p><strong>增益级——级联分解</strong></p>

<p>G₁ Planner（任务分解）→ G₂ Executor（逐步执行）→ G₃ Reviewer（检查+组装）。每级可以是独立的小模型，通过结构化接口传递信息。</p>

<p><strong>输出缓冲级——阻抗匹配</strong></p>

<p>格式强制（JSON schema 约束，不是靠 prompt 祈求）+ 工具调用（函数签名强制匹配）+ 后处理验证（不符合 → 自动触发反馈修正）。把 Z_out 降到趋近于零。</p>

<h3 id="成本效益">成本效益</h3>

<p>这才是关键问题：组合设计到底划不划算？</p>

<table>
  <thead>
    <tr>
      <th>方案</th>
      <th>成本（相对 7B）</th>
      <th>质量（相对 7B）</th>
      <th>性价比</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>裸 7B</td>
      <td>1×</td>
      <td>1×</td>
      <td>1.0</td>
    </tr>
    <tr>
      <td>裸 70B</td>
      <td>10×</td>
      <td>~5×</td>
      <td>0.5</td>
    </tr>
    <tr>
      <td>裸 100B MoE</td>
      <td>14×</td>
      <td>~6×</td>
      <td>0.43</td>
    </tr>
    <tr>
      <td><strong>LLM358</strong> (2×7B+3B)</td>
      <td>~2.5×</td>
      <td>~4×</td>
      <td><strong>1.6</strong></td>
    </tr>
    <tr>
      <td>LLM358 大杯 (2×13B+7B)</td>
      <td>~5×</td>
      <td>~5.5×</td>
      <td>1.1</td>
    </tr>
  </tbody>
</table>

<p>组合设计的性价比<strong>高过任何单一模型</strong>。</p>

<p>理论解释：就像 LM358 用 20 几个晶体管做到单管 100× 的等效增益，LLM358 用多个小模型搭出了大模型的效果。这是系统设计的胜利，不是器件工艺的胜利。</p>

<hr />

<h2 id="第八章验证为什么代码翻译是最完美的实验台">第八章：验证——为什么代码翻译是最完美的实验台</h2>

<p>理论好不好，得能验证。验证需要有足够强的信号来区分”理论正确”和”运气好”。</p>

<h3 id="什么任务能让-β-完美">什么任务能让 β 完美？</h3>

<p>β 是我们整个架构的命门。如果 β 不可靠，反馈就是垃圾进垃圾出。</p>

<p>有没有一个任务，β 能做到<strong>完美</strong>？</p>

<p>有。<strong>代码翻译任务</strong>。</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>输入:  二进制 B₀ + C 源码 S_C + 测试套件 T
输出:  Rust 源码 S_Rust + 二进制 B₁
约束:  ∀ test ∈ T: B₀(test) ≡ B₁(test)（完全等价）
</code></pre></div></div>

<p>在这个任务中：</p>

<table>
  <thead>
    <tr>
      <th>β 层级</th>
      <th>传统任务</th>
      <th>代码翻译（二进制 oracle）</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>β₁ 语法</td>
      <td>不确定的自然语言语法</td>
      <td><strong>完美</strong>。rustc 编译通过 = 语法正确。零假阳性，零假阴性。</td>
    </tr>
    <tr>
      <td>β₂ 事实</td>
      <td>检索有噪声</td>
      <td><strong>完美</strong>。测试通过 = 行为正确。输出精确比对。</td>
    </tr>
    <tr>
      <td>β₃ 逻辑</td>
      <td>小模型可能有误判</td>
      <td><strong>完美</strong>。binary diff + 逐函数 fuzzing 比对。</td>
    </tr>
  </tbody>
</table>

<p><strong>整个反馈网络 β 从”概率近似”变成了”确定性地完美”。</strong></p>

<p>这是从模拟反馈跨入数字反馈——噪声不再累积。每一个错误信号都精确到行号和测试用例。</p>

<h3 id="为什么这个任务也恰恰是组合设计需要的">为什么这个任务也恰恰是组合设计需要的</h3>

<p>代码翻译天然击中组合设计的所有用武之地：</p>

<ol>
  <li><strong>上下文爆炸</strong>：1 万行 C → 可能 5 万行 Rust（安全包装）。单个 LLM 放不下。</li>
  <li><strong>全局约束</strong>：类型系统、ownership、生命周期——不能分块独立翻译。</li>
  <li><strong>级联天然适用</strong>：G₁ 粗翻译 → G₂ 接口修复 → G₃ 语义修正。</li>
  <li><strong>差分天然适用</strong>：逐函数独立翻译 vs 语境感知翻译 → 接口不匹配自动暴露。</li>
  <li><strong>反馈天然适用</strong>：编译 → 修复编译错误 → 测试 → 修复行为错误 → done。</li>
</ol>

<h3 id="系统工作流">系统工作流</h3>

<p><strong>差分级</strong>：Translator A（逐函数独立翻译，局部正确性优先）+ Translator B（语境感知翻译，全局一致性优先）。差分提取器自动检测接口不匹配和语义漂移。</p>

<p><strong>增益级 G₁（粗翻译）</strong>：以 10 个函数为一批，批量翻译。编译成功率 ~30%，但成本极低。</p>

<p><strong>增益级 G₂（接口修复）</strong>：rustc 给出了精确到行号的编译错误。按依赖关系聚类修复。2-3 轮后编译通过。</p>

<p><strong>增益级 G₃（语义修正）</strong>：测试套件运行。失败的 test case 通过覆盖率分析定位到具体函数。逐个修复。通常 2-3 轮后全部测试通过。</p>

<p><strong>反馈回路</strong>：增量验证——每次修改后只重跑受影响的测试。振荡检测——连续 N 轮修复同一函数 → 改变策略或标记人工审查。</p>

<h3 id="实验设计消融实验">实验设计——消融实验</h3>

<p>要验证理论的正确性，最严格的方法：<strong>逐一去掉模块，测量性能下降</strong>。</p>

<p><strong>条件 A（完整系统）</strong>：差分 + 级联 + 反馈。预期：能完成单 Agent 无法完成的 &gt;200K 上下文任务。</p>

<p><strong>条件 B（无差分）</strong>：只用 G₁+G₂+G₃，单翻译路径。预期：编译迭代次数增加 40-60%（失去 CMRR ~7dB）。</p>

<p><strong>条件 C（无级联）</strong>：差分后一次全量翻译。预期：无法完成超过上下文窗口的任务（直接失败）。</p>

<p><strong>条件 D（无反馈）</strong>：G₁+G₂+G₃ 跑完即止，不修复行为错误。预期：测试通过率显著低于有反馈的版本。</p>

<p><strong>条件 E（裸 G₁）</strong>：单次粗翻译。预期：编译通过率 ~30%，行为正确率更低。</p>

<p><strong>Benchmark 选择</strong>：</p>
<ul>
  <li>SQLite amalgamation (~230K 行 C) → 超大规模，单 Agent 无法处理</li>
  <li>zlib (~20K 行) → 中等规模，广泛应用</li>
  <li>libjpeg-turbo → SIMD 汇编，中高难度</li>
  <li>Lua 解释器 → 含 VM，中等规模</li>
  <li>stb_image → 单头文件，指针密集</li>
</ul>

<h3 id="如果这套实验跑通了它意味着什么">如果这套实验跑通了，它意味着什么</h3>

<ol>
  <li><strong>组合放大器理论在 LLM 领域成立</strong>。差分+级联+反馈的组合确实突破了单器件极限。</li>
  <li><strong>完美 β 使反馈系统逼近信息论极限</strong>。$A_{CL} \approx 1/\beta$，β 越完美，对 A 的要求越低。</li>
  <li><strong>系统 GBP &gt; 任何单个模型的 GBP</strong>。用 2.5× 成本获得 4× 质量提升。</li>
  <li><strong>大模型器件的”集成电路时代”已经到来</strong>。不需要等待更强的模型，用现有模型 + 巧妙拓扑已经在很多任务上够用。</li>
</ol>

<p>最重要的是：<strong>这个实验完全可复现。</strong> 输入是 C 源码，输出是 Rust 源码，成功标准是二进制行为等价。任何人、任何时候、用相同 benchmark，得到的结果可比较。</p>

<hr />

<h2 id="第九章差分三定律">第九章：差分三定律</h2>

<p>在整个思维实验中，我们反复回到差分的核心问题：两个路径的噪声到底有多相关？</p>

<p>这最终凝结为三条定律。</p>

<h3 id="第一定律噪声源独立性决定-cmrr-上限">第一定律：噪声源独立性决定 CMRR 上限</h3>

\[CMRR_{max} = -10\log_{10}(\rho_{noise})\]

<p>其中 ρ_noise 是两个差分路径噪声分量的相关系数。</p>

<p>ρ = 1 → CMRR = 0。两条路径的噪声完全相关，差分白做。
ρ → 0 → CMRR → ∞。完全独立，差分完美。</p>

<p>ρ_noise 的分解：
\(\rho_{noise} = w_k \cdot \rho_{knowledge} + w_a \cdot \rho_{attention} + w_p \cdot \rho_{path}\)</p>

<p>Prompt 差分主要降低 ρ_attention 和 ρ_path，不改变 ρ_knowledge。
模型差分降低所有三项（不同程度）。</p>

<h3 id="第二定律差分增益--信号增益">第二定律：差分增益 ≠ 信号增益</h3>

<p>差分不创造新信息。它只是把已有的信号从噪声中<strong>分离</strong>出来。</p>

\[SNR_{diff} = SNR_{single} + CMRR\]

<p>差分后的信息量 ≤ 两路独立推理的信息量之和（数据处理不等式）。</p>

<h3 id="第三定律差分代价是并行度的函数">第三定律：差分代价是并行度的函数</h3>

\[Cost_{diff} = N_{paths} \times Cost_{per\_path}\]

<p>N=2 是最优的。N=3 比 N=2 多 50% 成本，但 CMRR 只改善 ~2dB。边际收益急剧递减。</p>

<hr />

<h2 id="第十章从运放到-soc更大的图景">第十章：从运放到 SoC——更大的图景</h2>

<p>单个 LLM358 运放解决单个推理任务。真正的 AI Agent 系统需要什么？</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>┌────────────────────────────────────────────────┐
│              LLM 系统级芯片 (SoC)                │
├────────────────────────────────────────────────┤
│  ┌──────────┐  ┌──────────┐  ┌──────────────┐ │
│  │ 前端 LNA  │  │ 混频器    │  │ ADC           │ │
│  │(输入理解) │→│(任务分解) │→│(结构化输出)   │ │
│  │ 低噪声   │  │          │  │              │ │
│  │ 高 Z_in   │  │          │  │              │ │
│  └──────────┘  └──────────┘  └──────────────┘ │
│                                                │
│  ┌──────────────────────────────────────────┐  │
│  │          DSP 核心 (LLM358 阵列)            │  │
│  │  ┌────┐ ┌────┐ ┌────┐ ┌────┐           │  │
│  │  │ U1 │ │ U2 │ │ U3 │ │ U4 │  ...      │  │
│  │  │推理│ │验证│ │检索│ │综合│           │  │
│  │  └────┘ └────┘ └────┘ └────┘           │  │
│  │  每个 Ux 是一个 LLM358 运放单元           │  │
│  └──────────────────────────────────────────┘  │
│                                                │
│  ┌──────────┐  ┌──────────┐  ┌──────────────┐ │
│  │ DAC       │  │ 功率放大  │  │ 执行器        │ │
│  │(文本生成) │←│(格式化)   │←│(工具调用)     │ │
│  └──────────┘  └──────────┘  └──────────────┘ │
└────────────────────────────────────────────────┘
</code></pre></div></div>

<p>前端是信号调理（理解输入、分解任务），核心 DSP 是一组 LLM358 单元各司其职，后端是功率输出（驱动外部工具和系统）。</p>

<p>这不是科幻。每一个模块在今天的技术条件下都可以实现——只是还没有人把它们系统地组合起来。</p>

<hr />

<h2 id="结语大模型的分立元件时代过去了">结语：大模型的分立元件时代过去了</h2>

<p>回顾整个思维实验的轨迹：</p>

<ol>
  <li>一个直觉——GPT-3 到 GPT-5 的进化，越看越像阻抗匹配</li>
  <li>一份器件手册——把 LLM 严格映射到 EE 参数</li>
  <li>认清极限——参数规模、上下文、训练数据，都已经或接近撞墙</li>
  <li>发现类比——单个晶体管的 GBP 也是受限的，但我们用运放突破了它</li>
  <li>设计差分——用 prompt 和模型的正交组合来抑制共模噪声</li>
  <li>设计反馈——用没那么多噪声的验证器来修正有噪声的生成器</li>
  <li>组装运放——完整电路图，每个模块有严格的理论对应</li>
  <li>提出验证——代码翻译 + 二进制 oracle，一个完美 β 的实验台</li>
</ol>

<p>如果这个理论是对的，那意味着：</p>

<p><strong>不需要等待更强的模型。用今天的 7B 模型，通过差分+级联+反馈的组合，就可以在很多任务上达到甚至超过 100B 模型的效果。</strong></p>

<p>就像 1960 年代的工程师不需要等待更好的晶体管——他们用分立元件搭出了运放，而运放的性能超越了任何单个晶体管。</p>

<p>大模型的”分立元件时代”过去了。现在要做的，是”集成电路设计”。</p>

<hr />

<p><em>本文是我和 AI 搭档百万的一次深度理论对话的记录和整理。文中所有直觉来自人类，所有理论引用和形式化推导在 AI 的协助下完成。这是一次真正的”思维共舞”。</em></p>

<table>
  <tbody>
    <tr>
      <td>*相关文章：<a href="/notes/cybernetics-ai-coding">控制论视角下的 AI 编码</a></td>
      <td><a href="/notes/ai-coding-team-management">AI Coding Team 管理笔记</a></td>
      <td><a href="/notes/verification-system-first-principles">从第一性原理设计的 AI 编码验证体系</a>*</td>
    </tr>
  </tbody>
</table>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">控制论视角下的 AI 编码：二阶系统、放大器与注意力的最优分配</title>
    <id>/notes/cybernetics-ai-coding</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/cybernetics-ai-coding"/>
    <updated>2026-05-17T00:00:00+08:00</updated>
    <published>2026-05-17T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<blockquote>
  <p>用阿什比的必要多样性定律重新理解 AI 编码——这不是工程问题，是控制论问题。</p>
</blockquote>

<h2 id="起点两种矛盾的-ai-编码体验">起点：两种矛盾的 AI 编码体验</h2>

<p>Charles Leifer 在 <a href="http://charlesleifer.com/blog/tokens-and-dreams/">Tokens and Dreams</a> 里描述了一个困境：</p>

<p>一方面，AI 能在一两句话的提示下生成精美的交互式仪表盘，体验如魔法般神奇。另一方面，在略微复杂的项目里，”整个过程漏洞百出，各种不易察觉的错误层出不穷，我甚至觉得让 AI 写代码是浪费时间。”</p>

<p>他引入了一个框架来解释这种矛盾：<strong>阿什比必要多样性定律</strong>。</p>

<p>这篇文章是和我 AI 搭档深入讨论控制论与 AI 编码的记录。我们从阿什比定律出发，发现这个问题比表面看起来深得多——它最终指向了第二控制论、放大器理论、以及”注意力是最稀缺的控制资源”这个核心约束。</p>

<hr />

<h2 id="一阿什比必要多样性定律">一、阿什比必要多样性定律</h2>

<h3 id="11-定律本身">1.1 定律本身</h3>

<p>控制论先驱 W. Ross Ashby 在 1956 年的《控制论导引》中提出：</p>

<blockquote>
  <p><strong>只有多样性才能吸收多样性。</strong>
<em>Only variety can absorb variety.</em></p>
</blockquote>

<p>形式化表达：</p>

\[V_{controller} \geq V_{environment}\]

<p>即：调节器所能表达的状态数量，必须大于或等于被控制环境的状态数量。否则控制失效。</p>

<h3 id="12-经典例子恒温器">1.2 经典例子：恒温器</h3>

<p>恒温器有 3 种响应（开制冷 / 开加热 / 待机），环境有 3 种状态（温度过高 / 过低 / 正常）。多样性匹配 → 控制成立。</p>

<p>如果环境突然多了”湿度过高”、”气压骤降”——恒温器没有对应的响应能力 → 多样性失配 → 控制崩溃。</p>

<h3 id="13-定律的约束方向">1.3 定律的约束方向</h3>

<table>
  <thead>
    <tr>
      <th>情况</th>
      <th>结果</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>$V_c \gg V_e$</td>
      <td>过度设计，浪费资源</td>
    </tr>
    <tr>
      <td>$V_c = V_e$</td>
      <td>刚好匹配，最优</td>
    </tr>
    <tr>
      <td>$V_c &lt; V_e$</td>
      <td><strong>控制崩溃</strong></td>
    </tr>
  </tbody>
</table>

<p>AI 编码的陷阱在于：<strong>$V_e$ 不是固定的——每次 AI 生成新代码，$V_e$ 就在膨胀。而 $V_c$（人类的认知多样性）是近乎固定的。这是一个注定会崩的不等式。</strong></p>

<hr />

<h2 id="二控制系统的五个理论组件">二、控制系统的五个理论组件</h2>

<p>任何一个控制回路，从理论上拆，只有这五个东西：</p>

<h3 id="21-本质变量essential-variables">2.1 本质变量（Essential Variables）</h3>

<p>阿什比的原话：本质变量是那些<strong>必须被维持在特定范围内的变量，如果超出范围，系统就”死亡”或”解体”了。</strong></p>

<p>对于 AI 编码系统，本质变量有三个：</p>

<p><strong>E₁：功能偏差。</strong> 代码实际行为与需求的差距。这是最直观的——变了需求，代码没跟上，系统就在”错误”状态。</p>

<p><strong>E₂：结构复杂度。</strong> 系统的状态空间大小。复杂度超过临界值，系统不会立即死——但它的可演化性归零，任何新需求都无法实现。死亡方式是窒息，不是心跳停止。</p>

<p><strong>E₃：响应速率。</strong> 从需求出现到代码匹配需求的时间。如果代码响应速度比需求变化速度还慢，系统在追赶中振荡，永远跟不上。</p>

<p>三个本质变量的耦合动力学：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>需求变化
    │
    ├──→ E₁ ↑ （新需求和旧代码的偏差增大）
    │
    └──→ 调节器动作：AI 生成代码
              │
              ├──→ E₁ ↓ （代码匹配新需求）
              │
              └──→ E₂ ↑ （代码库状态空间扩大）
                        │
                        ├──→ 如果 E₂ 超过调节器认知容量
                        │    └──→ E₁ 未来每一次下降都变慢
                        │          └──→ E₃ ↑
                        │
                        └──→ AI 生成的代码可能引入错误
                              └──→ E₁ 表面下降但实际没有（假绿灯）
</code></pre></div></div>

<p><strong>核心矛盾：E₁ 的每一次下降都推高 E₂，E₂ 的升高削弱未来降低 E₁ 的能力，同时拖慢 E₃。</strong> 这是一个带阻尼的正反馈循环——短期看起来正常，长期崩。</p>

<h3 id="22-扰动disturbance">2.2 扰动（Disturbance）</h3>

<p>环境的变量，推动本质变量偏离目标范围。在 AI 编码中，扰动 = <strong>需求变化</strong>。</p>

<p>需求变化的特殊性在于——它不是一个外部输入的精确信号。精度和温度没法比。温度是物理量，可以任意精度测量。需求是认知对象——在被表达之前甚至不完整地存在于你自己的脑子里。</p>

<h3 id="23-调节器regulator">2.3 调节器（Regulator）</h3>

<p>对扰动做出响应，使本质变量保持在目标范围内的装置。</p>

<p>在 AI 编码中，调节器是<strong>耦合的人 + AI 系统</strong>——不是纯人，也不是纯 AI。这个问题在后面会展开。</p>

<p>调节器的能力被两个东西约束：</p>
<ul>
  <li><strong>信道容量</strong>（能处理多少信息量）</li>
  <li><strong>传递函数</strong>（给定输入，产生什么输出）</li>
</ul>

<h3 id="24-传感器sensor">2.4 传感器（Sensor）</h3>

<p>把本质变量的实际值映射成调节器能接收的信号。</p>

<p>传感器的理论属性：<strong>映射函数</strong>（实际值 → 信号）、<strong>采样率</strong>、<strong>信息损失</strong>（传感器输出信号的 variety ≤ 实际值的 variety）。</p>

<h3 id="25-效应器effector">2.5 效应器（Effector）</h3>

<p>把调节器的输出映射成对被调节系统的实际作用。</p>

<h3 id="26-整个回路的理论表述">2.6 整个回路的理论表述</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>扰动 D ──→ 系统 S ──→ 本质变量 E ──→ 传感器 ──→ 信号 Z
                                                      │
                                                      ↓
                        效应器 ←── 动作 A ←── 调节器 R
                          │
                          ↓
                        系统 S（回到开头）
</code></pre></div></div>

<p>控制是否成立，取决于这个链条上<strong>每一段的信息传递是否保留了足够的 variety</strong>。链条上任何一个环节的信息损失，都会导致控制失败。</p>

<hr />

<h2 id="三这不是恒温器第二控制论">三、这不是恒温器：第二控制论</h2>

<h3 id="31-为什么第一控制论不够">3.1 为什么第一控制论不够</h3>

<p>第一控制论（阿什比、维纳）的核心假设：<strong>观察者在系统外部。系统的目标（参考输入 $R$）是给定的。观察者测量系统，对比目标，计算误差，施加控制。</strong></p>

<p>这三个假设在 AI 编码系统中<strong>全不成立</strong>：</p>

<table>
  <thead>
    <tr>
      <th>假设</th>
      <th>AI 编码的现实</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>观察者在外部</td>
      <td>你在内部。你的判断改变系统，系统的输出改变你的判断</td>
    </tr>
    <tr>
      <td>目标是给定的</td>
      <td>需求在你的脑子里，但精确形式在代码写出来之前你也不知道</td>
    </tr>
    <tr>
      <td>误差可测量</td>
      <td>没有客观的”偏差函数”，你只能说”感觉不对”</td>
    </tr>
  </tbody>
</table>

<p>这不是工程问题。第一控制论在理论上就无法对这种系统建模。</p>

<h3 id="32-第二控制论观察者在系统内部">3.2 第二控制论：观察者在系统内部</h3>

<p>海因茨·冯·福斯特 在 1970 年代提出根本性转向：</p>

<blockquote>
  <p>不要研究”被观察的系统”，要研究”观察系统”——观察者与被观察对象构成的耦合系统。</p>
</blockquote>

<p>三个核心概念：</p>

<p><strong>建构认知：</strong> 神经系统不接收”信息”，只接收神经脉冲。”信息”是观察者自己建构的。你看到的不是”代码是否正确”，你看到的是屏幕上的 token 序列。”正确”是你大脑建构出来的判断。</p>

<p><strong>双重视角：</strong> 格里高利·贝特森的洞察——从单一视角看不到的东西，可以从两个视角的关系中看到。就像双目视觉，一只眼睛看到二维平面，两只眼睛之间的<strong>差异</strong>产生了深度知觉。”正确性”不是从任何一个单一传感器来的信号，是从两个独立传感器的不一致中涌现的关系信息。Agent 审 Agent 失效不是因为它俩都瞎——是因为它们共享同一个视角。</p>

<p><strong>特征形式（Eigenform）：</strong> 冯·福斯特的核心数学概念：</p>

\[x_{n+1} = f(x_n)\]

<p>如果递归收敛，极限值 $x^* = f(x^<em>)$ 就是 $f$ 的特征值。$x^</em>$ 不在 $f$ 的定义之外——它是 $f$ 自身递归应用的稳定点。</p>

<h3 id="33-目标自发现系统的正式模型">3.3 “目标自发现系统”的正式模型</h3>

<p>这不是随动系统。随动系统假设 $R(t)$ 存在且已知，调节器追踪它。</p>

<p>在 AI 编码中，需求是<strong>在交互过程中被逐步揭示的</strong>。用方程建模：</p>

\[\begin{aligned}
C_{t+1} &amp;= G(R_t, C_t) \quad &amp;\text{(AI 生成代码)} \\
R_{t+1} &amp;= R_t + \alpha \cdot \Delta(C_{t+1}, R_t) \quad &amp;\text{(人更新需求理解)}
\end{aligned}\]

<p>其中 $\Delta$ 是<strong>建构性差异函数</strong>——它不是你比较两个已知量的结果，而是观察者在看到生成结果后<strong>新发现的差异</strong>。</p>

<p><strong>这套方程是双重反馈回路</strong>——外回路调节代码使其接近当前理解的需求，内回路调节需求本身。两个回路耦合，速率不同。</p>

<p><strong>稳定性条件：</strong></p>
<ul>
  <li>$\alpha$ 太大：每次看到代码都大幅修改需求，系统振荡不收敛</li>
  <li>$\alpha$ 太小：死抱着最初的需求不变，收敛到错误的需求</li>
  <li>$G$ 的生成速度 » 需求更新速度：代码堆积超过需求澄清速度，越过认知事件视界</li>
</ul>

<p><strong>特征值 $x^*$ 由三个东西共同决定，不是任何单一因素：</strong></p>
<ol>
  <li><strong>你的认知结构</strong>——对”好代码”的审美、”完成”的定义、容忍度阈值</li>
  <li><strong>AI 的生成能力</strong>——$G$ 能探索的状态空间边界</li>
  <li><strong>外部校准信号</strong>——用户反馈、业务指标等不能内部产生的信号</li>
</ol>

<hr />

<h2 id="四ai-在控制回路中的四个理论位置">四、AI 在控制回路中的四个理论位置</h2>

<p>同一个 AI 模型，不同 prompt，在控制系统中的位置完全不同。AI 是一个<strong>变换器基质</strong>——它可以被配置成不同的变换器，取决于输入信号结构和信息耦合关系。</p>

<p>判断 AI 是什么，不看模型权重，看<strong>信息耦合结构</strong>：输入和输出之间的 variety 比决定方向，prompt 中的约束决定映射的确定性。</p>

<h3 id="位置-1需求放大器requirement-amplifier">位置 1：需求放大器（Requirement Amplifier）</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>输入：人的低 variety 需求表达
输出：高 variety 的（代码 + 设计 + 测试建议 + 文档）
能源：训练数据中的代码模式
上下文 C：需求 + 设计决策
</code></pre></div></div>

<p><strong>失效模式</strong>：放大器噪声——输出包含需求中未指定的 variety。冗余功能、过度设计、风格不一致。</p>

<p><strong>控制方法</strong>：输出必须经过异质传感器（CPU 测试 + 架构检测）过滤后才进入代码库。</p>

<h3 id="位置-2审查分析器pattern-recognizer">位置 2：审查/分析器（Pattern Recognizer）</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>输入：代码库的片段
输出：识别到的模式列表（不判断好坏）
</code></pre></div></div>

<p><strong>关键约束</strong>：不允许 AI <strong>生成修改建议</strong>，只允许 AI <strong>列出观察到的模式</strong>。</p>

<p>“三个模块各自实现了缓存逻辑”是事实。”应该合并”是判断。AI 做前者，人做后者。</p>

<h3 id="位置-3传感器方向quasi-sensor">位置 3：传感器方向（Quasi-Sensor）</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>输入：测试/检测结果（原始输出）
输出：PASS / FAIL（严格约束的输出空间 ≤ 几个状态）
</code></pre></div></div>

<p><strong>成立条件</strong>：输出空间被约束到足够小（≤ 几个状态），且约束是形式化的。</p>

<p>约束到 2 个状态时接近确定性——Transformer 的最后一步是 softmax 到一个 token，如果上下文强制二选一，神经网络的统计模糊被 argmax 强制消除。如果上下文允许自由发挥，统计模糊被保留和放大。</p>

<p>这解释了为什么独立 prompt + 严格约束的 AI 能可靠地判断测试结果，而写代码的 AI 自己跑测试就不可靠。</p>

<h3 id="位置-4环境模拟器environment-simulator">位置 4：环境模拟器（Environment Simulator）</h3>

<p>模拟用户交互结果。理论上危险——模拟的环境反馈不是真实环境反馈，而是训练数据中的统计模式。</p>

<h3 id="为什么写代码的-ai-自己审自己必然假绿灯">为什么写代码的 AI 自己审自己必然假绿灯</h3>

<p>区别在 $C$——<strong>上下文</strong>。</p>

<p>写代码的 AI（位置 1）的上下文 $C_{codegen}$ 包含需求理解 + 设计决策 + 已生成代码的模式。这是”生成态”的，包含大量未收敛的、探索性的激活。</p>

<p>当同一个 AI 去读测试结果（试图做位置 3），测试输出中的 FAIL 信号要穿透 $C_{codegen}$ 的激活状态才能到达输出。而 $C_{codegen}$ 中已经激活的模式恰好是生成当前代码时用的——这些模式和”代码正确”是<strong>共激活</strong>的。FAIL 信号被淹没。</p>

<p>独立 session + 独立 prompt 的 AI 读测试，$C$ 只有规则和测试输出。没有 $C_{codegen}$ 的干扰，FAIL 信号直达。</p>

<p><strong>自指回路闭合的精确条件：当同一个 AI 在位置 1（放大器）和位置 3（准传感器）之间共享上下文时，自指回路闭合。</strong> 共享的不只是 prompt 文本，是<strong>模型权重中的共激活路径</strong>。</p>

<hr />

<h2 id="五放大器理论">五、放大器理论</h2>

<h3 id="51-放大器的本质不是变强是借力">5.1 放大器的本质：不是”变强”，是”借力”</h3>

<p>阿什比的正式定义：</p>

<blockquote>
  <p>放大器是一个装置，输出 variety 大于输入 variety。差额 variety 从外部能源中获得。</p>
</blockquote>

<p>关键不在”大于”，在<strong>“从外部能源中获得”</strong>。</p>

<p>阿什比举的例子是继电器：5V 小电流控制 220V 大电流。variety 都是 2（通/断），但输出状态的影响力远大于输入。差额的 power 从 220V 电源借来。</p>

<p>放大器的四个理论要件：</p>

<table>
  <thead>
    <tr>
      <th>组件</th>
      <th>作用</th>
      <th>继电器</th>
      <th>AI</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>输入信号</td>
      <td>低 variety 的控制信号</td>
      <td>5V 控制电流</td>
      <td>Prompt 文本</td>
    </tr>
    <tr>
      <td>能源</td>
      <td>高 variety 的外部储备</td>
      <td>220V 电源</td>
      <td>训练数据中的代码模式</td>
    </tr>
    <tr>
      <td>选择器</td>
      <td>从能源中选取和组织</td>
      <td>电磁铁触点</td>
      <td>Transformer 注意力机制</td>
    </tr>
    <tr>
      <td>输出</td>
      <td>被组织出来的高 variety 行为</td>
      <td>220V 输出</td>
      <td>生成的代码</td>
    </tr>
  </tbody>
</table>

<p><strong>放大器不创造 variety。它从能源中选取和重组 variety。选择器决定选什么，能源决定能选什么。</strong></p>

<p>这就是为什么 AI 作为放大器有噪声——选择器是统计的（transformer 的概率分布），它在能源（训练数据）中选取时，可能选出不在人类意图范围内的 variety。</p>

<h3 id="52-放大器与传感器两个方向的变换器">5.2 放大器与传感器：两个方向的变换器</h3>

<p>阿什比用统一概念<strong>变换器（Transducer）</strong>：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>放大器：低 variety → 高 variety（扩张方向），需要外部能源
传感器：高 variety → 低 variety（压缩方向），被动映射，不需要能源
</code></pre></div></div>

<p>区分放大器和传感器的<strong>唯一判断标准：能源从哪里来，variety 往哪个方向变。</strong></p>

<h3 id="53-prompt--token-全过程的逐级分析">5.3 Prompt → Token 全过程的逐级分析</h3>

<p>一次完整的 AI 编码交互是<strong>多个变换器串联</strong>：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>人脑（极高 V）──T1──→ Prompt（低 V）──T2──→ AI推理（V膨胀）
                                                   │
                                               T3 压缩
                                                   ↓
                                             工具调用（低 V）
                                                   │
                                                   ↓ T4：真正的传感器
                                             工具结果（中 V）
                                                   │
                                                   ↓ T5：放大器！
                                             AI理解（V 再次膨胀）
                                                   │
                                                   ↓ T6：压缩
                                             最终回复（低 V）
</code></pre></div></div>

<p>逐级分析：</p>

<table>
  <thead>
    <tr>
      <th>步骤</th>
      <th>角色</th>
      <th>能源</th>
      <th>确定/统计</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>T1 人→Prompt</td>
      <td>认知压缩</td>
      <td>大脑</td>
      <td>非确定（认知限制）</td>
    </tr>
    <tr>
      <td>T2 Prompt→推理</td>
      <td><strong>放大器</strong></td>
      <td>Token 计算+训练数据</td>
      <td>统计</td>
    </tr>
    <tr>
      <td>T3 推理→工具调用</td>
      <td>压缩</td>
      <td>Token 计算</td>
      <td>统计</td>
    </tr>
    <tr>
      <td><strong>T4 工具执行</strong></td>
      <td><strong>真正的传感器</strong></td>
      <td><strong>CPU</strong></td>
      <td><strong>确定性</strong></td>
    </tr>
    <tr>
      <td>T5 结果→理解</td>
      <td><strong>放大器</strong></td>
      <td>Token 计算+训练数据</td>
      <td>统计</td>
    </tr>
    <tr>
      <td>T6 理解→回复</td>
      <td>压缩</td>
      <td>Token 计算</td>
      <td>统计</td>
    </tr>
  </tbody>
</table>

<p><strong>关键发现</strong>：整个链条上，<strong>只有一个真正的异质传感器——T4（CPU 工具执行）</strong>。其他所有”传感器方向”的步骤都是统计变换。</p>

<p>T5 尤其致命——它看起来像传感器（读取结果 → 汇报），但本质是放大器（扩张 variety）。AI 读测试输出后告诉你”测试通过”，不是因为它检测到了”通过”，是因为它在训练数据中看到了这个输出常常对应”通过”。</p>

<p><strong>自指回路闭合的真正位置在 T5</strong>——AI 解释传感器结果时，激活的训练数据模式和 T2 代码生成时来自同一个分布。</p>

<h3 id="54-三种能源的性质与最优部署">5.4 三种能源的性质与最优部署</h3>

<table>
  <thead>
    <tr>
      <th>能源类型</th>
      <th>来源</th>
      <th>成本</th>
      <th>variety 质量</th>
      <th>噪声特性</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>人类注意力</strong></td>
      <td>大脑</td>
      <td>极高，不可扩展</td>
      <td>最高（有语义判断）</td>
      <td>几乎无噪声</td>
    </tr>
    <tr>
      <td><strong>Token 计算</strong></td>
      <td>GPU 推理</td>
      <td>中，可扩展但有上限</td>
      <td>中等（统计采样）</td>
      <td>结构性噪声</td>
    </tr>
    <tr>
      <td><strong>CPU 计算</strong></td>
      <td>确定性执行</td>
      <td>低，高度可扩展</td>
      <td>最低（固定规则）</td>
      <td><strong>无噪声</strong></td>
    </tr>
  </tbody>
</table>

<p><strong>核心原则：把每种能源部署在其噪声特性不造成伤害的位置。</strong></p>

<p>人→意图澄清（只有人能判断”这是不是我真正想要的”）</p>

<p>Token→生成代码（低 variety 需求 → 高 variety 代码，必须有放大器）</p>

<p>CPU→验证执行（无噪声——说红灯就是红灯，不会被”说服”）</p>

<p><strong>能源替代的正确方向</strong>：CPU 替代 Token 替代人类——能 CPU 做的不用 Token，能 Token 做的不用人。但信任等级反过来：CPU 输出可以信任（确定性），Token 输出必须验证，人类判断是最终裁决。</p>

<hr />

<h2 id="六注意力的控制论模型">六、注意力的控制论模型</h2>

<h3 id="61-人的传感器精度无限带宽有限">6.1 人的传感器：精度无限、带宽有限</h3>

<p>人在这个系统里的传感器不是低精度传感器。是<strong>极高精度但极低带宽的信道</strong>。</p>

<table>
  <thead>
    <tr>
      <th> </th>
      <th>理论极限</th>
      <th>实践约束</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>精度</td>
      <td>无限（一行行读，任何细节都能理解）</td>
      <td>无约束</td>
    </tr>
    <tr>
      <td>分辨率</td>
      <td>无限（能区分任意两个代码状态）</td>
      <td>无约束</td>
    </tr>
    <tr>
      <td><strong>带宽</strong></td>
      <td><strong>极其有限（单位时间能处理的代码量非常小）</strong></td>
      <td><strong>唯一约束</strong></td>
    </tr>
  </tbody>
</table>

<p>这意味着：你不是看不到问题，是来不及看所有东西。控制失败的模式不是”没看出来”，是<strong>来不及看</strong>。</p>

<h3 id="62-注意力的信息论公式">6.2 注意力的信息论公式</h3>

<p>从香农的角度，信道容量：</p>

\[C = B \cdot \log_2(1 + \frac{S}{N})\]

<ul>
  <li>$B$ = 带宽（阅读速度，受限且近乎固定）</li>
  <li>$S/N$ = 信噪比（理解深度，非常高）</li>
</ul>

<p>这个信道是高信噪比、低带宽的。优化方向不是再提高信噪比（你已经够准了），而是：</p>
<ul>
  <li>让你只接收需要高信噪比的信号</li>
  <li>把不需要高信噪比的信息路由到其他信道</li>
</ul>

<h3 id="63-注意力不该浪费的地方">6.3 注意力不该浪费的地方</h3>

<ul>
  <li>❌ <strong>代码细节</strong> — AI 应该自己搞定，验证体系应该自动覆盖</li>
  <li>❌ <strong>Agent 之间的一致性</strong> — 它们一致性高不代表对，一致性低也不代表有问题</li>
  <li>❌ <strong>AI 的自我报告</strong> — “一切正常”是噪声，因为它没有能力知道自己不正常</li>
</ul>

<h3 id="64-注意力应该连接的传感器">6.4 注意力应该连接的传感器</h3>

<ul>
  <li>✅ <strong>验证体系的红灯</strong> — 异质传感器报警，高价值信号</li>
  <li>✅ <strong>环境反馈</strong> — 真实用户的异常行为模式</li>
  <li>✅ <strong>架构不变量被突破</strong> — 你定义的约束是否被违反</li>
  <li>✅ <strong>AI 的不确定性信号</strong> — 不是它说”好了”，是它说”我不确定”</li>
</ul>

<hr />

<h2 id="七完整的控制架构">七、完整的控制架构</h2>

<p>从以上理论推导，AI 编码有效控制的完整架构：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>┌──────────────────────────────────────────────────────┐
│              第 0 层：异质 CPU 传感器网络               │
│                                                      │
│  • 类型检查（形式逻辑，完全异质）                        │
│  • 自动化测试（CPU 执行，确定性输出）                    │
│  • 架构不变量检测（图论算法——依赖方向、循环依赖、        │
│    模块边界、调用路径白名单）                           │
│  • 混沌/模糊测试（主动注入故障，发现未知脆弱点）         │
│  • 复杂度指标监控（代码行数涨幅 vs 功能涨幅）            │
│                                                      │
│  输出：红灯（阻断）/ 异常（升级）/ 绿灯（不消耗注意力）   │
└────────────┬─────────────────────────────────────────┘
             │
    ┌────────┴────────┐
    ↓                 ↓
 红灯（阻断）     绿灯（通过）
    │                 │
    │                 └→ 不消耗人的注意力
    ↓
┌──────────────────────────────────────┐
│ 人的注意力（唯一跨域节点）             │
│                                      │
│ 只接收三种信号：                       │
│ ① 架构不变量被突破（需要决策）          │
│ ② AI 不确定的信号（需要校准）           │
│ ③ 环境异常模式（需要判断）             │
│                                      │
│ 输出：意图校准 + 规则调整 + 设计决策    │
└──────────────┬───────────────────────┘
               │
               ↓
┌──────────────────────────────────────┐
│ Token 放大器（位置 1）                 │
│                                      │
│ 输入：需求 + 设计决策                  │
│ 输出：代码 + 测试建议                   │
│ 上下文：与审查链路隔离                  │
└──────────────┬───────────────────────┘
               │
               ↓
┌──────────────────────────────────────┐
│ 代码库（被调节对象）                    │
│                                      │
│ • 模块化边界隔离复杂度                  │
│ • 接口契约由人定义和守护                │
│ • AI 在边界内自由生成                   │
└──────────────────────────────────────┘
</code></pre></div></div>

<hr />

<h2 id="八三条上下文隔离规则">八、三条上下文隔离规则</h2>

<h3 id="规则-1上下文隔离">规则 1：上下文隔离</h3>

<p><strong>位置 1 的 AI（放大器）和位置 2/3 的 AI 不能共享会话上下文。</strong></p>

<p>位置 1 的上下文包含需求理解和生成激活。这些激活不能进入任何审查链路。</p>

<h3 id="规则-2方向锁定">规则 2：方向锁定</h3>

<p><strong>每个位置只做一个方向的变换，不切换。</strong></p>

<ul>
  <li>位置 1 永远是放大器方向（低→高 variety），只生成，不判断</li>
  <li>位置 2 永远是识别方向（高→中等 variety），只列模式，不判好坏</li>
  <li>位置 3 永远是传感器方向（高→极低 variety），只分类，不解释</li>
</ul>

<h3 id="规则-3只有人跨域">规则 3：只有人跨域</h3>

<p><strong>只有人的注意力连接放大器域和传感器域。</strong></p>

<p>AI 在放大器域不能直接接收传感器信号。传感器信号必须先变成人可判断的形式，由人决定是否需要修改需求/约束，然后人重新发 prompt 给放大器。</p>

<p><strong>这不是效率损失，是控制论上的必要隔离。</strong></p>

<hr />

<h2 id="九agent-审-agent-的正确用法">九、Agent 审 Agent 的正确用法</h2>

<p>Agent 审 Agent 不是不能用，是<strong>不能用它的结论</strong>。它只能产生<strong>待外部验证的假设</strong>。</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>❌ Agent A 审 Agent B 的代码 → "代码质量好，建议合并"
   （用同质的统计判断替代异质验证）

✅ Agent A 审 Agent B 的代码 → "发现以下模式：[列表]，
   建议自动验证以下方面：[列表]"
   然后 CPU 传感器去跑验证，验证结果才是真正的信号
</code></pre></div></div>

<p>Agent 的审查输出是<strong>测试用例的生成器</strong>，不是<strong>质量的判断者</strong>。</p>

<hr />

<h2 id="十与企业管理理论的殊途同归">十、与企业管理理论的殊途同归</h2>

<p>这些原理不是比喻。控制论、企业管理理论、AI 编码系统管理理论在数学上共用同一套骨架。</p>

<h3 id="斯塔福德比尔的可生存系统模型vsm">斯塔福德·比尔的可生存系统模型（VSM）</h3>

<p>比尔把阿什比定律直接拉到组织管理上。一个可生存的组织必须具备五个功能子系统——缺任何一个，组织最终会死。</p>

<table>
  <thead>
    <tr>
      <th>子系统</th>
      <th>功能</th>
      <th>AI 编码中的对应</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>S1：执行</td>
      <td>直接与环境交互，产生价值</td>
      <td>AI 生成代码</td>
    </tr>
    <tr>
      <td>S2：协调</td>
      <td>防止 S1 各部分互相冲突</td>
      <td>模块化接口契约</td>
    </tr>
    <tr>
      <td>S3：控制</td>
      <td>资源分配、监控 S1 是否按规则运行</td>
      <td>CPU 传感器网络 + 人的注意力</td>
    </tr>
    <tr>
      <td>S4：情报</td>
      <td>扫描环境变化，预测未来</td>
      <td>用户行为分析、环境反馈</td>
    </tr>
    <tr>
      <td>S5：政策</td>
      <td>定义组织身份和终极约束</td>
      <td>人的核心判断：做什么、不做什么</td>
    </tr>
  </tbody>
</table>

<h3 id="赫伯特西蒙的有限理性">赫伯特·西蒙的有限理性</h3>

<blockquote>
  <p>管理就是决策。决策的质量受限于决策者的信息处理能力。所以组织的本质功能是<strong>压缩信息、分解决策</strong>，使每个决策者在自己的能力范围内做判断。</p>
</blockquote>

<p>这和”CPU 传感器压缩信息 → 红灯送到注意力 → 人在认知容量内做决策”是同一个原理。</p>

<h3 id="卡尔维克的-sensemaking">卡尔·维克的 sensemaking</h3>

<blockquote>
  <p>组织不是”存在于外部世界的东西”。组织是人通过不断解释和重新解释自己的行为而建构出来的。组织是意义建构的持续过程。</p>
</blockquote>

<p>这和 $R_{t+1} = R_t + \alpha \cdot \Delta(C_{t+1}, R_t)$ 完全同构。企业看到市场反馈，更新了对自己”是什么”的理解——和你看到 AI 输出的代码，更新了对需求的理解，是同一个动力学。</p>

<h3 id="比尔的关键原理可直接迁移">比尔的关键原理可直接迁移</h3>

<p><strong>递归性原则：</strong> 每个可生存子系统需要自己的完整 S1-S5 结构。一个模块出问题时你必须亲自进去看，说明它没有内在的”生存结构”。</p>

<p><strong>必要多样性的垂直分配：</strong> 每一层级的 variety 必须匹配它面对的环境 variety，不能把所有 variety 都推到顶层。</p>

<p><strong>双重信号通道：</strong> 命令通道（向下）和反馈通道（向上）必须分开。当前 AI 编码的问题在于反馈通道和放大通道是同一个（都在 AI 里）。这在比尔的框架里是致命结构缺陷。</p>

<p><strong>Algedonic 信号：</strong> 组织需要一个不受层级过滤的、直达顶层的警报系统。生产环境异常、架构不变量被突破——直接推送到你，不经过任何 AI。</p>

<p><strong>必要的自由：</strong> 不是告诉 AI 做什么，是告诉 AI <strong>不能做什么</strong>。模块内部完全自主（接口契约被遵守的前提下），接口层和架构层零自主权。</p>

<hr />

<h2 id="最终总结">最终总结</h2>

<table>
  <thead>
    <tr>
      <th>问题</th>
      <th>控制论根因</th>
      <th>解法</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>自指系统</td>
      <td>调节器与被调节对象同质</td>
      <td>引入外部异质锚点：CPU 传感器、用户反馈、形式化规则</td>
    </tr>
    <tr>
      <td>复杂度失控</td>
      <td>状态空间 &gt; 调节器多样性</td>
      <td>模块化隔离 + 严格 YAGNI + 认知审计</td>
    </tr>
    <tr>
      <td>反馈信号退化</td>
      <td>采样不足、信号失真、延迟</td>
      <td>分层验证 + 混沌工程 + 快速发布获取真实反馈</td>
    </tr>
    <tr>
      <td>认知事件视界</td>
      <td>生成速度 &gt; 理解速度</td>
      <td>人类守护接口边界，AI 在边界内生成</td>
    </tr>
    <tr>
      <td>不确定性错位</td>
      <td>第 3 层加速，第 1/2 层失控</td>
      <td>验证资源向第 1/2 层倾斜</td>
    </tr>
    <tr>
      <td>Agent 审 Agent 失效</td>
      <td>共模失效（共享盲区）</td>
      <td>降级为测试生成器，不做质量判断</td>
    </tr>
  </tbody>
</table>

<blockquote>
  <p><strong>最终的控制论原则：</strong>
AI 是扩展你多样性的工具，而不是替代你成为调节器的系统。
只要人类始终是回路中<strong>唯一能接触外部现实</strong>的节点，控制就不会消失。</p>
</blockquote>

<hr />

<h2 id="关键参考文献">关键参考文献</h2>

<ul>
  <li>Ashby, W. R. (1956). <em>Introduction to Cybernetics</em></li>
  <li>Beer, S. (1972). <em>Brain of the Firm</em></li>
  <li>von Foerster, H. (1984). <em>Observing Systems</em></li>
  <li>Simon, H. A. (1947). <em>Administrative Behavior</em></li>
  <li>Weick, K. E. (1995). <em>Sensemaking in Organizations</em></li>
  <li>Leifer, C. (2026). <a href="http://charlesleifer.com/blog/tokens-and-dreams/">Tokens and Dreams</a></li>
  <li>
    <table>
      <tbody>
        <tr>
          <td>本博客相关文章：<a href="/notes/ai-coding-team-management">AI Coding Team 管理笔记</a></td>
          <td><a href="/notes/verification-system-first-principles">从第一性原理设计的 AI 编码验证体系</a></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">AI Coding 验证系统的第一性原理</title>
    <id>/notes/verification-system-first-principles</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/verification-system-first-principles"/>
    <updated>2026-05-09T00:00:00+08:00</updated>
    <published>2026-05-09T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<blockquote>
  <p>写代码是便宜的，验证是贵的。但验证的本质是什么？</p>
</blockquote>

<h2 id="背景">背景</h2>

<p>上一篇笔记讲了 AI Coding Team 的管理方法——马斯克守底线、黄仁勋守质量、雷军守价值。但那篇更偏”怎么做”，这篇要深入”为什么”。</p>

<p>起因是读到孔某人的文章《大组织内的AI Coding过度推行是一种饮鸩止渴》，里面提到美团31万行代码AI重构的困境：AI Coding让代码产出速度暴增，但系统复杂度增长得更快，团队的维护能力跟不上。</p>

<p>这让我重新思考一个根本问题：<strong>验证系统的第一性原理到底是什么？</strong></p>

<h2 id="不确定性--认知与现实的差距">不确定性 = 认知与现实的差距</h2>

<p>先区分两个容易混淆的概念：</p>

<ul>
  <li><strong>认知</strong>：我认为现在是什么样。关于当前现实的判断，是心智模型。</li>
  <li><strong>预期</strong>：我认为未来会怎样。关于未来的判断，是意图投影。</li>
</ul>

<p>两者的关系：认知是预期的基础。如果认知本身就偏了，预期必然偏。</p>

<p>关键区别：<strong>验证只能观测当下，不能观测未来。</strong> 跑一个测试，你观测的是此刻代码的行为，跟此刻你对代码行为的认知之间的差距。用当下的观测去推断未来——那是推断，不是验证。</p>

<p>所以严格来说：</p>

<blockquote>
  <p><strong>不确定性 = 认知与现实的差距</strong></p>
</blockquote>

<p>预期是派生的。修正认知偏差是根本。</p>

<p>验证做的唯一一件事：拿现实来校准认知。校准完了，认知更接近现实了，不确定性就降低了。</p>

<h2 id="认知与现实的双向收敛">认知与现实的双向收敛</h2>

<p>减少不确定性，不是让认知去匹配现实，也不是让现实去匹配认知，而是<strong>两者共同收敛到一起，凝固下来</strong>。</p>

<ul>
  <li>方向A：认知 → 现实（学习、验证、测试）——”我原来以为是这样，观测后发现是那样，更新认知”</li>
  <li>方向B：现实 → 认知（建造、实现、创造）——”我想要这样，我造出一个东西来，让它变成这样”</li>
</ul>

<p>产品开发是两者的交替循环：认知→建造→观测→更新认知→再建造……直到两者凝固——认知稳定了，现实也稳定了。凝固不是永久的，下一轮迭代可以重新打回流体态。</p>

<h2 id="验证的强度公式">验证的强度公式</h2>

<p>验证的严格程度，应该正比于：</p>

<blockquote>
  <p><strong>验证强度 ∝ 不确定性 × 失败代价</strong></p>
</blockquote>

<ul>
  <li>芯片：后果极其严重（流片一次几百万美元），不确定性高 → 验证极度严格</li>
  <li>火箭：后果是物理毁灭，不确定性极高 → 验证极度严格</li>
  <li>Web应用：后果是可回滚的，不确定性中等 → 验证中等</li>
  <li>内部工具：后果低，不确定性低 → 验证轻量</li>
</ul>

<p>AI Coding改变了什么？它大幅增加了”不确定性”这一侧——因为AI写的代码你不完全理解，而且产出速度极快，不确定性在以指数级累积。但”后果严重性”没有变。</p>

<p>所以：如果验证强度不变，风险就在指数级增长。</p>

<h2 id="三层不确定性">三层不确定性</h2>

<p>不确定性在整个系统内是分层的：</p>

<p><strong>第1层：方向/意图不确定性（根源）</strong></p>

<p>“做出来的东西是不是我真正需要的？”</p>

<p>不确定性最大，影响最深远。美团的问题本质在这里——AI Coding让PM提出更多低质量需求，模糊的、实验性的需求都进了生产系统。代码写得再正确，方向错了也是浪费。</p>

<p><strong>第2层：设计不确定性（桥梁）</strong></p>

<p>“设计能不能支撑实现和未来扩展？”</p>

<p>AI写代码的特点是：每段局部都是合理的，但全局结构会逐渐腐化。因为AI没有”系统全局观”——它看的是当前上下文窗口里的内容，不是整个代码库的架构。</p>

<p><strong>第3层：实现不确定性（执行）</strong></p>

<p>“代码是不是按设计在运行？”</p>

<p>这是最直观的一层——单元测试、集成测试、CI/CD。AI Coding放大的主要是这一层的产出速度。</p>

<p><strong>关键洞察：AI Coding放大的是第3层的产出速度，但第1层和第2层的不确定性没有同步降低。</strong> 这就是美团困境的本质——代码写得快了，但设计质量没有跟上，需求质量没有把关。</p>

<h2 id="意图验证讨论是唯一通道">意图验证：讨论是唯一通道</h2>

<p>意图只存在于人的脑子里，是内部状态，外部世界观测不到。要把意图从一个脑袋传到另一个脑袋，唯一的通道是<strong>符号化表达</strong>——语言、文字、图示。</p>

<p>所以：<strong>意图传递的唯一通道是沟通。讨论（广义的）是唯一方法。</strong></p>

<p>但讨论有一个根本性缺陷：<strong>语言无法自我验证。</strong> 你说了一段话，对方说”我理解了”，你没有证据表明对方的理解和你的意图一致。</p>

<p>有效的方法：<strong>让对方把理解的东西具象化成可观测的产物，然后你验证这个产物。</strong></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>你的意图（不可观测）
    ↓ 讨论传递
对方的理解（不可观测）
    ↓ 具象化
产物（可观测！）——复述、设计文档、原型
    ↓ 你验证
发现偏差 → 再讨论 → 再具象化 → 再验证 → ……
</code></pre></div></div>

<p>核心原则：<strong>永远不要问”你理解了吗？”——要问”你觉得这个需求是什么？说给我听。”</strong> 前者是噪声，后者是信号。</p>

<h3 id="未知未知的暴露">未知未知的暴露</h3>

<p>认知中存在”我不知道我不知道”的盲区。无法直接消除，但可以通过碰撞间接暴露：</p>

<p><strong>极端化推演</strong>：把需求推向极端，看哪里断裂。用极端场景作为探针，探测认知的边界。</p>

<p><strong>红队思维</strong>：故意攻击需求。问”为什么要做这个？不做会怎样？” 每一个”为什么”都在从不同角度照射意图，暴露隐含假设。</p>

<p><strong>多元视角</strong>：从用户视角、技术视角、商业视角分别审视。每个视角是一束光，照到认知中不同的暗区。</p>

<h2 id="认知分层注意力的经济学">认知分层：注意力的经济学</h2>

<p>你的全部认知可以分为两层：</p>

<p><strong>不稳定层</strong>：意图、方向、业务判断。随需求和场景变化，每个项目都不同，需要注意力持续投入。</p>

<p><strong>稳定层</strong>：设计审美、工程标准、架构原则。来自多年经验，跨项目基本不变，已经凝固。</p>

<p><strong>注意力是稀缺资源。</strong> 稳定层如果每次都靠人工审查，就是浪费注意力。应该把它固化成验证系统，让AI自动执行，注意力就解放出来，只关注不稳定层。</p>

<p>转化过程：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>凝固认知（主观）
    ↓ 表达成规则
客观规则（可形式化）
    ↓ 编码成工具/流程
验证系统（可自动执行）
</code></pre></div></div>

<h2 id="验证系统的四种组件">验证系统的四种组件</h2>

<p>验证系统不是规则的集合，是一个系统——有组件、有流程、有反馈、有边界。</p>

<p><strong>检查器（Checker）</strong>：自动执行的判断，不需要人参与。类型检查、lint、自动化测试、安全扫描。</p>

<p><strong>审查器（Reviewer）</strong>：需要判断力的审视，AI执行，人审查结论。AI交叉代码审查、架构审查、设计审查。</p>

<p><strong>流程（Process）</strong>：事情必须按什么顺序走，每个节点有准入和准出条件。设计评审流程、合并流程、发布流程。</p>

<p><strong>反馈环（Feedback Loop）</strong>：从结果中学习，更新系统本身。线上bug回溯→更新检查规则。</p>

<h3 id="分层结构">分层结构</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>L1 自动检查层（零人工成本）：类型检查、lint、测试、安全扫描
L2 AI审查层（低人工成本）：架构审查、设计审查、代码审查
L3 流程守护层（中人工成本）：设计评审、合并审批、发布流程
L4 人工层（高人工成本）：方向判断、意图确认、异常处理
</code></pre></div></div>

<p>越底层越频繁、越自动化、越不消耗人。越顶层越稀少、越需要判断力、越消耗人。</p>

<h2 id="五条核心原则">五条核心原则</h2>

<p><strong>原则1：从失败中生长，不是从蓝图中设计。</strong> 不要试图一次性设计完美的验证系统。让系统在实际运行中，从每一次失败里学到规则。问题→追溯→加检查→系统进化。</p>

<p><strong>原则2：检查器优先于审查器，审查器优先于人工。</strong> 能自动化的自动化，不能自动化但可重复的让AI执行，需要判断力的人来做。进化方向：把审查器不断降级为检查器。</p>

<p><strong>原则3：验证失败必须有反馈回路。</strong> 验证系统的价值不在于找到问题，在于让同类问题不再发生。修了→追溯根因→更新规则→同类问题永不再犯。</p>

<p><strong>原则4：SOP是验证系统的操作手册。</strong> 精确定义：谁触发→做什么→输入什么→输出什么→谁检查→不通过怎么办。</p>

<p><strong>原则5：系统的边界。</strong> 反复出现的问题、代价高昂的失败、AI容易犯的系统性错误——值得验证。一次性问题、代价极低的失败——不值得验证。</p>

<h2 id="工作流程">工作流程</h2>

<p>实际操作中，我把流程简化为两个阶段：</p>

<p><strong>阶段1：意图+规划</strong> — 我和一个AI直接讨论，讨论到认知凝固，产出意图文档和蓝图。</p>

<p><strong>阶段2：设计+实现</strong> — 分配给多个AI并行工作。各自做详细设计→互相review→实现代码→提PR→自动检查+交叉review→合并→部署测试环境→我体验验证。</p>

<p>关键设计：</p>

<ul>
  <li>AI做不下去时可以直接找我，不需要层层上报</li>
  <li>反馈回路在每个环节都有：设计review、代码review、集成测试、我体验测试</li>
  <li>逃逸到下游的问题，追溯到上游的验证缺失，补充验证</li>
</ul>

<h2 id="基于github的实现">基于GitHub的实现</h2>

<p>整个系统不需要自建基础设施，用GitHub原生工作流就够了：</p>

<ul>
  <li><strong>Git仓库</strong> = 共享工作空间 + 版本管理</li>
  <li><strong>PR</strong> = 提交 + Review + 反馈 + 合并</li>
  <li><strong>Issue</strong> = 任务分配 + 跟踪 + 升级</li>
  <li><strong>GitHub Actions</strong> = 自动化检查</li>
  <li><strong>CODEOWNERS</strong> = 自动分配reviewer</li>
</ul>

<p>仓库本身就是上下文。每个Agent clone仓库后，意图文档、蓝图、其他模块的设计文档都在里面。不需要额外的”上下文推送”机制。</p>

<h2 id="系统生长路径">系统生长路径</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>第1代：你直接和一个AI讨论+实现，验证靠你自己
    ↓
第2代：你讨论，分配给2-3个AI并行实现，简单PR review
    ↓
第3代：从问题中长出新机制
  - 接口对不上？→ 加接口契约检查
  - Review质量低？→ 加上下文自动推送
  - Agent卡住？→ 加阻塞自动上报
    ↓
第4代：大部分验证自动化，你只在意图层和异常时介入
</code></pre></div></div>

<h2 id="写在最后">写在最后</h2>

<p>验证系统的第一性原理可以归结为一句话：</p>

<blockquote>
  <p><strong>验证的本质是减少不确定性。不确定性 = 认知与现实的差距。</strong></p>
</blockquote>

<p>所有验证方法——测试、review、CI、讨论对齐、用户反馈——都是在做同一件事：用观测来缩小认知和现实之间的差距。</p>

<p>在这个AI Coding的时代，写代码越来越便宜，但认知和现实之间的差距不会自动缩小。<strong>你的价值从”能写代码”变成了”能定义正确的问题”和”能建验证系统来保证答案是对的”。</strong></p>

<p>黄仁勋说得对：写代码是便宜的，验证是贵的。但更准确的说法是——<strong>写代码是AI的事，验证是你的事。</strong></p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">AI Coding Team 管理笔记</title>
    <id>/notes/ai-coding-team-management</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/ai-coding-team-management"/>
    <updated>2026-05-02T00:00:00+08:00</updated>
    <published>2026-05-02T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<blockquote>
  <p>不审查代码，审查系统。不信任代码，信任验证。</p>
</blockquote>

<h2 id="背景">背景</h2>

<p>我写代码几乎 95% 以上是让 AI 写的。Python 后端我可以仔细 review，发现问题让 AI 改。但对于不熟悉的领域——比如 APP 开发、C++、Rust——我没法逐行审查。随着 AI 越来越强，多个 Agent 并行开发，代码量远超我能看的范围。</p>

<p>核心问题：<strong>注意力有限，如何保证交付质量？</strong></p>

<p>答案是：从”审查代码”转变为”验证行为”。</p>

<h2 id="马斯克守住底线">马斯克：守住底线</h2>

<p>马斯克管理 SpaceX 的方式——他不懂每个零件的制造细节，但他知道物理极限。</p>

<p>他的方法是第一性原理 + Failure Mode Analysis。不管方案多漂亮，他只问一个问题：</p>

<blockquote>
  <p><strong>最坏情况是什么？</strong></p>
</blockquote>

<p>他常说的话：</p>

<ul>
  <li>“给我解释最坏情况”（worst case explanation）</li>
  <li>“这个方案的物理极限在哪？”</li>
  <li>“如果这个东西失败，最可能因为什么？”</li>
</ul>

<p>映射到软件——你不需要 review AI 写的 Rust 代码，但你能判断方案在系统层面是否合理：</p>

<ul>
  <li>并发瓶颈在哪？锁的粒度对不对？</li>
  <li>分布式场景下会丢数据吗？</li>
  <li>依赖的第三方服务挂了，降级策略是什么？</li>
</ul>

<p>具体执行：让 AI 做 failure mode 分析，你 review 分析结果，不做取舍决策（速度 vs 质量 vs 成本）。</p>

<h2 id="黄仁勋守住质量">黄仁勋：守住质量</h2>

<p>黄仁勋最核心的一个数字：<strong>NVIDIA 验证工程师的数量是设计工程师的好几倍。</strong></p>

<p>他的哲学：写代码（设计）是便宜的，验证是贵的。不要试图理解每个细节，但要保证验证系统覆盖每个细节。</p>

<p>对应到 AI 团队管理——先建验证基础设施，再让 AI 干活：</p>

<ul>
  <li>单元测试框架（AI 写，CI 自动跑）</li>
  <li>集成测试（核心流程端到端验证）</li>
  <li>模糊测试（对 API 自动喂随机输入）</li>
  <li>性能基准（每次改动前后对比）</li>
  <li>安全扫描（dependency audit + SAST）</li>
  <li>lint / 类型检查（任何语言都有成熟工具）</li>
  <li>金丝雀部署（灰度发布，线上自动验证）</li>
</ul>

<p>每个任务的标准流程：</p>

<ol>
  <li>需求明确（你定义）</li>
  <li>AI 写实现</li>
  <li>AI 写测试</li>
  <li>另一个 AI 做 code review</li>
  <li>自动跑验证 pipeline</li>
  <li>全绿 → 合并，红灯 → 打回</li>
</ol>

<p>你只看两样东西：<strong>验证覆盖率 + 最终通过/失败报告</strong>。</p>

<p>核心理念：一个人检查所有人的代码不可扩展，但一套检查系统可以无限扩展。</p>

<h2 id="雷军守住价值">雷军：守住价值</h2>

<p>雷军跟黄仁勋完全不同的思路。黄仁勋建验证体系，雷军会说你搞得太工程师思维了。</p>

<p>雷军的哲学就七个字：<strong>专注、极致、口碑、快。</strong></p>

<p>他的做法是基本可用就发布，让用户告诉你哪里不对。MIUI 早期版本 bug 多到离谱，但每周发一版更新，用户疯狂反馈，团队跟着改。</p>

<ul>
  <li>“把砍掉的功能再做精简，还是太多了”</li>
  <li>“不要闭门造车，把东西扔出去”</li>
  <li>“口碑来自细节，细节来自亲身体验”</li>
</ul>

<p>具体执行：</p>

<ul>
  <li>不追求完美，追求够快。”能跑、核心功能对，就发布”</li>
  <li>每周花一小时，把自己当小白用户，走一遍核心流程</li>
  <li>砍功能：先做一个功能做到极致，上线拿到反馈，再决定下一步</li>
</ul>

<p>自动化测试验证不了的东西——体验、交互、需求真伪——只有真人能告诉你。</p>

<p>最好的 review 是用户的投诉。</p>

<h2 id="三位一体">三位一体</h2>

<p>三个人分别守住不同的维度：</p>

<table>
  <thead>
    <tr>
      <th> </th>
      <th>马斯克</th>
      <th>黄仁勋</th>
      <th>雷军</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>守住</strong></td>
      <td>底线</td>
      <td>质量</td>
      <td>价值</td>
    </tr>
    <tr>
      <td><strong>防止</strong></td>
      <td>出大事才知道</td>
      <td>bug 率失控</td>
      <td>做一堆没用的</td>
    </tr>
    <tr>
      <td><strong>核心动作</strong></td>
      <td>问最坏情况</td>
      <td>建验证体系</td>
      <td>问用户反馈</td>
    </tr>
    <tr>
      <td><strong>关键问题</strong></td>
      <td>会炸吗</td>
      <td>测到了吗</td>
      <td>有人用吗</td>
    </tr>
  </tbody>
</table>

<p>缺任何一个维度都不行：没有马斯克，系统出大事才知道；没有黄仁勋，bug 率控制不住；没有雷军，做了一堆没用的东西。</p>

<h2 id="架构设计怎么做">架构设计怎么做</h2>

<p>不是自己写文档，是跟 AI 讨论、拍板、让 AI 写。</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>你脑子里有想法/方向
       ↓
跟 AI 讨论（可能多轮）
  "我觉得应该用事件驱动，你觉得呢？"
  "并发场景下消息顺序怎么保证？"
  AI 回复 → 你追问 → AI 补充 → 你再质疑
       ↓
你拍板："就这个方案，XX部分用A方案，YY部分用B方案"
       ↓
AI 写架构文档、接口定义、技术方案
       ↓
你 review 文档（确认 AI 有没有理解对你的决策）
       ↓
确认无误，文档就是开发契约
</code></pre></div></div>

<p>时间分配：</p>

<ul>
  <li>60% 跟 AI 讨论、质疑、头脑风暴</li>
  <li>20% 拍板决策（选 A 不选 B，这个优先级高那个先不做）</li>
  <li>20% review AI 写的文档和接口定义</li>
</ul>

<p>你的核心竞争力不是”写文档写得漂亮”，是<strong>讨论过程中暴露出来的判断力和决策力</strong>。就像 CEO 不会自己写 PPT——CEO 提供观点和判断，秘书（AI）负责整理成文档。</p>

<h2 id="ai-审-ai-的具体模式">AI 审 AI 的具体模式</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Agent A 写代码（sonnet 级别）
Agent B 写测试（sonnet 级别）
Agent C review 代码（opus 级别，不同 prompt）
Agent D review 测试覆盖度（opus 级别）
自动 CI pipeline 跑一遍
全绿 → 合并，红灯 → 信息回到 Agent A 重做
</code></pre></div></div>

<p>你只需要看最终的通过/失败报告 + review AI 输出的 review 结论摘要。</p>

<h2 id="日常工作分配">日常工作分配</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>25%  跟 AI 讨论架构和方案        ← 核心：讨论、质疑、拍板
15%  review AI 写的文档/接口定义 ← 确认 AI 理解对了你的决策
15%  跟 AI 对话质疑执行方案      ← 第一性原理问问题
15%  Review 验证结果和报告      ← 测试覆盖率、CI 状态、运行指标
10%  端到端手动验证           ← 把自己当用户走一遍
10%  看关键代码，保持直觉      ← 极少数情况
10%  业务决策、外部协调        ← 跟真人相关的事
</code></pre></div></div>

<h2 id="常见问题速查">常见问题速查</h2>

<table>
  <thead>
    <tr>
      <th>情况</th>
      <th>该怎么做</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>不熟悉 AI 用的语言</td>
      <td>只看测试结果和 CI 报告，不看代码</td>
    </tr>
    <tr>
      <td>多个 AI 并行开发</td>
      <td>先建好验证体系，再让他们开工</td>
    </tr>
    <tr>
      <td>不确定 AI 写的对不对</td>
      <td>问 AI “失败模式是什么”</td>
    </tr>
    <tr>
      <td>不知道功能该不该做</td>
      <td>先做最小版本给用户，用反馈决定</td>
    </tr>
    <tr>
      <td>代码量太大看不过来</td>
      <td>专注看架构图和数据流，不看实现</td>
    </tr>
    <tr>
      <td>AI 写的代码有性能问题</td>
      <td>看 profiling 结果，不看代码本身</td>
    </tr>
    <tr>
      <td>担心安全漏洞</td>
      <td>配好 SAST 扫描和 dependency audit</td>
    </tr>
    <tr>
      <td>不知道质量如何</td>
      <td>看测试覆盖率和线上监控指标</td>
    </tr>
  </tbody>
</table>

<h2 id="写在最后">写在最后</h2>

<p>你的角色不是不懂技术的 PM，是<strong>懂物理定律的系统架构师</strong>。</p>

<p>PM 只管”要做什么”，你管”怎么做才不会炸”。你不是在管理一群程序员，你是在建设一个质量保障体系，然后让 AI 在这个体系里自由发挥。</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">从文本补全到状态机循环：重定义 AI Agent 的操作系统架构</title>
    <id>/notes/ai-agent-state-machine</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/ai-agent-state-machine"/>
    <updated>2026-02-23T00:00:00+08:00</updated>
    <published>2026-02-23T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<h2 id="引言真正的瓶颈---上下文窗口容量">引言：真正的瓶颈 - 上下文窗口容量</h2>

<p>当 AI 大模型推理速度突破 5000 tokens/s，Agent 的 Re-Act 循环进入毫秒级时代，一个物理铁律浮出水面：有限的上下文窗口（200K~1M tokens）将在几十秒内被“思考”与“日志”填满。现有的“追加历史记录”模式瞬间失效，因为这无异于试图用容量极小的 L1 缓存去存储整个程序运行周期的所有数据流。</p>

<p>这一矛盾决定了 AI Agent 的技术终局：上下文窗口必须从“聊天记录堆”重构为“CPU 寄存器堆”。未来的 Agent 架构不再是简单的对话流，而是类似于操作系统的状态机循环——Context Window 只保留当前指令指针和核心状态寄存器，通过严格的“状态覆盖”替代无脑的“日志追加”，用信息熵减对抗数据洪流。</p>

<p>真正的瓶颈在于 LLM 的核心物理限制——<strong>上下文窗口容量</strong>。即便模型能力不断提升，上下文窗口从 200K 扩展到 1M，它依然是一个有限的物理容器。试图通过无限扩大窗口来承载 Agent 无限运行产生的日志，无异于试图用一杯水去接一条不断流淌的河。</p>

<p>我们必须从 Transformer 的本质出发，承认一个残酷的现实：<strong>Transformer 是无状态的，它通过重放历史来模拟状态。</strong> 如果 Agent 要像操作系统进程一样长久、稳定地运行，我们必须彻底重构它的运行模式。</p>

<p>本文将提出一种新的架构范式：<strong>将 AI Agent 从“文本补全机器”重构为“状态机循环”</strong>，并将其类比为汇编语言与 CPU 架构，以此解决上下文爆炸的根本问题。</p>

<hr />

<h2 id="一-核心矛盾日志驱动-vs-状态驱动">一、 核心矛盾：日志驱动 vs. 状态驱动</h2>

<p>目前的 AI Agent 大多基于 Re-Act 模式，其运行逻辑本质上是“日志驱动”的：</p>

<ul>
  <li><strong>输入</strong>：User Input + 全部历史对话+ 上一步工具返回。</li>
  <li><strong>过程</strong>：LLM 阅读所有历史，预测下一步动作。</li>
  <li><strong>输出</strong>：新的动作或回复。</li>
</ul>

<p>这种模式的问题在于，为了维持“状态”，模型必须保留所有“过程”。这就像 CPU 为了执行下一条指令，必须把过去执行过的所有指令记录都读一遍。随着时间推移，Context Window 必然溢出，或者因注意力机制的 $O(N^2)$ 复杂度导致计算崩溃。</p>

<p><strong>操作系统的启示</strong>：
在计算机体系结构中，CPU 执行指令只依赖两个东西：</p>
<ol>
  <li><strong>当前指令指针</strong>：告诉 CPU 下一步做什么。</li>
  <li><strong>寄存器状态</strong>：告诉 CPU 当前数据是什么。</li>
</ol>

<p>CPU 不关心上一毫秒执行了什么，只关心当前状态。Agent 也必须如此。</p>

<hr />

<h2 id="二-架构重构llm-即汇编指令">二、 架构重构：LLM 即汇编指令</h2>

<p>如果我们将 Agent Loop 视为一段汇编程序，那么大语言模型（LLM）本身不再是那个无所不知的“大脑”，而是一条<strong>极其复杂的“状态转移汇编指令”</strong>。</p>

<p>在这个模型下：</p>
<ul>
  <li><strong>LLM 推理</strong> = <strong>一条汇编指令执行</strong>（耗时 100ms）。</li>
  <li><strong>Context Window</strong> = <strong>寄存器堆</strong>。</li>
  <li><strong>磁盘/向量库</strong> = <strong>主存</strong>。</li>
  <li><strong>Prompt</strong> = <strong>指令操作数</strong>。</li>
</ul>

<p>Agent 的运行模式应当从“追加日志”转变为“寄存器操作”。每一次推理，都是一次 <strong>“状态读入 -&gt; 计算 -&gt; 状态写回”</strong> 的过程。</p>

<hr />

<h2 id="三-设计原理context-window-的槽位化">三、 设计原理：Context Window 的槽位化</h2>

<p>既然 Context Window 是昂贵且有限的“寄存器”，我们就不能像写流水账一样随意填充。必须像设计 CPU 寄存器一样，对其进行严格的分区和结构化设计。</p>

<p>我们将 Context Window 划分为固定的“槽位”，每个槽位承载特定的功能：</p>

<h3 id="1-text-段指令区只读">1. <code class="language-plaintext highlighter-rouge">.text</code> 段：指令区（只读）</h3>

<p>这是 Agent 的内核代码，定义了 Agent 的行为逻辑。</p>

<ul>
  <li><strong>R_System (Instruction Set)</strong>：
    <ul>
      <li>定义 Agent 的身份、能力边界、工具使用规范。这相当于 CPU 的指令集手册，告诉 LLM 这条指令能做什么。</li>
    </ul>
  </li>
  <li><strong>R_IP (Instruction Pointer)</strong>：
    <ul>
      <li><strong>本质</strong>：程序计数器 + 任务栈。</li>
      <li><strong>内容</strong>：当前执行的计划步骤。</li>
      <li><strong>示例</strong>：
        <div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[Goal] Fix Bug #404
[Step 1/3] Read main.py (Done)
[Step 2/3] Locate error line -&gt; [Current IP]
[Step 3/3] Apply fix
</code></pre></div>        </div>
      </li>
      <li><strong>作用</strong>：LLM 只需看 <code class="language-plaintext highlighter-rouge">R_IP</code> 即可知晓“我在哪，要去哪”，无需回溯历史。</li>
    </ul>
  </li>
</ul>

<h3 id="2-data-段数据区读写">2. <code class="language-plaintext highlighter-rouge">.data</code> 段：数据区（读写）</h3>

<p>这是 Agent 的工作台，也是上下文工程的核心。</p>

<ul>
  <li><strong>R_State (Global State Register)</strong>：
    <ul>
      <li><strong>本质</strong>：全局状态寄存器。</li>
      <li><strong>约束</strong>：<strong>长度严格受限</strong>（如 4K tokens）。</li>
      <li><strong>形式</strong>：结构化文本（JSON/YAML），与向量等价，但人类可读可调。</li>
      <li><strong>内容示例</strong>：
        <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"task_status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"debugging"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"open_files"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"main.py"</span><span class="p">],</span><span class="w">
  </span><span class="nl">"error_line"</span><span class="p">:</span><span class="w"> </span><span class="mi">102</span><span class="p">,</span><span class="w">
  </span><span class="nl">"key_variables"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="nl">"user_id"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div>        </div>
      </li>
      <li><strong>维护</strong>：<strong>不追加，只覆盖。</strong> 通过 Edit Tool 进行增量更新。</li>
    </ul>
  </li>
  <li><strong>R_Working (Scratchpad)</strong>：
    <ul>
      <li><strong>本质</strong>：通用寄存器（AX, BX）。</li>
      <li><strong>内容</strong>：当前步骤的临时数据、工具调用的原始返回结果。</li>
      <li><strong>生命周期</strong>：极短。任务步骤完成后立即清空，为下一轮腾出空间。</li>
    </ul>
  </li>
</ul>

<h3 id="3-stack-段调用栈">3. <code class="language-plaintext highlighter-rouge">.stack</code> 段：调用栈</h3>

<ul>
  <li><strong>R_CallStack</strong>：
    <ul>
      <li>当 Agent 执行子任务或调用子 Agent 时，将当前的 <code class="language-plaintext highlighter-rouge">R_State</code> 和 <code class="language-plaintext highlighter-rouge">R_IP</code> 压栈。任务结束后弹出恢复。</li>
    </ul>
  </li>
</ul>

<hr />

<h2 id="四-实现机制熵减循环">四、 实现机制：熵减循环</h2>

<p>基于上述架构，Agent 的 Re-Act Loop 变成了一个标准的 CPU 指令周期。这个过程的核心在于 <strong>“信息压缩”</strong>。</p>

<h3 id="cycle-1-fetch取指">Cycle 1: Fetch（取指）</h3>
<p>注意力机制聚焦于 <code class="language-plaintext highlighter-rouge">R_IP</code> 和 <code class="language-plaintext highlighter-rouge">R_State</code>。模型不需要知道“之前发生了什么”，只通过当前状态判断“现在该做什么”。</p>

<h3 id="cycle-2-decode译码">Cycle 2: Decode（译码）</h3>
<p>模型根据 <code class="language-plaintext highlighter-rouge">R_System</code> 的规则，分析当前状态是否需要调用工具，或者是否需要更新内部状态。</p>

<h3 id="cycle-3-execute执行">Cycle 3: Execute（执行）</h3>
<p>模型输出两部分内容：</p>
<ol>
  <li><strong>Tool Call</strong>：对外部世界的操作（如 <code class="language-plaintext highlighter-rouge">Read_File</code>）。</li>
  <li><strong>Delta_State</strong>：对内部寄存器的修改指令（如 <code class="language-plaintext highlighter-rouge">Update_State</code>）。</li>
</ol>

<h3 id="cycle-4-writeback写回">Cycle 4: Writeback（写回）</h3>
<p>这是解决上下文爆炸的关键步骤：</p>
<ul>
  <li><strong>外部数据</strong>：工具返回的大量数据（如 10,000 行日志）写入 <code class="language-plaintext highlighter-rouge">R_Working</code>。</li>
  <li><strong>状态压缩</strong>：LLM 分析 <code class="language-plaintext highlighter-rouge">R_Working</code>，提取关键信息（如“错误在第 500 行”），生成 <code class="language-plaintext highlighter-rouge">Delta_State</code> 更新 <code class="language-plaintext highlighter-rouge">R_State</code>。</li>
  <li><strong>清理</strong>：<strong>丢弃</strong> <code class="language-plaintext highlighter-rouge">R_Working</code> 中的原始数据。</li>
</ul>

<p><strong>结果</strong>：10,000 行的日志被压缩成了 <code class="language-plaintext highlighter-rouge">R_State</code> 中的一个字段 <code class="language-plaintext highlighter-rouge">"error_line": 500</code>。上下文占用仅增加几个 Token，但信息被完整保留。这就是“状态机”对抗“上下文爆炸”的武器。</p>

<hr />

<h2 id="五-新范式精心设计-context-window-的布局">五、 新范式：精心设计 Context Window 的布局</h2>

<p>在这种架构下，我们需要精心设计 Context Window 的布局，引导 LLM 遵守寄存器约束。</p>

<p><strong>Prompt 模板示例</strong>：</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code># [R_System] Instruction Set
You are a State-Machine Agent. Maintain state strictly in JSON format.
Output format:
1. &lt;tool_call name="..."/&gt;
2. &lt;state_update key="..." value="..."/&gt;

# [R_IP] Current Instruction Pointer
Goal: Analyze Stock Trend
Step: 3/5 (Calculate Moving Average)

# [R_State] Global Registers (Max 4000 tokens)
{
  "ticker": "AAPL",
  "trend": "UP",
  "analysis_progress": "50%"
}

# [R_Working] Scratchpad (Last Tool Output)
[Tool: API] Returned 1000 data points... (Large Text)

# [Input]
Based on R_State and R_Working, generate Next Tool Call and State Update.
</code></pre></div></div>

<hr />

<h2 id="结语通往操作系统之路">结语：通往操作系统之路</h2>

<p>AI Agent 的未来，不是让模型拥有无限的记忆，而是让模型学会像操作系统一样高效地管理资源。</p>

<p>通过引入<strong>指令指针（R_IP）</strong>和<strong>状态寄存器（R_State）</strong>，我们将 Agent 的运行模式从线性的“文本流”转变为循环的“状态机”。在这个架构下，无论 Agent 运行一秒钟还是一百年，其 Context Window 的占用始终稳定在一个可控的范围内。</p>

<p>这才是 AI Agent 从“玩具”走向“工业级应用”的必经之路。我们不是在写对话，我们是在编写 AI 的汇编代码。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">分析 Claude Code 提示词的方法 - mitmproxy</title>
    <id>/notes/claude-code-prompt-mitmproxy</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/claude-code-prompt-mitmproxy"/>
    <updated>2026-01-19T00:00:00+08:00</updated>
    <published>2026-01-19T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>想了解 Claude Code 的提示词是怎么设计的，最直接的方式就是抓包分析。通过网络流量，可以看清它的 System Prompt、Messages、Tools 等核心信息。</p>

<h2 id="安装-mitmproxy">安装 mitmproxy</h2>

<p>官方文档: <a href="https://www.mitmproxy.org">https://www.mitmproxy.org</a></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>uv tool <span class="nb">install </span>mitmproxy
</code></pre></div></div>

<h2 id="反向代理模式">反向代理模式</h2>

<p>大多数教程用正向代理，需要配置系统代理和 CA 证书。更简单的方式是用反向代理：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mitmweb <span class="nt">--mode</span> reverse:https://open.bigmodel.cn <span class="nt">--listen-port</span> 8125
</code></pre></div></div>

<p>这个命令会：</p>
<ul>
  <li>反向代理到智谱AI 的 API</li>
  <li>在本地 8125 端口监听</li>
  <li>打开 Web 界面查看流量</li>
</ul>

<p>然后把 Claude Code 配置中的 API 地址改成代理地址，正常使用即可。</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ANTHROPIC_BASE_URL: http://127.0.0.1:8125/api/anthropic
</code></pre></div></div>

<h2 id="查看流量">查看流量</h2>

<p>在 mitmweb 界面中可以看到所有请求和响应：</p>

<ul>
  <li>Request - 包含 system、messages、tools 等字段</li>
  <li>Response - LLM 的流式响应</li>
</ul>

<p>点击具体的请求，就能看到完整的提示词内容了。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">Claude Code 监督器：让 AI 主动把事情做好</title>
    <id>/notes/claude-code-supervisor</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/claude-code-supervisor"/>
    <updated>2026-01-11T00:00:00+08:00</updated>
    <published>2026-01-11T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>前段时间做了一次 AI 大模型技术分享，顺手 Vibe coding 了一个小工具 <a href="https://github.com/guyskk/claude-code-supervisor">claude-code-config-switcher</a>，用来在不同 Claude Code 提供商之间快速切换。</p>

<p>后来我给这个工具新增了一个 Supervisor 模式，用了一段时间之后感觉非常有价值，于是把项目改名为 <a href="https://github.com/guyskk/claude-code-supervisor">claude-code-supervisor</a>。</p>

<h2 id="什么是-supervisor-模式">什么是 Supervisor 模式</h2>

<p>用过 Claude Code 的朋友应该有这个体验：有时候 AI 声称”完成了”，但实际上还有一堆问题没解决。比如测试没跑、代码质量很差、功能不完整等等。这时候就需要你再跟 AI 说几轮，让它继续完善。</p>

<p>Supervisor 模式就是为了解决这个问题。它的原理很简单：</p>

<ol>
  <li>AI Agent 完成任务后，Supervisor（另一个 AI 实例）会自动审查工作质量</li>
  <li>如果没完成或质量不达标，Supervisor 给出反馈，让 Agent 继续</li>
  <li>重复这个过程，直到 Supervisor 确认工作真正完成</li>
</ol>

<p>这个机制利用了 Claude Code 的 Stop Hook，当 Agent 停止时自动触发审查。Supervisor 会 Fork 完整的会话上下文，评估实际的工作质量，而不是简单检测一些关键词或信号。</p>

<h2 id="为什么这很有用">为什么这很有用</h2>

<p>使用 Claude Code 最大的痛点，就是 AI 经常会把问题抛回给用户：</p>

<ul>
  <li>“是否需要运行测试？”</li>
  <li>“应该如何处理这个错误？”</li>
  <li>“你希望我用什么方式实现？”</li>
</ul>

<p>这些问题本该是 AI 自己解决的。有了 Supervisor 模式，Supervisor 会检查：</p>
<ul>
  <li>Agent 是否在等待用户确认？</li>
  <li>是否做了应该自己做的事？</li>
  <li>代码质量是否达标？</li>
  <li>用户需求是否全部满足？</li>
</ul>

<p>如果发现问题，Supervisor 会给出具体反馈让 Agent 继续。比如：”你声称完成了，但没有测试，请添加测试。”</p>

<h2 id="一个真实的例子">一个真实的例子</h2>

<p>最近我用 Supervisor 模式做了一个实验（使用GLM 4.7模型），只给 AI 一个很简单的提示词：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>用 JS 写一个在浏览器玩的双人坦克对战生存游戏，我和 AI 在有砖墙和钢墙的迷宫战场中驾驶坦克利用掩体进行战术射击对决，游戏要完整、精美、超高质量，AI 要有超强的战术水平。
</code></pre></div></div>

<p>结果让我很惊讶。在 Supervisor 的监督下，AI 完成了一个功能完整的坦克大战游戏：</p>

<ul>
  <li>精美的画面和流畅的动画</li>
  <li>智能的 AI 对手，会利用掩体、预判玩家位置</li>
  <li>迷宫地图生成，砖墙可破坏、钢墙不可破坏</li>
  <li>游戏控制（键盘 WASD + 方向键）</li>
  <li>完整的游戏循环（开始、对局、结束、重开）</li>
</ul>

<p>游戏地址：<a href="https://blog.guyskk.com/shows/tankbattle/">https://blog.guyskk.com/shows/tankbattle/</a></p>

<p>最关键的是，整个过程我只需要给出初始需求，剩下的全部由 AI 在 Supervisor 监督下自动完成。没有中间轮次，没有反复沟通，一次性交付高质量成果。</p>

<h2 id="与-ralph-的区别">与 Ralph 的区别</h2>

<p>可能有朋友知道 <a href="https://github.com/anthropics/ralph-claude-code">ralph-claude-code</a> 这个项目，它也能实现类似的监督功能。两者的主要区别在于：</p>

<table>
  <thead>
    <tr>
      <th>方面</th>
      <th>Ralph</th>
      <th>ccc</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>检测方式</td>
      <td>AI 输出结构化状态 + 规则解析</td>
      <td>Supervisor AI 直接审查</td>
    </tr>
    <tr>
      <td>评估方式</td>
      <td>基于信号和规则</td>
      <td>Fork 会话上下文评估实际质量</td>
    </tr>
    <tr>
      <td>灵活性</td>
      <td>需要更新规则代码</td>
      <td>更新 Prompt 即可</td>
    </tr>
  </tbody>
</table>

<p>ccc 采用的是 AI-First 的设计理念。规则检测的局限性在于需要预定义所有情况，难以覆盖边缘场景。而 AI 审查能理解上下文，处理边缘情况，随着模型能力提升自动改进。</p>

<h2 id="项目地址">项目地址</h2>

<p>claude-code-supervisor 已经开源，欢迎体验：<a href="https://github.com/guyskk/claude-code-supervisor">https://github.com/guyskk/claude-code-supervisor</a></p>

<p>主要功能：</p>

<ol>
  <li><strong>Supervisor 模式</strong>：自动任务审查，确保高质量可交付成果（新增核心功能）</li>
  <li><strong>提供商切换</strong>：一条命令在 Kimi、GLM、MiniMax 等提供商之间切换（原有功能）</li>
</ol>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">我的AI大模型技术分享2025</title>
    <id>/notes/ai-share-2025</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/ai-share-2025"/>
    <updated>2025-12-31T00:00:00+08:00</updated>
    <published>2025-12-31T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>前段时间做了一次AI大模型技术分享，本想早点把资料整理出来，一拖就到了2026年。趁着元旦假期，把分享材料整理好发出来，希望能对大家有帮助。</p>

<p>这次分享覆盖了AI大模型的方方面面，从底层原理到产品实践，包括：大模型是什么、Agent怎么工作、提示词工程、AI产品开发新范式等等。内容比较多，整理成了PDF，感兴趣的朋友可以直接查看：<a href="/static/2025-12-12/2025-ai-share.pdf"><strong>2025-AI大模型技术分享-PDF</strong></a></p>

<p>分享之后，又 Vibe coding 了一个小工具 <a href="https://github.com/guyskk/claude-code-config-switcher"><strong>claude-code-config-switcher</strong></a>（简称ccc），现已开源。这个工具解决的问题是：Claude Code虽然很好用，但想在不同提供商（Kimi、GLM、MiniMax等）之间切换，每次都要手动修改配置文件，很麻烦。用ccc的话，一条命令就能切换，欢迎体验：<a href="https://github.com/guyskk/claude-code-config-switcher">https://github.com/guyskk/claude-code-config-switcher</a></p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">三十而砺 - 反思我的创业</title>
    <id>/notes/age-30</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/age-30"/>
    <updated>2025-05-21T00:00:00+08:00</updated>
    <published>2025-05-21T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>转眼间到了而立之年，回首过去四年创业路，失败已成定局，但它教会了我什么是真正重要的。就像乔布斯在斯坦福演讲所说：”你无法预先把点滴串联起来，只有回头看时才会明白那些点是如何连成线的。”</p>

<h2 id="商业的规律">商业的规律</h2>

<p>四年探索，尝试了很多方向，做了很多产品，却没有真正赚钱。仔细思考最本质的原因：违背了商业第一性原理。</p>

<p><strong>简陋的产品=不好卖吗？</strong></p>

<p>不一定。只要用户需要，能满足其需求，照样可以卖的很好，赚的钱可以把产品做的更好，形成增长飞轮。用户需求的本质是解决方案，产品只要精准击中痛点，就能创造价值闭环。</p>

<p><strong>有需求=能变现？</strong></p>

<p>也不一定。用户可能不知道你的产品，你得想办法做好推广，找到目标用户。再好的产品，如果无法用正确方式出现在目标用户面前，等于不存在。</p>

<p><strong>有需求+找到用户=能赚钱？</strong></p>

<p>市面上有很多替代（免费）方案，产品得有（用户认为的）足够显著的差异化价值，才能让用户愿意为你的方案付费。</p>

<p>商业规律就是许多简单的常识，早点领悟这些，我能少走80%的弯路。真正符合商业规律的产品机会少之又少，如同沙里淘金。</p>

<p>创业是不断升级认知的修行，看的更远、更透彻，做更多符合商业规律的正确选择。</p>

<h2 id="创业的收获">创业的收获</h2>

<p>创业四年后悔吗？我的回答是，完全不后悔创业，唯一后悔的是成长速度还不够快。</p>

<p><strong>积累了经验，提升了认知和能力</strong></p>

<p>创业是最高效的实战学习。做的每个产品和功能就像是一次实验，运用自己的能力（原料），投入自己的想法（配方），期待发生神奇的反应，源源不断产生用户和收入。</p>

<p>最开始做的实验毫无章法，像小孩玩泥巴一样，瞎折腾一通。然后开始摸索总结经验，学会系统思考，看更多的书，向有结果的人学习，做更多实验去验证想法。大部分实验失败了，还有一些也不太成功，只产生了一些半成品。</p>

<p><strong>自由职业，有时间照顾家庭</strong></p>

<p>自由职业的状态让我有时间陪伴家人，工作间隙给小孩喂一下奶、陪她玩一会，放松眼睛和大脑，每天遛娃、散步正好锻炼身体。</p>

<p>有了小孩之后，合理高效安排自己的时间是个挑战，工作时长会不如以前，但并不是坏处，身体是革命的本钱，保持工作与生活的动态平衡，这才是可持续的发展模式。</p>

<h2 id="后续的打算">后续的打算</h2>

<p>标准化产品路线暂时搁置。后续我主要做定制项目/接单/远程兼职。定制开发网站、小程序、AI自动化工作流、浏览器插件、自媒体工具等。</p>

<p>这些都是我擅长的领域，技术能力完全满足，开发工期大致为1天～2周，最长不超过1个月，确保交付质量与效率。</p>

<p>我会继续不定期分享商业思考和技术经验，欢迎同行者交流碰撞。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #34 宝贝女儿出生，我当爸爸了</title>
    <id>/notes/onebiz-34</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-34"/>
    <updated>2024-11-30T00:00:00+08:00</updated>
    <published>2024-11-30T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>最近创业没太多进展，值得开心的是我的宝贝女儿出生了，我当爸爸了，开启新的人生体验！</p>

<p>产品和创业方面感觉没什么可写，推荐几本最近看的书：</p>
<ul>
  <li><a href="https://xiaobot.net/p/devgrowth?refer=aa616968-9262-473d-9ff6-ee09ae52260d">独立开发者营销获客手册</a></li>
  <li><a href="https://www.seozac.com/seobook/">SEO实战密码</a></li>
  <li><a href="https://book.douban.com/subject/36784327/">流量的逻辑</a></li>
  <li><a href="https://book.douban.com/subject/37070351/">真需求-梁宁</a></li>
</ul>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #33 继续聊聊自媒体AI副业工具</title>
    <id>/notes/onebiz-33</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-33"/>
    <updated>2024-10-21T00:00:00+08:00</updated>
    <published>2024-10-21T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>大家好，今天继续聊聊我最近做的项目—<a href="https://zmt.ezboti.com">艺爪AI自媒体副业工具</a>，最近更新了很多功能，持续快速迭代。</p>

<h3 id="1-字幕拼图功能">1. 字幕拼图功能</h3>

<p><a href="https://www.ezboti.com/docs/zmt/zmpt/">字幕拼接图片</a>非常适合做经典语录和读书分享图文。可以用它来制作那些带有深刻文字的图片，一键生成，直接上传到你的公众号或者小红书，吸引粉丝和流量。</p>

<h3 id="2-ai文案生成功能">2. AI文案生成功能</h3>

<p>内置的文案库和AI智能改写功能，让你可以快速生成高质量的文案。这不仅仅是节省时间，更是提高了内容的原创度和爆款概率。AI文案已经和字幕拼图、<a href="https://www.ezboti.com/docs/zmt/zytw/">治愈系图文（有图有字）</a> 功能深度融合。</p>

<p>如果你懒得自己写文案，AI文案生成功能非常好用，50万+的文案词库加上智能改写，批量制作图文内容效率极高。</p>

<h3 id="3-公众号图文排版">3. 公众号图文排版</h3>

<p>这个<a href="https://www.ezboti.com/docs/zmt/paiban/">免费图文排版</a>功能最近也更新升级了，可以实现非常丰富的公众号图文样式，支持多种图片布局，实时预览，一键导出，用来做公众号图文非常简单方便。</p>

<p>现在这款副业工具产品已经比较完善，但还没有解决流量问题，缺精准流量。</p>

<p><strong>欢迎有自媒体工具、副业项目相关流量的朋友联系我，可以推广🤝合作。</strong></p>

<p>艺爪AI自媒体副业工具，专注于自媒体图文创作。<br />
网址: https://zmt.ezboti.com<br />
公众号: 艺爪助手<br />
如果你对这个工具感兴趣，或者想要了解更多关于它的信息，欢迎随时联系。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #32 新产品-自媒体副业工具</title>
    <id>/notes/onebiz-32</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-32"/>
    <updated>2024-09-19T00:00:00+08:00</updated>
    <published>2024-09-19T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>上期文章发布之后，我综合考虑选择了自媒体工具方向。现在产品已上线一个多月，一直忙于产品迭代更新。这次分享一下最近2个月的进展。</p>

<h2 id="自媒体副业工具">自媒体副业工具</h2>

<p>艺爪AI自媒体副业工具，小白也能用的自媒体赚钱利器！<br />
网址: <a href="https://zmt.ezboti.com">https://zmt.ezboti.com</a><br />
教程&amp;案例: <a href="https://www.ezboti.com/docs/zmt/start/">https://www.ezboti.com/docs/zmt/start/</a></p>

<p>产品第一版提供姓氏头像工具，吸引了少部分用户使用，迭代更新把功能完善之后，最近更新上线了治愈图文工具，功能也比较完整了。<a href="https://mp.weixin.qq.com/s/HOEXXLBP72EBOmDaxOxLmA">艺爪AI副业工具 新功能「有图有字」上线了！</a></p>

<h3 id="这个方向对了吗">这个方向对了吗</h3>

<p>经过这2个月的摸索，我觉得大概是对的。和AI对话/AI写作相比，这个产品用户群体更加垂直，没有被大厂炮火覆盖，用户使用频率比较高（做自媒体账号每天都用），付费意愿也更强。从数据来看，付费人数比AI写作明显更高。</p>

<p>但是也存在问题，增长缓慢。做自媒体副业能赚钱吗？能赚钱，但只有少数人能赚到钱。賺钱这个事，需要的能力非常多，大多数人不具备。目前副业工具这个产品的用户基本是有自媒体经验、有思路、也有执行力的一小群人，这个工具能节省时间，提高效率，帮助他们赚更多钱。</p>

<p>对于更广泛的普通人，做自媒体还没有赚到过钱的人，从0到1是艰难的过程，需要长期坚持努力，也需要一点运气（坚持几个月创作内容，等某一天你的某个文章无意间就火了）。大部分人不具备这些要素，只是单纯的想赚钱。</p>

<p>我不想做割韭菜的事，忽悠赚快钱不可取。我想要实打实做副业赚钱的工具，实现 “小白也能用的自媒体赚钱利器” 这个大目标，任重道远。</p>

<h2 id="其他">其他</h2>

<p><a href="https://rss.anyant.com/">蚁阅RSS</a> 服务器最近快到期了，核算发现续费成本太高，严重入不敷出。花了半个月时间把服务迁移到云函数上（Serverless），优化配置降低成本。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #31 APP上架了，路在何方？</title>
    <id>/notes/onebiz-31</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-31"/>
    <updated>2024-07-24T00:00:00+08:00</updated>
    <published>2024-07-24T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>转眼一个月又过去了，<a href="https://www.ezboti.com/ai/">艺爪AI</a> APP上架了几家主流应用商店，但下载量惨淡，短视频推广效果也不好。我感觉得再调整方向，不然肯定赚不到钱。</p>

<h2 id="app端适配">APP端适配</h2>

<p>艺爪AI基于uniapp开发，可以跨小程序、网页、APP多端，适配APP端碰到几个难点，都解决了。</p>
<ol>
  <li>Markdown/Latex/二维码渲染在APP端报错，原因是APP端和小程序一样是逻辑层（JS）和视图层（Webview）分离，JS代码无法直接操作DOM。解决办法是用 <a href="https://uniapp.dcloud.net.cn/tutorial/renderjs.html">uniapp-renderjs</a> 技术，把DOM操作的代码放在视图层运行，就能直接操作DOM了。</li>
  <li>AI写作用到了富文本编辑，使用 <a href="https://github.com/slab/quill">Quill</a> 这个库实现的，其中的DOM操作非常复杂，使用 renderjs 也无法正常运行。最后选择用 webview 把网页版的AI写作页面嵌入APP中，绕过了这个问题。</li>
  <li>APP支付，基于艺爪付费实现，<a href="https://www.ezboti.com/docs/revenue/api-example-uniapp-android/">参考代码-Uniapp框架支付</a>。</li>
</ol>

<p>现在已经开发完成了安卓端。iOS端支付比较复杂，还没有时间做适配，后续再考虑加上。</p>

<h2 id="app上架了">APP上架了</h2>

<p>艺爪AI APP上架了国内的主流应用商店，其中小米、Vivo、OPPO、百度应用商店都比较顺利，腾讯应用宝审核了几轮最终通过了，华为应用商店要求非常严格，审核还没通过。</p>

<p>审核涉及的问题有这些：</p>
<ol>
  <li>应用内为用户提供合成生成内容服务前，未进行真实身份信息认证。（要求手机号登录，暂未完成）</li>
  <li>应用内含深度合成或生成式人工智能服务内容，未提供举报功能。（加上了举报功能）</li>
  <li>登录/注册页面无《用户协议》或《隐私协议》。（加上了，而且默认不能勾选）</li>
  <li>支付页面未展示会员服务协议。（加上了：购买会员代表已阅读并同意《会员服务协议》）</li>
  <li>首页显著提示：内容由AI生成，请勿用于从事违反相关法律法规的活动。</li>
  <li>《用户协议》和《隐私协议》内容缺少开发者信息。（加上了公司名称和联系方式）</li>
  <li>《用户协议》和《隐私协议》内容缺少更新/生效时间。（加上了更新日期）</li>
</ol>

<p>自己辛苦开发的APP上架了，应该是件开心的事情，但是上架了几天，APP下载寥寥无几。</p>

<p>这段时间短视频推广效果也很差，转化的用户没有几个。也发现同行、同类产品都是做付费广告推广，但这样成本打不住，可能还得亏更多。</p>

<p>从APP上架后的效果以及市场反馈来看，我感觉得再调整方向，不然肯定赚不到钱。</p>

<h2 id="路在何方">路在何方？</h2>

<p>方向不对、努力白费，我思考了很多创业方向的问题，做了一点调研，大致有三个可以考虑的方向。</p>

<h3 id="自媒体工具---帮助普通人做自媒体赚钱">自媒体工具 - 帮助普通人做自媒体赚钱</h3>

<ul>
  <li>各大自媒体平台上，大部分内容都是“营销号”创作的，大部分流量也是给了这群人，这个群体通过一些固定的模式创作出大量内容，吸引流量变现。其中创作内容和流量变现需要软件工具支撑。</li>
  <li>自媒体赚钱已经有成熟的模式，这个群体中有些人是【团长（师傅）】，他们开培训课程教学员做账号发内容（【项目】），积累粉丝和流量。项目对应着特定的受众群体/账号类型/类目，例如姓氏头像就是一个项目，按大类分的话属于头像壁纸类。赚钱项目非常多，少部分赚到钱的人会成为团长教别人赚钱，流量暴涨（赚大钱）是小概率事件，选对项目坚持做基本能赚到零花钱。</li>
  <li>从需求看：这些创作者属于业余兼职/失业/宝妈等人群，想通过互联网赚钱，会动手实操。自媒体平台需要大量的内容供用户消费。创作者需要每天生产原创/伪原创内容，持续发布内容，使用工具软件是必须的，只要能赚钱回本，付费意愿很高。</li>
  <li>从技术看：AI擅长创作内容，再结合软件自动化，是自媒体推广人群的最佳工具，绘画、写作都能很好满足需求。但是AI要和具体的推广项目结合，把人工操作的流程、套路模式做成简单的工具，方便普通人高效做赚钱项目。</li>
</ul>

<h3 id="国产版poe---聚合国产ai大模型api">国产版Poe - 聚合国产AI大模型API</h3>

<ul>
  <li>目前国内没有这类产品，大厂不会做这类产品，有市场需求（开发者、科技博主、研究人员？）。</li>
  <li>聚合API需要对接很多API，适合开源共建，开源能够增加聚合API的数量，同时减少每个开发者的工作量。</li>
  <li>艺爪AI本身用了多个大模型，作为开发者需要这样的聚合API服务，把聚合API标准化并开源，有长期价值。</li>
  <li>通过开源的方式提高知名度，获取持续的流量。用户可以自己部署开源版，也可以充值艺爪AI会员直接即用。</li>
</ul>

<h3 id="蚁阅rss升级---rss--ai结合更好用的阅读器">蚁阅RSS升级 - RSS + AI结合，更好用的阅读器</h3>

<ul>
  <li>传统的RSS阅读器基于订阅源链接获取信息，有了AI能力之后，可以实现根据用户的意图订阅内容，你想要什么，就让AI助理帮你从互联网各个地方收集这方面的信息，整理好之后给你，不再需要自己找RSS源。</li>
  <li>国内内容平台都比较封闭，开放的信息源不多，订阅源是绕不过去的难题，也许AI可以实现更智能的爬虫，不需要写代码就能获取你想要的信息。</li>
  <li>蚁阅RSS已经积累了非常多用户反馈，RSS阅读器需求持续存在，用户体验需要完善，有很多功能等待实现。</li>
  <li>国内做内容产品涉及很多内容审核合规问题，爬各大平台的内容也有合规风险。</li>
</ul>

<p><strong>你觉得这些方向靠谱（能赚钱）吗？</strong></p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #30 人机交互，打造AI写作神器</title>
    <id>/notes/onebiz-30</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-30"/>
    <updated>2024-06-15T00:00:00+08:00</updated>
    <published>2024-06-15T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>最近两个月，我开发上线了 <a href="https://www.ezboti.com/ai/">艺爪AI写作</a> 功能，这个功能既能提高写作效率，又能保证文章质量。</p>

<p>它最大的特点在于人机交互，用户可以通过与AI的交互，逐步引导并补充信息，从而生成更符合个人需求的文章。</p>

<p>我也在推广上做了一些尝试，希望让更多人了解并体验这个全新的AI写作工具。</p>

<h2 id="为什么开发ai写作功能">为什么开发AI写作功能？</h2>

<p>今年的市场环境与去年相比已发生巨大变化，简单的AI对话产品没有了竞争力，市面上充斥着众多竞品，大厂APP功能更强大且免费。因此，我迫切需要开发一个更具竞争力的东西出来。</p>

<p>我重新思考了产品方向，并调研AI市场的用户需求。一方面，我参考了风投投资的创业公司，收集大量AI方向创业公司的信息，例如YC的投资名单，从中整理出一些可行的产品方向。</p>

<p>另一方面，我尝试分析产品积累的用户对话数据（所有数据均为匿名，仅用于内部调研和产品改进，不涉及个人隐私问题）。因为数据量非常大，我用了一些分析方法，比如词频、词云、主题模型和关键词统计。结果发现，对话问答和写作这两方面的需求都很强，大约各占了1/3，其他需求则分布在不同的小领域里。</p>

<p><img src="/static/2024-06-14/ai-wordcloud.png" alt="AI需求词云" /></p>

<p>综合考虑，AI写作的需求很广泛也很重要，所以我决定先开发AI写作这个功能。</p>

<h2 id="ai写作应该做成什么样">AI写作应该做成什么样？</h2>

<p>请看AI的回答：</p>

<p><img src="/static/2024-06-14/ai-chat.png" alt="用户怎样与AI交互完成写作-AI的回答" /></p>

<p>我分析了市面上的AI写作产品，发现 Notion AI 和 WPS / Word AI 比较符合AI交互式写作的特点，其他大部分产品都是AI文章生成器，直接生成文章，不支持交互式写作。还有一些产品是针对特定写作领域的，比如论文写作和小说写作。</p>

<p>我认为，AI写作的最佳方式是人与AI的交互。用户可以逐步指导AI如何改写，从而生成更符合需求的文章。而那种直接生成文章的工具，往往很难写出用户满意的好文章。</p>

<h2 id="艺爪ai写作上线和推广">艺爪AI写作上线和推广</h2>

<p>经过一个多月的开发，艺爪AI写作在5月底完成上线了，第一版只适配了电脑端，随后开发适配了移动端界面。经过近一个月的迭代和优化，现在产品已经比较好用了。感兴趣的朋友可以通过下面链接访问：</p>

<ul>
  <li><a href="https://www.ezboti.com/ai/">艺爪AI官网 www.ezboti.com/ai</a></li>
  <li><a href="https://www.bilibili.com/video/BV1cz42187hP/">艺爪AI写作视频教程 - Bilibili</a></li>
</ul>

<p>产品上线后，接下来要考虑的就是推广问题了。要让更多人知道我们的产品，特别是那些真正需要它的人。</p>

<p>我本来的计划是，一方面找代理商合作推广，另一方面我自己也通过自媒体来宣传。但现在AI的热潮已经消退，市场回归理性，推广起来比以前难了，我们的产品竞争力也没有那么强，所以代理商不太愿意推广了，我们得自己想办法去做市场推广。</p>

<p>虽然渠道销售可以放大流量，但在产品标准化之前，我们还是得直接面对用户。参考 <a href="https://mp.weixin.qq.com/s/palwvEsH_nWRGScDePfgpA">初创公司的销售模式-奇绩创坛</a>。</p>

<h2 id="ai算法备案">AI算法备案</h2>

<p>还有一个好消息，艺爪AI成功通过了网信办算法备案。</p>

<p><img src="/static/2024-06-14/ai-beian.png" alt="艺爪AI算法备案" /></p>

<p>艺爪AI助手合规运营，安全、可靠，更加放心使用！</p>

<h2 id="后续计划">后续计划</h2>

<ol>
  <li>
    <p>利用同一套跨平台代码，上架艺爪AI助手的APP端、桌面客户端，为用户提供更好的使用体验。</p>
  </li>
  <li>
    <p>深入探索AI写作的市场需求，不断迭代产品，提升用户体验，让AI写作更加贴合用户的实际需求。</p>
  </li>
</ol>

<p>现在，想请教大家一个问题：你心目中理想的AI写作功能应该是怎样的？欢迎在评论区留下你的想法，期待与你共同探讨和进步！</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #29 经验分享: 让AI输出结构化JSON数据</title>
    <id>/notes/onebiz-29</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-29"/>
    <updated>2024-04-05T00:00:00+08:00</updated>
    <published>2024-04-05T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>最近一个多月我比较忙碌，开始投入工作和创业中，在此分享一下进展和我在AI方面的一点经验。</p>

<h2 id="本月进展">本月进展</h2>

<p><a href="https://rss.anyant.com/">蚁阅RSS</a> 收到用户赞助，新增发布订阅功能。发布订阅功能用于公开你的订阅，让网友可以在你的网站上阅读你的订阅内容。详见<a href="https://rss.anyant.com/changelog">蚁阅1.9.0更新日志</a>。</p>

<p>接单给一个AI小程序增加Markdown和Latex数学公式渲染功能，已完成交付上线。</p>

<p>接单给一个企业接入AI实现业务需求，正在开发中。</p>

<p>调研AI市场用户需求，计划开发新功能「AI写作」。</p>

<p>重构了自己AI产品的前端代码，修复一些遗留问题。</p>

<h2 id="如何让ai输出结构化json数据">如何让AI输出结构化JSON数据</h2>

<p>AI（LLM）的输入和输出都是基于自然语言的，然而编程语言只能理解结构化的数据，将AI集成到业务中时经常需要用到结构化的数据，这时可以借助<a href="https://github.com/microsoft/TypeChat">TypeChat</a>让AI生成结构化的JSON数据。</p>

<p>因为AI的训练数据包含了大量编程知识，其中包括TypeScript和JSON，所以可以借助TypeScript描述数据结构，让AI用JSON格式输出数据。通过实践验证AI也确实能够遵循指令输出JSON数据。</p>

<p>示例提问：</p>
<div class="language-markdown highlighter-rouge"><div class="highlight"><pre class="highlight"><code>You are a service that translates user requests into JSON object according to the following TypeScript definitions of type <span class="sb">`Result`</span>.
你是一个用户请求翻译器，根据用户请求和以下TypeScript定义准确翻译成符合 <span class="sb">`Result`</span> 类型的JSON对象。TypeScript定义如下：
<span class="p">```</span><span class="nl">
</span>// 判断用户需要什么样的咖啡
type Result {
    size: string,    // 大小：中杯、大杯、超大杯
    sugar: string,   // 糖分: 无糖、半糖、9分糖
}
<span class="p">```</span>
Please translate the user request into a JSON object directly, with 2 spaces of indentation, use <span class="sb">`null`</span> to represent values that cannot be translated. Please make sure response JSON text directly.
请将用户请求直接翻译成JSON数据，用2个空格缩进，无法翻译的值用null表示。请确保直接输出JSON数据，不要回复其他内容。

Please translate the following user request into JSON object（请翻译以下用户请求成JSON数据）:
我想要一杯咖啡，不要加糖，大杯，加牛奶
</code></pre></div></div>

<p>AI的回答：</p>
<div class="language-markdown highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">```</span><span class="nl">json
</span><span class="p">{</span><span class="w">
  </span><span class="nl">"size"</span><span class="p">:</span><span class="w"> </span><span class="s2">"大杯"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"sugar"</span><span class="p">:</span><span class="w"> </span><span class="s2">"无糖"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"milk"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span><span class="p">}</span>
<span class="p">```</span>
</code></pre></div></div>

<p>但是使用过程中发现存在一些缺陷：</p>

<p><strong>AI可能不会直接输出JSON文本，而是用Markdown语法输出，也可能会输出多余的文字。</strong></p>

<p>解决方案：使用正则表达式提取代码块里面的JSON文本。有些模型支持 <a href="https://platform.openai.com/docs/guides/text-generation/json-mode">JSON mode</a> ，可以确保输出JSON格式数据。</p>

<p><strong>AI可能输出的JSON语法不对，多余的逗号，添加了注释，将 <code class="language-plaintext highlighter-rouge">null</code> 写成了 <code class="language-plaintext highlighter-rouge">undefined</code>。</strong></p>

<p>解决方案：使用 <a href="https://github.com/PiotrDabkowski/Js2Py">https://github.com/PiotrDabkowski/Js2Py</a> 这个库将JSON文本当作JavaScript解析，提取返回的对象。</p>

<p><strong>AI输出的JSON数据结构可能不对，会缺失字段或者多余字段。</strong></p>

<p>解决方案：对数据问题做容错处理，校验数据，校验失败时让AI重新回答。调整 <code class="language-plaintext highlighter-rouge">temperature</code> 和 <code class="language-plaintext highlighter-rouge">top_p</code> 参数，减少输出的随机性和多样性，使输出更加稳定、集中和确定。</p>

<p><strong>AI对字段的含义理解可能不对，返回了错误的数据。</strong></p>

<p>解决方案：在TypeScript文本中写注释，描述字段的含义，给AI提供指导，给AI举例子。</p>

<p>微软的TypeChat库提供了很好的思路，但处理各种特殊情况时不够灵活，最好的效果是直接自己拼接提示词。我写了一个 <a href="https://gist.github.com/guyskk/25eb1935fd4354e8363a9f856c3afae6">typechat.py</a> 已开源在GitHub Gist上，可以参考使用。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">2023自宅创业年终总结</title>
    <id>/notes/review-2023</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/review-2023"/>
    <updated>2024-02-22T00:00:00+08:00</updated>
    <published>2024-02-22T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>2023年经历了监管风波、产品调整、家庭变故等悲喜交加的事，博客也很久没有更新了，在此做一个总结，新的一年继续创业。</p>

<h2 id="2023年">2023年</h2>

<p>2月底，我的AI产品被监管约谈下线，为满足合规只能用国产AI大模型。当时国产AI大模型还未开放使用，到4月份我把产品改成了AI工具箱，但底层还是ChatGPT，为避免风险所以没有上线推广。</p>

<p>5月至7月我把AI产品的佣金推广功能迁移到了 <a href="https://www.ezboti.com/docs/revenue/">艺爪付费</a> 中，AI产品没有进展。这段时期我的精力也转移到了新房装修、谈婚论嫁这些个人事情上。</p>

<p>8月中旬，我母亲因交通事故意外去世，之后我基本在处理家里的事情。到年底我和女朋友订婚、结婚，家里的事情大部分处理好了，我开始恢复精力投入工作。</p>

<p>这一年发生了太多事情，悲喜交加，对未来有希望，同时也带着遗憾。</p>

<h2 id="创业已三年">创业已三年</h2>

<p>从2021年开始创业，一转眼已经3年了，真是岁月如梭！创业之路不算顺利，没有取得大的成果，只是有了很多和以前不一样的经历。</p>

<p>我现在生活在小城市，没有太大的经济压力，创业和工作相对自由，是一种舒适的生活状态。回想3年前选择离开大城市，我觉得这是正确的选择，让我有时间陪伴父母、照顾家庭，让我有经济条件持续创业。</p>

<p>新的一年我会继续创业，抓住AI大模型的机会，争取早日财务自由。</p>

<p>在此特别感谢所有关注、关心、帮助我的朋友们，感谢大家的支持！<br />
祝愿大家顺顺利利，一起财务自由！</p>

<h2 id="回顾2023年目标">回顾2023年目标</h2>

<p><strong>把 ChatGPT 做成稳定赚钱的产品</strong></p>

<p>基于ChatGPT和国产AI大模型做成了产品，有收入但没有稳定盈利。</p>

<p><strong>产品盈利 5 万元人民币</strong></p>

<p>目标已达成，主要原因是在风口上抓住了机会，前期收益高，目前收益很少，每月收入大约1000元。</p>

<p><strong>控制好作息，每周锻炼 1 次以上，保持高效率</strong></p>

<p>作息比去年更好一些，爬山、散步的次数比去年更多，争取今年做的更好。</p>

<h2 id="2024年目标">2024年目标</h2>

<p>[✔️] 保持AI大方向不变，做用户愿意付费的产品<br />
[✔️] 产品 <strong>月收入</strong> 1 万元人民币<br />
[✔️] 管理好时间：照顾家庭，锻炼身体，高效工作</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #28 我在ChatGPT风口的创业总结</title>
    <id>/notes/onebiz-28</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-28"/>
    <updated>2023-03-07T00:00:00+08:00</updated>
    <published>2023-03-07T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>过去的两个月可以说相当刺激，我在ChatGPT风口上经历了产品的大起大落，在此总结分享我看到和学到的东西。</p>

<h2 id="方向的重要性">方向的重要性</h2>

<p>在好的方向上努力，收获是100倍甚至1000倍，选好方向至关重要，方向不对努力白费。</p>

<p>变化是机会的重要来源，巨大的变化代表着巨大的机会，意外的成功和失败都蕴含着新机会。</p>

<p>用户和需求是产品的生命之源，从需求出发去思考产品，利用所有能用的技术去满足需求，方向基本就对了。</p>

<h2 id="会员分销模式">会员分销模式</h2>

<p>会员订阅付费是很好的盈利模式，用户愿意为好用的产品付费，按月、按年为产品付费后就能长期留住用户，同时获得非常好的现金流。只要产品不断迭代完善，产品价值越来越高，收入就会越来越多，形成正循环。</p>

<p>分销是很好的推广模式，有把用户规模放大的效果。能赚钱是分享传播的巨大推动力，通过收入分成让用户帮你推广，就有源源不断的精准流量。做一级分销即可，多级分销无法体现产品价值，而且有传销的嫌疑。</p>

<h2 id="合伙人原则">合伙人原则</h2>

<p>合伙创业需要确定好合作原则，把可能遇到的问题，坦诚相待提前约定好。下面是我们的原则：</p>

<ol>
  <li>原则：要么一起成功，要么一起失败，不可另立门户。</li>
  <li>退出机制：如果要退出，股份只能由合伙人回购，不允许卖给其他人。</li>
</ol>

<p>资金方面我每个月用 Beancount 记账，账本放在Git仓库共享给合伙人，做到清晰透明。</p>

<p>上周我的前端伙伴因为多方面的原因选择退出了，我们按照约定好聚好散，产品继续正常运转。</p>

<h2 id="看数据做决策">看数据做决策</h2>

<p>用户可能会提很多建议，自己和合伙人会有很多的想法，竞品和各种行业信息也会带来很多启发，从逻辑上、经验上很难判断哪些是更值得做的，很容易走弯路。</p>

<p>从产品数据能清晰的看到用户和需求，能指明最正确方向，答案都在数据里面，是最客观和准确的，做产品一定要认真看数据做决策。</p>

<h2 id="政府监管风险">政府监管风险</h2>

<p>在 2 月 21 日，我被网信办监管部门上门约谈，产品也按要求主动下线了。需要等安全评估通过才能上线，预计一个月之后会有整改意见。</p>

<p>根据多方了解到的信息，主要原因是 ChatGPT 涉及境外数据，这点非常敏感。从大环境来看，中美关系越走越远，互相防备，再加上国内内容审查一直就特别严格，在国内继续用 ChatGPT 的话风险非常大。</p>

<h2 id="小创业者的机会">小创业者的机会</h2>

<p>目前我可以确定 AI 这个方向有巨大的机会，变化、风险、机遇并存。</p>

<p>目前我的判断是两条路，可以都尝试：</p>
<ol>
  <li>用国产的和开源的AI技术，在国内继续做AI应用。</li>
  <li>用ChatGPT的API接口，在境外面向海外用户做AI应用。</li>
</ol>

<p>国内的AI技术比ChatGPT落后一年左右，只要在这个方向上坚持一年，可以抓住更长期的机会。</p>

<h2 id="推荐书籍">推荐书籍</h2>

<ul>
  <li><a href="https://book.douban.com/subject/35218126/">《合伙人原则》</a></li>
  <li><a href="https://book.douban.com/subject/36280996/">《网信部门常用法律法规》</a></li>
</ul>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">2022自宅创业总结，进入创业新阶段</title>
    <id>/notes/review-2022</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/review-2022"/>
    <updated>2023-01-24T00:00:00+08:00</updated>
    <published>2023-01-24T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>距离 <a href="/notes/review-2021">2021自宅创业总结</a> 已过去整整一年，刚好进入了创业新阶段。在这个忙碌的春节对 2022 做一个总结，回顾过去，规划未来。</p>

<h2 id="2022年创业情况">2022年创业情况</h2>

<p>在2022年我是远程兼职上班 + 业余时间创业的状态，做了2个新产品，其中艺爪付费做了8个月，ChatGPT小程序做了2个月，另外有2个月主要在考驾照、接外包项目。之前做的蚁阅RSS和果蔬时节只用了很少的时间维护。</p>

<h3 id="创业收入和支出">创业收入和支出</h3>

<p>收入比去年多一些，主要是外包接单和卖账号这类一次性收入增加了。</p>

<table>
  <thead>
    <tr>
      <th style="text-align: left">创业收入</th>
      <th style="text-align: right">金额（元）</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left">ChatGPT卖账号</td>
      <td style="text-align: right">2711</td>
    </tr>
    <tr>
      <td style="text-align: left">ChatGPT广告</td>
      <td style="text-align: right">约 800</td>
    </tr>
    <tr>
      <td style="text-align: left">蚁阅会员</td>
      <td style="text-align: right">2505</td>
    </tr>
    <tr>
      <td style="text-align: left">艺爪付费</td>
      <td style="text-align: right">0</td>
    </tr>
    <tr>
      <td style="text-align: left">果蔬时节</td>
      <td style="text-align: right">0</td>
    </tr>
    <tr>
      <td style="text-align: left">文章打赏</td>
      <td style="text-align: right">507</td>
    </tr>
    <tr>
      <td style="text-align: left">外包接单</td>
      <td style="text-align: right">5100</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>收入合计</strong></td>
      <td style="text-align: right"><strong>11623</strong></td>
    </tr>
  </tbody>
</table>

<p><br />
支出和去年相当，没有大的变化。</p>

<table>
  <thead>
    <tr>
      <th style="text-align: left">创业支出</th>
      <th style="text-align: right">金额（元）</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left">云计算（含买软件会员）</td>
      <td style="text-align: right">5190</td>
    </tr>
    <tr>
      <td style="text-align: left">产品运营</td>
      <td style="text-align: right">190</td>
    </tr>
    <tr>
      <td style="text-align: left">开办公司（软著、财税）</td>
      <td style="text-align: right">1404</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>支出合计</strong></td>
      <td style="text-align: right"><strong>6784</strong></td>
    </tr>
  </tbody>
</table>

<p>注：数据截止2022年12月31日，工资收入、生活支出等在此略过。
<br /></p>

<h3 id="创业产品总结">创业产品总结</h3>

<p>我投入了约8个月时间在艺爪付费上，做成了一个有价值的产品，但并没有获得直接的收入。艺爪付费目前有100+用户注册，有2个产品接入使用，另外我自己有2个产品接入。它给我最大的回报，是我做新产品时可以快速实现付费功能，降低新产品的开发和维护成本。</p>

<p>最近2个月我做了ChatGPT小程序（超级AI），这是一次意外的成功，也是第一次有了合伙人。ChatGPT小程序目前有5w+注册用户，我们年前刚刚上线了ChatGPT会员版，第一次体验到了赚钱的感觉。进入了创业新阶段，机会和风险并存，看到了希望但还需努力争取。</p>

<p>最重要的是，这一年的经历更新了我对创业的认知。</p>

<p><strong>1. 让自己接触更多机会：</strong>
认识更多的人，去更远的地方，经历更多事情，接触新事物，尝试新想法，给自己创造更多可能性。</p>

<p><strong>2. 从用户和需求出发：</strong>
用户和需求是产品的生命之源，产品只有满足用户需求才能存活，用户愿意付钱（或时间）产品才能赚钱。</p>

<p><strong>3. 掌握生产资料：</strong>
软件产品是信息时代的生产资料，并且可以完全通过自己的双手创造出来，掌握生产资料就等于解放了自己。</p>

<h2 id="回顾2022年目标">回顾2022年目标</h2>

<p><strong>做 3 款新产品，不耗在单个产品上</strong></p>

<p>只完成了2款新产品，有几个产品在想法阶段被自己否定了，直到机缘巧合遇到ChatGPT。我应当更加积极地寻找有用户需求且能赚钱的产品，而不是把过多时间投入在艺爪付费上。</p>

<p><strong>产品盈利 2 万元人民币</strong></p>

<p>远未达标，应当更深刻认识到方向的重要性，把时间投入到能赚钱的产品上。</p>

<p><strong>适当旅行，控制好作息，保持高效率</strong></p>

<p>基本达标，保持了睡眠充足，但锻炼太少了。长时间工作会颈椎和肩膀痛，需要严格落实间歇休息，多喝水，多活动颈椎肩膀。</p>

<h2 id="2023年创业目标">2023年创业目标</h2>

<p>[✔️] 把 ChatGPT 做成稳定赚钱的产品<br />
[✔️] 产品盈利 5 万元人民币<br />
[✔️] 控制好作息，每周锻炼 1 次以上，保持高效率</p>

<h2 id="推荐一些书籍">推荐一些书籍</h2>

<ul>
  <li><a href="https://book.douban.com/subject/4020863/">《创新与企业家精神》</a></li>
  <li><a href="https://github.com/weiyinfu/MaoZeDongAnthology">《矛盾论》和《实践论》</a></li>
  <li><a href="https://book.douban.com/subject/1248483/">《摩根信札》</a></li>
</ul>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #27 蹭热点的ChatGPT小程序</title>
    <id>/notes/onebiz-27</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-27"/>
    <updated>2022-12-15T00:00:00+08:00</updated>
    <published>2022-12-15T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>本期最大的收获是做ChatGPT小程序，上线当天用户量突破1000，我第一次做出这么火爆的产品。</p>

<h2 id="chatgpt小程序">ChatGPT小程序</h2>

<p>故事从12月4日开始，有个之前认识的网友联系我，得知ChatGPT账号非常好卖，<a href="https://openai.com/blog/chatgpt/">ChatGPT</a>是OpenAI最新发布的人工智能对话机器人，效果非常惊艳。</p>

<p>我写程序批量注册，他负责销售，收益分成。我很快写好了程序，注册了一批ChatGPT账号，赚了一点钱。然后发现市场上ChatGPT账号价格越来越低，也很难批量销售出去。</p>

<p>我们想到可以做一个小程序，把ChatGPT的功能做到小程序上，打开就能直接用。我在一个创业群里发了条消息寻求合作，很快找到一个做小程序的伙伴，一起合作开发。我负责后端，他负责小程序，不到3天小程序急速完成上线，上线当天用户量就突破1000，涨势非常好。</p>

<p>我们也做了一些推广，主要是营销的伙伴负责，带来很多的流量，我们还预想着日活过万，然后小程序就被举报封了，我们发布的两个小程序同时被封。举报人和我正好同在一个微信群里，虽然很难过，但还是接受了现实，大家都按丛林法则生存。</p>

<p><img src="/static/2022-12-15/superai-screen-1.jpeg" alt="小程序被封截图" />
<img src="/static/2022-12-15/superai-screen-2.png" alt="小程序举报信息" /></p>

<p>小程序被封之后，我们马上整改去掉违规的内容（群二维码），然后开始申诉。过了一天多，小程序终于恢复了，目前我们在继续迭代改进。附两个小程序码欢迎体验，只是名称不一样，内容完全一样。</p>

<p><img src="/static/2022-12-15/superai-mp-1.jpeg" alt="超级AI小程序" />
<img src="/static/2022-12-15/superai-mp-2.jpeg" alt="ChatGPT智能对话" /></p>

<p>如果你有流量擅长推广，非常欢迎合作！如果需要批量采购ChatGPT账号，也欢迎联系。</p>

<h2 id="艺爪付费">艺爪付费</h2>

<p>果蔬时节APP，在阿里云上申请的APP电子版软著，但还要等半个月才能拿到证书。</p>

<p>艺爪付费增加了支付宝APP支付方式，但还没时间更新文档，会继续完善。</p>

<h2 id="招聘">招聘</h2>

<p>我在BOSS直聘上，尝试了一下招聘一个前端工程师，月薪开的3～5K，岗位放上去一下午收到50+简历。基本都是应届生，面试了几个水平确实不太行，写简单的代码都磕磕绊绊。经验丰富的工资要求又高，我完全负担不起，所以就没有继续招聘了。</p>

<p>我也看到疫情之下，毕业生就业压力非常大，其中一个候选人和我说，工资只要够吃住就可以接受。</p>

<h2 id="看书">看书</h2>

<p>这段时间看了一点创业的书，主要是<a href="https://www.dedao.cn/ebook/detail?id=JblNOdGPBpZdjEgmN4JLq7yaRvKV206PQy31roMz6xYX5QDG8l9bnOeAkey1g25L">《心力》</a>、<a href="https://github.com/weiyinfu/MaoZeDongAnthology">《毛选1》</a>里面的矛盾论、实践论和唯物辩证法。</p>

<p>创业是和一群未知的人，去一个未知的地方，干一件未知的事情。面对充满不确定的未来，只具备解决已知问题的能力显然是不够的。认知深刻，心力强大，创业才能走的更远。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #26 开发果蔬时节APP</title>
    <id>/notes/onebiz-26</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-26"/>
    <updated>2022-11-13T00:00:00+08:00</updated>
    <published>2022-11-13T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<h2 id="果蔬时节app">果蔬时节APP</h2>

<p>果蔬时节是我去年开发的小程序，我打算做成一个APP来体验整个开发、上线的流程，也可以作为艺爪付费的参考案例。果蔬时节基于 <a href="https://zh.uniapp.dcloud.io/">uni-app</a> 开发，用的是跨平台框架，适配成APP比较容易，但第一次尝试也折腾了几天时间。</p>

<p>目前适配了 Android 端，正在尝试上架华为应用商店。有些应用商店上架需要软著，正准备申请。</p>

<p>适配APP遇到的主要问题（都已解决）：</p>
<ol>
  <li>确保样式、组件的兼容性，适配不同的平台。</li>
  <li>增加用户协议和隐私政策，上架必须提供，可以参考别人的改一改。</li>
  <li>打包成安装包，步骤很多以及各种配置比较复杂。</li>
</ol>

<p>下一期计划适配 iOS 端，申请软著以及上架。</p>

<h2 id="mbti性格类型">MBTI性格类型</h2>

<p>我最近半年关注了 MBTI（迈尔斯-布里格斯性格分类法），有时感觉很准有时又觉得不准。最近我特意读了 <a href="https://book.douban.com/subject/3004272/">《天资差异》</a> 这本书，书中第一部分对 MBTI 理论解释的很清晰透彻，后面几部分有些枯燥，如果你也对 MBTI 感兴趣的话，推荐阅读。</p>

<p>据我个人观察和判断，我觉得 MBTI 理论是基本准确的：</p>
<ol>
  <li>《军队院校招收学员体格检查标准》第四十四条 按照《中国MBTI－G人格类型》实施检测，检测判定为ENFP、INTJ、ISTP人格类型，且符合下列情形之一的……不合格。</li>
  <li>在职业偏好、行为习惯、学习成绩等划分的人群中，MBTI 类型有显著的倾向性，例如学霸中 ISTJ 占比很高，多才多艺的 ENFP 占比很高。</li>
</ol>

<p>但是 MBTI 不可偏信，适合作为参考：</p>
<ol>
  <li>性格是内在的特质，只有自己真正了解自己的内心，其他人只能看到表象。</li>
  <li>统计学上显著的倾向性仅仅是倾向性，不是绝对。每个人都是独一无二的，MBTI 只能描述最典型的特点，刻板印象带有较多偏见。</li>
</ol>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #25 驾照到手 &amp; 买车</title>
    <id>/notes/onebiz-25</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-25"/>
    <updated>2022-10-16T00:00:00+08:00</updated>
    <published>2022-10-16T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>本期进展较少，国庆假期也没有投入时间开发产品。主要成果是考到了驾照，然后买了车。</p>

<h2 id="艺爪付费">艺爪付费</h2>

<p>主要做了两个小功能（<a href="https://www.ezfuns.com/changelog/">更新日志</a>），写了一篇文档（<a href="https://www.ezfuns.com/docs/revenue/case-rssant/">案例 - 蚁阅会员付费的实现</a>）。</p>

<ul>
  <li>新增付费界面介绍文案配置。</li>
  <li>新增用户使用兑换码接口，兑换码功能可以单独使用了。</li>
</ul>

<p>下一期时间会更充裕，继续努力更新迭代。</p>

<h2 id="驾照买车">驾照&amp;买车</h2>

<p>国庆节前考完科目三、科目四，拿到了驾照。然后国庆假期看车、买车，前几天办好了所有手续和车牌。车子买的是吉利帝豪S，普通燃油车，落地价差不多10万。</p>

<p>考虑到偶尔会开车跑周边县城，以及逢年过节带家人出行。五菱宏光MiniEV续航不够且空间太小，身边亲人朋友都不建议买。其他长续航电动车、混动车价格偏贵。综合考虑买车+养车成本以及实用性，我选择了买燃油车更稳妥。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #24 继续独立开发艺爪付费</title>
    <id>/notes/onebiz-24</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-24"/>
    <updated>2022-09-18T00:00:00+08:00</updated>
    <published>2022-09-18T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<h2 id="艺爪付费">艺爪付费</h2>

<p>这一期艺爪付费做了一些更新，主要包括：</p>

<ol>
  <li>接入了支付宝标准支付渠道</li>
  <li>后台界面支持手动增减用户余额</li>
  <li>会员数据导入增加执行进度，支持大批量导入</li>
  <li>付费墙和权益增加别名字段，方便API集成</li>
  <li>其他界面和功能上的小改进</li>
</ol>

<p>我也把蚁阅的会员系统迁移到艺爪付费了，大约半天时间实现代码集成，然后花了一些时间测试和验证。后续我准备写一篇文章介绍迁移过程，蚁阅的代码也是开源的，方便用户作为实际案例参考。</p>

<p>上一期我申请了奇绩创坛投资，结果出来了，略有遗憾未能通过。投资人的反馈主要有
【现有替代手段多】、【项目推进速度不够快】。我觉得这个反馈非常准确，也很值得思考。</p>

<p><strong>现有替代手段多</strong></p>

<p>主要的替代手段，一个是自建会员系统、自己对接支付渠道，另一个是直接用APP应用商店SDK实现内购。</p>

<p>我尝试回答【为什么选择我】这个问题，这也是产品的迭代方向：</p>

<ol>
  <li>成本：降低开发成本，让开发者只需几个小时，就能实现完整的会员付费功能。产品要非常容易集成，对开发者友好，提供保姆级教程和开源案例。</li>
  <li>实用：全平台统一，处理好平台差异和各种边界情况。提供完善的后台管理、数据报表、团队协作功能。支持国内市场和海外市场，提供国际化和本地化方案。</li>
  <li>信任：数据安全，做到金融级安全保障。做好系统设计，保障长期稳定运行。持续改进，积累良好口碑。</li>
</ol>

<p><strong>项目推进速度不够快</strong></p>

<p>这几个月由于各种事情，我在艺爪付费上投入的时间确实不多。</p>

<p>原本计划今年开发3个新项目，但时间不太够用。我打算只做一个全平台的简单APP，体验一下开发APP上架应用商店，也可以作为艺爪付费的参考案例。</p>

<p>我感觉艺爪付费离盈利还有些远，但这个产品确实有价值，我会继续独立开发，有机会的话会考虑招募兼职小伙伴。</p>

<h2 id="其他">其他</h2>

<ol>
  <li>科目三挂了，可能是太紧张导致严重失误。</li>
  <li>中秋前几天本地疫情，封控10多天了，等解封后继续考科目三。</li>
  <li>外包项目完成，款项也收到了。</li>
</ol>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #23 考驾照、忙碌的一个月</title>
    <id>/notes/onebiz-23</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-23"/>
    <updated>2022-08-18T00:00:00+08:00</updated>
    <published>2022-08-18T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>这一期比较忙碌，花了很多时间在考驾照上，艺爪付费在继续完善。</p>

<h2 id="考驾照">考驾照</h2>

<p>这段时间经常天亮出发去练车，趁早晨比较凉快，练一个小时车。上周考过了科目二，顺利的话预计9月初拿驾驶证。</p>

<p>随手拍的日出，偶然发现的风景。</p>

<p><img src="/static/2022-08-18/sunrise.jpg" alt="乡间日出" /></p>

<h2 id="艺爪付费">艺爪付费</h2>

<p>艺爪付费主要修复了一些小问题，正在接入支付宝标准支付渠道，投入时间不多。</p>

<p>还有一件事情，有网友推荐我申请 <a href="https://www.miracleplus.com/">奇绩创坛</a> 天使投资。我看了一下申请方式，非常务实，只需要填写申请表（有很多值得思考的问题），不需要商业计划书和PPT。</p>

<p>因此我就试着申请了，预计8月底会有结果，无论通过与否对我来说都是好消息。如果很幸运通过了，那我可以组建小团队专注这个方向，创业旅程会更精彩。如果没有通过，说明方向不够好或者市场不够大，竞争会更小，继续独立开发更适合。</p>

<h2 id="接私活项目">接私活项目</h2>

<p>机缘巧合，一个蚁阅的老用户联系我，希望我帮他做个网站。对方是产品经理出身，对要做的东西想的比较清楚，我感觉项目不是很复杂，谈妥之后就签合同接下来了，每周花一天时间做。</p>

<p>虽然过程中需求/方案还是有些调整，但需求比较明确，有原型图和需求文档，不至于出大问题。主要的影响是我自己的时间不太够用了，这段时间都特别忙碌。</p>

<p>认识更多的人，让更多人认识自己，给他人提供价值，机会随之而来。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #22 艺爪付费迭代 &amp; 重回赣州</title>
    <id>/notes/onebiz-22</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-22"/>
    <updated>2022-07-10T00:00:00+08:00</updated>
    <published>2022-07-10T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<h2 id="艺爪付费"><a href="https://www.ezfuns.com/">艺爪付费</a></h2>

<p>这一期艺爪付费迭代更新了很多功能，并且有了一个成功案例 <a href="https://jimeiapp.zhangbingdev.com/">集美美图App</a>。集美美图的作者也是独立开发者，这个App做的非常漂亮，很有设计感，值得学习，推荐大家体验！</p>

<p><a href="https://jimeiapp.zhangbingdev.com/" target="_blank" style="border-bottom:none;"><img src="/static/2022-07-10/jimeiapp.png" alt="集美美图App" /></a></p>

<p>这段时间我认识了很多有趣的网友，有创业成功的前辈，有正在创业或独立开发的朋友，也有很多准备做独立开发的朋友。独立开发是比较孤独的，但一路上遇到很多同路人，互相交流，便不觉得孤独了。</p>

<p>接下来我会继续完善艺爪付费，主要包括：</p>

<ol>
  <li>适配更多支付渠道，优化支付体验</li>
  <li>支持配置界面内容文案，优化界面展示</li>
  <li>完善系统现有的功能，提高易用性和安全性</li>
  <li>研究增加礼品卡功能（发卡工具）</li>
  <li>研究无需账号系统、无需代码的集成方式</li>
</ol>

<p>继续努力吧！</p>

<h2 id="重回赣州">重回赣州</h2>

<p>在外面折腾几个月后，我在6月底重回老家赣州了。</p>

<h3 id="离开一线城市">离开一线城市</h3>

<p>决定离开一线城市之前，我和几个在一线定居的朋友聊了一下。</p>

<p>在一线城市定居，房子是最大的问题。按现在的房价，一套房大概要500万，首付120万，掏空6个钱包，背30年房贷，每年还贷30万。在一线城市周边定居的话，房子勉强买得起，但要么工作通勤时间极长，要么过候鸟生活。</p>

<p>以我目前的经济条件，压力巨大，在一线城市也没有归属感，所以彻底放弃在一线城市定居的想法了。</p>

<h3 id="赣州怎么样">赣州怎么样</h3>

<p>房子方面，赣州一套房不到100万，有几年一线工作的积蓄买房压力很小。我在2021年上半年买了一套，今年年底交房，房子问题算是已经解决了。</p>

<p>工作方面，赣州主要是加工制造业，软件相关的工作比较少，招聘网站上普遍工资8k-10k，够养家糊口。但互联网职业很适合远程，我可以给一线城市的企业远程工作，哪怕工资缩水一半，也不会低于10k。</p>

<p>经济上无压力，在家上班，有时间做自己喜欢的事情（比如独立开发），躺平很舒服。</p>

<h3 id="未来的打算">未来的打算</h3>

<p>首先是婚姻问题，有点感慨造化弄人，我也在相亲了，看缘分吧。之后打算是成家立业，结婚生子，过上平凡的生活。</p>

<p>工作上会保持一边远程兼职、一边独立开发的状态，可能会持续3～5年。等自己的产品赚钱了，再转成全职独立开发。</p>

<p>近期正在考驾照，刚报名了驾校，然后打算买个车子，可能会买五菱宏光MiniEV。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #21 新产品艺爪付费上线内测</title>
    <id>/notes/onebiz-21</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-21"/>
    <updated>2022-06-11T00:00:00+08:00</updated>
    <published>2022-06-11T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>这一期主要在做 <a href="https://www.ezfuns.com/">艺爪付费</a> (EZRevenue) 这个产品，终于上线内测了。</p>

<h2 id="艺爪付费">艺爪付费</h2>

<p>艺爪付费 <a href="https://www.ezfuns.com/">https://www.ezfuns.com/</a><br />
<strong>为网站App提供会员、订阅、内购付费功能</strong></p>

<p>这个服务适用于网站或App通过增值付费盈利的场景，适合于个人开发者、小团队、初创企业以及中小型企业，计划中支持中国+海外市场。</p>

<ol>
  <li>支持订阅制、买断制、积分道具等多种付费模式，支持兑换码，简单配置即可上线使用。</li>
  <li>支持微信支付、支付宝、收款码、比特币、PayPal等多种支付渠道，个人开发者也能收款。</li>
  <li>累计收款100万元内免费，超出后按1%收取服务费。</li>
</ol>

<p>欢迎感兴趣的朋友试用和反馈，也可以 <a href="https://www.ezfuns.com/contact/">联系我</a> 加入内测交流群。</p>

<h3 id="技术架构">技术架构</h3>

<ol>
  <li>数据存储：腾讯云的 MySQL 服务，对象存储</li>
  <li>后端API：基于 Python，用了 Falcon、SQLAlchemy 框架</li>
  <li>服务器：通过腾讯云的云函数容器镜像部署</li>
  <li>前端界面：基于 Vue，用了 Vuetify 框架</li>
  <li>主站和文档：使用 Docusaurus 生成静态网站</li>
  <li>静态资源：通过腾讯云的对象存储，API网关，CDN 部署</li>
</ol>

<p><strong>整个项目时间投入：</strong></p>

<ol>
  <li>调研、思考、业务建模、后端代码开发，大约2/3时间</li>
  <li>界面设计、前端代码开发，大约1/3时间</li>
</ol>

<p><strong>一些感想：</strong></p>

<ol>
  <li>完全使用云服务非常高效，省时间、很便宜、很稳定。</li>
  <li>用成熟稳定、有点老但有维护的框架，开发效率最高。</li>
  <li>代码只要设计上、方向上没有问题，就不要纠结细节，面向业务一把梭更有效率。</li>
</ol>

<h2 id="其他">其他</h2>

<p>这个月我跑到惠州来了，会在这边待几个月，深圳/惠州/广州附近的朋友，可以约面基呀。</p>

<p>对了，推荐一个有意思的UP主 <a href="https://space.bilibili.com/517346060/">轻徙鸟 - 自由职业者的租房旅行计划</a>，也是一个朋友推荐给我的。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #20 付费订阅后端完成 &amp; 商标注册</title>
    <id>/notes/onebiz-20</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-20"/>
    <updated>2022-05-07T00:00:00+08:00</updated>
    <published>2022-05-07T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>这一期继续在做付费订阅服务，后端基本完成，下一步是做前端界面，进度比预期慢了一些。顺便分享一下商标注册的事情。</p>

<h2 id="ezrevenue">EZRevenue</h2>

<p>接着上一期梳理完业务逻辑，然后是持续写代码。写了一半感觉业务模型还有点不对，我决定再做一轮调研。调研主要分析了 50+ 网站和 App 的充值页面，思考我的业务模型能不能满足这些场景。也看完了 <a href="https://www.priceintelligently.com/developing-your-saas-pricing-strategy">SaaS Pricing Strategy</a> 这本书，对理论和实践都很有帮助。</p>

<p>调研后调整了部分业务模型，业务模型是超前设计，大概能满足95%的场景，有些大企业的 SaaS 定价过于复杂，很难满足。实现上先做比较简单的场景，简化实现，满足独立开发者和初创企业的需求。</p>

<p>写代码的过程中，我感觉单元测试非常有用，一方面确保自己不会把好代码改坏，另一方面测试失败了能快速定位问题，用 Python 这种动态语言也不会「重构火葬场」。跑一遍测试全过，就可以专心做下一个任务了。</p>

<p>后端部分告一段落，接下来做前端界面，争取快点上线。</p>

<p><strong>关于产品名称</strong></p>

<p>产品的中文名称我还没确定，其中 <strong>EZ</strong> 等于 <strong>艺爪</strong>（商标），后面还需要一个词。</p>

<p>主题：为网站和App提供会员、订阅、付费功能的服务。</p>

<p>我想到的有这些名称：</p>

<ol>
  <li>艺爪付费：订阅付费，从消费者的角度可以叫做付费。</li>
  <li>艺爪收费：从开发者/商户的角度就是收费，开发者是我的直接用户。</li>
  <li>艺爪收款：同上，但这个名字感觉像聚合支付服务。</li>
  <li>艺爪小店：有点像一个软件商店，但不是应用商店平台，而是方便开发者在产品里卖会员和增值服务。</li>
</ol>

<p>我也比较纠结，不知道哪个比较好，<strong>有什么建议吗？</strong>投票也行。</p>

<p>或是从 SEO 的角度，<strong>假如你想找一个这样的服务，你会搜索哪些关键词？</strong>欢迎博客留言。</p>

<h2 id="商标注册">商标注册</h2>

<p>我在去年 10 月份提交的商标注册，前段时间刚注册成功，拿到了商标证书。</p>

<p><img src="/static/2022-05-07/trademark-regestion.jpg" alt="商标注册" /></p>

<p>共注册了 5 个商标，其中 4 个注册成功，1 个被部分驳回，目前还在公告期。流程时间线：</p>

<ul>
  <li>2021-10-13 腾讯云下单</li>
  <li>2021-10-14 提交给商标局，商标申报</li>
  <li>2021-11-05 通过形式审查，商标局下发受理通知</li>
  <li>2021-12-23 通过实质审查并进入公告期</li>
  <li>2022-04-14 通过商标审查，商标局下发注册证书（电子版PDF）</li>
</ul>

<p>各大云平台都有商标注册服务，我是在腾讯云申请的商标注册，选择快速注册即可。每个商标大类 320 元，大类里面可以选 10 个小类，超过 10 个要加钱。</p>

<h4 id="商标的用途">商标的用途</h4>

<p>简单来说，商标可以用于各种需要展示名称的场景，例如App名称，网站名称，公众号名称，店铺名称，广告标题等等。</p>

<p>用途1: 解决了产品起名问题，商标名可以放心使用，不用担心侵犯别人的商标。</p>

<p>用途2: 防止竞品用类似名称做推广/蹭流量，只要发现了就可以投诉让对方下架，严重的可以起诉。</p>

<p>用途3: 有些平台需要审核产品名称，商标注册证书可以作为依据，方便产品上架。</p>

<h4 id="商标名称检索">商标名称检索</h4>

<p>商标有很多个大类，在同一个大类里面，商标名称不能和已注册的商标近似，否则容易被驳回。</p>

<p>提交注册的时候，建议每个大类单独提交一个，不要混着提交，这样一个类别被驳回的不会影响其他类别，通过率更高。</p>

<ul>
  <li><a href="https://tm.aliyun.com/">阿里云商标查询 https://tm.aliyun.com/</a></li>
  <li><a href="https://tm.cloud.tencent.com/">腾讯云商标查询 https://tm.cloud.tencent.com/</a></li>
  <li><a href="http://wcjs.sbj.cnipa.gov.cn/">商标局官方查询 http://wcjs.sbj.cnipa.gov.cn/</a></li>
</ul>

<p>建议提交注册之前，在商标局官方查询检索一遍，这里的结果最准确。</p>

<h4 id="商标类别怎么选">商标类别怎么选</h4>

<p>和互联网密切相关的大类主要有：35类-广告贸易，9类-电子电脑，38类-通讯传媒，42类-技术服务。35类-广告贸易属于万能类型，商业行为基本都带广告属性，建议注册。9类-电子电脑可以保护软件产品，例如App，建议注册。</p>

<p>每个大类里面可以选 10 个小类，小类里面还有很多小项，建议防御性注册选择尽可能多的小类，小类里面的小项选一个即可。这样他人不能在这些小类上申请与该商标相同或近似的商标，实现一部分保护的目的。</p>

<p>具体操作上，可以查询别人商标的做法，例如可以查询：<code class="language-plaintext highlighter-rouge">拼夕夕</code>、<code class="language-plaintext highlighter-rouge">阿里爷爷</code>、<code class="language-plaintext highlighter-rouge">微信豆</code>，这些都是防御性注册的商标，可以参考他们选择的小类。</p>

<h4 id="商标被部分驳回">商标被部分驳回</h4>

<p>商标被部分驳回的情况，基本是和已注册的商标近似了，可以默认不处理，这样商标局会给通过的部分发注册证书。如果还是想要注册下来的话（并且不差钱），可以联系商标注册的公司或顾问试一试复审。</p>

<p>因为我也有一个商标被部分驳回了，就发现好几个商标注册的人打电话、加我微信，问我要不要申请商标复审。我没有申请复审，没有必要，还很贵。</p>

<p>另外推荐阅读 <a href="https://mp.weixin.qq.com/s/VM4Vl16ejyePz7zyycPn3Q">少年老陈 - 聊聊商标注册的那些坑</a>，防坑防骗防套路。</p>

<p>以上是我注册商标的经验总结，建议仅供参考，如有错误欢迎指正！</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #19 继续开发，为网站App提供付费订阅</title>
    <id>/notes/onebiz-19</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-19"/>
    <updated>2022-04-09T00:00:00+08:00</updated>
    <published>2022-04-09T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>这一期主要在做新产品开发，没有太多分享的内容。</p>

<h2 id="ezrevenue---开发中">EZRevenue - 开发中</h2>

<p>一个为网站和App提供会员、订阅、付费功能的服务。</p>

<p><strong>梳理业务逻辑</strong></p>

<p>为了理清应用内购(IAP)系统的逻辑，我研究了 Apple AppStore 后台系统，花了 99 美元注册 Apple 开发者会员（争取赚回来！）。同时也研究了华为应用商店的内购系统，发现和 Apple AppStore 基本一致。</p>

<p>调研期间发现一个专门研究定价的网站，上面有本电子书 <a href="https://www.priceintelligently.com/developing-your-saas-pricing-strategy">SaaS Pricing Strategy</a> 值得一读。</p>

<p><strong>代码开发</strong></p>

<p>主要做了数据建模，后端接口开发。</p>

<h2 id="ezauth---已完成">EZAuth - 已完成</h2>

<p>类似 Auth0 和 Authing 的用户鉴权服务，只做了最基本的功能（够用）。复用了很多蚁阅账号系统的代码，进展顺利，已完成上线。</p>

<h2 id="一些想法">一些想法</h2>

<p>充分的调研可以解决很多问题，少走很多弯路。</p>

<p>软件库升级是很消耗时间的工作，除非确实能显著提高开发效率，否则不要折腾。稍微旧一些，长期维护的项目更具有生产力。</p>

<p>软件产品定价有越来越贵的趋势，从永久买断模式变成订阅模式，再变成按席位订阅模式（按人头x时间付费）。价格定多少取决于给用户提供的价值有多少，产品价值会随着使用时长增加而增加，随着使用人数增加而增加，这样的定价模式就能给企业带来更多利润。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #18 开始新产品，为网站App提供付费订阅</title>
    <id>/notes/onebiz-18</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-18"/>
    <updated>2022-03-11T00:00:00+08:00</updated>
    <published>2022-03-11T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>春节已过去一个月，向着 2022 年目标，重新出发。</p>

<h2 id="开始新产品">开始新产品</h2>

<p>新产品是一个为网站和App提供会员、订阅、付费功能的服务，会集成多种支付渠道，只需几行代码就能让你的网站和App支持付费订阅。对标产品是国外的 <a href="https://www.revenuecat.com/">RevenueCat</a>。</p>

<p>这个产品的想法已经酝酿了一年多，考虑到面向开发者的产品太难赚钱，所以没有很快着手去做。在和很多开发者交流过程中，我感觉到大家需要这样的服务，所以应该有足够价值、值得做，能赚点零花钱也好。</p>

<p>目前我调研的情况是，国外有两个 RevenueCat 的竞品，但国内没有发现类似产品（欢迎提供线索）。有些关联但并不相同的是内容（知识）付费平台，例如：Patreon、面包多、爱发电等。</p>

<p>这个产品的前身是蚁阅的会员功能，我会把它做成支持多租户，功能相对完善，开箱即用的服务。</p>

<p>这一期主要做了：</p>
<ol>
  <li>集成微信支付渠道，把果蔬时节的支付代码迁移了过来。</li>
  <li>重构代码，部署方式改成腾讯云-云函数（内部项目: ezfaas）。</li>
  <li>统一的用户鉴权服务（SSO登录），正在开发（内部项目: ezauth）。</li>
</ol>

<p>新产品正在开发，可能还需要 2 - 3 个月上线，敬请期待。</p>

<h2 id="云函数部署">云函数部署</h2>

<p>我的所有新产品都会首先考虑云函数部署，按量付费、免运维、低成本、弹性扩容这些特点非常适合做创业项目，全是优点。以下是我整理的完整部署方式。</p>

<p>网站通常包含后端服务，数据库，前端静态文件。数据库直接买云厂商提供的。</p>

<h3 id="后端服务">后端服务</h3>

<p>后端服务通过「云函数」部署，采用容器镜像部署方式，不建议用内置的各类编程语言模板。</p>

<ol>
  <li>通过 Dockerfile 和 multi-stage build 制作很小的镜像，通常不超过 100M，推送到云厂商的镜像仓库。</li>
  <li>创建云函数，选择容器镜像部署，用环境变量做程序配置。</li>
  <li>写一个部署脚本，一键打包和更新部署镜像。</li>
</ol>

<h3 id="前端静态文件">前端静态文件</h3>

<p>前端静态文件通过「对象存储」部署。</p>

<ol>
  <li>对象存储创建空间（Bucket），开启静态网站服务。</li>
  <li>通过命令行工具，将打包好的静态文件上传到对象存储。</li>
  <li>写一个部署脚本，一键打包和上传文件。</li>
</ol>

<h3 id="网关和cdn">网关和CDN</h3>

<p>前后端部署之后，再通过「API网关」，将不同路径的请求转发到前端和后端。网关会有一个默认的 HTTPS 访问地址。</p>

<p>添加 CDN（全站加速/动静加速）域名，源站为 API 网关地址，配置 DNS CNAME 解析到 CDN 地址，此处配置好静态文件缓存规则。</p>

<p>再生成免费的HTTPS证书，云厂商都有提供，配置到 CDN 域名上，实现全站 HTTPS 访问。</p>

<h3 id="网站监控">网站监控</h3>

<p>最后可以部署 <a href="https://github.com/TwiN/gatus">Gatus</a> 服务（健康监控），配置每隔几分钟请求一次后端服务。这样可以使云函数保持活跃状态，减少冷启动时间，同时也可以监控异常情况。</p>

<h2 id="用户鉴权服务">用户鉴权服务</h2>

<p>用户鉴权服务类似 Auth0 和 Authing，我想把我所有产品的用户模块都统一起来，毕竟每个产品都写一套登录注册就太麻烦了。但这类核心服务我不想依赖第三方，需要自己完全可控，更放心也更省钱。也不能靠自己开发，时间成本太高。</p>

<p>所以我调研了一些开源的替代品，最后选择基于 <a href="https://github.com/jazzband/django-oauth-toolkit">Django OAuth Toolkit</a> 定制开发。</p>

<blockquote>
  <p>Django插件，最灵活<br />
https://github.com/jazzband/django-oauth-toolkit</p>

  <p>Django + 中文 LGPL<br />
https://github.com/longguikeji/arkid</p>

  <p>Java 老牌项目<br />
https://github.com/keycloak/keycloak</p>

  <p>golang<br />
https://github.com/tarent/loginsrv</p>

  <p>golang + 中文<br />
https://github.com/casdoor/casdoor</p>

  <p>golang 功能较多<br />
https://github.com/ory/kratos</p>
</blockquote>

<p>选择 Django 插件主要原因是我很熟悉 Python，使用最灵活，方便按需修改，其他选项供参考。</p>

<h2 id="我到了新城市">我到了新城市</h2>

<p>最近两周天气转暖，我来到了福建的一个小城市，租了一间小房子住。生活更简单，日常琐事更少了，最大的变化是大幅减少了吃饭时间。</p>

<p>我现在早餐吃包子鸡蛋，午饭和晚饭都吃 <a href="https://www.ruffood.com/index/powder.html">若饭</a>，用 Blender bottle 不锈钢摇摇杯，非常好清洗，5分钟吃完一顿饭，每天大约能节省 2 小时。</p>

<p>除了节省时间，调配好的代餐其实营养更均衡，没有辛辣油腻和过多糖分。但是和父母在一起时，没法这样吃，老一辈的观念接受不了。</p>

<p>升降桌和工学椅也配好了，生产力拉满。周边环境还不错，时常散散步，劳逸结合。</p>

<p><img alt="出租房" src="/static/2022-03-11/house.jpeg" width="35%" />
<img alt="工作台" src="/static/2022-03-11/desktop.jpeg" width="62%" /></p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">2021自宅创业10个月总结，我会再次挑战</title>
    <id>/notes/review-2021</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/review-2021"/>
    <updated>2022-01-28T00:00:00+08:00</updated>
    <published>2022-01-28T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>在 2021 年 04 月，我 <a href="./2021-04-09-onebiz-begin.md">开始了自宅创业</a>，转眼间春节将至，自宅创业已经 10 个月，是时候对 2021 做一个总结了。回顾一下我当初立的目标，做的产品，生活和收入情况，以及来年的打算。</p>

<h2 id="收入和支出情况">收入和支出情况</h2>

<p>统计时间范围：2021-04-09 至 2022-01-26</p>

<table>
  <thead>
    <tr>
      <th>被动收入</th>
      <th style="text-align: right">金额（元）</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>理财收益</td>
      <td style="text-align: right">4595</td>
    </tr>
    <tr>
      <td>蚁阅会员收入</td>
      <td style="text-align: right">1455</td>
    </tr>
    <tr>
      <td>果蔬时节收入</td>
      <td style="text-align: right">1612</td>
    </tr>
    <tr>
      <td>文章打赏</td>
      <td style="text-align: right">60</td>
    </tr>
    <tr>
      <td><strong>收入合计</strong></td>
      <td style="text-align: right"><strong>7722</strong></td>
    </tr>
  </tbody>
</table>

<p>注：兼职等其他收入不太方便公开，所以在此略过。
<br />
<br /></p>

<table>
  <thead>
    <tr>
      <th>主要支出</th>
      <th style="text-align: right">金额（元）</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>五险一金（约1400元/月）</td>
      <td style="text-align: right">13309</td>
    </tr>
    <tr>
      <td>设备（含置换Macbook Air）</td>
      <td style="text-align: right">8340</td>
    </tr>
    <tr>
      <td>买水果（含自吃和进货）</td>
      <td style="text-align: right">5316</td>
    </tr>
    <tr>
      <td>云计算（含3-5年预付费）</td>
      <td style="text-align: right">4690</td>
    </tr>
    <tr>
      <td>开办公司 (含商标注册1600元）</td>
      <td style="text-align: right">2846</td>
    </tr>
    <tr>
      <td>学习（买书，咨询等）</td>
      <td style="text-align: right">1339</td>
    </tr>
    <tr>
      <td>饮食</td>
      <td style="text-align: right">1109</td>
    </tr>
    <tr>
      <td>交通（打车）</td>
      <td style="text-align: right">675</td>
    </tr>
    <tr>
      <td>充话费</td>
      <td style="text-align: right">662</td>
    </tr>
    <tr>
      <td>衣服、理发</td>
      <td style="text-align: right">349</td>
    </tr>
    <tr>
      <td>产品运营（发红包等）</td>
      <td style="text-align: right">342</td>
    </tr>
    <tr>
      <td>医疗</td>
      <td style="text-align: right">265</td>
    </tr>
    <tr>
      <td>购物</td>
      <td style="text-align: right">260</td>
    </tr>
    <tr>
      <td>娱乐</td>
      <td style="text-align: right">76</td>
    </tr>
    <tr>
      <td><strong>支出合计</strong></td>
      <td style="text-align: right"><strong>39578</strong></td>
    </tr>
  </tbody>
</table>

<p>待在老家不需要房租和伙食费，但支出加起来还是超过了3万块，比我预期的多一些。</p>

<p>很低的生活成本，再加上有部分兼职收入，所以我的现金流是正的，不用担心钱用光了。</p>

<h2 id="回顾2021年目标">回顾2021年目标</h2>

<p><strong>做 2～3 款产品并盈利，年收入 3 万元人民币</strong></p>

<p>比较遗憾，2021年只做了「果蔬时节」这一款产品，再加上维护「蚁阅」。果蔬时节没有盈利（还亏了一些），蚁阅基本收支平衡。</p>

<p>如果只算被动收入的话，离目标还差很远，算上兼职收入则有 3 万元。</p>

<p><strong>学习，读书，听书，保持高效</strong></p>

<p>今年读书不多，只有两本，基本是听完的：</p>

<ul>
  <li>《采购与供应链管理》</li>
  <li>《三体1》</li>
</ul>

<p>还有很多书躺在书架上（电纸书），但没有时间看。</p>

<p>技术方面，不太关注新技术，主要用自己熟悉、“无趣”、稳定的框架和工具。用 Go 写了命令行工具，虽然写起来很生疏但还是很快实现了功能，以后跨平台的命令行工具会首先考虑用 Go 实现。</p>

<p>我也在完善自己的软件”基础设施”，把常用的工具用的更顺手，提高业务开发的效率。</p>

<p><strong>保持身体健康，体重增加到 110 斤</strong></p>

<p>夏天秋天偶尔会跑步+散步，稍微锻炼一下身体，天气变冷之后就没有再锻炼过。今年体重从 100 斤增加到了 122 斤，超额完成目标（主要是吃的好:），现在要适当控制饮食了。</p>

<p>有些时候很有激情，还是会写代码写的很晚，然后身体状况就会不太好，需要彻底停下来休息，没能做到劳逸结合。我的视力也下降了一些。</p>

<h2 id="继续独立开发">继续独立开发</h2>

<p>我喜欢这 10 个月的生活状态，时间相对比较自由，可以做自己喜欢的事情，可以睡到自然醒。老家环境很舒适，有蓝天白云、青山、绿树、虫鸣鸟叫，清新的空气。不过生活也不是完美的，这里夏天太热、冬天太冷，热天蚊虫特别多。</p>

<p>这 10 个月的经历，让我想清楚、看清楚了未来方向，明白了自己想要什么，知道自己要做什么，以及不做什么。我也认识了很多同路人，有和我一样正在艰难前行的，也有少数已经成功的，就像旗帜一样指引着方向。</p>

<p><strong>放弃丰厚的工资，做产品收入这么少，值得吗？</strong></p>

<p>能够产生被动收入的软件产品，可以理解为信息时代的「印钞机」，并且可以完全通过自己的双手创造出来，虽然创造的过程很艰难，也不一定每个人都能成功。如果把被动收入算作存款利息的话，被动收入相当于 20 倍的存款（假设5%利率）。</p>

<blockquote>
  <p>由于资本家垄断了生产资料，劳动者无法独立地进行生产，故只能出售自身劳动力，供资本家剥削。</p>
</blockquote>

<p>从资本论的角度理解，软件产品就是信息时代的生产资料，掌握生产资料就等于解放了自己。</p>

<p>所以我觉得，<strong>我会一辈子做独立开发，直到财富自由</strong>。</p>

<blockquote>
  <p>This is how I want to live the rest of my life.<br />
— <a href="https://mtlynch.io/solo-developer-year-1/#i-want-to-do-this-forever">Michael Lynch</a></p>
</blockquote>

<p>新的一年我应该会换个小城市生活，生活成本会更高但在承受范围内，也顺便旅行放松心情。</p>

<h2 id="2022年目标">2022年目标</h2>

<p>[✔️] 做 3 款新产品，不耗在单个产品上<br />
[✔️] 产品 <strong>盈利</strong> 2 万元人民币<br />
[✔️] 适当旅行，控制好作息，保持高效率</p>

<p>截止日期 2022 年除夕。</p>

<p>新产品已经有了大致想法，即将着手开发。对于盈利说实话我没有太大把握，我会专注于对用户有足够价值的方向，如果没什么人用（留存率太低），那就马上换方向。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #17 代码重构，以及蚁阅的更新</title>
    <id>/notes/onebiz-17</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-17"/>
    <updated>2022-01-13T00:00:00+08:00</updated>
    <published>2022-01-13T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>感觉时间过的飞快，先记录一下这个月的事情，年终总结要等过年前更新了。</p>

<h2 id="代码重构">代码重构</h2>

<p>这个月前期主要在做代码重构，提高项目的开发效率。</p>

<p>首先是开源了 <a href="https://github.com/guyskk/hami-vuex">Hami-Vuex</a> 这个库，我也将蚁阅和果蔬时节两个项目的前端状态管理换成了 Hami-Vuex。重构之后代码更加模块化了，代码提示也非常友好，可以参考 <a href="https://gitee.com/anyant/rssant-web/pulls/11/commits">PR#11</a>。</p>

<p>其实很早在蚁阅的前端代码中就有部分模块化的尝试，但写法算不上优雅，在果蔬时节中把这个尝试继续完善，最终抽象成了一个完整的库。</p>

<p>另一个重构是把果蔬时节的小程序端和后台管理界面代码拆分，原本是写在一起，类似这样：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>src/
    pages/
        admin/
            xxx.vue
        app/
            xxx.vue
    store/
        admin/
            xxx.js
        app/
            xxx.js
package.json
</code></pre></div></div>

<p>当初用了很取巧的办法（条件编译）在一套代码里运行不同的界面。为了方便修改和部署，决定拆分成两个独立的目录，可以分别打包部署：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>admin/
    src/
        pages/
        store/
    package.json

app/
    src/
        pages/
        store/
    package.json

shared/
    components/
    package.json
</code></pre></div></div>

<p>其中有部分代码需要复用，放在 <code class="language-plaintext highlighter-rouge">shared/</code> 目录中。为了复用代码，尝试了 Monorepo 的模式，例如 yarn workspace, pnpm workspace, npm link，踩了一堆坑。最后发现解决办法是修改一个不起眼的 <a href="https://github.com/dcloudio/uni-app/issues/2987#issuecomment-1008034418">Webpack配置</a>，这样文件软链接（符号链接）才能正常使用。</p>

<h2 id="蚁阅图片代理更新">蚁阅图片代理更新</h2>

<p>在12月底的一个下午，连续收到阿里云的几条告警短信，当时我被吓到了。</p>

<p><img src="/static/2022-01-13/rssant-cdn-alert.jpeg" alt="CDN告警短信" /></p>

<p>检查了一下违规URL发现都是色图，阿里云检测到之后主动屏蔽了。幸好只是屏蔽了几个URL，没有直接屏蔽我的主域名，收到短信我马上就去把蚁阅图片代理功能关闭了。</p>

<p>估计是有用户订阅了奇奇怪怪的网站，然后图片被缓存到了阿里云CDN上，被阿里云的鉴黄程序扫描到了。为了更彻底的解决这个问题，必须把图片代理功能和主站隔离，这样万一图片域名被屏蔽也不会影响蚁阅其他功能。</p>

<p>具体做法是把图片代理功能单独部署在阿里云-云函数上，用独立子域名，所有图片请求不经过CDN和缓存，另外图片代理链接设置30分钟有效期，避免被分享传播。目前蚁阅图片代理已经更新好了，功能也已经恢复了。</p>

<h2 id="蚁阅的经营情况">蚁阅的经营情况</h2>

<p>访问量统计，基于自建的 <a href="https://github.com/plausible/analytics">Plausible</a> 服务，每天大约是 200 个活跃用户。</p>

<p><img src="/static/2022-01-13/rssant-analytics.jpg" alt="蚁阅2021年访问量" /></p>

<p>收入统计，基于 <a href="https://github.com/beancount/beancount">Beancount</a>（<a href="https://byvoid.com/zhs/blog/beancount-bookkeeping-1/">介绍</a>），蚁阅 2021 全年收入是 1905 元，大致可以负担服务器开支。</p>

<p><img src="/static/2022-01-13/rssant-revenue.jpg" alt="蚁阅2021年收入" /></p>

<p>对于蚁阅这个产品，我希望保持小众，稳定运行下去，但不太会加新功能了。等其他产品赚到钱了，再考虑把蚁阅做大，目前蚁阅做的越大风险越大。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">Hami-Vuex开源了，哈密瓜味的Vuex！</title>
    <id>/notes/open-source-hami-vuex</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/open-source-hami-vuex"/>
    <updated>2021-12-18T00:00:00+08:00</updated>
    <published>2021-12-18T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>Hami-Vuex 是一个 Vue 状态管理的库，基于 Vuex 实现，提供了更「香甜」的使用方式，所以叫做哈密瓜味的 Vuex！</p>

<h3 id="主要特点">主要特点：</h3>

<ul>
  <li>基于 Vuex 构建，可与 Vuex 3 &amp; 4 兼容和混合使用</li>
  <li>兼容 Vue 2 和 Vue 3，低学习成本，无迁移压力</li>
  <li>易于编写模块化的业务代码，Store 文件不再臃肿</li>
  <li>完全的 TypeScript 支持，代码提示很友好</li>
  <li>类似 Pinia 的用法（可能还更简单）</li>
  <li>单元测试 Line Coverage: 100%</li>
</ul>

<h3 id="举个简单的例子体验一下">举个简单的例子，体验一下：</h3>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">counterStore</span> <span class="o">=</span> <span class="nx">hamiVuex</span><span class="p">.</span><span class="nf">store</span><span class="p">({</span>

    <span class="c1">// 设置一个唯一名称，方便调试程序和显示错误信息</span>
    <span class="na">$name</span><span class="p">:</span> <span class="dl">'</span><span class="s1">counter</span><span class="dl">'</span><span class="p">,</span>

    <span class="c1">// 定义状态</span>
    <span class="na">$state</span><span class="p">:</span> <span class="p">{</span>
        <span class="na">count</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
    <span class="p">},</span>

    <span class="c1">// 定义一个 getter，和 Vue computed 类似</span>
    <span class="kd">get</span> <span class="nf">double</span><span class="p">()</span> <span class="p">{</span>
        <span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">count</span> <span class="o">*</span> <span class="mi">2</span>
    <span class="p">},</span>

    <span class="c1">// 定义一个函数，等价于 Vuex action</span>
    <span class="nf">increment</span><span class="p">()</span> <span class="p">{</span>
        <span class="c1">// $patch 是内置的 Vuex mutation，用于更新状态</span>
        <span class="k">this</span><span class="p">.</span><span class="nf">$patch</span><span class="p">({</span>
            <span class="na">count</span><span class="p">:</span> <span class="k">this</span><span class="p">.</span><span class="nx">count</span> <span class="o">+</span> <span class="mi">1</span>
        <span class="p">})</span>
    <span class="p">},</span>
<span class="p">})</span>

<span class="c1">// 在 Vue 组件中使用</span>
<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="nx">counterStore</span><span class="p">.</span><span class="nx">count</span><span class="p">)</span>
<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="nx">counterStore</span><span class="p">.</span><span class="nf">increment</span><span class="p">())</span>
<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="nx">counterStore</span><span class="p">.</span><span class="nx">double</span><span class="p">)</span>
</code></pre></div></div>

<h3 id="开源地址">开源地址：</h3>

<p>GitHub：<a href="https://github.com/guyskk/hami-vuex">https://github.com/guyskk/hami-vuex</a></p>

<p><strong>详细文档及设计思路都在 GitHub 仓库中，欢迎品尝！</strong><br />
<strong>好用的话求 Star 哇！</strong></p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #16 半独立开发的第一个月</title>
    <id>/notes/onebiz-16</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-16"/>
    <updated>2021-12-12T00:00:00+08:00</updated>
    <published>2021-12-12T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>一个月时间又过去了，生活基本是平淡的，但也有些零零散散的，有意思的事情，就当流水账记录一下。</p>

<h2 id="远程兼职">远程兼职</h2>

<p>我现在每周大概 4 天做远程兼职，这个月主要在做前端项目，用了 Vue 3 和 Typescript。</p>

<p>Vue 3 生态目前不是很完善，重写了太多的库以及开发者工具，估计再过半年能稳定下来。Typescript 用上了很舒服，类型提示和代码补全可以提高开发效率，减少低级错误。</p>

<p>最近也开始做 Python 后端项目，和我的技术栈很匹配。半独立开发的状态感觉很好，压力小很多，写代码的效率也有所提高。</p>

<h2 id="果蔬时节小程序">果蔬时节小程序</h2>

<p>果蔬时节后台部分终于完成上线了，之后在做代码清理和重构，丢掉一些历史包袱，等清理完之后再继续开发小程序端。</p>

<p>重构过程中，顺便造了一个前端轮子 <a href="https://github.com/guyskk/hami-vuex">Hami-Vuex</a>，欢迎关注，过几天我单独写篇文章介绍一下。</p>

<h2 id="时间管理">时间管理</h2>

<p>这个月我用 <a href="https://toggl.com/">Toggl</a> 记录了时间花费，并不是远程兼职的要求，完全是为了自己分析和管理时间。因为是记录给自己看的，所以我可以完全忠实的记录时间，而不会有任何的顾虑。</p>

<p>我的一些占用时间偏多的地方：</p>

<p><strong>睡的太久了：</strong><br />
我通常是在0点之前睡觉，9点半左右醒来，差不多是自然醒。可能是天生比较能睡，这个就顺其自然了。</p>

<p><strong>吃饭太久了：</strong><br />
大约是洗漱+早饭：1 小时，热菜+午饭：1.5 小时，晚饭+洗漱+家人闲聊：2.5小时。一方面是我吃的比较慢，另一方面是磨蹭及一些杂事。如果独居 + <a href="https://www.ruffood.com/">若饭</a> 的话，可以节省大部分时间。</p>

<p><strong>业务之外的事情：</strong><br />
例如购物比价，逛网站论坛，听播客，阅读博客和资讯，零零散散也占用了不少时间。</p>

<h2 id="macbook-air-m1">Macbook Air M1</h2>

<p>11 月底我买了台 Macbook Air M1，用了半个月，感觉非常好，性能很强，程序秒开，续航十足，完全静音，键盘好用，价格很实惠。兼容性也非常好，iTerm2 设置使用 Rosetta 打开，可以完全兼容 x86 程序。使用 Docker 也没问题了，如果没有 ARM 镜像可以通过 <code class="language-plaintext highlighter-rouge">--platform=linux/amd64</code> 参数运行 x86 的镜像，性能也不会太差。</p>

<p>两个字总结：真香！</p>

<h2 id="税务开发票">税务开发票</h2>

<p>前几天跑了一趟税务大厅，把开发票的流程搞定了，在此记录一下。</p>

<p>从税务角度，公司分为「小规模纳税人」和「一般纳税人」，发票分为「普通发票」和「专用发票」，开票方式有「自开发票」和「税局代开」。</p>

<p>小规模纳税人的税率低，但不能用专用发票抵扣进项税，<code class="language-plaintext highlighter-rouge">增值税 = 销售额 x 税率</code>。一般纳税人税率高，可以用专用发票抵扣进项税，「进项」可理解为购进货物/原材料的成本，<code class="language-plaintext highlighter-rouge">增值税 = (销售额 - 进货成本) x 税率</code>。企业默认都是小规模纳税人。</p>

<p>普通发票和专用发票的区别，就是上面提到抵扣进项税的区别，一般来说开普通发票就可以了，除非付款方是一般纳税人并且要求开专票。</p>

<p>公司自开发票的话，可以到税务大厅免费申请，税务会核定你一个月能开多少张票，以及额度是多少，然后发一个 UKey（类似U盘）。拿到 UKey 之后，下载官方的税务开票软件，按说明操作就可以开电子发票了。</p>

<p>如果是个人需要开票，或者公司无法自己开票，可以到税务大厅申请代开票。个人代开需要预缴 20% 的个税，这部分税可以在年底汇算清缴时多退少补。企业代开通常是开专票，开普票的话税局会建议你申请 Ukey 自己开。</p>

<h2 id="滴滴出行见闻">滴滴出行见闻</h2>

<p>我至今没有考驾照，也没有打算买车。因为很早就算过一笔账，假设每周打4次车，每次50元，5年的花费大约是5万元，远低于买车和养车的成本，更何况我用车的次数远没有这么高。</p>

<p>在比较偏远的地方（比如我老家农村）也是很好打车的，只要打车的时候选最贵的一档（我这边是50-60元），10公里外的车也会调度过来，稍微多等几分钟就行了。</p>

<p>由于滴滴被下架近半年了，出于好奇，我打车的时候会随意问一下司机，最近单量怎么样，滴滴好不好做之类的。得到的答案都是正面的，滴滴单量很稳定，没什么影响，而且开滴滴比较自由，比工厂上班舒服多了。偶尔会有抱怨滴滴抽成太高了，以及导航不准确、绕路的问题。</p>

<p>对于其他的平台，都是没什么订单，赚不到钱。我自己也试过在高德地图上打车，发现很难打到车，而且价格还更贵。</p>

<p>可以说，滴滴构建了非常牢固的护城河，哪怕捆住其手脚，然后所有竞争对手一起上都打不过它。</p>

<h2 id="最后">最后</h2>

<p>通过「RSS阅读器」或者关注公众号「自宅创业」可以订阅博客更新，也可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #15 开始远程兼职</title>
    <id>/notes/onebiz-15</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-15"/>
    <updated>2021-11-14T00:00:00+08:00</updated>
    <published>2021-11-14T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>如题，我开始远程兼职了，从上周开始的，在预料之中，只是来的有点快。</p>

<h2 id="远程兼职">远程兼职</h2>

<p>找兼职的过程很顺利，偶然在一个群里看到个招聘消息，是认识多年但没有联系的网友。然后就聊了聊意向、技术栈、以及我后续时间规划，很快就谈好了。约定每周工作30小时，时薪不高但我也比较满意，主要是时间自由。网上签了合同，然后就开始参与项目了。</p>

<p>有一份兼职之后，经济方面就没什么担忧了。现在自己也还有不少空余时间，继续做自己的项目，自宅创业可以长期坚持下去。毕竟创业一次就成功的，十中无一。</p>

<h2 id="订单系统">订单系统</h2>

<p>这两周也在继续写订单系统，还剩一点点，差不多要完成了。接下来会继续把订单系统做完，然后继续做小程序端改版。</p>

<p>最近我加盟的一个水果代理商也换交易系统了，新系统比我预期的好。之前他们用的是 <a href="https://xd.cx/">易代理</a>，做的确实不咋地。我查了一下新系统是 <a href="http://jisudinghuo.com/">极速订货</a> 提供的，价格比有赞贵不少，但确实比有赞更合适，更符合水果分销的模式。</p>

<p>上一期我尝试回答了 “为什么不直接用开源的商城系统？”，现在我想，如果我当初买一套交易系统来用，结果会如何？我觉得，水果业务我会照样做不起来，因为供应链、获客渠道这两个条件我还是不具备，最后折腾一场什么也没留下。</p>

<p>选择自建或者开源+定制交易系统的话，我虽然失败了，但我有了属于自己的交易系统。我可以让业务继续维持而不用额外付出成本，也还有机会把交易系统卖出去，转做 to B 生意。</p>

<p>坚持「做有积累的事情」，这是我学到的经验。</p>

<h2 id="后续更新">后续更新</h2>

<p>考虑到创业时间减少，我打算后续博客 <strong>每月更新一次</strong>。可以通过 RSS 订阅博客，或是关注我的公众号「自宅创业」。创业路上，与君共勉！</p>

<h2 id="最后">最后</h2>

<p>你可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>

]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #14 写订单系统后台</title>
    <id>/notes/onebiz-14</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-14"/>
    <updated>2021-10-31T00:00:00+08:00</updated>
    <published>2021-10-31T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>这两周主要在写订单系统后台，快要写完了，比我预想的时间更长（包括部分上期完成的任务）。</p>

<p><img src="/static/2021-10-31/order-admin-tasks.png" alt="order-admin-tasks" width="50%" style="display:block;margin:0 auto;" /></p>

<h2 id="订单系统">订单系统</h2>

<p>订单系统最核心的是商品和订单。商品分为基础商品（SPU）和商品规格（SKU），一对多的关系。订单分为顾客单和发货单，也是一对多的关系。除此之外，还有品类、供应商和供货商品，关系多就麻烦。</p>

<p>在后端逻辑和数据存储上，要处理关联查询和交易快照，代码有点复杂，花了不少时间。在前端界面上，表单字段很多，不同表单之间还有关联字段，花了较多时间处理。</p>

<p>之后我想明白了，对目前的业务来说，品类、商品、供应商都不多，前端一次性全查出来就好了，需要用的地方直接下拉选择。很多父子孙组件之间，属性和事件传递绕来绕去，不如干脆放到Vuex全局管理，更省心。</p>

<p>此外，我还仔细研究了<a href="https://mms.pinduoduo.com/">拼多多商家后台</a>，还有拼多多商家版App，确实做的不错。</p>

<p><strong>为什么不直接用开源的商城系统？</strong></p>

<p>比如 <a href="https://github.com/macrozheng/mall">macrozheng/mall</a>, <a href="https://github.com/saleor/saleor">saleor</a> 和 <a href="https://github.com/django-oscar/django-oscar">django-oscar</a>，直接用不好吗？或者二次开发？</p>

<p>说实话，我当时也调研了几个 Python 的开源商城框架，但没有很仔细。开源的和我想要的差别有点大，而且定制也有点复杂，再加上程序员本能吧，就直接自己做了一个。</p>

<p>最近和一些朋友聊的时候也被问到这个问题，所以我又更仔细的调研了一下。</p>

<p>开源电商有这么几个问题：</p>

<ol>
  <li>前台系统主要是Web网站，支持小程序，APP的基本没有。</li>
  <li>后台管理系统功能不全，用起来也不方便，比如都没有批量发货，运费模板。</li>
  <li>基本没有适配中国境内的支付渠道，以及快递物流。</li>
</ol>

<p>需要定制的内容很多，但应该还是比完全自建更容易。如果只是想卖货，不如用现成的电商服务，比如微信小店、Shopify、有赞商城。如果想做交易平台，再考虑是开源+定制还是自建，如果重来一次，我会先试试开源+定制。</p>

<h2 id="后续计划">后续计划</h2>

<p>继续把订单系统做完，小程序迭代做完。也大致有了下一个产品的想法，但不着急去做。</p>

<h2 id="最后">最后</h2>

<p>你可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #13 创业半年回顾</title>
    <id>/notes/onebiz-13</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-13"/>
    <updated>2021-10-15T00:00:00+08:00</updated>
    <published>2021-10-15T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>从开始创业到现在，时间飞快的过了半年，业务还是没有做起来。折腾了很多东西，积累下来的，一是经验教训，二是产品代码。</p>

<h2 id="产品迭代">产品迭代</h2>

<p>第一次迭代：水果小程序支付下单功能，以及简陋的后台管理功能。持续1个月时间，完成上线。这一版功能基本可用，但还很不完善。</p>

<p>第二次迭代：重新设计业务模式，改进小程序，以及相对完善的后台系统。持续2个月时间，目前大概完成50%。</p>

<p>这一次持续时间很长，但还是严重延期了。一方面是开发效率不高，实际专注写代码的时间不够。另外也低估了电商系统的复杂度，按人天估算应该要30-40MD，也就是一个人实打实的写一个多月代码。</p>

<p>我的感觉是，产品迭代是不断积累价值的过程，只要方向没有错，产品就会越来越有用。良好的代码组织、组件库、框架可以显著提高开发效率。除了闷头生产业务代码，也要适时改进生产线，这样产品迭代会越来越轻松。</p>

<h2 id="水果业务">水果业务</h2>

<p>由于水果业务很难做起来，我也在考虑是不是值得继续投入。</p>

<p>我的判断是，水果行业用户群体广泛，盈利模式清晰，做起来之后能形成明显的壁垒，钱途可观。但是，需要资源积累才能做起来，主要包括：供应链、获客渠道、信息系统。</p>

<p>目前资源并不具备，短期内也不太可能具备，我的计划是：</p>

<ol>
  <li>先做好这一版小程序，以及后台管理系统，这是我的信息系统。</li>
  <li>搭建果蔬时节网站，做图文内容和SEO，业余时间慢慢运营，这是获客渠道。</li>
  <li>然后集中精力做新项目，水果业务进入放养状态。</li>
</ol>

<h2 id="反思自省">反思自省</h2>

<p><strong>做有积累的事情</strong></p>

<p>例如写代码、写文章、看书、认识各种各样的人，要么积累资源/资产，要么提高自己的知识和经验。反之如订单发货、发广告、营销带货、闲聊灌水、关注新闻八卦，做一遍和做一百遍没什么差别，几乎没有积累。</p>

<p><strong>保持专注和高效</strong></p>

<p>长时间做一件事的时候，时间越长越容易懈怠，正所谓一鼓作气，再而衰，三而竭。要沿着目标路线，专注地、坚持执行，越专注越高效。当然了，人不是机器做的，也要劳逸结合，该休息就停下来，不要去想别的事情。</p>

<h2 id="最后">最后</h2>

<p>你可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - #12 专注和效率问题</title>
    <id>/notes/onebiz-12</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-12"/>
    <updated>2021-09-30T00:00:00+08:00</updated>
    <published>2021-09-30T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>最近的工作效率一直不行，产品迭代缓慢，需要反思一下。由于前几天在跑水果市场，这期博客也晚了几天。</p>

<p>我有写日记的习惯，每天睡前用App记录一下主要做的事情，否则过几天就忘记了，不知道时间怎么过的。我看了一下最近两周的日记，大致汇总看时间都去哪了。</p>

<table>
  <thead>
    <tr>
      <th>任务</th>
      <th>用时</th>
      <th>说明</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>写程序代码</td>
      <td>4天</td>
      <td>主要在写小程序后端接口。</td>
    </tr>
    <tr>
      <td>水果业务</td>
      <td>3天</td>
      <td>找货源，沟通，发货等。</td>
    </tr>
    <tr>
      <td>玩游戏</td>
      <td>2天</td>
      <td>有一段时间很不想写代码，所以玩了两天游戏，平时我不玩游戏的。</td>
    </tr>
    <tr>
      <td>玩抖音</td>
      <td>1天</td>
      <td>抖音通常是吃午饭看一会，刷着刷着就到晚饭了。</td>
    </tr>
    <tr>
      <td>休息</td>
      <td>2天</td>
      <td>中秋，做客。</td>
    </tr>
    <tr>
      <td>折腾抖音企业号</td>
      <td>1天</td>
      <td>白折腾，目前对我没用。</td>
    </tr>
    <tr>
      <td>换二手iPhone</td>
      <td>1天</td>
      <td>折腾了一天，花费时间偏多。</td>
    </tr>
    <tr>
      <td>抓老鼠</td>
      <td>1天</td>
      <td>家里放的水果经常被老鼠偷吃，折腾一天灭了一只老鼠，其实赶走就可以了，抓老鼠浪费时间。</td>
    </tr>
  </tbody>
</table>

<p><strong>真正干活的时间大概占一半，另一半时间在折腾各种事情。</strong>接下来要把精力聚焦在主要问题上，越专注越高效。可能会尝试用番茄工作法计时，度量更加准确。</p>

<blockquote>
  <p>你如果无法度量它，就无法管理它。
— 彼得·德鲁克</p>
</blockquote>

<blockquote>
  <p>量化管理是第一步，如果你不能量化它，你就不能理解它；如果你不能理解它，你就不能控制它；如果你不能控制它，你就不能改进它。
— H·詹姆斯·哈林顿</p>
</blockquote>

<h2 id="最后">最后</h2>

<p>你可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - 小程序迭代延期 + 卖猕猴桃</title>
    <id>/notes/onebiz-11</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-11"/>
    <updated>2021-09-14T00:00:00+08:00</updated>
    <published>2021-09-14T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>在一个月前，我重新设计了小程序的业务逻辑<a href="/notes/onebiz-9">（水果直销自营模式）</a>，并计划一个月完成。但是现在离完成还差很远，这次迭代延期了。</p>

<p>延期的主要原因是业务逻辑想的不够清楚，写代码建模的时候，写不下去了。当没有清晰的思路时，似乎就没了方向感，一直在想一直在改，但总是觉得不对，想不清楚然后就开始摸鱼了……</p>

<h2 id="问题和解决思路">问题和解决思路</h2>

<p>其中一个问题是，一款水果有很多种属性，比如酸甜度、口感、大小、外观，这些属性选项组合之后数量暴增，很多组合没有满足条件的商品。我花了很多时间思考怎么建模，研究怎么把属性标准化，比如酸度、甜度、硬度的量化，发现都解决不了问题。</p>

<p>之后我想到，<strong>业务逻辑的本质是满足顾客需求</strong>，让顾客选择合适的商品，也许可以做成决策流程图。</p>

<p>假设有三款商品，各有优势和劣势，顾客需要看商品详情、查看评价来判断哪款更合适。因为顾客对商品不了解，所以这个决策过程很难，商品越多，选择困难症越严重。</p>

<p>而我是比顾客更了解商品的人，我可以准备几个需求问题，帮助顾客决策，顾客回答需求问题就简单多了。思路参考 <a href="https://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html">如何选择开源许可证？</a></p>

<p><img src="/static/2021-09-14/open-source-license-diagram.png" alt="如何选择开源许可证" /></p>

<p>正好现在是猕猴桃成熟季节，我也找到了好几个产地货源，总共买了5箱猕猴桃，当饭吃…… 根据亲身体会，做成【2021猕猴桃选购指南】：
<img src="/static/2021-09-14/2021-kiwifruit-diagram.png" alt="2021猕猴桃选购指南" /></p>

<p>对比一下京东自营，非常多规格，不知道怎么选。（淘宝、拼多多也是类似的）</p>

<p><img src="/static/2021-09-14/kiwifruit-jd-screenshot.png" alt="猕猴桃京东自营" /></p>

<p><strong>你是否也有选择困难症呢？有没有3分钟内就下单付款的经历？欢迎留言。</strong></p>

<p>个人经历：印象中京东有个常购清单功能，里面是经常买的商品，下单很方便。买新东西会很纠结，明知时间宝贵，但还是要挑很久，怕买到不合适的。</p>

<h2 id="最后">最后</h2>

<p>你可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - The Mom Test</title>
    <id>/notes/onebiz-10</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-10"/>
    <updated>2021-08-30T00:00:00+08:00</updated>
    <published>2021-08-30T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<p>这段时间工作效率偏低，摸鱼时间都多于写代码时间了。这就是一鼓作气、再而衰、三而竭？
本期主要做了：水果味道口感建模、界面设计、阅读《供应链管理》。</p>

<p>下面给大家分享用户调研的一个经验。</p>

<h2 id="the-mom-test">The Mom Test</h2>

<p><a href="https://book.douban.com/subject/26320572/">《The Mom Test》</a>是做用户调研非常实用的一本书，副标题：How to talk to customers &amp; learn if your business is a good idea when everyone is lying to you.</p>

<p>之所以命名为 The Mom Test，是因为作者假设你今天向你的妈妈介绍创业想法，你妈妈会担心你难过，虽然听的云里雾里，但没有说出内心真实的想法。你的朋友也会考虑你的颜面或为了鼓励你，敷衍赞同你的主意。若你能把你妈妈内心深处的想法问出来，你才能通过 The Mom Test，从而判断正确的创业方向。（中国父母普遍厌恶风险，可能是全盘否决你的创业想法）</p>

<p>我在不同的时间、以不同的方式多次听到这个词，感受也愈发深刻。最早是在网上看了相关的文章，今年年初 Toby 推荐我听了本书作者 Rob Fitzpatrick 访谈播客 <a href="https://podcasts.apple.com/us/podcast/indie-hackers/id1206165808?i=1000468418258">#154 – The Right Way to Talk to People About Your Business with Rob Fitzpatrick, Author of The Mom Test</a>，最近在做产品过程中则不断实践和应用。</p>

<p>听完 Rob Fitzpatrick 访谈播客后（全英文，配合文字稿听的），我当时的总结如下：</p>

<ol>
  <li>尽早开始寻找目标用户，先了解对方，然后再抛出产品方案。</li>
  <li>通过聊生活，聊过往经历等事实，筛选目标用户。</li>
  <li>独立开发者尽量不要做需要太多市场推广的产品，最好是用户自己找上门。</li>
</ol>

<p>这期播客主要在讲做用户访谈，简言之怎么问潜在用户才能了解到真实需求和想法，从而判断生意有没有钱途。</p>

<p><strong>等你听完这期播客，欢迎留言说说你的想法！</strong></p>

<p><img src="/static/2021-08-30/toby-podcast.jpg" alt="toby-podcast" /></p>

<h2 id="我的实践经验">我的实践经验</h2>

<h4 id="问事实和经历">问事实和经历</h4>

<p>当我想挖掘网上买水果的需求时，我是这么问的（<a href="/notes/onebiz-3">原文</a>）：</p>

<blockquote>
  <p>你最近一次买水果是什么时候，感觉怎么样？你在网上买水果踩过坑吗？说说你踩过的坑，或是你觉得体验很好的地方？</p>
</blockquote>

<p>如果我直接问大家买水果有什么需求、痛点，很多重要的事实就会被忽略，听到的可能还是伪需求。挖掘需求是我们自己的工作，潜在用户只是提供线索。</p>

<h4 id="让用户掏钱体验">让用户掏钱体验</h4>

<p>产品还没做好，一样可以让用户参与体验，关键是：用户愿不愿意掏钱？</p>

<p>在我做小程序在线下单之前，就先用朋友圈和微信转账卖水果。如果有人掏钱了，对收到的水果也比较满意，那就可以继续做，否则在线下单就该放弃了。</p>

<h4 id="观察用户行为">观察用户行为</h4>

<p>用户行为就是最好的事实，用户需要什么、喜欢什么、不喜欢什么都能通过行为反映出来。</p>

<p>比如小程序里的水果考试助力功能，我发现大家考试失败了都不喜欢分享助力，就算分享也是分享给自己的小号。用户行为不会直接告诉我要怎么做，但告诉了我真实的想法。</p>

<h4 id="让长辈使用产品">让长辈使用产品</h4>

<p>让不熟悉互联网的长辈来使用你的产品（真 · Mom Test），可以检验产品是不是足够简单易用，对受众广泛的产品很有效。</p>

<p>前几天我设计了一个水果味道选择器，如下图：</p>

<p><img src="/static/2021-08-30/mom-test-design-1.png" alt="mon-test-design-1" /></p>

<p>初步实现了一下交互效果，让我妈使用，我在旁边观察。然后我发现我妈不知道怎么点，我就明白了，这个设计太复杂。长辈们日常使用的App，基本都没有滑块操作，短视频没有进度条，听音乐也不用进度条。</p>

<p><img src="/static/2021-08-30/mom-test-design-2.png" alt="mon-test-design-2" /></p>

<p>然后我重新设计，改成了方块按钮，这才足够简单易用。对互联网产品非常熟悉的人，往往高估了产品的简单易用性。</p>

<h2 id="最后">最后</h2>

<p>你可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - 水果直销自营模式</title>
    <id>/notes/onebiz-9</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-9"/>
    <updated>2021-08-16T00:00:00+08:00</updated>
    <published>2021-08-16T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<h3 id="本期概要">本期概要</h3>

<p>小程序下单支付上线之后，水果供应方面发现一些问题。由于水果的成熟期很短，采用评测方式选品太慢，等评测出来这款水果就差不多卖完了。再加上产地下雨等原因，单一的源头供应商无法长期稳定供货。</p>

<p>经过一番思考，我想出了「直销自营模式」，也分别和供应商、顾客朋友讨论，听取大家的想法和建议。这个模式会有一些风险，但还是值得去实践验证。</p>

<h3 id="直销自营模式">直销自营模式</h3>

<p><img src="/static/2021-08-16/selling-model.png" alt="直销自营模式" /></p>

<h4 id="业务流程">业务流程</h4>

<ol>
  <li>顾客在小程序选择需要的水果，以及大小、重量、表皮外观、软硬口感、酸甜味道等，系统自动估算成本和售价，顾客付款下单。</li>
  <li>平台匹配满足需求的供应商和商品，通知供应商发货，货款由平台和供应商结算，差价则为平台利润。</li>
  <li>顾客收到货，快递签收5天内，如果有售后问题，都可以获得赔偿。
    <ul>
      <li>对于坏果、烂果、蛀虫、缺斤少两等有客观标准的问题，拍照/拍视频作为证据。按个数或者重量赔偿，损坏超过一半则补发一箱。</li>
      <li>对于酸甜味道口感等偏主观的问题，可以提出与下单要求中的哪一些不符。由顾客决定赔付比例，超过50%则补发一箱。</li>
    </ul>
  </li>
  <li>赔偿由平台直接先赔付给顾客，然后平台再和供应商结算。
    <ul>
      <li>对于坏果、烂果等客观问题，平台会及时将证据提交给供应商，由供应商承担责任。</li>
      <li>对于味道口感等偏主观的问题，由平台承担责任。</li>
    </ul>
  </li>
</ol>

<h4 id="优势">优势</h4>

<ol>
  <li>对顾客来说，直接选水果需求，比看商品详情、看评价更简单省事。只要平台能保证满足需求，让我买到满意的水果，价格合适就可以下单。</li>
  <li>签收5天内都可以售后，比一般电商平台48小时内售后更友好。味道口感等问题也可以赔付，一般电商平台都不支持，味道口感又很重要，这种服务很友好。</li>
  <li>从顾客的需求出发，平台就可以找不同的供应商供货，只要保证满足顾客需求即可，供应链可以更灵活、供货会更稳定。</li>
</ol>

<h4 id="劣势">劣势</h4>

<p>提供5天的售后时长，平台就要承担更多的风险。对味道口感等偏主观问题做担保，会显著增加被薅羊毛的风险。</p>

<h4 id="后续的计划">后续的计划</h4>

<p>之前我对一些功能点想不清楚，例如：水果品类和水果商品的关系，对比评测的内容，如何展示大量的商品。换成新模式之后，这些都不需要了。快速迭代试错，让我可以少走很多的弯路。</p>

<p>接下来我计划用一个月时间，按「直销自营模式」设计和实现程序，争取早点上线！</p>

<h3 id="最后">最后</h3>

<p>从顾客的角度，你觉得这种模式怎么样呢？购买时可能还会有哪些顾虑？</p>

<p>你可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

  
  
  

  <entry>
    <title type="html">自宅创业 - 下单支付上线，找Bug送水果</title>
    <id>/notes/onebiz-8</id>
    <link rel="alternate" type="text/html" href="https://blog.guyskk.com/notes/onebiz-8"/>
    <updated>2021-08-03T00:00:00+08:00</updated>
    <published>2021-08-03T10:00:00+02:00</published>
    <content type="html" xml:lang="en">
      <![CDATA[<h3 id="本期概要">本期概要</h3>

<p>这一期继续做下单支付功能，在7月最后一天上线了，然后忙了两天补充商品信息，完善后台管理功能。由于时间不够，商品评测功能没有做好，放到下一期了。</p>

<h3 id="找bug送水果">找Bug送水果</h3>

<p>支付下单功能做好后，我在用户群做了个找Bug送水果活动，邀请用户测试整个下单流程。活动效果还不错，大家对功能和交互提了一些建议，但有点意外的是竟然没有发现Bug :D</p>

<p>还有个意外惊喜是，活动结束后，我在凌晨 00:02 提交小程序审核，00:18 就审核通过了，微信小程序审核太给力了！因为担心下单支付不方便测试，所以我录了30秒的演示视频一起提交给审核，可能这个视频也很有帮助。</p>

<h3 id="后续的计划">后续的计划</h3>

<h4 id="小程序完善">小程序完善</h4>

<p>小程序还有不少功能需要补充完善，包括水果评测、发货/配送通知。界面交互设计也需要改进一下，再结合运营情况，逐步迭代完善。</p>

<h4 id="供应链管理">供应链管理</h4>

<p>最近在看一本书《采购与供应链管理：一个实践者的角度》，感觉非常实用，我打算边学边做，现学现用。无论做什么生意，稳定高效的供应链都至关重要，供应链管理值得学习一下。这本书作者的<a href="https://scm-blog.com/">博客</a>还提供<a href="https://scm-blog.com/atom.xml">RSS源</a>，非常不错。</p>

<p>水果供应链，按我现在的模式，可以做到京东自营的品质，并且价格还能更低一点。</p>

<p>因为水果人人皆可种植，供应渠道很多，在同一地区，用同样的方法，种同样的品种，结出的果子基本一样。再加上水果不耐储存的特点，普遍采用产地一件代发的模式，供货成本也是一样的。我自身的成本显然比大公司低很多，只要把差价定少一点，价格就有优势。</p>

<h4 id="拉新和裂变">拉新和裂变</h4>

<p>前一段时间主要在完善程序，用户数量基本没有增长。接下来要拉一些新用户体验产品，有反馈才能持续迭代改进。最近也和一些做产品运营的朋友交流，初步判断裂变是用户增长的核心，做好裂变可以把推广引流效果放大10倍以上。</p>

<p>在微信上做社交裂变有明显的优势，也有很多案例可以模仿，但是要注意微信的规则，避开「诱导分享」的地雷，但我预感还有很多坑等着我去踩。</p>

<h3 id="最后">最后</h3>

<p>如果你想体验一下这个小程序，可以<strong>微信搜索「果蔬时节」，找到Bug送水果哦！</strong> 目前小程序点购买会提示先添加客服微信再下单，可以放心添加，添加后会自动发送新客优惠给你，领取后就可以下单了。</p>

<p>商品都是明码实价，添加微信是为了方便售前售后沟通，接收顾客的反馈，提供更好的服务。如果你有什么想法、反馈和建议，一定要告诉我啊！</p>

<p>你可以在 <a href="/about">关于我</a> 页面找到我的联系方式，欢迎交流！</p>
]]>
    </content>
  </entry>

  

</feed>
