<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>文玑阁</title><link>https://imwen.com/</link><description>玑琢算法万象，文藏俗世烟火-IT技术基于ZBLOG模板</description><item><title>MCP 的边界：插座万能，不代表什么都能插 | AI 打工日志·MCP篇④</title><link>https://imwen.com/post/397.html</link><description>&lt;!-- AI 打工日志 · MCP 篇 · 第4篇 · 交互完整版（样式已隔离，勿在可视化编辑器中编辑源码模式之外的内容） --&gt;&lt;div class=&quot;ai-mcp ai-mcp-4&quot;&gt;&lt;style&gt;.ai-mcp-4 {
    --primary: #37474F;
    --primary-light: #EDF1F3;
    --primary-soft: #C8D4D9;
    --primary-deep: #263238;
    --accent: #5E7A87;
    --bg: #FAF7F2;
    --card: #FFFFFF;
    --ink: #2B2724;
    --ink-soft: #6B6259;
    --line: #EDE5DA;
    --radius: 20px;
    --serif: &quot;Songti SC&quot;, &quot;STSong&quot;, &quot;SimSun&quot;, Georgia, serif;
    --sans: -apple-system, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Segoe UI&quot;, sans-serif;
  }
  .ai-mcp-4 * { margin: 0; padding: 0; box-sizing: border-box; }
  .ai-mcp-4 { font-family: var(--sans); background: var(--bg); color: var(--ink); line-height: 1.85; font-size: 17px; }
  .ai-mcp-4 .wrap { max-width: 760px; margin: 0 auto; padding: 0 22px; }
  .ai-mcp-4 .hero { background: linear-gradient(160deg, var(--primary) 0%, var(--accent) 100%); color: #fff; padding: 72px 0 88px; position: relative; overflow: hidden; }
  .ai-mcp-4 .hero::after { content: &quot;&quot;; position: absolute; bottom: -2px; left: 0; right: 0; height: 44px; background: var(--bg); border-radius: 44px 44px 0 0; }
  .ai-mcp-4 .series-tag { display: inline-block; background: rgba(255,255,255,.18); border: 1px solid rgba(255,255,255,.4); border-radius: 999px; padding: 5px 16px; font-size: 13px; letter-spacing: 2px; margin-bottom: 26px; }
  .ai-mcp-4 .hero .ep { font-size: 14px; letter-spacing: 6px; opacity: .85; margin-bottom: 10px; }
  .ai-mcp-4 .hero h1 { font-family: var(--serif); font-size: clamp(30px, 5.6vw, 46px); line-height: 1.35; font-weight: 700; margin-bottom: 18px; }
  .ai-mcp-4 .hero .sub { font-size: 18px; opacity: .92; }
  .ai-mcp-4 .hero .meta { margin-top: 30px; font-size: 13px; opacity: .75; }
  .ai-mcp-4 .toc { position: sticky; top: 0; z-index: 50; background: rgba(250,247,242,.92); backdrop-filter: blur(10px); border-bottom: 1px solid var(--line); padding: 10px 0; }
  .ai-mcp-4 .toc .wrap { display: flex; gap: 8px; overflow-x: auto; white-space: nowrap; scrollbar-width: none; }
  .ai-mcp-4 .toc .wrap::-webkit-scrollbar { display: none; }
  .ai-mcp-4 .toc a { flex: 0 0 auto; text-decoration: none; color: var(--ink-soft); font-size: 14px; padding: 6px 14px; border-radius: 999px; border: 1px solid transparent; transition: all .25s; }
  .ai-mcp-4 .toc a:hover, .ai-mcp-4 .toc a.active { color: var(--primary-deep); background: var(--primary-soft); border-color: var(--primary-soft); }
  .ai-mcp-4 section { padding: 64px 0 8px; }
  .ai-mcp-4 .sec-head { display: flex; align-items: center; gap: 14px; margin-bottom: 26px; }
  .ai-mcp-4 .sec-num { width: 52px; height: 52px; flex: 0 0 52px; border-radius: 16px; background: var(--primary-soft); display: flex; align-items: center; justify-content: center; font-size: 26px; }
  .ai-mcp-4 .sec-head h2 { font-family: var(--serif); font-size: clamp(22px, 3.6vw, 28px); line-height: 1.4; }
  .ai-mcp-4 .sec-head .sec-sub { font-size: 13px; color: var(--ink-soft); display: block; font-family: var(--sans); font-weight: 400; margin-top: 2px; }
  .ai-mcp-4 .card { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 28px 26px; margin-bottom: 22px; box-shadow: 0 2px 10px rgba(43,39,36,.04); }
  .ai-mcp-4 p + p { margin-top: 16px; }
  .ai-mcp-4 .card h3 { font-size: 18px; margin-bottom: 12px; display: flex; align-items: center; gap: 8px; }
  .ai-mcp-4 .em { color: var(--primary-deep); font-weight: 700; }
  .ai-mcp-4 strong { font-weight: 700; }
  .ai-mcp-4 .quote { margin: 34px 0; background: linear-gradient(135deg, var(--primary) 0%, var(--accent) 100%); color: #fff; border-radius: var(--radius); padding: 34px 30px; font-family: var(--serif); font-size: clamp(19px, 3vw, 23px); line-height: 1.7; position: relative; }
  .ai-mcp-4 .quote::before { content: &quot;❝&quot;; position: absolute; top: 10px; left: 18px; font-size: 44px; opacity: .3; }
  .ai-mcp-4 .quote .who { display: block; margin-top: 14px; font-family: var(--sans); font-size: 13px; opacity: .8; }
  .ai-mcp-4 .demo { background: var(--card); border: 2px dashed var(--primary); border-radius: var(--radius); padding: 30px 26px; margin: 30px 0; }
  .ai-mcp-4 .demo-title { text-align: center; font-weight: 700; font-size: 16px; color: var(--primary-deep); letter-spacing: 1px; margin-bottom: 6px; }
  .ai-mcp-4 .demo-hint { text-align: center; font-size: 13px; color: var(--ink-soft); margin-bottom: 20px; }
  .ai-mcp-4 .risk-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin: 22px 0; }
  .ai-mcp-4 .risk-card { background: #fff; border: 1.5px solid var(--line); border-radius: 16px; padding: 20px 20px; }
  .ai-mcp-4 .risk-card .r-ico { font-size: 28px; }
  .ai-mcp-4 .risk-card h3 { font-size: 16.5px; margin: 8px 0 8px; color: var(--primary-deep); }
  .ai-mcp-4 .risk-card p { font-size: 14px; color: var(--ink-soft); }
  .ai-mcp-4 .risk-card .fix { margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--line); font-size: 13.5px; }
  .ai-mcp-4 .risk-card .fix b { color: var(--primary-deep); }
  .ai-mcp-4 .diag-grid { display: grid; grid-template-columns: 1fr; gap: 12px; margin-bottom: 16px; }
  .ai-mcp-4 .d-item { background: #fff; border: 1.5px solid var(--line); border-radius: 14px; padding: 16px 16px; cursor: pointer; transition: all .2s; text-align: left; font-family: var(--sans); }
  .ai-mcp-4 .d-item:hover { transform: translateY(-2px); box-shadow: 0 5px 14px rgba(43,39,36,.1); }
  .ai-mcp-4 .d-item.on { border-color: var(--primary); background: var(--primary-light); }
  .ai-mcp-4 .d-item .d-ico { font-size: 22px; }
  .ai-mcp-4 .d-item b { display: block; font-size: 15px; margin-top: 4px; }
  .ai-mcp-4 .d-item span { font-size: 12.5px; color: var(--ink-soft); }
  .ai-mcp-4 .d-result { background: var(--primary-light); border: 1px solid var(--primary-soft); border-radius: 14px; padding: 18px 20px; font-size: 14.5px; min-height: 130px; }
  .ai-mcp-4 .d-result h3 { color: var(--primary-deep); font-size: 15.5px; margin-bottom: 8px; }
  .ai-mcp-4 .d-result .rx { margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--primary-soft); }
  .ai-mcp-4 .d-result .rx b { color: var(--primary-deep); }
  .ai-mcp-4 .verdict { display: inline-block; font-size: 12px; padding: 2px 10px; border-radius: 999px; margin-left: 6px; vertical-align: 2px; }
  .ai-mcp-4 .verdict.yes { background: #E3F4E8; color: #1B5E2B; }
  .ai-mcp-4 .verdict.no { background: #FFF0F0; color: #A61E1E; }
  .ai-mcp-4 .verdict.care { background: #FFF6E5; color: #8A6408; }
  .ai-mcp-4 .check-list { list-style: none; }
  .ai-mcp-4 .check-list li { padding: 12px 16px; margin: 10px 0; border-radius: 12px; border: 1px solid var(--line); background: #fff; }
  .ai-mcp-4 .check-list li b { color: var(--primary-deep); }
  .ai-mcp-4 .quiz { margin: 26px 0 6px; }
  .ai-mcp-4 .q-item { margin-bottom: 22px; }
  .ai-mcp-4 .q-item .q { font-weight: 700; font-size: 16px; margin-bottom: 12px; }
  .ai-mcp-4 .q-item .q .qn { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; border-radius: 8px; background: var(--primary); color: #fff; font-size: 14px; margin-right: 8px; vertical-align: -5px; }
  .ai-mcp-4 .opts { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
  .ai-mcp-4 .opts button { font-family: var(--sans); font-size: 14.5px; text-align: left; padding: 12px 16px; border-radius: 12px; border: 1.5px solid var(--line); background: #fff; color: var(--ink); cursor: pointer; transition: all .2s; line-height: 1.6; }
  .ai-mcp-4 .opts button:hover { border-color: var(--primary); }
  .ai-mcp-4 .opts button.right { border-color: #2B8A3E; background: #EBF7EE; color: #1B5E2B; font-weight: 700; }
  .ai-mcp-4 .opts button.wrong { border-color: #C92A2A; background: #FFF0F0; color: #A61E1E; }
  .ai-mcp-4 .q-explain { margin-top: 10px; font-size: 13.5px; color: var(--ink-soft); background: var(--primary-light); border-radius: 10px; padding: 10px 14px; display: none; }
  .ai-mcp-4 .q-explain.show { display: block; }
  .ai-mcp-4 .recap { display: grid; grid-template-columns: 1fr; gap: 12px; margin: 24px 0; }
  .ai-mcp-4 .recap-item { background: var(--primary-light); border: 1px solid var(--primary-soft); border-radius: 14px; padding: 16px 18px; font-size: 14.5px; }
  .ai-mcp-4 .recap-item b { color: var(--primary-deep); }
  .ai-mcp-4 .final-cta { margin: 50px 0 10px; text-align: center; padding: 44px 26px; background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); }
  .ai-mcp-4 .final-cta .emoji { font-size: 40px; }
  .ai-mcp-4 .final-cta h2 { font-family: var(--serif); font-size: 24px; margin: 12px 0 10px; }
  .ai-mcp-4 footer { text-align: center; padding: 30px 0 50px; color: var(--ink-soft); font-size: 13px; }
  .ai-mcp-4 .reveal { opacity: 0; transform: translateY(26px); transition: all .7s cubic-bezier(.22,.61,.36,1); }
  .ai-mcp-4 .reveal.in { opacity: 1; transform: none; }
  @media (max-width: 560px) {.ai-mcp-4 .opts, .ai-mcp-4 .risk-grid { grid-template-columns: 1fr; } }


  /* === Z-Blog 正文适配层 === */
  .ai-mcp { font-size: 17px; line-height: 1.85; color: #2B2724; }
  .ai-mcp .tri-banner { text-align: center; padding: 8px 0 4px; margin-bottom: 18px; }
  .ai-mcp .tri-banner .tri-title {
    font-family: &quot;Songti SC&quot;, &quot;STSong&quot;, &quot;SimSun&quot;, Georgia, serif;
    font-size: clamp(22px, 3.4vw, 30px); line-height: 1.45; margin: 16px 0 8px; font-weight: 700;
  }
  .ai-mcp .tri-banner .tri-sub { font-size: 15px; color: #6B6259; }
  .ai-mcp .tri-banner .series-tag {
    background: var(--primary-soft); border: 1px solid var(--primary);
    color: var(--primary-deep); margin-bottom: 0;
  }
  .ai-mcp main { display: block; }&lt;/style&gt;&lt;header class=&quot;tri-banner&quot;&gt;&lt;span class=&quot;series-tag&quot;&gt;AI 打工日志 · MCP 篇&lt;/span&gt;
 &amp;nbsp;&lt;h2 class=&quot;tri-title&quot;&gt;《MCP 的边界：插座万能，不代表什么都能插》&lt;/h2&gt;&lt;p class=&quot;tri-sub&quot;&gt;能力越大，边界越要画清楚 · 阅读约 9 分钟 · 无需技术背景&lt;/p&gt;&lt;p class=&quot;tri-sub&quot;&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/10/202610081791423577587716.jpg&quot; alt=&quot;mcp-cover-4.jpg&quot; width=&quot;768&quot; height=&quot;512&quot; border=&quot;0&quot; vspace=&quot;0&quot; title=&quot;mcp-cover-4.jpg&quot; style=&quot;width: 768px; height: 512px;&quot;/&gt;&lt;/p&gt;&lt;/header&gt;&lt;main class=&quot;wrap&quot;&gt;&lt;section id=&quot;s1&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;⚠️&lt;/div&gt;&lt;h2&gt;先把丑话写在前面 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;这一篇是拿来泼冷水的&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;p&gt;前三篇我们把这套东西夸了个遍：数据接进来之后，AI 就从闲聊级别升级到了能干活。&lt;/p&gt;&lt;p&gt;这话没错，但它含着一个被省略的前提——&lt;span class=&quot;em&quot;&gt;你把系统的钥匙，交给了一个会犯错的同事。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;它没有恶意，但它会理解岔、会手滑、会被话术绕进去。普通同事写错一份报告，顶多挨顿骂；它要是理解错了，改的是数据库里的一万行记录。&lt;/p&gt;&lt;p&gt;所以这一篇不谈怎么接，只谈一件事：&lt;span class=&quot;em&quot;&gt;怎么收口。&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;quote&quot;&gt;给它多大的权力，你就担多大的责任。&lt;br/&gt;这句话放在人和机器之间，一样成立。&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s2&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🔓&lt;/div&gt;&lt;h2&gt;四类最容易出事的隐患 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;对号入座，看看你现在占了几个&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;risk-grid&quot;&gt;&lt;div class=&quot;risk-card&quot;&gt;&lt;div class=&quot;r-ico&quot;&gt;🗝️&lt;/div&gt;&lt;h3&gt;越权：门开得太大&lt;/h3&gt;&lt;p&gt;为了图省事，直接给一个高权限账号。它能查的、能改的，远远超出这个任务实际需要的范围。&lt;/p&gt;&lt;div class=&quot;fix&quot;&gt;&lt;strong&gt;🔧 收敛：&lt;/strong&gt;按任务建立专用账号，只开放这一件事需要的那张表、那个目录。&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;risk-card&quot;&gt;&lt;div class=&quot;r-ico&quot;&gt;✍️&lt;/div&gt;&lt;h3&gt;误写：理解岔了就改错了&lt;/h3&gt;&lt;p&gt;它把「查一下上月的异常订单」理解成「把异常订单状态改成已处理」，一路执行下去还挺认真。&lt;/p&gt;&lt;div class=&quot;fix&quot;&gt;&lt;strong&gt;🔧 收敛：&lt;/strong&gt;默认只读。真要写，先让它出清单，人确认后再执行；能撤回的才放开。&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;risk-card&quot;&gt;&lt;div class=&quot;r-ico&quot;&gt;🧾&lt;/div&gt;&lt;h3&gt;泄漏：凭据和原文一起出去了&lt;/h3&gt;&lt;p&gt;配置里写死密钥、把整份配置贴到公开地方求助、明文走上了不受控的网络链路。&lt;/p&gt;&lt;div class=&quot;fix&quot;&gt;&lt;strong&gt;🔧 收敛：&lt;/strong&gt;配置只写变量名，值放环境变量或专门的凭据服务；对外求助一律先打码。&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;risk-card&quot;&gt;&lt;div class=&quot;r-ico&quot;&gt;💸&lt;/div&gt;&lt;h3&gt;失控：钱在看不见地流&lt;/h3&gt;&lt;p&gt;每次调用都要消耗算力与费用。一个没加约束的任务反复重试，账单能在一夜之间长出来。&lt;/p&gt;&lt;div class=&quot;fix&quot;&gt;&lt;strong&gt;🔧 收敛：&lt;/strong&gt;设调用次数与金额上限，开用量告警，让它对敏感操作先问一句再做。&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;p&gt;这四类隐患有个共同点：&lt;span class=&quot;em&quot;&gt;都不是因为它存心捣乱，而是因为我们把边界画得太粗。&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s3&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🚫&lt;/div&gt;&lt;h2&gt;什么时候其实不该用它 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;不是所有活都值得接一根线&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;p&gt;这类技术的尴尬之处在于：&lt;span class=&quot;em&quot;&gt;它很好用，于是人人都想用，包括那些根本不需要它的场合。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;判断标准其实很朴素，就两条：&lt;strong&gt;这件事一个月做几次？是否值得为它维护一套配置？&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;ul class=&quot;check-list reveal list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;❌ &lt;strong&gt;一次性需求&lt;/strong&gt; —— 查一次单号、导一次名单，手动更快，别工程化&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;❌ &lt;strong&gt;极低容错的事&lt;/strong&gt; —— 涉及资金划转、对外承诺、法律文书，宁可人工慢一点&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;❌ &lt;strong&gt;口径每周都变的活&lt;/strong&gt; —— 它的强项是稳定重复，规则天天改则适得其反&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;❌ &lt;strong&gt;数据量极小且固定&lt;/strong&gt; —— 就三行内容，直接贴给它比接一套更快更省&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;✅ &lt;strong&gt;适合的特征&lt;/strong&gt; —— 高频、重复、来源稳定、价值明确的取数与整理&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;quote&quot;&gt;先问值不值得，再问能不能。&lt;br/&gt;顺序反了，就会得到一个漂亮但没人用的方案。&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s4&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🛡️&lt;/div&gt;&lt;h2&gt;四条可以立刻落地的安全底线 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;不用改架构，今天就照着做&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;h3&gt;① 权限最小化&lt;/h3&gt;&lt;p&gt;建立专用账号，只给这一个任务需要的范围。&lt;span class=&quot;em&quot;&gt;不要用你的管理员账号图省事。&lt;/span&gt;能只读就不给写，能限定一张表就不要整个库。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;h3&gt;② 写操作必有人工确认&lt;/h3&gt;&lt;p&gt;凡是会改变外部世界状态的动作，都别让它自己说了算。让它生成待办清单，人来按下最后那个键。&lt;span class=&quot;em&quot;&gt;这一步慢不了几秒，但能挡掉绝大多数事故。&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;h3&gt;③ 敏感数据先进脱敏&lt;/h3&gt;&lt;p&gt;涉及个人身份、薪酬、联系方式的内容，在接入之前先做处理：不给明细给区间，不给全量给抽样。&lt;span class=&quot;em&quot;&gt;它只需要结论时，就不要把原始明细交出去。&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;h3&gt;④ 留痕与上限双管齐下&lt;/h3&gt;&lt;p&gt;谁在什么时候调了什么、改了哪条，要能查得到；同时给调用次数、金额设定上限并配告警。&lt;span class=&quot;em&quot;&gt;一条是事后追责依据，一条是事中刹车。&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s5&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🧪&lt;/div&gt;&lt;h2&gt;该不该接：四个场景自己判 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;点开看结论和理由&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;demo reveal&quot;&gt;&lt;div class=&quot;demo-title&quot;&gt;🧪 场景判断器&lt;/div&gt;&lt;p class=&quot;demo-hint&quot;&gt;选一个你正在纠结的场景&lt;/p&gt;&lt;div class=&quot;diag-grid&quot;&gt;&lt;button class=&quot;d-item&quot; data-k=&quot;report&quot;&gt;&lt;span class=&quot;d-ico&quot;&gt;📊&lt;/span&gt;&lt;strong&gt;每周都要看的分析报表&lt;/strong&gt;高频重复，口径固定&lt;/button&gt;&lt;button class=&quot;d-item&quot; data-k=&quot;once&quot;&gt;&lt;span class=&quot;d-ico&quot;&gt;📞&lt;/span&gt;&lt;strong&gt;偶尔查一次的快递单号&lt;/strong&gt;一次性需求&lt;/button&gt;&lt;button class=&quot;d-item&quot; data-k=&quot;salary&quot;&gt;&lt;span class=&quot;d-ico&quot;&gt;🔓&lt;/span&gt;&lt;strong&gt;含全员薪酬的敏感文件&lt;/strong&gt;价值高但不能出事&lt;/button&gt;&lt;button class=&quot;d-item&quot; data-k=&quot;write&quot;&gt;&lt;span class=&quot;d-ico&quot;&gt;✍️&lt;/span&gt;&lt;strong&gt;让它直接改客户订单状态&lt;/strong&gt;写操作影响真实客户&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;d-result&quot; id=&quot;dResult&quot;&gt;👈 选一个场景，这里给出结论、理由与注意事项。&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;h3&gt;📋 上手前自查清单&lt;/h3&gt;&lt;ul class=&quot;check-list list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;✅ 我用专用账号了吗，还是拿管理员账号图省事？&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;✅ 凭据在配置里是明文吗，会不会被提交或截图？&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;✅ 敏感字段做过脱敏或范围限制吗？&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;✅ 写操作有没有人工确认这一步？&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;✅ 调用量和花费设上限了吗，出问题时有告警吗？&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;✅ 万一它判断错了，我能在多长时间内撤回？&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s6&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🎯&lt;/div&gt;&lt;h2&gt;三题小测 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;做完这三题，边界就清楚了&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;quiz&quot;&gt;&lt;div class=&quot;q-item card&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;1&lt;/span&gt;给 AI 接数据源时，权限应该怎么给？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;c&quot; data-explain=&quot; 权限最小化的意思是只给当前任务必需的范围：专用账号、限定表或目录、能只读就不给写。图省事用管理员账号，一旦理解偏差，影响面会远超预期。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 直接用管理员账号，省事&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 开放整个数据库，反正它用不完&lt;/button&gt;&lt;button data-v=&quot;c&quot;&gt;C. 建专用账号，只给本次任务需要的范围&lt;/button&gt;&lt;button data-v=&quot;d&quot;&gt;D. 每次操作前临时问管理员要密码&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;q-item card&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;2&lt;/span&gt;下面哪种情况最不适合接 MCP？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;b&quot; data-explain=&quot; 一次性需求的配置成本远高于收益，手动做更快。这套技术的价值在高频、重复、来源稳定的工作上，低频场景直接做就好，不必工程化。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 每周一次的固定口径报表&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 一年只查一次的历史档案&lt;/button&gt;&lt;button data-v=&quot;c&quot;&gt;C. 每天都要整理的系统日志&lt;/button&gt;&lt;button data-v=&quot;d&quot;&gt;D. 反复使用的客户问答资料&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;q-item card&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;3&lt;/span&gt;关于写操作（会改动外部数据的动作），最妥当的做法是？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;a&quot; data-explain=&quot; 写操作不可逆，且直接影响真实业务。让 AI 生成待执行清单、由人做最后确认，慢不了几秒却能挡掉绝大多数事故；同时也更容易撤回。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 让它出清单，人确认后再执行&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 全程自动执行，事后抽查就行&lt;/button&gt;&lt;button data-v=&quot;c&quot;&gt;C. 干脆完全不给任何权限&lt;/button&gt;&lt;button data-v=&quot;d&quot;&gt;D. 只在深夜执行，出事影响小&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s7&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;📚&lt;/div&gt;&lt;h2&gt;全季回顾：四篇串成一条线 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;如果你只记住三句话&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;recap&quot;&gt;&lt;div class=&quot;recap-item&quot;&gt;&lt;strong&gt;① 它为什么存在&lt;/strong&gt; —— 解决 AI 与外部世界对接的标准化问题，把乘法级的重复劳动变成加法级的一次实现。&lt;/div&gt;&lt;div class=&quot;recap-item&quot;&gt;&lt;strong&gt;② 怎么把它用起来&lt;/strong&gt; —— 先确认数据源与权限，选对本地或远程的接法，凭据一律走环境变量，出问题先单独跑一次服务端。&lt;/div&gt;&lt;div class=&quot;recap-item&quot;&gt;&lt;strong&gt;③ 它真正的价值&lt;/strong&gt; —— 读你自己的资料、查真实的数据、跨系统串联，与技能和多智能体互补，缺一就只能停留在能聊不能干。&lt;/div&gt;&lt;div class=&quot;recap-item&quot;&gt;&lt;strong&gt;④ 边界在哪&lt;/strong&gt; —— 权限最小化、写操作要人确认、敏感数据先脱敏、用量设上限。能力越强，边界越要画清楚。&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;p&gt;回头看整个 AI 打工日志，这条线其实一直在讲同一件事：&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;em&quot;&gt;大模型给了它脑子，技能给了它章法，多智能体给了它团队，而连接给了它手上的真材实料。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;前三样让它&lt;strong&gt;像个同事&lt;/strong&gt;，最后一样让它&lt;strong&gt;真的能开始干活&lt;/strong&gt;。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;final-cta reveal&quot;&gt;&lt;div class=&quot;emoji&quot;&gt;🎬&lt;/div&gt;&lt;h2&gt;MCP 篇，收官&lt;/h2&gt;&lt;p&gt;从原理到实操，从场景到边界，这四篇讲完了一套完整的连接能力。&lt;br/&gt;下一季，我们把本领、团队和连接三者合起来，看看一个真正完整的 AI 同事长什么样。&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/main&gt;&lt;script&gt;(function () {
  var root = document.currentScript.closest(&#039;.ai-mcp&#039;);
  
  // ---- 滚动显现 ----
  const io = new IntersectionObserver((entries) =&gt; {
    entries.forEach(e =&gt; { if (e.isIntersecting) { e.target.classList.add(&#039;in&#039;); io.unobserve(e.target); } });
  }, { threshold: 0.12 });
  root.querySelectorAll(&#039;.reveal&#039;).forEach(el =&gt; io.observe(el));

  // ---- 目录高亮 ----
  const links = root.querySelectorAll(&#039;.toc a&#039;);
  const secs = [...links].map(a =&gt; root.querySelector(a.getAttribute(&#039;href&#039;)));
  const spy = new IntersectionObserver((entries) =&gt; {
    entries.forEach(e =&gt; {
      if (e.isIntersecting) {
        links.forEach(l =&gt; l.classList.remove(&#039;active&#039;));
        const hit = links.find(l =&gt; l.getAttribute(&#039;href&#039;) === &#039;#&#039; + e.target.id);
        if (hit) hit.classList.add(&#039;active&#039;);
      }
    });
  }, { rootMargin: &#039;-30% 0px -60% 0px&#039; });
  secs.forEach(s =&gt; s &amp;&amp; spy.observe(s));

  // ---- 该不该接：场景判断器 ----
  const judge = {
    report: {
      title: &#039;📊 每周都要看的分析报表&#039;,
      verdict: &#039;&lt;span class=&quot;verdict yes&quot;&gt;✅ 适合接&lt;/span&gt;&#039;,
      why: &#039;&lt;b&gt;理由：&lt;/b&gt;高频、重复、口径固定，正是这套能力最擅长的场景。一次配好，往后每周省下两小时的手工折腾，而且它比你更不会忘记某一项。&#039;,
      rx: &#039;&lt;b&gt;💡 提醒：&lt;/b&gt;先只给只读权限跑两周，确认结论无误，再考虑开放写操作。&#039;
    },
    once: {
      title: &#039;📞 偶尔查一次的快递单号&#039;,
      verdict: &#039;&lt;span class=&quot;verdict no&quot;&gt;❌ 不必接&lt;/span&gt;&#039;,
      why: &#039;&lt;b&gt;理由：&lt;/b&gt;一次性需求，配置成本远高于收益。为了查一次单号去装一套服务端、配权限、调格式，花的时间够你手动查二十次。&#039;,
      rx: &#039;&lt;b&gt;💡 提醒：&lt;/b&gt;判断标准是频次——一个月用不到三次的事，别急着工程化，先手动做。&#039;
    },
    salary: {
      title: &#039;🔓 含全员薪酬的敏感文件&#039;,
      verdict: &#039;&lt;span class=&quot;verdict care&quot;&gt;⚠️ 要接但必须收口&lt;/span&gt;&#039;,
      why: &#039;&lt;b&gt;理由：&lt;/b&gt;价值很高，但这是最不能出事的一类数据。一旦权限放大或凭据泄漏，后果不是加班能补的。&#039;,
      rx: &#039;&lt;b&gt;💡 三条收口：&lt;/b&gt;一、只读不给写；二、字段层面先脱敏，不给明细只给区间；三、访问留痕，谁查过、查了什么都能追溯。&#039;
    },
    write: {
      title: &#039;✍️ 让它直接改客户订单状态&#039;,
      verdict: &#039;&lt;span class=&quot;verdict care&quot;&gt;⚠️ 谨慎，加人工确认&lt;/span&gt;&#039;,
      why: &#039;&lt;b&gt;理由：&lt;/b&gt;写操作不可逆，且直接影响真实业务和真实客户。AI 理解错一句话，改错的就是别人的订单。&#039;,
      rx: &#039;&lt;b&gt;💡 做法：&lt;/b&gt;让它生成待执行清单，由人来最后确认；或者限定只在特定状态区间内可改，改错了也能撤回。&#039;
    }
  };
  const dResult = root.querySelector(&#039;#dResult&#039;);
  root.querySelectorAll(&#039;.d-item&#039;).forEach(item =&gt; {
    item.onclick = () =&gt; {
      root.querySelectorAll(&#039;.d-item&#039;).forEach(x =&gt; x.classList.remove(&#039;on&#039;));
      item.classList.add(&#039;on&#039;);
      const d = judge[item.dataset.k];
      dResult.innerHTML = &#039;&lt;h3&gt;&#039; + d.title + d.verdict + &#039;&lt;/h3&gt;&lt;p&gt;&#039; + d.why + &#039;&lt;/p&gt;&lt;p class=&quot;rx&quot;&gt;&#039; + d.rx + &#039;&lt;/p&gt;&#039;;
    };
  });

  // ---- Quiz ----
  root.querySelectorAll(&#039;.quiz .q-item&#039;).forEach(qi =&gt; {
    const opts = qi.querySelector(&#039;.opts&#039;);
    const explain = qi.querySelector(&#039;.q-explain&#039;);
    const answer = opts.dataset.answer;
    let done = false;
    opts.querySelectorAll(&#039;button&#039;).forEach(btn =&gt; {
      btn.onclick = () =&gt; {
        if (done) return;
        done = true;
        const pick = btn.dataset.v;
        opts.querySelectorAll(&#039;button&#039;).forEach(b =&gt; {
          if (b.dataset.v === answer) b.classList.add(&#039;right&#039;);
          else if (b === btn) b.classList.add(&#039;wrong&#039;);
        });
        explain.textContent = opts.dataset.explain;
        explain.classList.add(&#039;show&#039;);
      };
    });
  });

  // 兜底：2 秒后强制显示所有 reveal 元素，避免任何环境下内容被隐藏
  setTimeout(function () {
    root.querySelectorAll(&#039;.reveal&#039;).forEach(function (el) { el.classList.add(&#039;in&#039;); });
  }, 2000);
})();&lt;/script&gt;&lt;/div&gt;&lt;!-- AI 打工日志 · MCP 篇 · 第4篇 · 结束 --&gt;</description><pubDate>Thu, 08 Oct 2026 09:40:11 +0800</pubDate></item><item><title>MCP 能干什么：同一句话，接与不接差在哪 | AI 打工日志·MCP篇③</title><link>https://imwen.com/post/396.html</link><description>&lt;!-- AI 打工日志 · MCP 篇 · 第3篇 · 交互完整版（样式已隔离，勿在可视化编辑器中编辑源码模式之外的内容） --&gt;&lt;div class=&quot;ai-mcp ai-mcp-3&quot;&gt;&lt;style&gt;.ai-mcp-3 {
    --primary: #B8860B;
    --primary-light: #FAF3E0;
    --primary-soft: #F0DFB8;
    --primary-deep: #8A6408;
    --accent: #E0B44A;
    --bg: #FAF7F2;
    --card: #FFFFFF;
    --ink: #2B2724;
    --ink-soft: #6B6259;
    --line: #EDE5DA;
    --radius: 20px;
    --serif: &quot;Songti SC&quot;, &quot;STSong&quot;, &quot;SimSun&quot;, Georgia, serif;
    --sans: -apple-system, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Segoe UI&quot;, sans-serif;
  }
  .ai-mcp-3 * { margin: 0; padding: 0; box-sizing: border-box; }
  .ai-mcp-3 { font-family: var(--sans); background: var(--bg); color: var(--ink); line-height: 1.85; font-size: 17px; }
  .ai-mcp-3 .wrap { max-width: 760px; margin: 0 auto; padding: 0 22px; }
  .ai-mcp-3 .hero { background: linear-gradient(160deg, var(--primary) 0%, var(--accent) 100%); color: #fff; padding: 72px 0 88px; position: relative; overflow: hidden; }
  .ai-mcp-3 .hero::after { content: &quot;&quot;; position: absolute; bottom: -2px; left: 0; right: 0; height: 44px; background: var(--bg); border-radius: 44px 44px 0 0; }
  .ai-mcp-3 .series-tag { display: inline-block; background: rgba(255,255,255,.18); border: 1px solid rgba(255,255,255,.4); border-radius: 999px; padding: 5px 16px; font-size: 13px; letter-spacing: 2px; margin-bottom: 26px; }
  .ai-mcp-3 .hero .ep { font-size: 14px; letter-spacing: 6px; opacity: .85; margin-bottom: 10px; }
  .ai-mcp-3 .hero h1 { font-family: var(--serif); font-size: clamp(30px, 5.6vw, 46px); line-height: 1.35; font-weight: 700; margin-bottom: 18px; }
  .ai-mcp-3 .hero .sub { font-size: 18px; opacity: .92; }
  .ai-mcp-3 .hero .meta { margin-top: 30px; font-size: 13px; opacity: .75; }
  .ai-mcp-3 .toc { position: sticky; top: 0; z-index: 50; background: rgba(250,247,242,.92); backdrop-filter: blur(10px); border-bottom: 1px solid var(--line); padding: 10px 0; }
  .ai-mcp-3 .toc .wrap { display: flex; gap: 8px; overflow-x: auto; white-space: nowrap; scrollbar-width: none; }
  .ai-mcp-3 .toc .wrap::-webkit-scrollbar { display: none; }
  .ai-mcp-3 .toc a { flex: 0 0 auto; text-decoration: none; color: var(--ink-soft); font-size: 14px; padding: 6px 14px; border-radius: 999px; border: 1px solid transparent; transition: all .25s; }
  .ai-mcp-3 .toc a:hover, .ai-mcp-3 .toc a.active { color: var(--primary-deep); background: var(--primary-soft); border-color: var(--primary-soft); }
  .ai-mcp-3 section { padding: 64px 0 8px; }
  .ai-mcp-3 .sec-head { display: flex; align-items: center; gap: 14px; margin-bottom: 26px; }
  .ai-mcp-3 .sec-num { width: 52px; height: 52px; flex: 0 0 52px; border-radius: 16px; background: var(--primary-soft); display: flex; align-items: center; justify-content: center; font-size: 26px; }
  .ai-mcp-3 .sec-head h2 { font-family: var(--serif); font-size: clamp(22px, 3.6vw, 28px); line-height: 1.4; }
  .ai-mcp-3 .sec-head .sec-sub { font-size: 13px; color: var(--ink-soft); display: block; font-family: var(--sans); font-weight: 400; margin-top: 2px; }
  .ai-mcp-3 .card { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 28px 26px; margin-bottom: 22px; box-shadow: 0 2px 10px rgba(43,39,36,.04); }
  .ai-mcp-3 p + p { margin-top: 16px; }
  .ai-mcp-3 .card h3 { font-size: 18px; margin-bottom: 12px; display: flex; align-items: center; gap: 8px; }
  .ai-mcp-3 .em { color: var(--primary-deep); font-weight: 700; }
  .ai-mcp-3 strong { font-weight: 700; }
  .ai-mcp-3 .quote { margin: 34px 0; background: linear-gradient(135deg, var(--primary) 0%, var(--accent) 100%); color: #fff; border-radius: var(--radius); padding: 34px 30px; font-family: var(--serif); font-size: clamp(19px, 3vw, 23px); line-height: 1.7; position: relative; }
  .ai-mcp-3 .quote::before { content: &quot;❝&quot;; position: absolute; top: 10px; left: 18px; font-size: 44px; opacity: .3; }
  .ai-mcp-3 .quote .who { display: block; margin-top: 14px; font-family: var(--sans); font-size: 13px; opacity: .8; }
  .ai-mcp-3 .demo { background: var(--card); border: 2px dashed var(--primary); border-radius: var(--radius); padding: 30px 26px; margin: 30px 0; }
  .ai-mcp-3 .demo-title { text-align: center; font-weight: 700; font-size: 16px; color: var(--primary-deep); letter-spacing: 1px; margin-bottom: 6px; }
  .ai-mcp-3 .demo-hint { text-align: center; font-size: 13px; color: var(--ink-soft); margin-bottom: 20px; }
  .ai-mcp-3 .toggle-bar { display: flex; justify-content: center; flex-wrap: wrap; gap: 10px; margin-bottom: 20px; }
  .ai-mcp-3 .toggle-bar button { font-family: var(--sans); font-size: 15px; font-weight: 600; padding: 9px 20px; border-radius: 999px; border: 1.5px solid var(--line); background: #fff; color: var(--ink-soft); cursor: pointer; transition: all .2s; }
  .ai-mcp-3 .toggle-bar button.on { border-color: var(--primary); background: var(--primary); color: #fff; box-shadow: 0 4px 14px rgba(184,134,11,.28); }
  .ai-mcp-3 .ask { background: #F6F3F0; border: 1px solid var(--line); border-radius: 14px; padding: 14px 18px; font-size: 15px; margin-bottom: 16px; }
  .ai-mcp-3 .ask b { color: var(--primary-deep); }
  .ai-mcp-3 .reply { border-radius: 14px; padding: 18px 20px; font-size: 14.5px; line-height: 1.9; }
  .ai-mcp-3 .reply.bad { background: #FFF6F6; border: 1px solid #F3D3D3; }
  .ai-mcp-3 .reply.mid { background: #FDF9EF; border: 1px solid var(--primary-soft); }
  .ai-mcp-3 .reply.good { background: var(--primary-light); border: 1px solid var(--primary-soft); }
  .ai-mcp-3 .reply h3 { font-size: 15.5px; margin-bottom: 8px; color: var(--primary-deep); }
  .ai-mcp-3 .reply .tag { display: inline-block; font-size: 12px; padding: 2px 10px; border-radius: 999px; background: rgba(0,0,0,.06); margin-left: 6px; }
  .ai-mcp-3 .scene-grid { display: grid; grid-template-columns: 1fr; gap: 14px; margin: 22px 0; }
  .ai-mcp-3 .scene-card { background: #fff; border: 1.5px solid var(--line); border-radius: 16px; padding: 20px 20px; display: flex; gap: 14px; align-items: flex-start; }
  .ai-mcp-3 .scene-card .s-ico { font-size: 30px; flex: 0 0 40px; text-align: center; }
  .ai-mcp-3 .scene-card h3 { font-size: 16.5px; margin-bottom: 6px; color: var(--primary-deep); }
  .ai-mcp-3 .scene-card p { font-size: 14.5px; color: var(--ink-soft); }
  .ai-mcp-3 .check-list { list-style: none; }
  .ai-mcp-3 .check-list li { padding: 12px 16px; margin: 10px 0; border-radius: 12px; border: 1px solid var(--line); background: #fff; }
  .ai-mcp-3 .check-list li b { color: var(--primary-deep); }
  .ai-mcp-3 .quiz { margin: 26px 0 6px; }
  .ai-mcp-3 .q-item { margin-bottom: 22px; }
  .ai-mcp-3 .q-item .q { font-weight: 700; font-size: 16px; margin-bottom: 12px; }
  .ai-mcp-3 .q-item .q .qn { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; border-radius: 8px; background: var(--primary); color: #fff; font-size: 14px; margin-right: 8px; vertical-align: -5px; }
  .ai-mcp-3 .opts { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
  .ai-mcp-3 .opts button { font-family: var(--sans); font-size: 14.5px; text-align: left; padding: 12px 16px; border-radius: 12px; border: 1.5px solid var(--line); background: #fff; color: var(--ink); cursor: pointer; transition: all .2s; line-height: 1.6; }
  .ai-mcp-3 .opts button:hover { border-color: var(--primary); }
  .ai-mcp-3 .opts button.right { border-color: #2B8A3E; background: #EBF7EE; color: #1B5E2B; font-weight: 700; }
  .ai-mcp-3 .opts button.wrong { border-color: #C92A2A; background: #FFF0F0; color: #A61E1E; }
  .ai-mcp-3 .q-explain { margin-top: 10px; font-size: 13.5px; color: var(--ink-soft); background: var(--primary-light); border-radius: 10px; padding: 10px 14px; display: none; }
  .ai-mcp-3 .q-explain.show { display: block; }
  .ai-mcp-3 .final-cta { margin: 50px 0 10px; text-align: center; padding: 44px 26px; background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); }
  .ai-mcp-3 .final-cta .emoji { font-size: 40px; }
  .ai-mcp-3 .final-cta h2 { font-family: var(--serif); font-size: 24px; margin: 12px 0 10px; }
  .ai-mcp-3 footer { text-align: center; padding: 30px 0 50px; color: var(--ink-soft); font-size: 13px; }
  .ai-mcp-3 .reveal { opacity: 0; transform: translateY(26px); transition: all .7s cubic-bezier(.22,.61,.36,1); }
  .ai-mcp-3 .reveal.in { opacity: 1; transform: none; }
  @media (max-width: 560px) {.ai-mcp-3 .opts { grid-template-columns: 1fr; } .ai-mcp-3 .scene-card { flex-direction: column; } }


  /* === Z-Blog 正文适配层 === */
  .ai-mcp { font-size: 17px; line-height: 1.85; color: #2B2724; }
  .ai-mcp .tri-banner { text-align: center; padding: 8px 0 4px; margin-bottom: 18px; }
  .ai-mcp .tri-banner .tri-title {
    font-family: &quot;Songti SC&quot;, &quot;STSong&quot;, &quot;SimSun&quot;, Georgia, serif;
    font-size: clamp(22px, 3.4vw, 30px); line-height: 1.45; margin: 16px 0 8px; font-weight: 700;
  }
  .ai-mcp .tri-banner .tri-sub { font-size: 15px; color: #6B6259; }
  .ai-mcp .tri-banner .series-tag {
    background: var(--primary-soft); border: 1px solid var(--primary);
    color: var(--primary-deep); margin-bottom: 0;
  }
  .ai-mcp main { display: block; }&lt;/style&gt;&lt;header class=&quot;tri-banner&quot;&gt;&lt;span class=&quot;series-tag&quot;&gt;AI 打工日志 · MCP 篇&lt;/span&gt;
 &amp;nbsp;&lt;h2 class=&quot;tri-title&quot;&gt;《MCP 能干什么：同一句话，接与不接差在哪》&lt;/h2&gt;&lt;p class=&quot;tri-sub&quot;&gt;答案从正确的废话变成能开会的结论 · 阅读约 9 分钟 · 无需技术背景&lt;/p&gt;&lt;p class=&quot;tri-sub&quot;&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/10/202610061791248815185369.jpg&quot; alt=&quot;mcp-cover-3.jpg&quot; width=&quot;768&quot; height=&quot;512&quot; border=&quot;0&quot; vspace=&quot;0&quot; title=&quot;mcp-cover-3.jpg&quot; style=&quot;width: 768px; height: 512px;&quot;/&gt;&lt;/p&gt;&lt;/header&gt;&lt;main class=&quot;wrap&quot;&gt;&lt;section id=&quot;s1&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🆚&lt;/div&gt;&lt;h2&gt;同一句话，三种答案 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;先看差别，再讲原理&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;demo reveal&quot;&gt;&lt;div class=&quot;demo-title&quot;&gt;🧪 试试看：连接程度对比器&lt;/div&gt;&lt;p class=&quot;demo-hint&quot;&gt;同样一个问题，切换三种连接状态看答案变化&lt;/p&gt;&lt;div class=&quot;ask&quot;&gt;👔 &lt;strong&gt;老板问：&lt;/strong&gt;上个月华东区的退货率为什么涨了？帮我想想该怎么处理。&lt;/div&gt;&lt;div class=&quot;toggle-bar&quot; id=&quot;modeBar&quot;&gt;&lt;button class=&quot;on&quot; data-k=&quot;off&quot;&gt;😵 完全没接&lt;/button&gt;&lt;button data-k=&quot;read&quot;&gt;📄 接通文档&lt;/button&gt;&lt;button data-k=&quot;full&quot;&gt;🔌 全接通&lt;/button&gt;&lt;/div&gt;&lt;div id=&quot;replyBox&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;p&gt;差别不在模型聪不聪明——&lt;span class=&quot;em&quot;&gt;三份答案出自同一个脑子&lt;/span&gt;。差别在于它手上有没有材料。&lt;/p&gt;&lt;p&gt;没接的时候，它只能调用训练时学到的通用常识，于是给出「一般来说」。接上了以后，它能读你的文件、查你的数据库、翻你的工单系统，答案才从&lt;span class=&quot;em&quot;&gt;正确的废话&lt;/span&gt;变成&lt;span class=&quot;em&quot;&gt;能拿去开会的结论&lt;/span&gt;。&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s2&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;📚&lt;/div&gt;&lt;h2&gt;场景一：让它读你自己的资料 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;从此不再凭空编造公司制度&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;p&gt;每个公司都有这么一堆东西：制度文档、产品手册、历史方案、会议纪要、谁也说不清版本的代码仓库。它们躺在网盘和文件夹里，对 AI 来说是黑盒。&lt;/p&gt;&lt;p&gt;接上之后，最直接的变化是&lt;span class=&quot;em&quot;&gt;它开始引用你的原文&lt;/span&gt;，而不是凭印象发挥。&lt;/p&gt;&lt;p&gt;这个场景的好处是风险低：&lt;strong&gt;只读不写&lt;/strong&gt;，它读完了回答你，不会改动一个字。适合作为第一个试点的场景。&lt;/p&gt;&lt;/div&gt;&lt;ul class=&quot;check-list reveal list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;📘 &lt;strong&gt;制度问答&lt;/strong&gt; —— 报销标准多少、请假怎么批，答得比我记得准&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;📦 &lt;strong&gt;产品资料&lt;/strong&gt; —— 几百页手册里某个参数，三秒钟翻出来&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;💻 &lt;strong&gt;代码仓库&lt;/strong&gt; —— 这个项目为什么这么写，它真能去看&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;🗂️ &lt;strong&gt;历史方案&lt;/strong&gt; —— 去年那份被否决的提案，终于有人找得到了&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;section id=&quot;s3&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🗄️&lt;/div&gt;&lt;h2&gt;场景二：让它查真实的数据 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;从「一般来说」到「具体到小数」&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;p&gt;比读资料更进一步的是&lt;span class=&quot;em&quot;&gt;查数据&lt;/span&gt;。不管是表格文件还是正式的数据库，它都可以直接取到当前的真实数值。&lt;/p&gt;&lt;p&gt;这一步带来的变化最直观：回答开始出现&lt;span class=&quot;em&quot;&gt;具体的数字、时间范围、同比环比&lt;/span&gt;。你不用再自己导出表格、手动贴给它、再让它分析——它自己去取。&lt;/p&gt;&lt;p&gt;但要提醒一句：查数据通常属于「工具」而非「资源」，意味着它可能具备写的能力。这里的原则是&lt;span class=&quot;em&quot;&gt;只给最小权限&lt;/span&gt;——能只读就只读，要写就限定范围。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;quote&quot;&gt;读资料解决「它不知道」。&lt;br/&gt;查数据解决「它不确定」。&lt;span class=&quot;who&quot;&gt;—— 两件事都不解决，它就还在编&lt;/span&gt;
 &amp;nbsp;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s4&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🔗&lt;/div&gt;&lt;h2&gt;场景三：让多个系统串起来 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;真正的价值在组合，不在单点&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;p&gt;前面两个场景都是单点的。真正让 AI 变得非它不可的，是&lt;span class=&quot;em&quot;&gt;跨系统串联&lt;/span&gt;。&lt;/p&gt;&lt;p&gt;回看开头那个退货率的问题：答案之所以有用，是因为它同时动了三处——客服工单系统里的客诉记录、仓库的出库数据、还有制度文档里的条款。&lt;strong&gt;任何单一数据源都答不出这个结论。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;过去这件事的做法是：你自己去三个系统各导出一份，在表格里折腾两小时，然后发现口径对不上。现在这一步被压缩成了一句话。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;scene-grid&quot;&gt;&lt;div class=&quot;scene-card&quot;&gt;&lt;div class=&quot;s-ico&quot;&gt;🧾&lt;/div&gt;&lt;div&gt;&lt;h3&gt;财务对账&lt;/h3&gt;&lt;p&gt;一边是财务系统里的收款，一边是渠道返回的对账单明细，让它自己找出差异项并标注可能原因。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;scene-card&quot;&gt;&lt;div class=&quot;s-ico&quot;&gt;🎫&lt;/div&gt;&lt;div&gt;&lt;h3&gt;客诉归因&lt;/h3&gt;&lt;p&gt;把工单、物流、商品三个系统的信息合并，找出这段时间变差的根本环节。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;scene-card&quot;&gt;&lt;div class=&quot;s-ico&quot;&gt;📊&lt;/div&gt;&lt;div&gt;&lt;h3&gt;周报生成&lt;/h3&gt;&lt;p&gt;从任务系统拉进度、从代码仓库拉提交、从文档拉结论，自动拼出一份初稿。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s5&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🧩&lt;/div&gt;&lt;h2&gt;组合拳：本领、团队、连线 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;把前三季攒的东西拼起来&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;p&gt;到这里，整个体系其实已经清晰了。一个真正能干活的 AI 同事，靠三样东西拼出来：&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;scene-grid&quot;&gt;&lt;div class=&quot;scene-card&quot;&gt;&lt;div class=&quot;s-ico&quot;&gt;📖&lt;/div&gt;&lt;div&gt;&lt;h3&gt;技能 Skill —— 它的本领&lt;/h3&gt;&lt;p&gt;教会它按你的规矩干活：格式、套路、验收标准。没有这个，它能力强但总是不合你的意。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;scene-card&quot;&gt;&lt;div class=&quot;s-ico&quot;&gt;👥&lt;/div&gt;&lt;div&gt;&lt;h3&gt;多智能体 —— 它的团队&lt;/h3&gt;&lt;p&gt;复杂任务拆给多个专职角色，有人做有人查，避免一个人扛所有活导致的顾此失彼。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;scene-card&quot;&gt;&lt;div class=&quot;s-ico&quot;&gt;🔌&lt;/div&gt;&lt;div&gt;&lt;h3&gt;MCP 连接 —— 它的材料&lt;/h3&gt;&lt;p&gt;把真实世界的数据和系统接进来。没有这个，前面两样再强，也只能在真空里打转。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;p&gt;换句话说：&lt;span class=&quot;em&quot;&gt;技能决定它做事的章法，团队决定它能扛多大的活，连接决定它手上有多少真材实料。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;三者缺一，你得到的就还是一个「聊得挺好、干不了事」的 AI。&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s6&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🎯&lt;/div&gt;&lt;h2&gt;三题小测 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;做完这三题，场景感就有了&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;quiz&quot;&gt;&lt;div class=&quot;q-item card&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;1&lt;/span&gt;「完全没接通」和「接通了文档」的核心差别是什么？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;c&quot; data-explain=&quot; 接文档之后，它开始引用你公司的真实条款与资料，不再凭训练时的通用印象发挥。这一步没有改变模型本身的脑力，改变的是它手上的材料。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 模型突然变得更聪明了&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 回答的速度明显变快了&lt;/button&gt;&lt;button data-v=&quot;c&quot;&gt;C. 它开始引用你公司的真实资料&lt;/button&gt;&lt;button data-v=&quot;d&quot;&gt;D. 它从此不会再说错话&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;q-item card&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;2&lt;/span&gt;「跨系统串联」的价值主要在于？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;b&quot; data-explain=&quot; 单一数据源往往只能看到局部。真正的归因与决策需要把多个系统的信息放在一起看，这正是跨系统串联不可替代的地方，也是 AI 从问答升级为分析的关窍。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 能省下一台服务器的钱&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 单个数据源答不出的结论，合起来能答出来&lt;/button&gt;&lt;button data-v=&quot;c&quot;&gt;C. 不需要任何权限就能访问所有系统&lt;/button&gt;&lt;button data-v=&quot;d&quot;&gt;D. 可以让多个 AI 互相聊天解闷&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;q-item card&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;3&lt;/span&gt;关于「连接」，下面哪种说法最贴切？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;a&quot; data-explain=&quot; 三者是互补关系：技能管做事的章法，多智能体管任务规模，连接管真实数据的来源。缺了任何一样，AI 都停留在能聊而不能干的状态。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 它和技能、多智能体是互补的，缺一不可&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 有了它，技能和多智能体就都不需要了&lt;/button&gt;&lt;button data-v=&quot;c&quot;&gt;C. 它只是锦上添花，有没有差别不大&lt;/button&gt;&lt;button data-v=&quot;d&quot;&gt;D. 它主要用来让对话界面变好看&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;final-cta reveal&quot;&gt;&lt;div class=&quot;emoji&quot;&gt;🛡️&lt;/div&gt;&lt;h2&gt;下一站：插座万能，不代表什么都能插&lt;/h2&gt;&lt;p&gt;能力越强，风险也越大。最后一篇我们聊边界——哪些东西不能随便接通，以及接通之后该怎么管。下一篇见。&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/main&gt;&lt;script&gt;(function () {
  var root = document.currentScript.closest(&#039;.ai-mcp&#039;);
  
  // ---- 滚动显现 ----
  const io = new IntersectionObserver((entries) =&gt; {
    entries.forEach(e =&gt; { if (e.isIntersecting) { e.target.classList.add(&#039;in&#039;); io.unobserve(e.target); } });
  }, { threshold: 0.12 });
  root.querySelectorAll(&#039;.reveal&#039;).forEach(el =&gt; io.observe(el));

  // ---- 目录高亮 ----
  const links = root.querySelectorAll(&#039;.toc a&#039;);
  const secs = [...links].map(a =&gt; root.querySelector(a.getAttribute(&#039;href&#039;)));
  const spy = new IntersectionObserver((entries) =&gt; {
    entries.forEach(e =&gt; {
      if (e.isIntersecting) {
        links.forEach(l =&gt; l.classList.remove(&#039;active&#039;));
        const hit = links.find(l =&gt; l.getAttribute(&#039;href&#039;) === &#039;#&#039; + e.target.id);
        if (hit) hit.classList.add(&#039;active&#039;);
      }
    });
  }, { rootMargin: &#039;-30% 0px -60% 0px&#039; });
  secs.forEach(s =&gt; s &amp;&amp; spy.observe(s));

  // ---- 连接程度对比 ----
  const reply = {
    off: {
      cls: &#039;bad&#039;,
      head: &#039;😵 完全没接数据源&#039;,
      body: &#039;退货率上升，通常与以下几个方面有关：一是物流时效是否下降；二是产品质量是否出现波动；三是客服体验是否影响复购意愿。建议贵司从这几个维度逐一排查，必要时建立监控指标。&#039;
        + &#039;&lt;br&gt;&lt;br&gt;&lt;b&gt;📌 评价：&lt;/b&gt;句句正确，句句没用。因为它没有任何一条来自你公司的真实信息。&#039;
    },
    read: {
      cls: &#039;mid&#039;,
      head: &#039;📄 接通了文档资料&#039;,
      body: &#039;根据贵司《售后管理制度》第 3.2 条，退货需在签收后 7 日内提出；参照《客服话术手册》，退换货争议主要由客服侧先行判定。&lt;b&gt;从制度层面看&lt;/b&gt;，上个月并没有条款变更，因此制度不是本次波动的原因。&#039;
        + &#039;&lt;br&gt;&lt;br&gt;&lt;b&gt;📌 进步：&lt;/b&gt;引用了你真实的制度文件，不再是空口白话。但它只知道规矩，不知道数字。&#039;
    },
    full: {
      cls: &#039;good&#039;,
      head: &#039;🔌 文档 + 数据 + 系统全接通&#039;,
      body: &#039;查到了。上月华东区退货率 4.7%，环比上升 1.9 个百分点，主要来源有两个：&lt;br&gt;&#039;
        + &#039;① 华东仓有 3 天出库延迟，涉及订单 1,842 单，占新增退货的 61%；&lt;br&gt;&#039;
        + &#039;② 客诉系统里同期新增一条关于包装破损的集中反馈，共 217 条。&lt;br&gt;&#039;
        + &#039;已排除因素：本月无制度条款变更、无价格调整。&lt;br&gt;&#039;
        + &#039;&lt;b&gt;建议：&lt;/b&gt;优先处理华东仓出库时效，这两项合计可以解释约八成的增量。&#039;
        + &#039;&lt;br&gt;&lt;br&gt;&lt;b&gt;📌 评价：&lt;/b&gt;这才是能拿去开会的答案——有数字、有归因、有优先级。&#039;
    }
  };
  const replyBox = root.querySelector(&#039;#replyBox&#039;);
  function paintReply(k) {
    const r = reply[k];
    replyBox.innerHTML = &#039;&lt;div class=&quot;reply &#039; + r.cls + &#039;&quot;&gt;&lt;h3&gt;&#039; + r.head + &#039;&lt;/h3&gt;&lt;p&gt;&#039; + r.body + &#039;&lt;/p&gt;&lt;/div&gt;&#039;;
  }
  root.querySelectorAll(&#039;#modeBar button&#039;).forEach(btn =&gt; {
    btn.onclick = () =&gt; {
      root.querySelectorAll(&#039;#modeBar button&#039;).forEach(b =&gt; b.classList.remove(&#039;on&#039;));
      btn.classList.add(&#039;on&#039;);
      paintReply(btn.dataset.k);
    };
  });
  paintReply(&#039;off&#039;);

  // ---- Quiz ----
  root.querySelectorAll(&#039;.quiz .q-item&#039;).forEach(qi =&gt; {
    const opts = qi.querySelector(&#039;.opts&#039;);
    const explain = qi.querySelector(&#039;.q-explain&#039;);
    const answer = opts.dataset.answer;
    let done = false;
    opts.querySelectorAll(&#039;button&#039;).forEach(btn =&gt; {
      btn.onclick = () =&gt; {
        if (done) return;
        done = true;
        const pick = btn.dataset.v;
        opts.querySelectorAll(&#039;button&#039;).forEach(b =&gt; {
          if (b.dataset.v === answer) b.classList.add(&#039;right&#039;);
          else if (b === btn) b.classList.add(&#039;wrong&#039;);
        });
        explain.textContent = opts.dataset.explain;
        explain.classList.add(&#039;show&#039;);
      };
    });
  });

  // 兜底：2 秒后强制显示所有 reveal 元素，避免任何环境下内容被隐藏
  setTimeout(function () {
    root.querySelectorAll(&#039;.reveal&#039;).forEach(function (el) { el.classList.add(&#039;in&#039;); });
  }, 2000);
})();&lt;/script&gt;&lt;/div&gt;&lt;!-- AI 打工日志 · MCP 篇 · 第3篇 · 结束 --&gt;</description><pubDate>Tue, 06 Oct 2026 07:25:00 +0800</pubDate></item><item><title>MCP 怎么装：把办公室的网线插进墙上的网口 | AI 打工日志·MCP篇②</title><link>https://imwen.com/post/395.html</link><description>&lt;!-- AI 打工日志 · MCP 篇 · 第2篇 · 交互完整版（样式已隔离，勿在可视化编辑器中编辑源码模式之外的内容） --&gt;&lt;div class=&quot;ai-mcp ai-mcp-2&quot;&gt;&lt;style&gt;.ai-mcp-2 {
    --primary: #3F3B6E;
    --primary-light: #ECEBF4;
    --primary-soft: #C9C5E4;
    --primary-deep: #2E2B52;
    --accent: #6C63C4;
    --bg: #FAF7F2;
    --card: #FFFFFF;
    --ink: #2B2724;
    --ink-soft: #6B6259;
    --line: #EDE5DA;
    --radius: 20px;
    --serif: &quot;Songti SC&quot;, &quot;STSong&quot;, &quot;SimSun&quot;, Georgia, serif;
    --sans: -apple-system, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Segoe UI&quot;, sans-serif;
  }
  .ai-mcp-2 * { margin: 0; padding: 0; box-sizing: border-box; }
  .ai-mcp-2 { font-family: var(--sans); background: var(--bg); color: var(--ink); line-height: 1.85; font-size: 17px; }
  .ai-mcp-2 .wrap { max-width: 760px; margin: 0 auto; padding: 0 22px; }
  .ai-mcp-2 .hero { background: linear-gradient(160deg, var(--primary) 0%, var(--accent) 100%); color: #fff; padding: 72px 0 88px; position: relative; overflow: hidden; }
  .ai-mcp-2 .hero::after { content: &quot;&quot;; position: absolute; bottom: -2px; left: 0; right: 0; height: 44px; background: var(--bg); border-radius: 44px 44px 0 0; }
  .ai-mcp-2 .series-tag { display: inline-block; background: rgba(255,255,255,.18); border: 1px solid rgba(255,255,255,.4); border-radius: 999px; padding: 5px 16px; font-size: 13px; letter-spacing: 2px; margin-bottom: 26px; }
  .ai-mcp-2 .hero .ep { font-size: 14px; letter-spacing: 6px; opacity: .85; margin-bottom: 10px; }
  .ai-mcp-2 .hero h1 { font-family: var(--serif); font-size: clamp(30px, 5.6vw, 46px); line-height: 1.35; font-weight: 700; margin-bottom: 18px; }
  .ai-mcp-2 .hero .sub { font-size: 18px; opacity: .92; }
  .ai-mcp-2 .hero .meta { margin-top: 30px; font-size: 13px; opacity: .75; }
  .ai-mcp-2 .toc { position: sticky; top: 0; z-index: 50; background: rgba(250,247,242,.92); backdrop-filter: blur(10px); border-bottom: 1px solid var(--line); padding: 10px 0; }
  .ai-mcp-2 .toc .wrap { display: flex; gap: 8px; overflow-x: auto; white-space: nowrap; scrollbar-width: none; }
  .ai-mcp-2 .toc .wrap::-webkit-scrollbar { display: none; }
  .ai-mcp-2 .toc a { flex: 0 0 auto; text-decoration: none; color: var(--ink-soft); font-size: 14px; padding: 6px 14px; border-radius: 999px; border: 1px solid transparent; transition: all .25s; }
  .ai-mcp-2 .toc a:hover, .ai-mcp-2 .toc a.active { color: var(--primary-deep); background: var(--primary-soft); border-color: var(--primary-soft); }
  .ai-mcp-2 section { padding: 64px 0 8px; }
  .ai-mcp-2 .sec-head { display: flex; align-items: center; gap: 14px; margin-bottom: 26px; }
  .ai-mcp-2 .sec-num { width: 52px; height: 52px; flex: 0 0 52px; border-radius: 16px; background: var(--primary-soft); display: flex; align-items: center; justify-content: center; font-size: 26px; }
  .ai-mcp-2 .sec-head h2 { font-family: var(--serif); font-size: clamp(22px, 3.6vw, 28px); line-height: 1.4; }
  .ai-mcp-2 .sec-head .sec-sub { font-size: 13px; color: var(--ink-soft); display: block; font-family: var(--sans); font-weight: 400; margin-top: 2px; }
  .ai-mcp-2 .card { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 28px 26px; margin-bottom: 22px; box-shadow: 0 2px 10px rgba(43,39,36,.04); }
  .ai-mcp-2 p + p { margin-top: 16px; }
  .ai-mcp-2 .card h3 { font-size: 18px; margin-bottom: 12px; display: flex; align-items: center; gap: 8px; }
  .ai-mcp-2 .em { color: var(--primary-deep); font-weight: 700; }
  .ai-mcp-2 strong { font-weight: 700; }
  .ai-mcp-2 .quote { margin: 34px 0; background: linear-gradient(135deg, var(--primary) 0%, var(--accent) 100%); color: #fff; border-radius: var(--radius); padding: 34px 30px; font-family: var(--serif); font-size: clamp(19px, 3vw, 23px); line-height: 1.7; position: relative; }
  .ai-mcp-2 .quote::before { content: &quot;❝&quot;; position: absolute; top: 10px; left: 18px; font-size: 44px; opacity: .3; }
  .ai-mcp-2 .quote .who { display: block; margin-top: 14px; font-family: var(--sans); font-size: 13px; opacity: .8; }
  .ai-mcp-2 .demo { background: var(--card); border: 2px dashed var(--primary); border-radius: var(--radius); padding: 30px 26px; margin: 30px 0; }
  .ai-mcp-2 .demo-title { text-align: center; font-weight: 700; font-size: 16px; color: var(--primary-deep); letter-spacing: 1px; margin-bottom: 6px; }
  .ai-mcp-2 .demo-hint { text-align: center; font-size: 13px; color: var(--ink-soft); margin-bottom: 20px; }
  .ai-mcp-2 .code { background: #F4F2FB; border: 1px solid var(--primary-soft); border-radius: 14px; padding: 18px 18px; font-family: &quot;SFMono-Regular&quot;, Consolas, &quot;Courier New&quot;, monospace; font-size: 13.5px; line-height: 1.9; overflow-x: auto; white-space: pre; color: var(--primary-deep); margin: 16px 0; }
  .ai-mcp-2 .code .cm { color: #8A86B0; }
  .ai-mcp-2 .step-grid { display: grid; grid-template-columns: 1fr; gap: 14px; margin: 22px 0; }
  .ai-mcp-2 .step-card { background: #fff; border: 1.5px solid var(--line); border-radius: 16px; padding: 20px 20px; display: flex; gap: 14px; align-items: flex-start; }
  .ai-mcp-2 .step-card .s-no { flex: 0 0 34px; height: 34px; border-radius: 10px; background: var(--primary); color: #fff; display: flex; align-items: center; justify-content: center; font-size: 15px; font-weight: 700; }
  .ai-mcp-2 .step-card h3 { font-size: 16.5px; margin-bottom: 6px; color: var(--primary-deep); }
  .ai-mcp-2 .step-card p { font-size: 14.5px; color: var(--ink-soft); }
  .ai-mcp-2 .diag-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 16px; }
  .ai-mcp-2 .d-item { background: #fff; border: 1.5px solid var(--line); border-radius: 14px; padding: 14px 16px; cursor: pointer; transition: all .2s; text-align: left; font-family: var(--sans); }
  .ai-mcp-2 .d-item:hover { transform: translateY(-2px); box-shadow: 0 5px 14px rgba(43,39,36,.1); }
  .ai-mcp-2 .d-item.on { border-color: var(--primary); background: var(--primary-light); }
  .ai-mcp-2 .d-item .d-ico { font-size: 22px; }
  .ai-mcp-2 .d-item b { display: block; font-size: 15px; margin-top: 4px; }
  .ai-mcp-2 .d-item span { font-size: 12.5px; color: var(--ink-soft); }
  .ai-mcp-2 .d-result { background: var(--primary-light); border: 1px solid var(--primary-soft); border-radius: 14px; padding: 18px 20px; font-size: 14.5px; min-height: 130px; }
  .ai-mcp-2 .d-result h3 { color: var(--primary-deep); font-size: 15.5px; margin-bottom: 8px; }
  .ai-mcp-2 .d-result .rx { margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--primary-soft); }
  .ai-mcp-2 .d-result .rx b { color: var(--primary-deep); }
  .ai-mcp-2 .check-list { list-style: none; }
  .ai-mcp-2 .check-list li { padding: 12px 16px; margin: 10px 0; border-radius: 12px; border: 1px solid var(--line); background: #fff; }
  .ai-mcp-2 .check-list li b { color: var(--primary-deep); }
  .ai-mcp-2 .quiz { margin: 26px 0 6px; }
  .ai-mcp-2 .q-item { margin-bottom: 22px; }
  .ai-mcp-2 .q-item .q { font-weight: 700; font-size: 16px; margin-bottom: 12px; }
  .ai-mcp-2 .q-item .q .qn { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; border-radius: 8px; background: var(--primary); color: #fff; font-size: 14px; margin-right: 8px; vertical-align: -5px; }
  .ai-mcp-2 .opts { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
  .ai-mcp-2 .opts button { font-family: var(--sans); font-size: 14.5px; text-align: left; padding: 12px 16px; border-radius: 12px; border: 1.5px solid var(--line); background: #fff; color: var(--ink); cursor: pointer; transition: all .2s; line-height: 1.6; }
  .ai-mcp-2 .opts button:hover { border-color: var(--primary); }
  .ai-mcp-2 .opts button.right { border-color: #2B8A3E; background: #EBF7EE; color: #1B5E2B; font-weight: 700; }
  .ai-mcp-2 .opts button.wrong { border-color: #C92A2A; background: #FFF0F0; color: #A61E1E; }
  .ai-mcp-2 .q-explain { margin-top: 10px; font-size: 13.5px; color: var(--ink-soft); background: var(--primary-light); border-radius: 10px; padding: 10px 14px; display: none; }
  .ai-mcp-2 .q-explain.show { display: block; }
  .ai-mcp-2 .final-cta { margin: 50px 0 10px; text-align: center; padding: 44px 26px; background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); }
  .ai-mcp-2 .final-cta .emoji { font-size: 40px; }
  .ai-mcp-2 .final-cta h2 { font-family: var(--serif); font-size: 24px; margin: 12px 0 10px; }
  .ai-mcp-2 footer { text-align: center; padding: 30px 0 50px; color: var(--ink-soft); font-size: 13px; }
  .ai-mcp-2 .reveal { opacity: 0; transform: translateY(26px); transition: all .7s cubic-bezier(.22,.61,.36,1); }
  .ai-mcp-2 .reveal.in { opacity: 1; transform: none; }
  @media (max-width: 560px) {.ai-mcp-2 .opts, .ai-mcp-2 .diag-grid { grid-template-columns: 1fr; } .ai-mcp-2 .step-card { flex-direction: column; } }


  /* === Z-Blog 正文适配层 === */
  .ai-mcp { font-size: 17px; line-height: 1.85; color: #2B2724; }
  .ai-mcp .tri-banner { text-align: center; padding: 8px 0 4px; margin-bottom: 18px; }
  .ai-mcp .tri-banner .tri-title {
    font-family: &quot;Songti SC&quot;, &quot;STSong&quot;, &quot;SimSun&quot;, Georgia, serif;
    font-size: clamp(22px, 3.4vw, 30px); line-height: 1.45; margin: 16px 0 8px; font-weight: 700;
  }
  .ai-mcp .tri-banner .tri-sub { font-size: 15px; color: #6B6259; }
  .ai-mcp .tri-banner .series-tag {
    background: var(--primary-soft); border: 1px solid var(--primary);
    color: var(--primary-deep); margin-bottom: 0;
  }
  .ai-mcp main { display: block; }&lt;/style&gt;&lt;header class=&quot;tri-banner&quot;&gt;&lt;span class=&quot;series-tag&quot;&gt;AI 打工日志 · MCP 篇&lt;/span&gt;
 &amp;nbsp;&lt;h2 class=&quot;tri-title&quot;&gt;《MCP 怎么装：把办公室的网线插进墙上的网口》&lt;/h2&gt;&lt;p class=&quot;tri-sub&quot;&gt;原理懂了，线怎么插是个手艺活 · 阅读约 9 分钟 · 无需技术背景&lt;/p&gt;&lt;p class=&quot;tri-sub&quot;&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/10/202610051791199899996495.jpg&quot; alt=&quot;mcp-cover-2.jpg&quot; width=&quot;768&quot; height=&quot;512&quot; border=&quot;0&quot; vspace=&quot;0&quot; title=&quot;mcp-cover-2.jpg&quot; style=&quot;width: 768px; height: 512px;&quot;/&gt;&lt;/p&gt;&lt;/header&gt;&lt;main class=&quot;wrap&quot;&gt;&lt;section id=&quot;s1&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;📦&lt;/div&gt;&lt;h2&gt;动手之前，先想清楚三件事 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;跳过这一步，后面全是返工&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;p&gt;很多人装 MCP 的姿势是：看别人推荐了个服务端，装上；发现用不上，卸了；换下一个。三天过去，一个都没跑通。&lt;/p&gt;&lt;p&gt;问题不在手速，在于&lt;span class=&quot;em&quot;&gt;没先回答三个问题&lt;/span&gt;：&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;step-grid&quot;&gt;&lt;div class=&quot;step-card&quot;&gt;&lt;div class=&quot;s-no&quot;&gt;1&lt;/div&gt;&lt;div&gt;&lt;h3&gt;我要读的是什么？&lt;/h3&gt;&lt;p&gt;是本地文件夹、某个数据库、还是一套在线系统的接口？数据源形态决定了服务端类型，也决定了它跑在哪台机器上。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;step-card&quot;&gt;&lt;div class=&quot;s-no&quot;&gt;2&lt;/div&gt;&lt;div&gt;&lt;h3&gt;我有没有这个权限？&lt;/h3&gt;&lt;p&gt;有没有可用的账号、令牌、可见范围？很多「装完失败」其实是权限问题，早一步确认能省半天。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;step-card&quot;&gt;&lt;div class=&quot;s-no&quot;&gt;3&lt;/div&gt;&lt;div&gt;&lt;h3&gt;有没有人已经写过？&lt;/h3&gt;&lt;p&gt;常见系统通常已有现成的服务端实现。先找现成的，找不到再考虑自己写——重复造轮子是新手最大的时间黑洞。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;quote&quot;&gt;先开清单，再动手。&lt;br/&gt;装 MCP 花的时间，八成不在安装本身。&lt;span class=&quot;who&quot;&gt;—— 一位把周末耗在配置文件上的人&lt;/span&gt;
 &amp;nbsp;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s2&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🔀&lt;/div&gt;&lt;h2&gt;三种接法，别选错 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;本地跑还是远程连，决定了后面的一切&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;p&gt;笼统地说，把一个服务端挂到主机上有三类常见方式。它们没有优劣，只有&lt;span class=&quot;em&quot;&gt;适不适合你现在的场景&lt;/span&gt;。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;h3&gt;🏠 本地进程方式&lt;/h3&gt;&lt;p&gt;服务端就跑在你自己的电脑上，主机启动它、跟它对话。适合处理本地文件、本地项目、私人资料。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;优点：&lt;/strong&gt;数据不出本机，快，也不需要别人给你开访问权限。&lt;br/&gt;&lt;strong&gt;代价：&lt;/strong&gt;要在本机装运行环境，换台机器得重新配一遍。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;h3&gt;🌐 远程连接方式&lt;/h3&gt;&lt;p&gt;服务端跑在服务器上，你通过网络连过去。适合团队共用、需要访问公司系统、或者数据源本来就在云端的情况。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;优点：&lt;/strong&gt;一次部署全团队可用，成员不用各自折腾环境。&lt;br/&gt;&lt;strong&gt;代价：&lt;/strong&gt;涉及网络、鉴权、可用性，还要考虑谁能连。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;h3&gt;🧭 怎么选：一张对照&lt;/h3&gt;&lt;ul class=&quot;check-list list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;🏠 &lt;strong&gt;资料在你自己电脑上&lt;/strong&gt; —— 本地进程方式，简单直接&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;👥 &lt;strong&gt;要给整个团队用&lt;/strong&gt; —— 远程方式，一次部署大家受益&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;🏢 &lt;strong&gt;要连公司内部系统&lt;/strong&gt; —— 远程方式，注意先拿到权限&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;🔬 &lt;strong&gt;只是先试试好不好用&lt;/strong&gt; —— 本地方式起步，验证价值后再上远程&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s3&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;📝&lt;/div&gt;&lt;h2&gt;一份最小可用的配置 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;看懂结构，比抄一段代码重要&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;p&gt;不同主机的配置文件位置和写法略有差别，但核心结构高度一致：&lt;span class=&quot;em&quot;&gt;给这个服务端起个名字 → 说明怎么启动它 → 告诉它需要什么钥匙&lt;/span&gt;。&lt;/p&gt;&lt;p&gt;下面是一个通用化的示意，隐去了具体产品名和真实密钥，重点看结构：&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;{ &amp;nbsp;&lt;span class=&quot;cm&quot;&gt;// 给这组服务端起个好记的名字&lt;/span&gt;
 &amp;nbsp;&amp;quot;myDataHub&amp;quot;: {&lt;span class=&quot;cm&quot;&gt;// 本地进程方式：用哪条命令启动它&lt;/span&gt;&amp;quot;command&amp;quot;: &amp;quot;some-server-starter&amp;quot;,
 &amp;nbsp; &amp;nbsp;&amp;quot;args&amp;quot;: [&amp;quot;--scope&amp;quot;, &amp;quot;readonly&amp;quot;],&lt;span class=&quot;cm&quot;&gt;// 钥匙不写死，引用环境变量&lt;/span&gt;&amp;quot;env&amp;quot;: {
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;ACCESS_TOKEN&amp;quot;: &amp;quot;${MY_TOKEN}&amp;quot;
 &amp;nbsp; &amp;nbsp;}
 &amp;nbsp;}
}&lt;/div&gt;&lt;p&gt;&lt;strong&gt;三个字段的含义：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;em&quot;&gt;名字&lt;/span&gt;是你日后在对话里唤起它的标识，起短一点、好认一点。&lt;span class=&quot;em&quot;&gt;启动方式&lt;/span&gt;告诉主机去哪里把它拉起来。&lt;span class=&quot;em&quot;&gt;环境变量区&lt;/span&gt;放它需要的凭据，而不是明文写进去。&lt;/p&gt;&lt;p&gt;新手最常见的失败是&lt;span class=&quot;em&quot;&gt;逗号、引号、路径&lt;/span&gt;这三样。改完配置，先用一个校验工具或让编辑器检查一下格式是否合法，能省掉大量无意义的重试。&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s4&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🔑&lt;/div&gt;&lt;h2&gt;钥匙到底该藏在哪 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;这一段请务必读完&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;p&gt;配置文件里最不该出现的，就是明文的令牌、密码、数据库连接串。原因很朴素：&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;em&quot;&gt;配置文件会被复制、被分享、被提交到代码仓库、被截图发到群里。&lt;/span&gt;一旦泄漏，捡到的人拿到的是完整的访问能力，而且往往没人第一时间发现。&lt;/p&gt;&lt;p&gt;正确的做法是让配置文件只写&lt;span class=&quot;em&quot;&gt;去哪里取钥匙&lt;/span&gt;，而不是钥匙本身：&lt;/p&gt;&lt;ul class=&quot;check-list list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;✅ &lt;strong&gt;用环境变量引用&lt;/strong&gt; —— 配置里只出现变量名，真实值放在本机或服务器的环境里&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;✅ &lt;strong&gt;用专门的凭据管理&lt;/strong&gt; —— 团队场景优先用统一的密钥保管服务，还能集中吊销&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;❌ &lt;strong&gt;不要写死在配置文件里&lt;/strong&gt; —— 尤其是准备交给别人或进版本库的那份&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;❌ &lt;strong&gt;不要把整份配置贴到公开场合求助&lt;/strong&gt; —— 求助前先给敏感信息打码&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class=&quot;quote&quot;&gt;配置可以分享，钥匙永远不行。&lt;br/&gt;这两件事应该从物理上分开。&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s5&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🩺&lt;/div&gt;&lt;h2&gt;装了不工作？先对症状 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;四类高频故障，点开看排查顺序&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;demo reveal&quot;&gt;&lt;div class=&quot;demo-title&quot;&gt;🧪 故障诊断对照表&lt;/div&gt;&lt;p class=&quot;demo-hint&quot;&gt;点一个症状，看该按什么顺序排查&lt;/p&gt;&lt;div class=&quot;diag-grid&quot;&gt;&lt;button class=&quot;d-item&quot; data-k=&quot;silent&quot;&gt;&lt;span class=&quot;d-ico&quot;&gt;😶&lt;/span&gt;&lt;strong&gt;完全没反应&lt;/strong&gt;像从来没装过&lt;/button&gt;&lt;button class=&quot;d-item&quot; data-k=&quot;notool&quot;&gt;&lt;span class=&quot;d-ico&quot;&gt;🧰&lt;/span&gt;&lt;strong&gt;找不到能力&lt;/strong&gt;连上却用不了&lt;/button&gt;&lt;button class=&quot;d-item&quot; data-k=&quot;auth&quot;&gt;&lt;span class=&quot;d-ico&quot;&gt;🔒&lt;/span&gt;&lt;strong&gt;鉴权失败&lt;/strong&gt;报权限错误&lt;/button&gt;&lt;button class=&quot;d-item&quot; data-k=&quot;timeout&quot;&gt;&lt;span class=&quot;d-ico&quot;&gt;🐢&lt;/span&gt;&lt;strong&gt;时灵时不灵&lt;/strong&gt;偶尔超时卡住&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;d-result&quot; id=&quot;dResult&quot;&gt;👈 选一个症状，这里给出排查顺序与对策。&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;p&gt;最后留一条通用心法：&lt;span class=&quot;em&quot;&gt;把服务端单独拎出来手动跑一次。&lt;/span&gt;跑得起来，问题在主机配置；跑不起来，问题在服务端自己。这一招能把你从「到底是哪里坏了」的循环里直接救出来。&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s6&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🎯&lt;/div&gt;&lt;h2&gt;三题小测 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;做完这三题，上手就不慌了&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;quiz&quot;&gt;&lt;div class=&quot;q-item card&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;1&lt;/span&gt;要给整个团队共用同一套数据源，优先选哪种接法？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;b&quot; data-explain=&quot; 团队共用意味着要一次部署多处可用，远程连接方式正合适。本地进程方式每台机器都要配一遍，且受成员本机环境差异影响，不适合共享场景。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 本地进程方式，各自在电脑上装&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 远程连接方式，统一部署一处&lt;/button&gt;&lt;button data-v=&quot;c&quot;&gt;C. 让每个人自己复制一份数据&lt;/button&gt;&lt;button data-v=&quot;d&quot;&gt;D. 装哪个都一样，随便&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;q-item card&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;2&lt;/span&gt;配置文件里的令牌，正确做法是？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;c&quot; data-explain=&quot; 配置只负责说明去哪里取钥匙，真实值留在环境或专门的凭据服务里。这样配置可以被复制、提交、分享，也不会把访问能力一起交出去。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 直接写进配置，方便查看&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 截图发群里请同事帮忙看&lt;/button&gt;&lt;button data-v=&quot;c&quot;&gt;C. 用变量名引用，值放在环境变量里&lt;/button&gt;&lt;button data-v=&quot;d&quot;&gt;D. 贴到备忘录里保存&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;q-item card&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;3&lt;/span&gt;服务端「完全没反应」时，最应该先确认什么？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;a&quot; data-explain=&quot; 改错配置文件是最常见的原因，很多工具不止一个配置入口。确认配置位置 → 看启动日志 → 重启应用，这个顺序能解决大多数毫无反应的情况。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 改的是不是真正生效的那份配置&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 换个更好看的主题界面&lt;/button&gt;&lt;button data-v=&quot;c&quot;&gt;C. 把电脑重启三次&lt;/button&gt;&lt;button data-v=&quot;d&quot;&gt;D. 重新安装操作系统&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;final-cta reveal&quot;&gt;&lt;div class=&quot;emoji&quot;&gt;🚀&lt;/div&gt;&lt;h2&gt;下一站：插上之后能干什么&lt;/h2&gt;&lt;p&gt;线插好了，下一件事是让它真的干活——读文件、查库、连系统，以及这些能力组合起来能做些什么。下一篇见。&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/main&gt;&lt;script&gt;(function () {
  var root = document.currentScript.closest(&#039;.ai-mcp&#039;);
  
  // ---- 滚动显现 ----
  const io = new IntersectionObserver((entries) =&gt; {
    entries.forEach(e =&gt; { if (e.isIntersecting) { e.target.classList.add(&#039;in&#039;); io.unobserve(e.target); } });
  }, { threshold: 0.12 });
  root.querySelectorAll(&#039;.reveal&#039;).forEach(el =&gt; io.observe(el));

  // ---- 目录高亮 ----
  const links = root.querySelectorAll(&#039;.toc a&#039;);
  const secs = [...links].map(a =&gt; root.querySelector(a.getAttribute(&#039;href&#039;)));
  const spy = new IntersectionObserver((entries) =&gt; {
    entries.forEach(e =&gt; {
      if (e.isIntersecting) {
        links.forEach(l =&gt; l.classList.remove(&#039;active&#039;));
        const hit = links.find(l =&gt; l.getAttribute(&#039;href&#039;) === &#039;#&#039; + e.target.id);
        if (hit) hit.classList.add(&#039;active&#039;);
      }
    });
  }, { rootMargin: &#039;-30% 0px -60% 0px&#039; });
  secs.forEach(s =&gt; s &amp;&amp; spy.observe(s));

  // ---- 常见故障诊断 ----
  const diag = {
    silent: {
      title: &#039;😶 症状：装完完全没反应，像没装一样&#039;,
      why: &#039;&lt;b&gt;排查：&lt;/b&gt;先确认改动的配置是不是被真正生效的那份——很多工具有多处配置入口，改错文件是最常见的原因。其次看日志文件，启动失败通常会留下痕迹。最后确认是否需要重启应用。&#039;,
      rx: &#039;&lt;b&gt;💡 顺序：&lt;/b&gt;确认配置位置 → 看启动日志 → 重启应用再试。这三步能解决大多数「毫无反应」。&#039;
    },
    notool: {
      title: &#039;🧰 症状：连上了，但找不到它提供任何能力&#039;,
      why: &#039;&lt;b&gt;排查：&lt;/b&gt;多半是服务端启动时就退出了，或者能力列表为空。检查运行环境是否齐全、依赖是否安装、命令路径是否写对。可以用命令行单独跑一次服务端，看它能不能正常输出。&#039;,
      rx: &#039;&lt;b&gt;💡 关键动作：&lt;/b&gt;把服务端单独拎出来手动运行一次。能跑起来，问题就在主机的配置；跑不起来，问题在服务端自身。&#039;
    },
    auth: {
      title: &#039;🔒 症状：报鉴权失败、没有权限&#039;,
      why: &#039;&lt;b&gt;排查：&lt;/b&gt;顺序检查四件事：令牌是否填对、有没有多余空格、过期没有、以及是不是用错了环境的密钥（测试环境的钥匙开不了生产环境的门）。&#039;,
      rx: &#039;&lt;b&gt;💡 提醒：&lt;/b&gt;鉴权问题八成不是权限体系配错，而是值本身写错或用错环境。先肉眼比对值，再去动权限配置。&#039;
    },
    timeout: {
      title: &#039;🐢 症状：时灵时不灵，偶尔超时&#039;,
      why: &#039;&lt;b&gt;排查：&lt;/b&gt;先看网络是否稳定、远程地址是否可达；再看是不是单次返回的数据量过大，导致传输和处理都变慢。第三类是服务端自己有速率限制，被限流了。&#039;,
      rx: &#039;&lt;b&gt;💡 对策：&lt;/b&gt;网络不稳就换成本地接法；数据太大就加过滤条件只取需要的字段；被限流就降低调用频率或申请提高额度。&#039;
    }
  };
  const dResult = root.querySelector(&#039;#dResult&#039;);
  root.querySelectorAll(&#039;.d-item&#039;).forEach(item =&gt; {
    item.onclick = () =&gt; {
      root.querySelectorAll(&#039;.d-item&#039;).forEach(x =&gt; x.classList.remove(&#039;on&#039;));
      item.classList.add(&#039;on&#039;);
      const d = diag[item.dataset.k];
      dResult.innerHTML = &#039;&lt;h3&gt;&#039; + d.title + &#039;&lt;/h3&gt;&lt;p&gt;&#039; + d.why + &#039;&lt;/p&gt;&lt;p class=&quot;rx&quot;&gt;&#039; + d.rx + &#039;&lt;/p&gt;&#039;;
    };
  });

  // ---- Quiz ----
  root.querySelectorAll(&#039;.quiz .q-item&#039;).forEach(qi =&gt; {
    const opts = qi.querySelector(&#039;.opts&#039;);
    const explain = qi.querySelector(&#039;.q-explain&#039;);
    const answer = opts.dataset.answer;
    let done = false;
    opts.querySelectorAll(&#039;button&#039;).forEach(btn =&gt; {
      btn.onclick = () =&gt; {
        if (done) return;
        done = true;
        const pick = btn.dataset.v;
        opts.querySelectorAll(&#039;button&#039;).forEach(b =&gt; {
          if (b.dataset.v === answer) b.classList.add(&#039;right&#039;);
          else if (b === btn) b.classList.add(&#039;wrong&#039;);
        });
        explain.textContent = opts.dataset.explain;
        explain.classList.add(&#039;show&#039;);
      };
    });
  });

  // 兜底：2 秒后强制显示所有 reveal 元素，避免任何环境下内容被隐藏
  setTimeout(function () {
    root.querySelectorAll(&#039;.reveal&#039;).forEach(function (el) { el.classList.add(&#039;in&#039;); });
  }, 2000);
})();&lt;/script&gt;&lt;/div&gt;&lt;!-- AI 打工日志 · MCP 篇 · 第2篇 · 结束 --&gt;</description><pubDate>Mon, 05 Oct 2026 14:25:00 +0800</pubDate></item><item><title>MCP 是什么：给 AI 接一根通向真实世界的数据线 | AI 打工日志·MCP篇①</title><link>https://imwen.com/post/394.html</link><description>&lt;!-- AI 打工日志 · MCP 篇 · 第1篇 · 交互完整版（样式已隔离，勿在可视化编辑器中编辑源码模式之外的内容） --&gt;&lt;div class=&quot;ai-mcp ai-mcp-1&quot;&gt;&lt;style&gt;.ai-mcp-1 {
    --primary: #0B5C3F;
    --primary-light: #E6F2EC;
    --primary-soft: #BFE3D0;
    --primary-deep: #08432E;
    --accent: #38B07A;
    --bg: #FAF7F2;
    --card: #FFFFFF;
    --ink: #2B2724;
    --ink-soft: #6B6259;
    --line: #EDE5DA;
    --radius: 20px;
    --serif: &quot;Songti SC&quot;, &quot;STSong&quot;, &quot;SimSun&quot;, Georgia, serif;
    --sans: -apple-system, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Segoe UI&quot;, sans-serif;
  }
  .ai-mcp-1 * { margin: 0; padding: 0; box-sizing: border-box; }
  .ai-mcp-1 { font-family: var(--sans); background: var(--bg); color: var(--ink); line-height: 1.85; font-size: 17px; }
  .ai-mcp-1 .wrap { max-width: 760px; margin: 0 auto; padding: 0 22px; }
  .ai-mcp-1 .hero { background: linear-gradient(160deg, var(--primary) 0%, var(--accent) 100%); color: #fff; padding: 72px 0 88px; position: relative; overflow: hidden; }
  .ai-mcp-1 .hero::after { content: &quot;&quot;; position: absolute; bottom: -2px; left: 0; right: 0; height: 44px; background: var(--bg); border-radius: 44px 44px 0 0; }
  .ai-mcp-1 .series-tag { display: inline-block; background: rgba(255,255,255,.18); border: 1px solid rgba(255,255,255,.4); border-radius: 999px; padding: 5px 16px; font-size: 13px; letter-spacing: 2px; margin-bottom: 26px; }
  .ai-mcp-1 .hero .ep { font-size: 14px; letter-spacing: 6px; opacity: .85; margin-bottom: 10px; }
  .ai-mcp-1 .hero h1 { font-family: var(--serif); font-size: clamp(30px, 5.6vw, 46px); line-height: 1.35; font-weight: 700; margin-bottom: 18px; }
  .ai-mcp-1 .hero .sub { font-size: 18px; opacity: .92; }
  .ai-mcp-1 .hero .meta { margin-top: 30px; font-size: 13px; opacity: .75; }
  .ai-mcp-1 .toc { position: sticky; top: 0; z-index: 50; background: rgba(250,247,242,.92); backdrop-filter: blur(10px); border-bottom: 1px solid var(--line); padding: 10px 0; }
  .ai-mcp-1 .toc .wrap { display: flex; gap: 8px; overflow-x: auto; white-space: nowrap; scrollbar-width: none; }
  .ai-mcp-1 .toc .wrap::-webkit-scrollbar { display: none; }
  .ai-mcp-1 .toc a { flex: 0 0 auto; text-decoration: none; color: var(--ink-soft); font-size: 14px; padding: 6px 14px; border-radius: 999px; border: 1px solid transparent; transition: all .25s; }
  .ai-mcp-1 .toc a:hover, .ai-mcp-1 .toc a.active { color: var(--primary-deep); background: var(--primary-soft); border-color: var(--primary-soft); }
  .ai-mcp-1 section { padding: 64px 0 8px; }
  .ai-mcp-1 .sec-head { display: flex; align-items: center; gap: 14px; margin-bottom: 26px; }
  .ai-mcp-1 .sec-num { width: 52px; height: 52px; flex: 0 0 52px; border-radius: 16px; background: var(--primary-soft); display: flex; align-items: center; justify-content: center; font-size: 26px; }
  .ai-mcp-1 .sec-head h2 { font-family: var(--serif); font-size: clamp(22px, 3.6vw, 28px); line-height: 1.4; }
  .ai-mcp-1 .sec-head .sec-sub { font-size: 13px; color: var(--ink-soft); display: block; font-family: var(--sans); font-weight: 400; margin-top: 2px; }
  .ai-mcp-1 .card { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 28px 26px; margin-bottom: 22px; box-shadow: 0 2px 10px rgba(43,39,36,.04); }
  .ai-mcp-1 p + p { margin-top: 16px; }
  .ai-mcp-1 .card h3 { font-size: 18px; margin-bottom: 12px; display: flex; align-items: center; gap: 8px; }
  .ai-mcp-1 .em { color: var(--primary-deep); font-weight: 700; }
  .ai-mcp-1 strong { font-weight: 700; }
  .ai-mcp-1 .quote { margin: 34px 0; background: linear-gradient(135deg, var(--primary) 0%, var(--accent) 100%); color: #fff; border-radius: var(--radius); padding: 34px 30px; font-family: var(--serif); font-size: clamp(19px, 3vw, 23px); line-height: 1.7; position: relative; }
  .ai-mcp-1 .quote::before { content: &quot;❝&quot;; position: absolute; top: 10px; left: 18px; font-size: 44px; opacity: .3; }
  .ai-mcp-1 .quote .who { display: block; margin-top: 14px; font-family: var(--sans); font-size: 13px; opacity: .8; }
  .ai-mcp-1 .demo { background: var(--card); border: 2px dashed var(--primary); border-radius: var(--radius); padding: 30px 26px; margin: 30px 0; }
  .ai-mcp-1 .demo-title { text-align: center; font-weight: 700; font-size: 16px; color: var(--primary-deep); letter-spacing: 1px; margin-bottom: 6px; }
  .ai-mcp-1 .demo-hint { text-align: center; font-size: 13px; color: var(--ink-soft); margin-bottom: 20px; }
  .ai-mcp-1 .toggle-bar { display: flex; justify-content: center; gap: 10px; margin-bottom: 20px; }
  .ai-mcp-1 .toggle-bar button { font-family: var(--sans); font-size: 15px; font-weight: 600; padding: 9px 20px; border-radius: 999px; border: 1.5px solid var(--line); background: #fff; color: var(--ink-soft); cursor: pointer; transition: all .2s; }
  .ai-mcp-1 .toggle-bar button.on { border-color: var(--primary); background: var(--primary); color: #fff; box-shadow: 0 4px 14px rgba(11,92,63,.28); }
  .ai-mcp-1 .vs-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin: 22px 0; }
  .ai-mcp-1 .vs-card { border-radius: 16px; padding: 22px 20px; font-size: 14.5px; }
  .ai-mcp-1 .vs-card.old { background: #F6F3F0; border: 1px solid var(--line); }
  .ai-mcp-1 .vs-card.new { background: var(--primary-light); border: 1px solid var(--primary-soft); }
  .ai-mcp-1 .vs-card .v-ico { font-size: 28px; }
  .ai-mcp-1 .vs-card h3 { font-size: 16px; margin: 8px 0 6px; }
  .ai-mcp-1 .vs-card.new h3 { color: var(--primary-deep); }
  .ai-mcp-1 .vs-card ul { padding-left: 18px; }
  .ai-mcp-1 .vs-card li { margin: 4px 0; }
  .ai-mcp-1 .role-grid { display: grid; grid-template-columns: 1fr; gap: 14px; margin: 22px 0; }
  .ai-mcp-1 .role-card { background: #fff; border: 1.5px solid var(--line); border-radius: 16px; padding: 20px 20px; display: flex; gap: 14px; align-items: flex-start; }
  .ai-mcp-1 .role-card .r-ico { font-size: 30px; flex: 0 0 40px; text-align: center; }
  .ai-mcp-1 .role-card h3 { font-size: 16.5px; margin-bottom: 6px; color: var(--primary-deep); }
  .ai-mcp-1 .role-card p { font-size: 14.5px; color: var(--ink-soft); }
  .ai-mcp-1 .check-list { list-style: none; }
  .ai-mcp-1 .check-list li { padding: 12px 16px; margin: 10px 0; border-radius: 12px; border: 1px solid var(--line); background: #fff; }
  .ai-mcp-1 .check-list li b { color: var(--primary-deep); }
  .ai-mcp-1 .quiz { margin: 26px 0 6px; }
  .ai-mcp-1 .q-item { margin-bottom: 22px; }
  .ai-mcp-1 .q-item .q { font-weight: 700; font-size: 16px; margin-bottom: 12px; }
  .ai-mcp-1 .q-item .q .qn { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; border-radius: 8px; background: var(--primary); color: #fff; font-size: 14px; margin-right: 8px; vertical-align: -5px; }
  .ai-mcp-1 .opts { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
  .ai-mcp-1 .opts button { font-family: var(--sans); font-size: 14.5px; text-align: left; padding: 12px 16px; border-radius: 12px; border: 1.5px solid var(--line); background: #fff; color: var(--ink); cursor: pointer; transition: all .2s; line-height: 1.6; }
  .ai-mcp-1 .opts button:hover { border-color: var(--primary); }
  .ai-mcp-1 .opts button.right { border-color: #2B8A3E; background: #EBF7EE; color: #1B5E2B; font-weight: 700; }
  .ai-mcp-1 .opts button.wrong { border-color: #C92A2A; background: #FFF0F0; color: #A61E1E; }
  .ai-mcp-1 .q-explain { margin-top: 10px; font-size: 13.5px; color: var(--ink-soft); background: var(--primary-light); border-radius: 10px; padding: 10px 14px; display: none; }
  .ai-mcp-1 .q-explain.show { display: block; }
  .ai-mcp-1 .final-cta { margin: 50px 0 10px; text-align: center; padding: 44px 26px; background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); }
  .ai-mcp-1 .final-cta .emoji { font-size: 40px; }
  .ai-mcp-1 .final-cta h2 { font-family: var(--serif); font-size: 24px; margin: 12px 0 10px; }
  .ai-mcp-1 footer { text-align: center; padding: 30px 0 50px; color: var(--ink-soft); font-size: 13px; }
  .ai-mcp-1 .reveal { opacity: 0; transform: translateY(26px); transition: all .7s cubic-bezier(.22,.61,.36,1); }
  .ai-mcp-1 .reveal.in { opacity: 1; transform: none; }
  @media (max-width: 560px) {.ai-mcp-1 .vs-grid, .ai-mcp-1 .opts { grid-template-columns: 1fr; } .ai-mcp-1 .role-card { flex-direction: column; } }


  /* === Z-Blog 正文适配层 === */
  .ai-mcp { font-size: 17px; line-height: 1.85; color: #2B2724; }
  .ai-mcp .tri-banner { text-align: center; padding: 8px 0 4px; margin-bottom: 18px; }
  .ai-mcp .tri-banner .tri-title {
    font-family: &quot;Songti SC&quot;, &quot;STSong&quot;, &quot;SimSun&quot;, Georgia, serif;
    font-size: clamp(22px, 3.4vw, 30px); line-height: 1.45; margin: 16px 0 8px; font-weight: 700;
  }
  .ai-mcp .tri-banner .tri-sub { font-size: 15px; color: #6B6259; }
  .ai-mcp .tri-banner .series-tag {
    background: var(--primary-soft); border: 1px solid var(--primary);
    color: var(--primary-deep); margin-bottom: 0;
  }
  .ai-mcp main { display: block; }&lt;/style&gt;&lt;header class=&quot;tri-banner&quot;&gt;&lt;span class=&quot;series-tag&quot;&gt;AI 打工日志 · MCP 篇&lt;/span&gt;
 &amp;nbsp;&lt;h2 class=&quot;tri-title&quot;&gt;《MCP 是什么：给 AI 接一根通向真实世界的数据线》&lt;/h2&gt;&lt;p class=&quot;tri-sub&quot;&gt;一个高材生被困在没有门窗的房间里 · 阅读约 9 分钟 · 无需技术背景&lt;/p&gt;&lt;p class=&quot;tri-sub&quot;&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/09/202609241790231193681869.jpg&quot; alt=&quot;mcp-cover-1.jpg&quot; width=&quot;768&quot; height=&quot;512&quot; border=&quot;0&quot; vspace=&quot;0&quot; title=&quot;mcp-cover-1.jpg&quot; style=&quot;width: 768px; height: 512px;&quot;/&gt;&lt;/p&gt;&lt;/header&gt;&lt;main class=&quot;wrap&quot;&gt;&lt;section id=&quot;s1&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🔌&lt;/div&gt;&lt;h2&gt;插不上线的高材生 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;它很聪明，但它不知道你桌上有什么&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;p&gt;我们前面几季给这位 AI 同事配了本领（技能篇的 Skill），也给它招了团队（Agent 篇的多智能体协作）。到这一步，它写得了方案、排得了流程、分工也清清楚楚。&lt;/p&gt;&lt;p&gt;但你真把它拉到工位上，会发现一件尴尬的事：&lt;span class=&quot;em&quot;&gt;它对你公司的世界一无所知。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;你问它：&lt;strong&gt;上个月华东区的退货率为什么涨了？&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;它需要三样东西：销售数据库里的订单、客服系统里的投诉记录、仓库那张谁也没整理过的退货台账。这三样东西分别躺在三个不同的系统里，没有一个向 AI 敞开大门。&lt;/p&gt;&lt;p&gt;于是它只能这样回答你：&lt;em&gt;一般来说，退货率上升可能与物流时效、产品质量、客服体验有关，建议您从这几个维度排查……&lt;/em&gt;&lt;/p&gt;&lt;p&gt;这话没毛病，但也没用。这就是一个&lt;span class=&quot;em&quot;&gt;被困在没有门窗的房间里&lt;/span&gt;的高材生——脑子极好，手伸不出去。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;quote&quot;&gt;知识在模型里，数据在世界里。&lt;br/&gt;中间隔着一道墙，这堵墙叫「没接口」。&lt;span class=&quot;who&quot;&gt;—— 这就是为什么需要一个标准插座&lt;/span&gt;
 &amp;nbsp;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s2&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🧩&lt;/div&gt;&lt;h2&gt;一根插头对一百种口 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;在 MCP 出现之前，世界是这样的&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;p&gt;你当然可以说：那就给它开个接口呗。&lt;/p&gt;&lt;p&gt;问题是——&lt;span class=&quot;em&quot;&gt;开给谁？&lt;/span&gt; 你的 AI 助手可能有三四个（写文档的、写代码的、答疑的），公司里的数据源可能有七八处（数据库、工单系统、网盘、代码仓库、CRM……）。&lt;/p&gt;&lt;p&gt;如果每个 AI 应用要单独接每一个数据源，你需要做的接口数量是 &lt;strong&gt;3 × 7 = 21 个&lt;/strong&gt;。再加一个 AI 应用，变成 28 个。这就是工程师嘴里的 &lt;span class=&quot;em&quot;&gt;N×M 难题&lt;/span&gt;。&lt;/p&gt;&lt;p&gt;更麻烦的是，这 21 个接口由不同团队在不同时间写成，格式各写各的：有的要传 JSON，有的要拼查询串；有的用这家的鉴权，有的用那家的令牌。换个 AI 应用，全套重来一遍。&lt;/p&gt;&lt;p&gt;这事儿我们其实见过。十几年前的手机充电口：诺基亚一根、摩托一根、三星一根，抽屉里永远团着一坨乱线，出差忘带原装线就抓瞎。后来全行业统一成一种口，世界才清净。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;demo reveal&quot;&gt;&lt;div class=&quot;demo-title&quot;&gt;🧪 试试看：接线方式对比器&lt;/div&gt;&lt;p class=&quot;demo-hint&quot;&gt;点按钮切换，直观感受两种接法的差别&lt;/p&gt;&lt;div class=&quot;toggle-bar&quot;&gt;&lt;button class=&quot;on&quot; data-mode=&quot;old&quot;&gt;😵 以前：一机一线&lt;/button&gt;&lt;button data-mode=&quot;new&quot;&gt;😌 现在：一个插座&lt;/button&gt;&lt;/div&gt;&lt;div id=&quot;wireBox&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s3&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🔧&lt;/div&gt;&lt;h2&gt;万能插座长啥样 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;三方分工：主机、服务端、协议&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;p&gt;MCP 这三个字母是 &lt;strong&gt;Model Context Protocol&lt;/strong&gt;，中文叫「模型上下文协议」。名字听着唬人，拆开就是三拨人在分工。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;role-grid&quot;&gt;&lt;div class=&quot;role-card&quot;&gt;&lt;div class=&quot;r-ico&quot;&gt;🖥️&lt;/div&gt;&lt;div&gt;&lt;h3&gt;主机 Host —— 用工具的那一方&lt;/h3&gt;&lt;p&gt;你正在用的 AI 应用：写代码的编辑器、桌面的助手、公司内部的问答机器人。它负责跟用户对话，也负责在需要时喊一声：谁有这本事？&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;role-card&quot;&gt;&lt;div class=&quot;r-ico&quot;&gt;🔌&lt;/div&gt;&lt;div&gt;&lt;h3&gt;服务端 Server —— 提供能力的那一方&lt;/h3&gt;&lt;p&gt;一坨专门负责「把某个系统接出来」的小程序。有的负责读你本地的文件夹，有的负责查公司数据库，有的负责调第三方的工单接口。它只做一件事：把自家资源按统一格式摆出来。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;role-card&quot;&gt;&lt;div class=&quot;r-ico&quot;&gt;📐&lt;/div&gt;&lt;div&gt;&lt;h3&gt;协议 Protocol —— 统一的插口规格&lt;/h3&gt;&lt;p&gt;规定插头多大、几根针、每根针管什么。主机用这套规格喊话，服务端按这套规格应答，两边不需要认识对方是谁。&lt;span class=&quot;em&quot;&gt;这才是 N×M 变成 N+M 的关键。&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;p&gt;换算一下账：以前 3 个 AI 应用 × 7 个数据源 = 21 套定制对接；现在 3 个主机 + 7 个服务端 = 10 份实现，而且&lt;span class=&quot;em&quot;&gt;每个服务端写完一次，所有主机都能用&lt;/span&gt;。数据源再加五个，也只是加五段。&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s4&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🆚&lt;/div&gt;&lt;h2&gt;它和那些老办法有什么区别 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;函数调用、插件、传统对接，都不是一回事&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;vs-grid&quot;&gt;&lt;div class=&quot;vs-card old&quot;&gt;&lt;div class=&quot;v-ico&quot;&gt;🔧&lt;/div&gt;&lt;h3&gt;传统的接口对接&lt;/h3&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;为某个应用单独写死&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;换一个应用就得重写&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;格式、鉴权全靠自己定&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;集成数量随双方数量相乘增长&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class=&quot;vs-card new&quot;&gt;&lt;div class=&quot;v-ico&quot;&gt;🔌&lt;/div&gt;&lt;h3&gt;MCP 的做法&lt;/h3&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;一处实现，多处可用&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;换主机不用动服务端&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;统一描述能力与入参&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;集成数量变成两边相加&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;h3&gt;❓ 那「函数调用」呢？&lt;/h3&gt;&lt;p&gt;函数调用是 AI 自己知道「我可以喊某某功能」，但那个功能具体怎么接到你的数据库，还得你手写。MCP 补的是后半段——把「喊誰」和「怎么连」也标准化了。&lt;/p&gt;&lt;p&gt;一句话区分：&lt;span class=&quot;em&quot;&gt;函数调用解决的是 AI 会不会用工具，MCP 解决的是工具怎么插上来。&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s5&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;📦&lt;/div&gt;&lt;h2&gt;插上之后，它能拿出三种东西 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;干活的能力、可读的材料、现成的模板&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;h3&gt;🛠️ 工具 Tools —— 让它动手&lt;/h3&gt;&lt;p&gt;可以真的去执行动作的能力：查一笔订单、提交一个工单、往表里写一行、跑一次查询。&lt;strong&gt;这是三类里最需要谨慎对待的&lt;/strong&gt;，因为它会改变外部世界的状态。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;h3&gt;📄 资源 Resources —— 让它读书&lt;/h3&gt;&lt;p&gt;可以被读取的素材：某个文件夹里的文档、数据库里的表结构、项目的配置文件。特点是只读不写，给它上下文，不让它乱动。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;card&quot;&gt;&lt;h3&gt;📋 提示模板 Prompts —— 让它照着做&lt;/h3&gt;&lt;p&gt;服务端自带的一些现成用法。比如某个数据系统自带「生成月度分析报告」的模板，你不用从零教它怎么问，选一个模板填上参数就行。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;quote&quot;&gt;工具是手，资源是眼，模板是套路。&lt;br/&gt;三样齐全，它才算从「聊天对象」升级成「能办事的同事」。&lt;/div&gt;&lt;ul class=&quot;check-list reveal list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;✅ &lt;strong&gt;要只读背景资料&lt;/strong&gt; —— 优先用资源，别一上来就给写权限&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;✅ &lt;strong&gt;要能改数据&lt;/strong&gt; —— 才用到工具，并且要盯着它改&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;✅ &lt;strong&gt;流程固定且重复&lt;/strong&gt; —— 用提示模板省事，也省心&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;section id=&quot;s6&quot; class=&quot;reveal&quot;&gt;&lt;div class=&quot;sec-head&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🎯&lt;/div&gt;&lt;h2&gt;三题小测 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;sec-sub&quot;&gt;做完这三题，MCP 你就懂了八成&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;quiz&quot;&gt;&lt;div class=&quot;q-item card&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;1&lt;/span&gt;MCP 主要解决的是什么问题？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;c&quot; data-explain=&quot; MCP 解决的是「对接」这件事：把过去每个 AI 应用各自对接每个数据源的乘法级工作量，变成一次实现处处可用的加法级工作量。它不负责把模型变聪明。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 让大模型变得更聪明&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 让 AI 的回答更快、更便宜&lt;/button&gt;&lt;button data-v=&quot;c&quot;&gt;C. 让 AI 与外部系统的对接标准化&lt;/button&gt;&lt;button data-v=&quot;d&quot;&gt;D. 让 AI 彻底不需要联网&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;q-item card&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;2&lt;/span&gt;关于 MCP 里的「服务端 Server」，下面哪种说法对？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;b&quot; data-explain=&quot; 服务端是能力的提供方，负责把某个系统（文件、数据库、工单系统等）按统一格式接出来。它写一次，任何支持 MCP 的主机都能调用，不需要为每个应用重写一遍。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 它是跑大模型的那台机器&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 它负责把某个系统的能力按统一格式暴露出来&lt;/button&gt;&lt;button data-v=&quot;c&quot;&gt;C. 它是用户电脑上的聊天界面&lt;/button&gt;&lt;button data-v=&quot;d&quot;&gt;D. 它是一份必须手写给用户看的说明书&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;q-item card&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;3&lt;/span&gt;下面哪个场景最适合先用「资源」而不是「工具」？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;a&quot; data-explain=&quot; 资源是只读的素材，适合提供背景信息，风险最低。工单、改价、删文件都属于写操作，用工具时必须配权限与复核，不能上来就放开。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 让它读公司制度文档来回答问题&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 让它替你在系统里提交一张报销单&lt;/button&gt;&lt;button data-v=&quot;c&quot;&gt;C. 让它直接修改商品定价&lt;/button&gt;&lt;button data-v=&quot;d&quot;&gt;D. 让它清理一批历史文件&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;final-cta reveal&quot;&gt;&lt;div class=&quot;emoji&quot;&gt;🔌&lt;/div&gt;&lt;h2&gt;下一站：把线真的插上&lt;/h2&gt;&lt;p&gt;明白了万能插座的原理，下一步就是实操——MCP 到底怎么装、怎么配，装完不工作又该怎么排查。下一篇见。&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/main&gt;&lt;script&gt;(function () {
  var root = document.currentScript.closest(&#039;.ai-mcp&#039;);
  
  // ---- 滚动显现 ----
  const io = new IntersectionObserver((entries) =&gt; {
    entries.forEach(e =&gt; { if (e.isIntersecting) { e.target.classList.add(&#039;in&#039;); io.unobserve(e.target); } });
  }, { threshold: 0.12 });
  root.querySelectorAll(&#039;.reveal&#039;).forEach(el =&gt; io.observe(el));

  // ---- 目录高亮 ----
  const links = root.querySelectorAll(&#039;.toc a&#039;);
  const secs = [...links].map(a =&gt; root.querySelector(a.getAttribute(&#039;href&#039;)));
  const spy = new IntersectionObserver((entries) =&gt; {
    entries.forEach(e =&gt; {
      if (e.isIntersecting) {
        links.forEach(l =&gt; l.classList.remove(&#039;active&#039;));
        const hit = links.find(l =&gt; l.getAttribute(&#039;href&#039;) === &#039;#&#039; + e.target.id);
        if (hit) hit.classList.add(&#039;active&#039;);
      }
    });
  }, { rootMargin: &#039;-30% 0px -60% 0px&#039; });
  secs.forEach(s =&gt; s &amp;&amp; spy.observe(s));

  // ---- 接线方式对比器 ----
  const wire = {
    old: {
      head: &#039;😵 以前：一机一线，各自为战&#039;,
      body: &#039;&lt;p&gt;3 个 AI 应用要接 7 个数据源，就得写 &lt;b&gt;21 套&lt;/b&gt;独立对接。每套的格式、鉴权、错误处理都不一样。&lt;/p&gt;&#039;
        + &#039;&lt;p&gt;换个 AI 应用？对不起，21 套重来一遍。加个新系统？又是 3 套。&lt;/p&gt;&#039;
        + &#039;&lt;p&gt;&lt;b&gt;成本随两边数量相乘增长，团队永远在写重复的胶水代码。&lt;/b&gt;&lt;/p&gt;&#039;
    },
    new: {
      head: &#039;😌 现在：一个插座，处处能插&#039;,
      body: &#039;&lt;p&gt;同样是 3 个主机 + 7 个数据源，各自按统一规格实现一次，合计 &lt;b&gt;10 份&lt;/b&gt;工作。&lt;/p&gt;&#039;
        + &#039;&lt;p&gt;而且每个服务端写完一次，所有支持这套规格的主机都能直接用，不用为谁单独改。&lt;/p&gt;&#039;
        + &#039;&lt;p&gt;&lt;b&gt;成本变成两边相加，新增系统的边际成本低得多。&lt;/b&gt;&lt;/p&gt;&#039;
    }
  };
  const wireBox = root.querySelector(&#039;#wireBox&#039;);
  function paintWire(mode) {
    const w = wire[mode];
    wireBox.innerHTML = &#039;&lt;div class=&quot;card&quot; style=&quot;margin:0;border-color:var(--primary-soft);background:var(--primary-light)&quot;&gt;&#039;
      + &#039;&lt;h3 style=&quot;color:var(--primary-deep)&quot;&gt;&#039; + w.head + &#039;&lt;/h3&gt;&#039; + w.body + &#039;&lt;/div&gt;&#039;;
  }
  root.querySelectorAll(&#039;.toggle-bar button&#039;).forEach(btn =&gt; {
    btn.onclick = () =&gt; {
      root.querySelectorAll(&#039;.toggle-bar button&#039;).forEach(b =&gt; b.classList.remove(&#039;on&#039;));
      btn.classList.add(&#039;on&#039;);
      paintWire(btn.dataset.mode);
    };
  });
  paintWire(&#039;old&#039;);

  // 兜底：2 秒后强制显示所有 reveal 元素，避免任何环境下内容被隐藏
  setTimeout(function () {
    root.querySelectorAll(&#039;.reveal&#039;).forEach(function (el) { el.classList.add(&#039;in&#039;); });
  }, 2000);
})();&lt;/script&gt;&lt;/div&gt;&lt;!-- AI 打工日志 · MCP 篇 · 第1篇 · 结束 --&gt;</description><pubDate>Thu, 24 Sep 2026 14:25:00 +0800</pubDate></item><item><title>多 Agent 避坑：团队不是万能的 | AI 打工日志·Agent篇④</title><link>https://imwen.com/post/392.html</link><description>&lt;!-- AI 打工日志 · Agent 篇 · 第4篇 · 交互完整版（样式已隔离，勿在可视化编辑器中编辑源码模式之外的内容） --&gt;&lt;div class=&quot;ai-agent ai-agent-4&quot;&gt;&lt;style&gt;.ai-agent-4 {
    --primary: #862E9C;
    --primary-light: #F5ECF8;
    --primary-soft: #EBD7F0;
    --primary-deep: #6B237E;
    --accent: #BE4BDB;
    --bg: #FAF7F2;
    --card: #FFFFFF;
    --ink: #2B2724;
    --ink-soft: #6B6259;
    --line: #EDE5DA;
    --radius: 20px;
    --serif: &quot;Songti SC&quot;, &quot;STSong&quot;, &quot;SimSun&quot;, Georgia, serif;
    --sans: -apple-system, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Segoe UI&quot;, sans-serif;
  }
  .ai-agent-4 * { margin: 0; padding: 0; box-sizing: border-box; }
  .ai-agent-4 { font-family: var(--sans); background: var(--bg); color: var(--ink); line-height: 1.85; font-size: 17px; }
  .ai-agent-4 .wrap { max-width: 760px; margin: 0 auto; padding: 0 22px; }
  .ai-agent-4 .hero { background: linear-gradient(160deg, var(--primary) 0%, var(--accent) 100%); color: #fff; padding: 72px 0 88px; position: relative; overflow: hidden; }
  .ai-agent-4 .hero::after { content: &quot;&quot;; position: absolute; bottom: -2px; left: 0; right: 0; height: 44px; background: var(--bg); border-radius: 44px 44px 0 0; }
  .ai-agent-4 .series-tag { display: inline-block; background: rgba(255,255,255,.18); border: 1px solid rgba(255,255,255,.4); border-radius: 999px; padding: 5px 16px; font-size: 13px; letter-spacing: 2px; margin-bottom: 26px; }
  .ai-agent-4 .hero .ep { font-size: 14px; letter-spacing: 6px; opacity: .85; margin-bottom: 10px; }
  .ai-agent-4 .hero h1 { font-family: var(--serif); font-size: clamp(30px, 5.6vw, 46px); line-height: 1.35; font-weight: 700; margin-bottom: 18px; }
  .ai-agent-4 .hero .sub { font-size: 18px; opacity: .92; }
  .ai-agent-4 .hero .meta { margin-top: 30px; font-size: 13px; opacity: .75; }
  .ai-agent-4 .toc { position: sticky; top: 0; z-index: 50; background: rgba(250,247,242,.92); backdrop-filter: blur(10px); border-bottom: 1px solid var(--line); padding: 10px 0; }
  .ai-agent-4 .toc .wrap { display: flex; gap: 8px; overflow-x: auto; white-space: nowrap; scrollbar-width: none; }
  .ai-agent-4 .toc .wrap::-webkit-scrollbar { display: none; }
  .ai-agent-4 .toc a { flex: 0 0 auto; text-decoration: none; color: var(--ink-soft); font-size: 14px; padding: 6px 14px; border-radius: 999px; border: 1px solid transparent; transition: all .25s; }
  .ai-agent-4 .toc a:hover, .ai-agent-4 .toc a.active { color: var(--primary-deep); background: var(--primary-soft); border-color: var(--primary-soft); }
  .ai-agent-4 section { padding: 64px 0 8px; }
  .ai-agent-4 .sec-head { display: flex; align-items: center; gap: 14px; margin-bottom: 26px; }
  .ai-agent-4 .sec-num { width: 52px; height: 52px; flex: 0 0 52px; border-radius: 16px; background: var(--primary-soft); display: flex; align-items: center; justify-content: center; font-size: 26px; }
  .ai-agent-4 .sec-head h2 { font-family: var(--serif); font-size: clamp(22px, 3.6vw, 28px); line-height: 1.4; }
  .ai-agent-4 .sec-head .sec-sub { font-size: 13px; color: var(--ink-soft); display: block; font-family: var(--sans); font-weight: 400; margin-top: 2px; }
  .ai-agent-4 .card { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 28px 26px; margin-bottom: 22px; box-shadow: 0 2px 10px rgba(43,39,36,.04); }
  .ai-agent-4 p + p { margin-top: 16px; }
  .ai-agent-4 .card h3 { font-size: 18px; margin-bottom: 12px; display: flex; align-items: center; gap: 8px; }
  .ai-agent-4 .em { color: var(--primary-deep); font-weight: 700; }
  .ai-agent-4 strong { font-weight: 700; }
  .ai-agent-4 .quote { margin: 34px 0; background: linear-gradient(135deg, var(--primary) 0%, var(--accent) 100%); color: #fff; border-radius: var(--radius); padding: 34px 30px; font-family: var(--serif); font-size: clamp(19px, 3vw, 23px); line-height: 1.7; position: relative; }
  .ai-agent-4 .quote::before { content: &quot;❝&quot;; position: absolute; top: 10px; left: 18px; font-size: 44px; opacity: .3; }
  .ai-agent-4 .quote .who { display: block; margin-top: 14px; font-family: var(--sans); font-size: 13px; opacity: .8; }
  .ai-agent-4 .demo { background: var(--card); border: 2px dashed var(--primary); border-radius: var(--radius); padding: 30px 26px; margin: 30px 0; }
  .ai-agent-4 .demo-title { text-align: center; font-weight: 700; font-size: 16px; color: var(--primary-deep); letter-spacing: 1px; margin-bottom: 6px; }
  .ai-agent-4 .demo-hint { text-align: center; font-size: 13px; color: var(--ink-soft); margin-bottom: 20px; }
  .ai-agent-4 .bill-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin: 22px 0; }
  .ai-agent-4 .bill-card { border-radius: 16px; padding: 22px 20px; font-size: 14.5px; }
  .ai-agent-4 .bill-card.solo { background: #F6F3F0; border: 1px solid var(--line); }
  .ai-agent-4 .bill-card.team { background: var(--primary-light); border: 1px solid var(--primary-soft); }
  .ai-agent-4 .bill-card .b-ico { font-size: 30px; }
  .ai-agent-4 .bill-card h4 { font-size: 16px; margin: 8px 0 6px; }
  .ai-agent-4 .bill-card.team h4 { color: var(--primary-deep); }
  .ai-agent-4 .bill-card .num { font-size: 26px; font-weight: 700; color: var(--primary-deep); }
  .ai-agent-4 .diag-grid { display: grid; grid-template-columns: 1fr; gap: 12px; margin-bottom: 16px; }
  .ai-agent-4 .d-item { background: #fff; border: 1.5px solid var(--line); border-radius: 14px; padding: 16px 16px; cursor: pointer; transition: all .2s; text-align: left; font-family: var(--sans); }
  .ai-agent-4 .d-item:hover { transform: translateY(-2px); box-shadow: 0 5px 14px rgba(43,39,36,.1); }
  .ai-agent-4 .d-item.on { border-color: var(--primary); background: var(--primary-light); }
  .ai-agent-4 .d-item .d-ico { font-size: 24px; }
  .ai-agent-4 .d-item b { display: block; font-size: 15px; margin-top: 4px; }
  .ai-agent-4 .d-item span { font-size: 12.5px; color: var(--ink-soft); }
  .ai-agent-4 .d-result { background: var(--primary-light); border: 1px solid var(--primary-soft); border-radius: 14px; padding: 18px 20px; font-size: 14.5px; min-height: 110px; }
  .ai-agent-4 .d-result h4 { color: var(--primary-deep); font-size: 15.5px; margin-bottom: 8px; }
  .ai-agent-4 .d-result .rx { margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--primary-soft); }
  .ai-agent-4 .d-result .rx b { color: var(--primary-deep); }
  .ai-agent-4 .quiz { margin: 26px 0 6px; }
  .ai-agent-4 .q-item { margin-bottom: 22px; }
  .ai-agent-4 .q-item .q { font-weight: 700; font-size: 16px; margin-bottom: 12px; }
  .ai-agent-4 .q-item .q .qn { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; border-radius: 8px; background: var(--primary); color: #fff; font-size: 14px; margin-right: 8px; vertical-align: -5px; }
  .ai-agent-4 .opts { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
  .ai-agent-4 .opts button { font-family: var(--sans); font-size: 14.5px; text-align: left; padding: 12px 16px; border-radius: 12px; border: 1.5px solid var(--line); background: #fff; color: var(--ink); cursor: pointer; transition: all .2s; line-height: 1.6; }
  .ai-agent-4 .opts button:hover { border-color: var(--primary); }
  .ai-agent-4 .opts button.right { border-color: #2B8A3E; background: #EBF7EE; color: #1B5E2B; font-weight: 700; }
  .ai-agent-4 .opts button.wrong { border-color: #C92A2A; background: #FFF0F0; color: #A61E1E; }
  .ai-agent-4 .q-explain { margin-top: 10px; font-size: 13.5px; color: var(--ink-soft); background: var(--primary-light); border-radius: 10px; padding: 10px 14px; display: none; }
  .ai-agent-4 .q-explain.show { display: block; }
  .ai-agent-4 .final-cta { margin: 50px 0 10px; text-align: center; padding: 44px 26px; background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); }
  .ai-agent-4 .final-cta .emoji { font-size: 40px; }
  .ai-agent-4 .final-cta h2 { font-family: var(--serif); font-size: 24px; margin: 12px 0 10px; }
  .ai-agent-4 footer { text-align: center; padding: 30px 0 50px; color: var(--ink-soft); font-size: 13px; }
  .ai-agent-4 .reveal { opacity: 0; transform: translateY(26px); transition: all .7s cubic-bezier(.22,.61,.36,1); }
  .ai-agent-4 .reveal.in { opacity: 1; transform: none; }
  @media (max-width: 560px) { body { font-size: 16px; } .bill-grid, .opts { grid-template-columns: 1fr; } }


  /* === Z-Blog 正文适配层 === */
  .ai-agent { font-size: 17px; line-height: 1.85; color: #2B2724; }
  .ai-agent .tri-banner { text-align: center; padding: 8px 0 4px; margin-bottom: 18px; }
  .ai-agent .tri-banner .tri-title {
    font-family: &quot;Songti SC&quot;, &quot;STSong&quot;, &quot;SimSun&quot;, Georgia, serif;
    font-size: clamp(22px, 3.4vw, 30px); line-height: 1.45; margin: 16px 0 8px; font-weight: 700;
  }
  .ai-agent .tri-banner .tri-sub { font-size: 15px; color: #6B6259; }
  .ai-agent .tri-banner .series-tag {
    background: var(--primary-soft); border: 1px solid var(--primary);
    color: var(--primary-deep); margin-bottom: 0;
  }
  .ai-agent main { display: block; }&lt;/style&gt;&lt;header class=&quot;tri-banner&quot;&gt;&lt;span class=&quot;series-tag&quot;&gt;AI 打工日志 · Agent 篇&lt;/span&gt;
 &amp;nbsp;&lt;h2 class=&quot;tri-title&quot;&gt;《多 Agent 避坑：团队不是万能的》&lt;/h2&gt;&lt;p class=&quot;tri-sub&quot;&gt;人多了，账得算清 · 阅读约 8 分钟 · 无需技术背景&lt;/p&gt;&lt;p class=&quot;tri-sub&quot;&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/09/202609231790135790757442.jpg&quot; alt=&quot;agent-cover-4.jpg&quot; width=&quot;768&quot; height=&quot;512&quot; border=&quot;0&quot; vspace=&quot;0&quot; title=&quot;agent-cover-4.jpg&quot; style=&quot;width: 768px; height: 512px;&quot;/&gt;&lt;/p&gt;&lt;/header&gt;&lt;main class=&quot;wrap&quot;&gt;&lt;section id=&quot;s1&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;💰&lt;/div&gt;&lt;h2&gt;团队能放大能力，也能放大账单&lt;span class=&quot;sec-sub&quot;&gt;每一个 AI 的每一次&amp;quot;动脑&amp;quot;，都要花钱&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;前几篇讲的全是&amp;quot;人多力量大&amp;quot;的好。这一篇说点实在的：&lt;span class=&quot;em&quot;&gt;多 Agent 是有成本的，而且不小。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;最直接的成本，就是&amp;quot;调用次数 × 单价&amp;quot;。一个 Agent 干完活要调用一次大模型；三个 Agent 串行干，就是三次；还要算上包工头自己拆活、验收的那几次。&lt;strong&gt;人越多、环节越多、来回改的次数越多，账单滚得越快。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;更要命的是：如果活儿没拆好，两个 Agent 反复&amp;quot;修正&amp;quot;对方，账单能在你不知情的时候烧掉一大截——这就是下一篇要讲的&amp;quot;死循环&amp;quot;。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;bill-grid reveal&quot;&gt;&lt;div class=&quot;bill-card solo&quot;&gt;&lt;div class=&quot;b-ico&quot;&gt;🐺&lt;/div&gt;&lt;h4&gt;独狼模式&lt;/h4&gt;&lt;p&gt;干一件活：&lt;/p&gt;&lt;div class=&quot;num&quot;&gt;1 次调用&lt;/div&gt;&lt;p style=&quot;font-size:13px;color:var(--ink-soft)&quot;&gt;便宜，但活一多就翻车&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;bill-card team&quot;&gt;&lt;div class=&quot;b-ico&quot;&gt;🏢&lt;/div&gt;&lt;h4&gt;团队模式&lt;/h4&gt;&lt;p&gt;干同一件活：&lt;/p&gt;&lt;div class=&quot;num&quot;&gt;N+ 次调用&lt;/div&gt;&lt;p style=&quot;font-size:13px;color:var(--ink-soft)&quot;&gt;拆活、派单、干活、验收、返工……每一环都算钱&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s2&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🚑&lt;/div&gt;&lt;h2&gt;团队翻车三连&lt;span class=&quot;sec-sub&quot;&gt;点开症状，看病理和药方&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;钱是明面上的坑，还有三个&amp;quot;暗坑&amp;quot;，团队一跑起来就往外冒：&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;demo reveal&quot;&gt;&lt;div class=&quot;demo-title&quot;&gt;🚑 翻车诊断台&lt;/div&gt;&lt;div class=&quot;demo-hint&quot;&gt;点任意症状卡，看诊断和药方&lt;/div&gt;&lt;div class=&quot;diag-grid&quot;&gt;&lt;button class=&quot;d-item&quot; data-k=&quot;blame&quot;&gt;&lt;span class=&quot;d-ico&quot;&gt;🤼&lt;/span&gt;&lt;strong&gt;症状 ①：互相甩锅&lt;/strong&gt;环节一多，责任就散&lt;/button&gt;&lt;button class=&quot;d-item&quot; data-k=&quot;loop&quot;&gt;&lt;span class=&quot;d-ico&quot;&gt;🔁&lt;/span&gt;&lt;strong&gt;症状 ②：死循环&lt;/strong&gt;改过来改回去，永远停不下来&lt;/button&gt;&lt;button class=&quot;d-item&quot; data-k=&quot;phone&quot;&gt;&lt;span class=&quot;d-ico&quot;&gt;📞&lt;/span&gt;&lt;strong&gt;症状 ③：传话变味&lt;/strong&gt;传一道丢一点，最后干的活变样&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;d-result&quot; id=&quot;dResult&quot;&gt;&lt;h4&gt;👈 点一个症状开始诊断&lt;/h4&gt;&lt;p style=&quot;font-size:13.5px;color:var(--ink-soft)&quot;&gt;团队翻车不可怕，可怕的是你早知道会翻，却没在设计阶段设护栏。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s3&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🧭&lt;/div&gt;&lt;h2&gt;什么时候别上团队&lt;span class=&quot;sec-sub&quot;&gt;先问三个&amp;quot;不&amp;quot;，答上任何一个就别组队&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;避坑的最高境界，是&lt;strong&gt;不上不该上的坑&lt;/strong&gt;。动手前问自己三个&amp;quot;不&amp;quot;：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;① 拆不开&lt;/strong&gt;——活儿是一气呵成的创作，拆了反而割裂，那就单 Agent 一次到位。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;② 不划算&lt;/strong&gt;——一件小事，一个人 30 秒搞定，组队反而要 5 次调用、3 次转述，纯亏。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;③ 不放心&lt;/strong&gt;——涉及&amp;quot;错了要命&amp;quot;又没法设人工节点的，不如自己多盯着，别全交给一群 AI。&lt;/p&gt;&lt;p&gt;一句话总结：&lt;span class=&quot;em&quot;&gt;多 Agent 是工具，不是信仰。该上才上，能省则省。&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;quote reveal&quot;&gt;团队的价值，在于它省下的时间，得大于它多花的钱。 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;who&quot;&gt;—— 包工头老张的算账哲学&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s4&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🎓&lt;/div&gt;&lt;h2&gt;毕业大考&lt;span class=&quot;sec-sub&quot;&gt;三道题横跨四篇，答完真毕业&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;demo reveal&quot;&gt;&lt;div class=&quot;demo-title&quot;&gt;🎓 Agent 篇毕业大考&lt;/div&gt;&lt;div class=&quot;demo-hint&quot;&gt;答对三题，授予「AI 包工头」称号&lt;/div&gt;&lt;div class=&quot;quiz&quot;&gt;&lt;div class=&quot;q-item&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;1&lt;/span&gt;多 Agent 的核心，是&amp;quot;人多&amp;quot;还是&amp;quot;分工&amp;quot;？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;b&quot; data-explain=&quot;核心是「分工」。让术业有专攻的 AI 各管一摊，由一个包工头统一调度，才是多 Agent 的精髓——不是单纯堆数量。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 人多，越多越强&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 分工，各司其职&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;q-item&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;2&lt;/span&gt;多 Agent 最大的&amp;quot;隐性成本&amp;quot;是什么？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;a&quot; data-explain=&quot;最大隐性成本是「调用次数 × 单价」——拆活、派单、干活、验收、返工，每一环都要调用大模型花钱。环节越多、返工越多，账单滚得越快。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 调用次数滚出来的账单&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 要买更贵的电脑&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;q-item&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;3&lt;/span&gt;哪种活，最该&amp;quot;别上团队&amp;quot;？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;c&quot; data-explain=&quot;一件小事 30 秒能搞定，组队反而要多调用、多转述，纯亏。多 Agent 是工具不是信仰——该上才上，能省则省。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 出一份带数据核对的行业报告&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 同时写文案 + 查数据 + 配图&lt;/button&gt;&lt;button data-v=&quot;c&quot;&gt;C. 给猫起个名字&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;final-cta reveal&quot;&gt;&lt;div class=&quot;emoji&quot;&gt;🏁&lt;/div&gt;&lt;h2&gt;Agent 篇 · 全系列完&lt;/h2&gt;&lt;p style=&quot;color: var(--ink-soft)&quot;&gt;独狼 → 包工头 → 装修队 → 避坑指南。&lt;br/&gt;四篇读完，你已经从&amp;quot;用单个 AI&amp;quot;进阶到&amp;quot;指挥一支 AI 团队&amp;quot;。&lt;br/&gt;&lt;br/&gt;下一季预告：《AI 打工日志》MCP 篇——&lt;br/&gt;团队有了，电从哪来？（连接外部系统）&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/main&gt;&lt;script&gt;(function () {
  var root = document.currentScript.closest(&#039;.ai-agent&#039;);
  
  // ---- 滚动显现 ----
  const io = new IntersectionObserver((entries) =&gt; {
    entries.forEach(e =&gt; { if (e.isIntersecting) { e.target.classList.add(&#039;in&#039;); io.unobserve(e.target); } });
  }, { threshold: 0.12 });
  root.querySelectorAll(&#039;.reveal&#039;).forEach(el =&gt; io.observe(el));

  // ---- 目录高亮 ----
  const links = root.querySelectorAll(&#039;.toc a&#039;);
  const secs = [...links].map(a =&gt; root.querySelector(a.getAttribute(&#039;href&#039;)));
  const spy = new IntersectionObserver((entries) =&gt; {
    entries.forEach(e =&gt; {
      if (e.isIntersecting) {
        links.forEach(l =&gt; l.classList.remove(&#039;active&#039;));
        const hit = links.find(l =&gt; l.getAttribute(&#039;href&#039;) === &#039;#&#039; + e.target.id);
        if (hit) hit.classList.add(&#039;active&#039;);
      }
    });
  }, { rootMargin: &#039;-30% 0px -60% 0px&#039; });
  secs.forEach(s =&gt; s &amp;&amp; spy.observe(s));

  // ---- S2：翻车诊断 ----
  const diag = {
    blame: {
      title: &#039;🤼 翻车①：互相甩锅&#039;,
      why: &#039;&lt;b&gt;病理：&lt;/b&gt;环节一多，责任就散。数据错了，写分析的说是查数据的锅，查数据的说是包工头没说清——皮球踢一圈，没人认。&#039;,
      rx: &#039;&lt;b&gt;💊 药方：&lt;/b&gt;让包工头在派单时就写清「谁、交什么、怎么算合格」，每个环节有明确的交付标准，责任一开始就焊死。&#039;
    },
    loop: {
      title: &#039;🔁 翻车②：死循环&#039;,
      why: &#039;&lt;b&gt;病理：&lt;/b&gt;一个改完另一个又改回去，两个 Agent 互相&quot;修正&quot;，永远停不下来，账单却在一直烧。&#039;,
      rx: &#039;&lt;b&gt;💊 药方：&lt;/b&gt;给流程设「最大回合数」——改到第 3 轮还没共识，强制停，交给包工头拍板。死循环必须在设计阶段就掐断。&#039;
    },
    phone: {
      title: &#039;📞 翻车③：传话变味&#039;,
      why: &#039;&lt;b&gt;病理：&lt;/b&gt;环节越多，信息传一道丢一点。包工头听你说一遍，转给工人又转述一遍，最后干的活早不是你要的样子——「传话游戏」的魔咒。&#039;,
      rx: &#039;&lt;b&gt;💊 药方：&lt;/b&gt;关键需求写成文字、一路原样传递，别让 AI 口头转述；重要节点加一次「人工确认」兜底。&#039;
    }
  };
  const dResult = root.querySelector(&#039;#dResult&#039;);
  root.querySelectorAll(&#039;.d-item&#039;).forEach(item =&gt; {
    item.onclick = () =&gt; {
      root.querySelectorAll(&#039;.d-item&#039;).forEach(x =&gt; x.classList.remove(&#039;on&#039;));
      item.classList.add(&#039;on&#039;);
      const d = diag[item.dataset.k];
      dResult.innerHTML = &#039;&lt;h4&gt;&#039; + d.title + &#039;&lt;/h4&gt;&lt;p&gt;&#039; + d.why + &#039;&lt;/p&gt;&lt;p class=&quot;rx&quot;&gt;&#039; + d.rx + &#039;&lt;/p&gt;&#039;;
    };
  });

  // ---- Quiz ----
  root.querySelectorAll(&#039;.quiz .q-item&#039;).forEach(qi =&gt; {
    const opts = qi.querySelector(&#039;.opts&#039;);
    const explain = qi.querySelector(&#039;.q-explain&#039;);
    const answer = opts.dataset.answer;
    let done = false;
    opts.querySelectorAll(&#039;button&#039;).forEach(btn =&gt; {
      btn.onclick = () =&gt; {
        if (done) return;
        done = true;
        const pick = btn.dataset.v;
        opts.querySelectorAll(&#039;button&#039;).forEach(b =&gt; {
          if (b.dataset.v === answer) b.classList.add(&#039;right&#039;);
          else if (b === btn) b.classList.add(&#039;wrong&#039;);
        });
        explain.textContent = opts.dataset.explain;
        explain.classList.add(&#039;show&#039;);
      };
    });
  });

  // 兜底：2 秒后强制显示所有 reveal 元素，避免任何环境下内容被隐藏
  setTimeout(function () {
    root.querySelectorAll(&#039;.reveal&#039;).forEach(function (el) { el.classList.add(&#039;in&#039;); });
  }, 2000);
})();&lt;/script&gt;&lt;/div&gt;&lt;!-- AI 打工日志 · Agent 篇 · 第4篇 · 结束 --&gt;</description><pubDate>Wed, 23 Sep 2026 10:22:33 +0800</pubDate></item><item><title>团队分工：装修队是怎么干活的 | AI 打工日志·Agent篇③</title><link>https://imwen.com/post/391.html</link><description>&lt;!-- AI 打工日志 · Agent 篇 · 第3篇 · 交互完整版（样式已隔离，勿在可视化编辑器中编辑源码模式之外的内容） --&gt;&lt;div class=&quot;ai-agent ai-agent-3&quot;&gt;&lt;style&gt;.ai-agent-3 {
    --primary: #C92A2A;
    --primary-light: #FBE9E9;
    --primary-soft: #F5C9C9;
    --primary-deep: #A61E1E;
    --accent: #F76707;
    --bg: #FAF7F2;
    --card: #FFFFFF;
    --ink: #2B2724;
    --ink-soft: #6B6259;
    --line: #EDE5DA;
    --radius: 20px;
    --serif: &quot;Songti SC&quot;, &quot;STSong&quot;, &quot;SimSun&quot;, Georgia, serif;
    --sans: -apple-system, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Segoe UI&quot;, sans-serif;
  }
  .ai-agent-3 * { margin: 0; padding: 0; box-sizing: border-box; }
  .ai-agent-3 { font-family: var(--sans); background: var(--bg); color: var(--ink); line-height: 1.85; font-size: 17px; }
  .ai-agent-3 .wrap { max-width: 760px; margin: 0 auto; padding: 0 22px; }
  .ai-agent-3 .hero { background: linear-gradient(160deg, var(--primary) 0%, var(--accent) 100%); color: #fff; padding: 72px 0 88px; position: relative; overflow: hidden; }
  .ai-agent-3 .hero::after { content: &quot;&quot;; position: absolute; bottom: -2px; left: 0; right: 0; height: 44px; background: var(--bg); border-radius: 44px 44px 0 0; }
  .ai-agent-3 .series-tag { display: inline-block; background: rgba(255,255,255,.18); border: 1px solid rgba(255,255,255,.4); border-radius: 999px; padding: 5px 16px; font-size: 13px; letter-spacing: 2px; margin-bottom: 26px; }
  .ai-agent-3 .hero .ep { font-size: 14px; letter-spacing: 6px; opacity: .85; margin-bottom: 10px; }
  .ai-agent-3 .hero h1 { font-family: var(--serif); font-size: clamp(30px, 5.6vw, 46px); line-height: 1.35; font-weight: 700; margin-bottom: 18px; }
  .ai-agent-3 .hero .sub { font-size: 18px; opacity: .92; }
  .ai-agent-3 .hero .meta { margin-top: 30px; font-size: 13px; opacity: .75; }
  .ai-agent-3 .toc { position: sticky; top: 0; z-index: 50; background: rgba(250,247,242,.92); backdrop-filter: blur(10px); border-bottom: 1px solid var(--line); padding: 10px 0; }
  .ai-agent-3 .toc .wrap { display: flex; gap: 8px; overflow-x: auto; white-space: nowrap; scrollbar-width: none; }
  .ai-agent-3 .toc .wrap::-webkit-scrollbar { display: none; }
  .ai-agent-3 .toc a { flex: 0 0 auto; text-decoration: none; color: var(--ink-soft); font-size: 14px; padding: 6px 14px; border-radius: 999px; border: 1px solid transparent; transition: all .25s; }
  .ai-agent-3 .toc a:hover, .ai-agent-3 .toc a.active { color: var(--primary-deep); background: var(--primary-soft); border-color: var(--primary-soft); }
  .ai-agent-3 section { padding: 64px 0 8px; }
  .ai-agent-3 .sec-head { display: flex; align-items: center; gap: 14px; margin-bottom: 26px; }
  .ai-agent-3 .sec-num { width: 52px; height: 52px; flex: 0 0 52px; border-radius: 16px; background: var(--primary-soft); display: flex; align-items: center; justify-content: center; font-size: 26px; }
  .ai-agent-3 .sec-head h2 { font-family: var(--serif); font-size: clamp(22px, 3.6vw, 28px); line-height: 1.4; }
  .ai-agent-3 .sec-head .sec-sub { font-size: 13px; color: var(--ink-soft); display: block; font-family: var(--sans); font-weight: 400; margin-top: 2px; }
  .ai-agent-3 .card { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 28px 26px; margin-bottom: 22px; box-shadow: 0 2px 10px rgba(43,39,36,.04); }
  .ai-agent-3 p + p { margin-top: 16px; }
  .ai-agent-3 .card h3 { font-size: 18px; margin-bottom: 12px; display: flex; align-items: center; gap: 8px; }
  .ai-agent-3 .em { color: var(--primary-deep); font-weight: 700; }
  .ai-agent-3 strong { font-weight: 700; }
  .ai-agent-3 .quote { margin: 34px 0; background: linear-gradient(135deg, var(--primary) 0%, var(--accent) 100%); color: #fff; border-radius: var(--radius); padding: 34px 30px; font-family: var(--serif); font-size: clamp(19px, 3vw, 23px); line-height: 1.7; position: relative; }
  .ai-agent-3 .quote::before { content: &quot;❝&quot;; position: absolute; top: 10px; left: 18px; font-size: 44px; opacity: .3; }
  .ai-agent-3 .quote .who { display: block; margin-top: 14px; font-family: var(--sans); font-size: 13px; opacity: .8; }
  .ai-agent-3 .demo { background: var(--card); border: 2px dashed var(--primary); border-radius: var(--radius); padding: 30px 26px; margin: 30px 0; }
  .ai-agent-3 .demo-title { text-align: center; font-weight: 700; font-size: 16px; color: var(--primary-deep); letter-spacing: 1px; margin-bottom: 6px; }
  .ai-agent-3 .demo-hint { text-align: center; font-size: 13px; color: var(--ink-soft); margin-bottom: 20px; }
  .ai-agent-3 .mode-bar { display: flex; justify-content: center; gap: 10px; margin-bottom: 20px; flex-wrap: wrap; }
  .ai-agent-3 .mode-bar button { font-family: var(--sans); font-size: 14.5px; font-weight: 600; padding: 9px 16px; border-radius: 999px; border: 1.5px solid var(--line); background: #fff; color: var(--ink-soft); cursor: pointer; transition: all .2s; }
  .ai-agent-3 .mode-bar button.on { border-color: var(--primary); background: var(--primary); color: #fff; box-shadow: 0 4px 14px rgba(201,42,42,.28); }
  .ai-agent-3 .flow-box { border-radius: 16px; padding: 20px 18px; background: var(--primary-light); border: 1px solid var(--primary-soft); min-height: 180px; }
  .ai-agent-3 .flow-box h5 { color: var(--primary-deep); font-size: 15.5px; margin-bottom: 10px; }
  .ai-agent-3 .flow-steps { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
  .ai-agent-3 .flow-node { background: #fff; border: 1.5px solid var(--primary-soft); border-radius: 12px; padding: 8px 14px; font-size: 13.5px; font-weight: 600; color: var(--ink); }
  .ai-agent-3 .flow-node.boss { background: var(--primary); color: #fff; border-color: var(--primary); }
  .ai-agent-3 .flow-node.human { background: #FFF3BF; border-color: #F59F00; color: #9C5A00; }
  .ai-agent-3 .flow-arrow { color: var(--primary-deep); font-weight: 700; font-size: 16px; }
  .ai-agent-3 .flow-note { margin-top: 14px; font-size: 13.5px; color: var(--ink-soft); line-height: 1.7; }
  .ai-agent-3 .quiz { margin: 26px 0 6px; }
  .ai-agent-3 .q-item { margin-bottom: 22px; }
  .ai-agent-3 .q-item .q { font-weight: 700; font-size: 16px; margin-bottom: 12px; }
  .ai-agent-3 .q-item .q .qn { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; border-radius: 8px; background: var(--primary); color: #fff; font-size: 14px; margin-right: 8px; vertical-align: -5px; }
  .ai-agent-3 .opts { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
  .ai-agent-3 .opts button { font-family: var(--sans); font-size: 14.5px; text-align: left; padding: 12px 16px; border-radius: 12px; border: 1.5px solid var(--line); background: #fff; color: var(--ink); cursor: pointer; transition: all .2s; line-height: 1.6; }
  .ai-agent-3 .opts button:hover { border-color: var(--primary); }
  .ai-agent-3 .opts button.right { border-color: #2B8A3E; background: #EBF7EE; color: #1B5E2B; font-weight: 700; }
  .ai-agent-3 .opts button.wrong { border-color: #C92A2A; background: #FFF0F0; color: #A61E1E; }
  .ai-agent-3 .q-explain { margin-top: 10px; font-size: 13.5px; color: var(--ink-soft); background: var(--primary-light); border-radius: 10px; padding: 10px 14px; display: none; }
  .ai-agent-3 .q-explain.show { display: block; }
  .ai-agent-3 .final-cta { margin: 50px 0 10px; text-align: center; padding: 44px 26px; background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); }
  .ai-agent-3 .final-cta .emoji { font-size: 40px; }
  .ai-agent-3 .final-cta h2 { font-family: var(--serif); font-size: 24px; margin: 12px 0 10px; }
  .ai-agent-3 footer { text-align: center; padding: 30px 0 50px; color: var(--ink-soft); font-size: 13px; }
  .ai-agent-3 .reveal { opacity: 0; transform: translateY(26px); transition: all .7s cubic-bezier(.22,.61,.36,1); }
  .ai-agent-3 .reveal.in { opacity: 1; transform: none; }
  @media (max-width: 560px) { body { font-size: 16px; } .opts { grid-template-columns: 1fr; } }


  /* === Z-Blog 正文适配层 === */
  .ai-agent { font-size: 17px; line-height: 1.85; color: #2B2724; }
  .ai-agent .tri-banner { text-align: center; padding: 8px 0 4px; margin-bottom: 18px; }
  .ai-agent .tri-banner .tri-title {
    font-family: &quot;Songti SC&quot;, &quot;STSong&quot;, &quot;SimSun&quot;, Georgia, serif;
    font-size: clamp(22px, 3.4vw, 30px); line-height: 1.45; margin: 16px 0 8px; font-weight: 700;
  }
  .ai-agent .tri-banner .tri-sub { font-size: 15px; color: #6B6259; }
  .ai-agent .tri-banner .series-tag {
    background: var(--primary-soft); border: 1px solid var(--primary);
    color: var(--primary-deep); margin-bottom: 0;
  }
  .ai-agent main { display: block; }&lt;/style&gt;&lt;header class=&quot;tri-banner&quot;&gt;&lt;span class=&quot;series-tag&quot;&gt;AI 打工日志 · Agent 篇&lt;/span&gt;
 &amp;nbsp;&lt;h2 class=&quot;tri-title&quot;&gt;《团队分工：装修队是怎么干活的》&lt;/h2&gt;&lt;p class=&quot;tri-sub&quot;&gt;木工电工油漆工，各司其职 · 阅读约 8 分钟 · 无需技术背景&lt;/p&gt;&lt;p class=&quot;tri-sub&quot;&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/09/202609221790041328791485.jpg&quot; alt=&quot;agent-cover-3.jpg&quot; width=&quot;768&quot; height=&quot;512&quot; border=&quot;0&quot; vspace=&quot;0&quot; title=&quot;agent-cover-3.jpg&quot; style=&quot;width: 768px; height: 512px;&quot;/&gt;&lt;/p&gt;&lt;/header&gt;&lt;main class=&quot;wrap&quot;&gt;&lt;section id=&quot;s1&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🔨&lt;/div&gt;&lt;h2&gt;装修队的分工哲学&lt;span class=&quot;sec-sub&quot;&gt;没有一个全能师傅，只有一支配合默契的队伍&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;上一篇我们请来了包工头。这一篇回答那个更实在的问题：&lt;span class=&quot;em&quot;&gt;工人和工头具体怎么配合，才能把活干顺？&lt;/span&gt;&lt;/p&gt;&lt;p&gt;装修队给了我们最朴素的答案。你从来没见过哪个装修队是&amp;quot;一个师傅从头干到尾&amp;quot;——木工打完柜子就走，电工接着布线，油漆工最后进场收尾。每个人只干自己那一段，但&lt;strong&gt;顺序、节奏、交接&lt;/strong&gt;都安排得明明白白。&lt;/p&gt;&lt;p&gt;AI 团队的配合，本质和装修队一模一样：&lt;span class=&quot;em&quot;&gt;把活拆成段，按依赖关系排好序，让对的人在对的时点进场。&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;quote reveal&quot;&gt;把活儿拆给最擅长的人，把顺序排给最需要的人。 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;who&quot;&gt;—— 装修队长的口头禅&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s2&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🛠️&lt;/div&gt;&lt;h2&gt;三种协作模式&lt;span class=&quot;sec-sub&quot;&gt;串行、并行、审批，各有各的适用场景&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;多 Agent 协作，常见三种&amp;quot;排法&amp;quot;。别被名字吓到，你只要记住它们对应装修队里的哪种干法就行：&lt;/p&gt;&lt;h3&gt;① 流水线模式（串行）&lt;/h3&gt;&lt;p&gt;像工厂流水线，&lt;strong&gt;一步做完下一步才开工&lt;/strong&gt;。查完数据 → 写分析 → 配图 → 验收。前一步的输出是后一步的输入，环环相扣。稳，但慢，一步卡住全线停摆。&lt;/p&gt;&lt;h3&gt;② 专家团模式（并行）&lt;/h3&gt;&lt;p&gt;几个人&lt;strong&gt;同时开工，各干各的&lt;/strong&gt;，最后统一拼装。查数据和写文案可以一起进行，谁也不用等谁。快，但必须有个&amp;quot;拼图的人&amp;quot;最后把它们合到一起。&lt;/p&gt;&lt;h3&gt;③ 审批制模式（人工把关）&lt;/h3&gt;&lt;p&gt;在关键节点&lt;strong&gt;停下来等你拍板&lt;/strong&gt;。AI 干到&amp;quot;写完了，先别发&amp;quot;，你点头它才继续。适合&amp;quot;错了要命&amp;quot;的活，比如对外公告、工资核算。&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s3&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🎮&lt;/div&gt;&lt;h2&gt;排兵布阵：亲手试一把&lt;span class=&quot;sec-sub&quot;&gt;点按钮，看看三种模式是怎么排的&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;demo reveal&quot;&gt;&lt;div class=&quot;demo-title&quot;&gt;🎮 排兵布阵模拟器&lt;/div&gt;&lt;div class=&quot;demo-hint&quot;&gt;切换三种协作模式，看&amp;quot;包工头&amp;quot;怎么排工&lt;/div&gt;&lt;div class=&quot;mode-bar&quot;&gt;&lt;button data-m=&quot;pipe&quot; class=&quot;on&quot;&gt;🏭 流水线&lt;/button&gt;&lt;button data-m=&quot;expert&quot;&gt;👥 专家团&lt;/button&gt;&lt;button data-m=&quot;audit&quot;&gt;🛡️ 审批制&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;flow-box&quot; id=&quot;flowBox&quot;&gt;&lt;h5&gt;🏭 流水线模式（串行）&lt;/h5&gt;&lt;div class=&quot;flow-steps&quot;&gt;&lt;span class=&quot;flow-node boss&quot;&gt;包工头&lt;/span&gt;&lt;span class=&quot;flow-arrow&quot;&gt;→&lt;/span&gt;&lt;span class=&quot;flow-node&quot;&gt;查数据&lt;/span&gt;&lt;span class=&quot;flow-arrow&quot;&gt;→&lt;/span&gt;&lt;span class=&quot;flow-node&quot;&gt;写分析&lt;/span&gt;&lt;span class=&quot;flow-arrow&quot;&gt;→&lt;/span&gt;&lt;span class=&quot;flow-node&quot;&gt;配图&lt;/span&gt;&lt;span class=&quot;flow-arrow&quot;&gt;→&lt;/span&gt;&lt;span class=&quot;flow-node&quot;&gt;验收&lt;/span&gt;&lt;span class=&quot;flow-arrow&quot;&gt;→&lt;/span&gt;&lt;span class=&quot;flow-node&quot;&gt;交活&lt;/span&gt;&lt;/div&gt;&lt;p class=&quot;flow-note&quot;&gt;一步做完下一步才开工，像工厂流水线。适合步骤之间有先后依赖的活——前一步的输出，是后一步的输入。稳，但慢，一步卡住全线停摆。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s4&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🧠&lt;/div&gt;&lt;h2&gt;怎么选：看三个信号&lt;span class=&quot;sec-sub&quot;&gt;不看心情，看依赖、看风险、看预算&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;三种模式没有绝对好坏，只有&amp;quot;合不合适&amp;quot;。选的时候看三个信号：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;① 看依赖&lt;/strong&gt;——后一步必须等前一步，就用流水线；各步骤互不相干，就上专家团并行。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;② 看风险&lt;/strong&gt;——错了会出大事的（发公告、算工资），哪怕慢，也要插个&amp;quot;审批制&amp;quot;人工节点。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;③ 看预算&lt;/strong&gt;——并行虽快，但几个人同时开工，账单也同时来。预算紧张时，串行更省。&lt;/p&gt;&lt;p&gt;这三个信号，下一篇我们展开讲——因为&lt;span class=&quot;em&quot;&gt;多 Agent 最大的坑，恰恰就藏在&amp;quot;人多&amp;quot;这两个字里&lt;/span&gt;。&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s5&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🎯&lt;/div&gt;&lt;h2&gt;三题小测&lt;span class=&quot;sec-sub&quot;&gt;答完，你就是会排兵布阵的工头了&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;demo reveal&quot;&gt;&lt;div class=&quot;demo-title&quot;&gt;🎯 第三篇小测&lt;/div&gt;&lt;div class=&quot;demo-hint&quot;&gt;三道题，测测你会不会排工&lt;/div&gt;&lt;div class=&quot;quiz&quot;&gt;&lt;div class=&quot;q-item&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;1&lt;/span&gt;「查数据 → 写分析 → 配图」这种有先后依赖的活，最适合哪种模式？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;a&quot; data-explain=&quot;步骤之间有先后依赖（后一步要用前一步的输出），最适合流水线串行。一步做完下一步才开工，环环相扣。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 流水线（串行）&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 专家团（并行）&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;q-item&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;2&lt;/span&gt;查数据和写文案可以同时干，最适合哪种模式？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;b&quot; data-explain=&quot;两个步骤互不依赖，可以同时开工，最后统一拼装——这正是专家团并行模式的优势：快。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 流水线（串行）&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 专家团（并行）&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;q-item&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;3&lt;/span&gt;「对外发布公告」这类错了要命的活，该加什么？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;c&quot; data-explain=&quot;错了会出大事的活，再快也要在关键节点插「审批制」人工节点——AI 干到「先别发」，你点头才继续。慢一点，但稳得放心。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 再多招几个 AI 一起写&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 让 AI 全自动发出去&lt;/button&gt;&lt;button data-v=&quot;c&quot;&gt;C. 插一个「人工确认」节点&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;final-cta reveal&quot;&gt;&lt;div class=&quot;emoji&quot;&gt;⚠️&lt;/div&gt;&lt;h2&gt;分工学会了，但团队也有坑&lt;/h2&gt;&lt;p style=&quot;color: var(--ink-soft)&quot;&gt;人多力量大，人多也麻烦。&lt;br/&gt;&lt;br/&gt;下一篇：《多 Agent 避坑：团队不是万能的》&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/main&gt;&lt;script&gt;(function () {
  var root = document.currentScript.closest(&#039;.ai-agent&#039;);
  
  // ---- 滚动显现 ----
  const io = new IntersectionObserver((entries) =&gt; {
    entries.forEach(e =&gt; { if (e.isIntersecting) { e.target.classList.add(&#039;in&#039;); io.unobserve(e.target); } });
  }, { threshold: 0.12 });
  root.querySelectorAll(&#039;.reveal&#039;).forEach(el =&gt; io.observe(el));

  // ---- 目录高亮 ----
  const links = root.querySelectorAll(&#039;.toc a&#039;);
  const secs = [...links].map(a =&gt; root.querySelector(a.getAttribute(&#039;href&#039;)));
  const spy = new IntersectionObserver((entries) =&gt; {
    entries.forEach(e =&gt; {
      if (e.isIntersecting) {
        links.forEach(l =&gt; l.classList.remove(&#039;active&#039;));
        const hit = links.find(l =&gt; l.getAttribute(&#039;href&#039;) === &#039;#&#039; + e.target.id);
        if (hit) hit.classList.add(&#039;active&#039;);
      }
    });
  }, { rootMargin: &#039;-30% 0px -60% 0px&#039; });
  secs.forEach(s =&gt; s &amp;&amp; spy.observe(s));

  // ---- S3：排兵布阵模拟 ----
  const flows = {
    pipe: {
      title: &#039;🏭 流水线模式（串行）&#039;,
      nodes: [&#039;包工头&#039;,&#039;查数据&#039;,&#039;写分析&#039;,&#039;配图&#039;,&#039;验收&#039;,&#039;交活&#039;],
      note: &#039;一步做完下一步才开工，像工厂流水线。适合步骤之间有先后依赖的活——前一步的输出，是后一步的输入。稳，但慢，一步卡住全线停摆。&#039;
    },
    expert: {
      title: &#039;👥 专家团模式（并行）&#039;,
      nodes: [&#039;包工头&#039;,&#039;查数据&#039;,&#039;写文案&#039;,&#039;做PPT&#039;,&#039;验收&#039;,&#039;交活&#039;],
      note: &#039;几个人同时开工，各干各的，最后统一拼装。适合互不依赖的活——查数据和写文案可以同时进行。快，但要有个人最后&quot;拼图&quot;。&#039;
    },
    audit: {
      title: &#039;🛡️ 审批制模式（人工把关）&#039;,
      nodes: [&#039;包工头&#039;,&#039;查数据&#039;,&#039;写分析&#039;,&#039;你(确认)&#039;,&#039;定稿&#039;,&#039;交活&#039;],
      note: &#039;关键节点停下来等你拍板。适合&quot;错了要命&quot;的活——比如发对外公告、算工资。慢一点，但稳得放心。&#039;
    }
  };
  const flowBox = root.querySelector(&#039;#flowBox&#039;);
  root.querySelectorAll(&#039;.mode-bar button&#039;).forEach(btn =&gt; {
    btn.onclick = () =&gt; {
      root.querySelectorAll(&#039;.mode-bar button&#039;).forEach(x =&gt; x.classList.remove(&#039;on&#039;));
      btn.classList.add(&#039;on&#039;);
      const f = flows[btn.dataset.m];
      const nodes = f.nodes.map(n =&gt; {
        let cls = &#039;flow-node&#039;;
        if (n === &#039;包工头&#039;) cls += &#039; boss&#039;;
        if (n.indexOf(&#039;你&#039;) === 0) cls += &#039; human&#039;;
        return &#039;&lt;span class=&quot;&#039; + cls + &#039;&quot;&gt;&#039; + n + &#039;&lt;/span&gt;&#039;;
      }).join(&#039;&lt;span class=&quot;flow-arrow&quot;&gt;→&lt;/span&gt;&#039;);
      flowBox.innerHTML = &#039;&lt;h5&gt;&#039; + f.title + &#039;&lt;/h5&gt;&lt;div class=&quot;flow-steps&quot;&gt;&#039; + nodes + &#039;&lt;/div&gt;&lt;p class=&quot;flow-note&quot;&gt;&#039; + f.note + &#039;&lt;/p&gt;&#039;;
    };
  });

  // ---- Quiz ----
  root.querySelectorAll(&#039;.quiz .q-item&#039;).forEach(qi =&gt; {
    const opts = qi.querySelector(&#039;.opts&#039;);
    const explain = qi.querySelector(&#039;.q-explain&#039;);
    const answer = opts.dataset.answer;
    let done = false;
    opts.querySelectorAll(&#039;button&#039;).forEach(btn =&gt; {
      btn.onclick = () =&gt; {
        if (done) return;
        done = true;
        const pick = btn.dataset.v;
        opts.querySelectorAll(&#039;button&#039;).forEach(b =&gt; {
          if (b.dataset.v === answer) b.classList.add(&#039;right&#039;);
          else if (b === btn) b.classList.add(&#039;wrong&#039;);
        });
        explain.textContent = opts.dataset.explain;
        explain.classList.add(&#039;show&#039;);
      };
    });
  });

  // 兜底：2 秒后强制显示所有 reveal 元素，避免任何环境下内容被隐藏
  setTimeout(function () {
    root.querySelectorAll(&#039;.reveal&#039;).forEach(function (el) { el.classList.add(&#039;in&#039;); });
  }, 2000);
})();&lt;/script&gt;&lt;/div&gt;&lt;!-- AI 打工日志 · Agent 篇 · 第3篇 · 结束 --&gt;</description><pubDate>Tue, 22 Sep 2026 07:22:33 +0800</pubDate></item><item><title>包工头：给 AI 团队请个项目经理 | AI 打工日志·Agent篇②</title><link>https://imwen.com/post/390.html</link><description>&lt;!-- AI 打工日志 · Agent 篇 · 第2篇 · 交互完整版（样式已隔离，勿在可视化编辑器中编辑源码模式之外的内容） --&gt;&lt;div class=&quot;ai-agent ai-agent-2&quot;&gt;&lt;style&gt;.ai-agent-2 {
    --primary: #3B5BDB;
    --primary-light: #E7EBFC;
    --primary-soft: #D3DBF8;
    --primary-deep: #2B3FAD;
    --accent: #748FFC;
    --bg: #FAF7F2;
    --card: #FFFFFF;
    --ink: #2B2724;
    --ink-soft: #6B6259;
    --line: #EDE5DA;
    --radius: 20px;
    --serif: &quot;Songti SC&quot;, &quot;STSong&quot;, &quot;SimSun&quot;, Georgia, serif;
    --sans: -apple-system, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Segoe UI&quot;, sans-serif;
  }
  .ai-agent-2 * { margin: 0; padding: 0; box-sizing: border-box; }
  .ai-agent-2 { font-family: var(--sans); background: var(--bg); color: var(--ink); line-height: 1.85; font-size: 17px; }
  .ai-agent-2 .wrap { max-width: 760px; margin: 0 auto; padding: 0 22px; }
  .ai-agent-2 .hero { background: linear-gradient(160deg, var(--primary) 0%, var(--accent) 100%); color: #fff; padding: 72px 0 88px; position: relative; overflow: hidden; }
  .ai-agent-2 .hero::after { content: &quot;&quot;; position: absolute; bottom: -2px; left: 0; right: 0; height: 44px; background: var(--bg); border-radius: 44px 44px 0 0; }
  .ai-agent-2 .series-tag { display: inline-block; background: rgba(255,255,255,.18); border: 1px solid rgba(255,255,255,.4); border-radius: 999px; padding: 5px 16px; font-size: 13px; letter-spacing: 2px; margin-bottom: 26px; }
  .ai-agent-2 .hero .ep { font-size: 14px; letter-spacing: 6px; opacity: .85; margin-bottom: 10px; }
  .ai-agent-2 .hero h1 { font-family: var(--serif); font-size: clamp(30px, 5.6vw, 46px); line-height: 1.35; font-weight: 700; margin-bottom: 18px; }
  .ai-agent-2 .hero .sub { font-size: 18px; opacity: .92; }
  .ai-agent-2 .hero .meta { margin-top: 30px; font-size: 13px; opacity: .75; }
  .ai-agent-2 .toc { position: sticky; top: 0; z-index: 50; background: rgba(250,247,242,.92); backdrop-filter: blur(10px); border-bottom: 1px solid var(--line); padding: 10px 0; }
  .ai-agent-2 .toc .wrap { display: flex; gap: 8px; overflow-x: auto; white-space: nowrap; scrollbar-width: none; }
  .ai-agent-2 .toc .wrap::-webkit-scrollbar { display: none; }
  .ai-agent-2 .toc a { flex: 0 0 auto; text-decoration: none; color: var(--ink-soft); font-size: 14px; padding: 6px 14px; border-radius: 999px; border: 1px solid transparent; transition: all .25s; }
  .ai-agent-2 .toc a:hover, .ai-agent-2 .toc a.active { color: var(--primary-deep); background: var(--primary-soft); border-color: var(--primary-soft); }
  .ai-agent-2 section { padding: 64px 0 8px; }
  .ai-agent-2 .sec-head { display: flex; align-items: center; gap: 14px; margin-bottom: 26px; }
  .ai-agent-2 .sec-num { width: 52px; height: 52px; flex: 0 0 52px; border-radius: 16px; background: var(--primary-soft); display: flex; align-items: center; justify-content: center; font-size: 26px; }
  .ai-agent-2 .sec-head h2 { font-family: var(--serif); font-size: clamp(22px, 3.6vw, 28px); line-height: 1.4; }
  .ai-agent-2 .sec-head .sec-sub { font-size: 13px; color: var(--ink-soft); display: block; font-family: var(--sans); font-weight: 400; margin-top: 2px; }
  .ai-agent-2 .card { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 28px 26px; margin-bottom: 22px; box-shadow: 0 2px 10px rgba(43,39,36,.04); }
  .ai-agent-2 p + p { margin-top: 16px; }
  .ai-agent-2 .card h3 { font-size: 18px; margin-bottom: 12px; display: flex; align-items: center; gap: 8px; }
  .ai-agent-2 .em { color: var(--primary-deep); font-weight: 700; }
  .ai-agent-2 strong { font-weight: 700; }
  .ai-agent-2 .quote { margin: 34px 0; background: linear-gradient(135deg, var(--primary) 0%, var(--accent) 100%); color: #fff; border-radius: var(--radius); padding: 34px 30px; font-family: var(--serif); font-size: clamp(19px, 3vw, 23px); line-height: 1.7; position: relative; }
  .ai-agent-2 .quote::before { content: &quot;❝&quot;; position: absolute; top: 10px; left: 18px; font-size: 44px; opacity: .3; }
  .ai-agent-2 .quote .who { display: block; margin-top: 14px; font-family: var(--sans); font-size: 13px; opacity: .8; }
  .ai-agent-2 .demo { background: var(--card); border: 2px dashed var(--primary); border-radius: var(--radius); padding: 30px 26px; margin: 30px 0; }
  .ai-agent-2 .demo-title { text-align: center; font-weight: 700; font-size: 16px; color: var(--primary-deep); letter-spacing: 1px; margin-bottom: 6px; }
  .ai-agent-2 .demo-hint { text-align: center; font-size: 13px; color: var(--ink-soft); margin-bottom: 20px; }
  .ai-agent-2 .role-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin: 22px 0; }
  .ai-agent-2 .role-card { border-radius: 16px; padding: 22px 20px; font-size: 14.5px; }
  .ai-agent-2 .role-card.boss { background: var(--primary-light); border: 1.5px solid var(--primary-soft); }
  .ai-agent-2 .role-card.worker { background: #F6F3F0; border: 1px solid var(--line); }
  .ai-agent-2 .role-card .r-ico { font-size: 30px; }
  .ai-agent-2 .role-card h4 { font-size: 16px; margin: 8px 0 6px; }
  .ai-agent-2 .role-card.boss h4 { color: var(--primary-deep); }
  .ai-agent-2 .role-card ul { padding-left: 18px; }
  .ai-agent-2 .role-card li { margin: 4px 0; }
  .ai-agent-2 .step-list { list-style: none; }
  .ai-agent-2 .step-list li { display: flex; gap: 12px; align-items: flex-start; padding: 12px 0; border-bottom: 1px dashed var(--line); }
  .ai-agent-2 .step-list li:last-child { border-bottom: none; }
  .ai-agent-2 .step-num { flex: 0 0 30px; height: 30px; border-radius: 10px; background: var(--primary); color: #fff; display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 14px; }
  .ai-agent-2 .step-list li b { color: var(--primary-deep); display: block; }
  .ai-agent-2 .quiz { margin: 26px 0 6px; }
  .ai-agent-2 .q-item { margin-bottom: 22px; }
  .ai-agent-2 .q-item .q { font-weight: 700; font-size: 16px; margin-bottom: 12px; }
  .ai-agent-2 .q-item .q .qn { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; border-radius: 8px; background: var(--primary); color: #fff; font-size: 14px; margin-right: 8px; vertical-align: -5px; }
  .ai-agent-2 .opts { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
  .ai-agent-2 .opts button { font-family: var(--sans); font-size: 14.5px; text-align: left; padding: 12px 16px; border-radius: 12px; border: 1.5px solid var(--line); background: #fff; color: var(--ink); cursor: pointer; transition: all .2s; line-height: 1.6; }
  .ai-agent-2 .opts button:hover { border-color: var(--primary); }
  .ai-agent-2 .opts button.right { border-color: #2B8A3E; background: #EBF7EE; color: #1B5E2B; font-weight: 700; }
  .ai-agent-2 .opts button.wrong { border-color: #C92A2A; background: #FFF0F0; color: #A61E1E; }
  .ai-agent-2 .q-explain { margin-top: 10px; font-size: 13.5px; color: var(--ink-soft); background: var(--primary-light); border-radius: 10px; padding: 10px 14px; display: none; }
  .ai-agent-2 .q-explain.show { display: block; }
  .ai-agent-2 .final-cta { margin: 50px 0 10px; text-align: center; padding: 44px 26px; background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); }
  .ai-agent-2 .final-cta .emoji { font-size: 40px; }
  .ai-agent-2 .final-cta h2 { font-family: var(--serif); font-size: 24px; margin: 12px 0 10px; }
  .ai-agent-2 footer { text-align: center; padding: 30px 0 50px; color: var(--ink-soft); font-size: 13px; }
  .ai-agent-2 .reveal { opacity: 0; transform: translateY(26px); transition: all .7s cubic-bezier(.22,.61,.36,1); }
  .ai-agent-2 .reveal.in { opacity: 1; transform: none; }
  @media (max-width: 560px) { body { font-size: 16px; } .role-row, .opts { grid-template-columns: 1fr; } }


  /* === Z-Blog 正文适配层 === */
  .ai-agent { font-size: 17px; line-height: 1.85; color: #2B2724; }
  .ai-agent .tri-banner { text-align: center; padding: 8px 0 4px; margin-bottom: 18px; }
  .ai-agent .tri-banner .tri-title {
    font-family: &quot;Songti SC&quot;, &quot;STSong&quot;, &quot;SimSun&quot;, Georgia, serif;
    font-size: clamp(22px, 3.4vw, 30px); line-height: 1.45; margin: 16px 0 8px; font-weight: 700;
  }
  .ai-agent .tri-banner .tri-sub { font-size: 15px; color: #6B6259; }
  .ai-agent .tri-banner .series-tag {
    background: var(--primary-soft); border: 1px solid var(--primary);
    color: var(--primary-deep); margin-bottom: 0;
  }
  .ai-agent main { display: block; }&lt;/style&gt;&lt;header class=&quot;tri-banner&quot;&gt;&lt;span class=&quot;series-tag&quot;&gt;AI 打工日志 · Agent 篇&lt;/span&gt;
 &amp;nbsp;&lt;h2 class=&quot;tri-title&quot;&gt;《包工头：给 AI 团队请个项目经理》&lt;/h2&gt;&lt;p class=&quot;tri-sub&quot;&gt;会派活、会验收、会兜底 · 阅读约 8 分钟 · 无需技术背景&lt;/p&gt;&lt;p class=&quot;tri-sub&quot;&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/09/202609201789871602160769.jpg&quot; alt=&quot;agent-cover-2.jpg&quot; width=&quot;768&quot; height=&quot;512&quot; border=&quot;0&quot; vspace=&quot;0&quot; title=&quot;agent-cover-2.jpg&quot; style=&quot;width: 768px; height: 512px;&quot;/&gt;&lt;/p&gt;&lt;/header&gt;&lt;main class=&quot;wrap&quot;&gt;&lt;section id=&quot;s1&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;👷&lt;/div&gt;&lt;h2&gt;人齐了，工地却乱了&lt;span class=&quot;sec-sub&quot;&gt;一群能干的 AI，没有一个会派活的&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;上一篇结尾，你把团队招齐了：会写文案的、会查数据的、会验收挑刺的，个个都是好手。你把活儿丢进去，结果——&lt;span class=&quot;em&quot;&gt;乱成一锅粥&lt;/span&gt;。&lt;/p&gt;&lt;p&gt;写文案的和查数据的谁也不理谁，各自闷头干；验收的抓不到人验收，对着空气挑刺；一份报告，三个 AI 各写了一版，格式还不一样。你这才意识到：光有人不行，得有个&lt;span class=&quot;em&quot;&gt;派活的人&lt;/span&gt;。&lt;/p&gt;&lt;p&gt;装修队里，这个人叫包工头；AI 团队里，它叫&lt;strong&gt;编排者（Orchestrator）&lt;/strong&gt;——它是那个&amp;quot;不干具体活，只负责把活安排明白&amp;quot;的 AI。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;quote reveal&quot;&gt;团队里最值钱的不是最能干的，是最会派活的。 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;who&quot;&gt;—— 装修界流传的一句话&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s2&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🧭&lt;/div&gt;&lt;h2&gt;包工头是谁&lt;span class=&quot;sec-sub&quot;&gt;它是 AI，但干的活像项目经理&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;编排者 Agent，你可以把它理解成&lt;strong&gt;一个只会&amp;quot;调度&amp;quot;、不会&amp;quot;亲自搬砖&amp;quot;的项目经理&lt;/strong&gt;。它自己不写文案、不查数据，只做三件事：&lt;span class=&quot;em&quot;&gt;拆活、派单、验收&lt;/span&gt;。&lt;/p&gt;&lt;p&gt;它手里有一张&amp;quot;施工清单&amp;quot;：接到你的任务，先把大目标拆成几个小步骤，再按步骤匹配最合适的工人，把活派下去，等工人交活，它验收、拼装，最后交到你手上。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;role-row reveal&quot;&gt;&lt;div class=&quot;role-card boss&quot;&gt;&lt;div class=&quot;r-ico&quot;&gt;🧭&lt;/div&gt;&lt;h4&gt;包工头（编排者）&lt;/h4&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;不亲自搬砖&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;只负责拆活、派单、验收&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;谁翻车了，它负责兜底重派&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;脑子里只有&amp;quot;全局图&amp;quot;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class=&quot;role-card worker&quot;&gt;&lt;div class=&quot;r-ico&quot;&gt;🔨&lt;/div&gt;&lt;h4&gt;工人（执行 Agent）&lt;/h4&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;只干自己擅长的活&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;不管别人，不抢别人的活&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;干完交活，等验收&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;脑子里只有&amp;quot;自己的那摊&amp;quot;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s3&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;📋&lt;/div&gt;&lt;h2&gt;包工头的三大职责&lt;span class=&quot;sec-sub&quot;&gt;拆得开、派得对、收得回&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;一个合格的编排者，必须把这三件事做扎实。少一样，团队就散架。&lt;/p&gt;&lt;/div&gt;&lt;ol class=&quot;step-list reveal list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;span class=&quot;step-num&quot;&gt;1&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;strong&gt;拆活：把大任务切成小步骤&lt;/strong&gt;接到&amp;quot;写一份行业报告&amp;quot;，它先拆成&amp;quot;查数据 → 写分析 → 配图表 → 校对验收&amp;quot;四步。拆得越清楚，后面越好派。&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span class=&quot;step-num&quot;&gt;2&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;strong&gt;派单：把步骤交给最合适的人&lt;/strong&gt;查数据派给&amp;quot;数据 Agent&amp;quot;，写分析派给&amp;quot;文案 Agent&amp;quot;，校对派给&amp;quot;质检 Agent&amp;quot;。人尽其才，各管一摊。&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span class=&quot;step-num&quot;&gt;3&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;strong&gt;验收：收活、拼装、兜底&lt;/strong&gt;每步交活都先验一遍，不合格打回重做；全合格了拼成成品。哪步翻车，它顶上重派，绝不让你看到半成品。&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;h3&gt;💡 冷知识：编排者也可以&amp;quot;递进思考&amp;quot;&lt;/h3&gt;&lt;p&gt;高手的包工头不只是流水账派单，它会&lt;strong&gt;先列计划、再逐步执行、边做边修正&lt;/strong&gt;。这种&amp;quot;想一步、走一步、看一步&amp;quot;的节奏，能让多 Agent 协作更稳，不容易一条道走到黑。&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s4&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🏗️&lt;/div&gt;&lt;h2&gt;主从结构：一句话记住它&lt;span class=&quot;sec-sub&quot;&gt;一个大脑，N 双手&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;这种&amp;quot;一个包工头 + 一群工人&amp;quot;的搭法，有个正式名字叫&lt;strong&gt;主从结构（主控 Agent + 执行 Agent）&lt;/strong&gt;。记住一句话：&lt;span class=&quot;em&quot;&gt;一个大脑负责想，N 双手负责干&lt;/span&gt;。&lt;/p&gt;&lt;p&gt;它好在哪里？好在&lt;span class=&quot;em&quot;&gt;责任清晰&lt;/span&gt;。大脑不抢手的活，手不替大脑拿主意。出了岔子，你一眼就知道：活没拆对是大脑的锅，活没干好是手的锅，活没人干是大脑漏派了。谁的责任，清清楚楚。&lt;/p&gt;&lt;p&gt;这也是为什么上一篇说&amp;quot;独狼出错了你都不知道该查谁&amp;quot;——有了主从结构，问题天然就定位了。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;quote reveal&quot;&gt;一个大脑，N 双手——大脑越清楚，手就越有力。 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;who&quot;&gt;—— AI 打工日志 · Agent 篇&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s5&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🎯&lt;/div&gt;&lt;h2&gt;三题小测&lt;span class=&quot;sec-sub&quot;&gt;答完，你就知道该请怎样的包工头了&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;demo reveal&quot;&gt;&lt;div class=&quot;demo-title&quot;&gt;🎯 第二篇小测&lt;/div&gt;&lt;div class=&quot;demo-hint&quot;&gt;三道题，测测你对包工头的理解&lt;/div&gt;&lt;div class=&quot;quiz&quot;&gt;&lt;div class=&quot;q-item&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;1&lt;/span&gt;编排者 Agent 最核心的工作是？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;b&quot; data-explain=&quot;编排者不亲自搬砖，它的核心是「拆活、派单、验收」三件事，相当于 AI 团队里的项目经理。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 亲自写文案、查数据&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 拆活、派单、验收&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;q-item&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;2&lt;/span&gt;主从结构里的「主」和「从」分别指什么？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;a&quot; data-explain=&quot;「主」是主控 Agent（包工头/大脑），负责想和调度；「从」是执行 Agent（工人/双手），负责具体干活。一个大脑 + N 双手。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 主控调度 + 执行干活的 AI&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 大模型 + 小模型&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;q-item&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;3&lt;/span&gt;哪一步做砸了，责任该算到包工头头上？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;c&quot; data-explain=&quot;活没人干 = 包工头漏派了，责任在调度；活没干好 = 执行 Agent 的锅。主从结构的好处就是责任清晰，一眼定位。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 文案写错别字&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 数据算错了&lt;/button&gt;&lt;button data-v=&quot;c&quot;&gt;C. 有个环节压根没人干&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;final-cta reveal&quot;&gt;&lt;div class=&quot;emoji&quot;&gt;🏗️&lt;/div&gt;&lt;h2&gt;包工头请来了，下一步该分工了&lt;/h2&gt;&lt;p style=&quot;color: var(--ink-soft)&quot;&gt;一个包工头 + 一群工人，具体怎么配合干活？&lt;br/&gt;&lt;br/&gt;下一篇：《团队分工：装修队是怎么干活的》&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/main&gt;&lt;script&gt;(function () {
  var root = document.currentScript.closest(&#039;.ai-agent&#039;);
  
  // ---- 滚动显现 ----
  const io = new IntersectionObserver((entries) =&gt; {
    entries.forEach(e =&gt; { if (e.isIntersecting) { e.target.classList.add(&#039;in&#039;); io.unobserve(e.target); } });
  }, { threshold: 0.12 });
  root.querySelectorAll(&#039;.reveal&#039;).forEach(el =&gt; io.observe(el));

  // ---- 目录高亮 ----
  const links = root.querySelectorAll(&#039;.toc a&#039;);
  const secs = [...links].map(a =&gt; root.querySelector(a.getAttribute(&#039;href&#039;)));
  const spy = new IntersectionObserver((entries) =&gt; {
    entries.forEach(e =&gt; {
      if (e.isIntersecting) {
        links.forEach(l =&gt; l.classList.remove(&#039;active&#039;));
        const hit = links.find(l =&gt; l.getAttribute(&#039;href&#039;) === &#039;#&#039; + e.target.id);
        if (hit) hit.classList.add(&#039;active&#039;);
      }
    });
  }, { rootMargin: &#039;-30% 0px -60% 0px&#039; });
  secs.forEach(s =&gt; s &amp;&amp; spy.observe(s));

  // ---- Quiz ----
  root.querySelectorAll(&#039;.quiz .q-item&#039;).forEach(qi =&gt; {
    const opts = qi.querySelector(&#039;.opts&#039;);
    const explain = qi.querySelector(&#039;.q-explain&#039;);
    const answer = opts.dataset.answer;
    let done = false;
    opts.querySelectorAll(&#039;button&#039;).forEach(btn =&gt; {
      btn.onclick = () =&gt; {
        if (done) return;
        done = true;
        const pick = btn.dataset.v;
        opts.querySelectorAll(&#039;button&#039;).forEach(b =&gt; {
          if (b.dataset.v === answer) b.classList.add(&#039;right&#039;);
          else if (b === btn) b.classList.add(&#039;wrong&#039;);
        });
        explain.textContent = opts.dataset.explain;
        explain.classList.add(&#039;show&#039;);
      };
    });
  });

  // 兜底：2 秒后强制显示所有 reveal 元素，避免任何环境下内容被隐藏
  setTimeout(function () {
    root.querySelectorAll(&#039;.reveal&#039;).forEach(function (el) { el.classList.add(&#039;in&#039;); });
  }, 2000);
})();&lt;/script&gt;&lt;/div&gt;&lt;!-- AI 打工日志 · Agent 篇 · 第2篇 · 结束 --&gt;</description><pubDate>Sun, 20 Sep 2026 10:22:33 +0800</pubDate></item><item><title>多 Agent：一个实习生不够用了 | AI 打工日志·Agent篇①</title><link>https://imwen.com/post/389.html</link><description>&lt;!-- AI 打工日志 · Agent 篇 · 第1篇 · 交互完整版（样式已隔离，勿在可视化编辑器中编辑源码模式之外的内容） --&gt;&lt;div class=&quot;ai-agent ai-agent-1&quot;&gt;&lt;style&gt;.ai-agent-1 {
    --primary: #0B7285;
    --primary-light: #E3F4F6;
    --primary-soft: #C5ECEE;
    --primary-deep: #0A5C6B;
    --accent: #3BC9DB;
    --bg: #FAF7F2;
    --card: #FFFFFF;
    --ink: #2B2724;
    --ink-soft: #6B6259;
    --line: #EDE5DA;
    --radius: 20px;
    --serif: &quot;Songti SC&quot;, &quot;STSong&quot;, &quot;SimSun&quot;, Georgia, serif;
    --sans: -apple-system, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Segoe UI&quot;, sans-serif;
  }
  .ai-agent-1 * { margin: 0; padding: 0; box-sizing: border-box; }
  .ai-agent-1 { font-family: var(--sans); background: var(--bg); color: var(--ink); line-height: 1.85; font-size: 17px; }
  .ai-agent-1 .wrap { max-width: 760px; margin: 0 auto; padding: 0 22px; }
  .ai-agent-1 .hero { background: linear-gradient(160deg, var(--primary) 0%, var(--accent) 100%); color: #fff; padding: 72px 0 88px; position: relative; overflow: hidden; }
  .ai-agent-1 .hero::after { content: &quot;&quot;; position: absolute; bottom: -2px; left: 0; right: 0; height: 44px; background: var(--bg); border-radius: 44px 44px 0 0; }
  .ai-agent-1 .series-tag { display: inline-block; background: rgba(255,255,255,.18); border: 1px solid rgba(255,255,255,.4); border-radius: 999px; padding: 5px 16px; font-size: 13px; letter-spacing: 2px; margin-bottom: 26px; }
  .ai-agent-1 .hero .ep { font-size: 14px; letter-spacing: 6px; opacity: .85; margin-bottom: 10px; }
  .ai-agent-1 .hero h1 { font-family: var(--serif); font-size: clamp(30px, 5.6vw, 46px); line-height: 1.35; font-weight: 700; margin-bottom: 18px; }
  .ai-agent-1 .hero .sub { font-size: 18px; opacity: .92; }
  .ai-agent-1 .hero .meta { margin-top: 30px; font-size: 13px; opacity: .75; }
  .ai-agent-1 .toc { position: sticky; top: 0; z-index: 50; background: rgba(250,247,242,.92); backdrop-filter: blur(10px); border-bottom: 1px solid var(--line); padding: 10px 0; }
  .ai-agent-1 .toc .wrap { display: flex; gap: 8px; overflow-x: auto; white-space: nowrap; scrollbar-width: none; }
  .ai-agent-1 .toc .wrap::-webkit-scrollbar { display: none; }
  .ai-agent-1 .toc a { flex: 0 0 auto; text-decoration: none; color: var(--ink-soft); font-size: 14px; padding: 6px 14px; border-radius: 999px; border: 1px solid transparent; transition: all .25s; }
  .ai-agent-1 .toc a:hover, .ai-agent-1 .toc a.active { color: var(--primary-deep); background: var(--primary-soft); border-color: var(--primary-soft); }
  .ai-agent-1 section { padding: 64px 0 8px; }
  .ai-agent-1 .sec-head { display: flex; align-items: center; gap: 14px; margin-bottom: 26px; }
  .ai-agent-1 .sec-num { width: 52px; height: 52px; flex: 0 0 52px; border-radius: 16px; background: var(--primary-soft); display: flex; align-items: center; justify-content: center; font-size: 26px; }
  .ai-agent-1 .sec-head h2 { font-family: var(--serif); font-size: clamp(22px, 3.6vw, 28px); line-height: 1.4; }
  .ai-agent-1 .sec-head .sec-sub { font-size: 13px; color: var(--ink-soft); display: block; font-family: var(--sans); font-weight: 400; margin-top: 2px; }
  .ai-agent-1 .card { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 28px 26px; margin-bottom: 22px; box-shadow: 0 2px 10px rgba(43,39,36,.04); }
  .ai-agent-1 p + p { margin-top: 16px; }
  .ai-agent-1 .card h3 { font-size: 18px; margin-bottom: 12px; display: flex; align-items: center; gap: 8px; }
  .ai-agent-1 .em { color: var(--primary-deep); font-weight: 700; }
  .ai-agent-1 strong { font-weight: 700; }
  .ai-agent-1 .quote { margin: 34px 0; background: linear-gradient(135deg, var(--primary) 0%, var(--accent) 100%); color: #fff; border-radius: var(--radius); padding: 34px 30px; font-family: var(--serif); font-size: clamp(19px, 3vw, 23px); line-height: 1.7; position: relative; }
  .ai-agent-1 .quote::before { content: &quot;❝&quot;; position: absolute; top: 10px; left: 18px; font-size: 44px; opacity: .3; }
  .ai-agent-1 .quote .who { display: block; margin-top: 14px; font-family: var(--sans); font-size: 13px; opacity: .8; }
  .ai-agent-1 .demo { background: var(--card); border: 2px dashed var(--primary); border-radius: var(--radius); padding: 30px 26px; margin: 30px 0; }
  .ai-agent-1 .demo-title { text-align: center; font-weight: 700; font-size: 16px; color: var(--primary-deep); letter-spacing: 1px; margin-bottom: 6px; }
  .ai-agent-1 .demo-hint { text-align: center; font-size: 13px; color: var(--ink-soft); margin-bottom: 20px; }
  .ai-agent-1 .toggle-bar { display: flex; justify-content: center; gap: 10px; margin-bottom: 20px; }
  .ai-agent-1 .toggle-bar button { font-family: var(--sans); font-size: 15px; font-weight: 600; padding: 9px 20px; border-radius: 999px; border: 1.5px solid var(--line); background: #fff; color: var(--ink-soft); cursor: pointer; transition: all .2s; }
  .ai-agent-1 .toggle-bar button.on { border-color: var(--primary); background: var(--primary); color: #fff; box-shadow: 0 4px 14px rgba(11,114,133,.28); }
  .ai-agent-1 .vs-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin: 22px 0; }
  .ai-agent-1 .vs-card { border-radius: 16px; padding: 22px 20px; font-size: 14.5px; }
  .ai-agent-1 .vs-card.mouth { background: #F6F3F0; border: 1px solid var(--line); }
  .ai-agent-1 .vs-card.machine { background: var(--primary-light); border: 1px solid var(--primary-soft); }
  .ai-agent-1 .vs-card .v-ico { font-size: 28px; }
  .ai-agent-1 .vs-card h4 { font-size: 16px; margin: 8px 0 6px; }
  .ai-agent-1 .vs-card.machine h4 { color: var(--primary-deep); }
  .ai-agent-1 .vs-card ul { padding-left: 18px; }
  .ai-agent-1 .vs-card li { margin: 4px 0; }
  .ai-agent-1 .diag-grid { display: grid; grid-template-columns: 1fr; gap: 12px; margin-bottom: 16px; }
  .ai-agent-1 .d-item { background: #fff; border: 1.5px solid var(--line); border-radius: 14px; padding: 16px 16px; cursor: pointer; transition: all .2s; text-align: left; font-family: var(--sans); }
  .ai-agent-1 .d-item:hover { transform: translateY(-2px); box-shadow: 0 5px 14px rgba(43,39,36,.1); }
  .ai-agent-1 .d-item.on { border-color: var(--primary); background: var(--primary-light); }
  .ai-agent-1 .d-item .d-ico { font-size: 24px; }
  .ai-agent-1 .d-item b { display: block; font-size: 15px; margin-top: 4px; }
  .ai-agent-1 .d-item span { font-size: 12.5px; color: var(--ink-soft); }
  .ai-agent-1 .d-result { background: var(--primary-light); border: 1px solid var(--primary-soft); border-radius: 14px; padding: 18px 20px; font-size: 14.5px; min-height: 110px; }
  .ai-agent-1 .d-result h4 { color: var(--primary-deep); font-size: 15.5px; margin-bottom: 8px; }
  .ai-agent-1 .d-result .rx { margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--primary-soft); }
  .ai-agent-1 .d-result .rx b { color: var(--primary-deep); }
  .ai-agent-1 .check-list { list-style: none; }
  .ai-agent-1 .check-list li { padding: 12px 16px; margin: 10px 0; border-radius: 12px; border: 1px solid var(--line); background: #fff; }
  .ai-agent-1 .check-list li b { color: var(--primary-deep); }
  .ai-agent-1 .quiz { margin: 26px 0 6px; }
  .ai-agent-1 .q-item { margin-bottom: 22px; }
  .ai-agent-1 .q-item .q { font-weight: 700; font-size: 16px; margin-bottom: 12px; }
  .ai-agent-1 .q-item .q .qn { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; border-radius: 8px; background: var(--primary); color: #fff; font-size: 14px; margin-right: 8px; vertical-align: -5px; }
  .ai-agent-1 .opts { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
  .ai-agent-1 .opts button { font-family: var(--sans); font-size: 14.5px; text-align: left; padding: 12px 16px; border-radius: 12px; border: 1.5px solid var(--line); background: #fff; color: var(--ink); cursor: pointer; transition: all .2s; line-height: 1.6; }
  .ai-agent-1 .opts button:hover { border-color: var(--primary); }
  .ai-agent-1 .opts button.right { border-color: #2B8A3E; background: #EBF7EE; color: #1B5E2B; font-weight: 700; }
  .ai-agent-1 .opts button.wrong { border-color: #C92A2A; background: #FFF0F0; color: #A61E1E; }
  .ai-agent-1 .q-explain { margin-top: 10px; font-size: 13.5px; color: var(--ink-soft); background: var(--primary-light); border-radius: 10px; padding: 10px 14px; display: none; }
  .ai-agent-1 .q-explain.show { display: block; }
  .ai-agent-1 .final-cta { margin: 50px 0 10px; text-align: center; padding: 44px 26px; background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); }
  .ai-agent-1 .final-cta .emoji { font-size: 40px; }
  .ai-agent-1 .final-cta h2 { font-family: var(--serif); font-size: 24px; margin: 12px 0 10px; }
  .ai-agent-1 footer { text-align: center; padding: 30px 0 50px; color: var(--ink-soft); font-size: 13px; }
  .ai-agent-1 .reveal { opacity: 0; transform: translateY(26px); transition: all .7s cubic-bezier(.22,.61,.36,1); }
  .ai-agent-1 .reveal.in { opacity: 1; transform: none; }
  @media (max-width: 560px) { body { font-size: 16px; } .vs-grid, .opts { grid-template-columns: 1fr; } }


  /* === Z-Blog 正文适配层 === */
  .ai-agent { font-size: 17px; line-height: 1.85; color: #2B2724; }
  .ai-agent .tri-banner { text-align: center; padding: 8px 0 4px; margin-bottom: 18px; }
  .ai-agent .tri-banner .tri-title {
    font-family: &quot;Songti SC&quot;, &quot;STSong&quot;, &quot;SimSun&quot;, Georgia, serif;
    font-size: clamp(22px, 3.4vw, 30px); line-height: 1.45; margin: 16px 0 8px; font-weight: 700;
  }
  .ai-agent .tri-banner .tri-sub { font-size: 15px; color: #6B6259; }
  .ai-agent .tri-banner .series-tag {
    background: var(--primary-soft); border: 1px solid var(--primary);
    color: var(--primary-deep); margin-bottom: 0;
  }
  .ai-agent main { display: block; }&lt;/style&gt;&lt;header class=&quot;tri-banner&quot;&gt;&lt;span class=&quot;series-tag&quot;&gt;AI 打工日志 · Agent 篇&lt;/span&gt;
 &amp;nbsp;&lt;h2 class=&quot;tri-title&quot;&gt;《多 Agent：一个实习生不够用了》&lt;/h2&gt;&lt;p class=&quot;tri-sub&quot;&gt;独狼的尽头，是开一家公司 · 阅读约 8 分钟 · 无需技术背景&lt;/p&gt;&lt;p class=&quot;tri-sub&quot;&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/09/202609171789651405643403.jpg&quot; alt=&quot;agent-cover-1.jpg&quot; width=&quot;768&quot; height=&quot;512&quot; border=&quot;0&quot; vspace=&quot;0&quot; title=&quot;agent-cover-1.jpg&quot; style=&quot;width: 768px; height: 512px;&quot;/&gt;&lt;/p&gt;&lt;/header&gt;&lt;main class=&quot;wrap&quot;&gt;&lt;section id=&quot;s1&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🔥&lt;/div&gt;&lt;h2&gt;那个全能的实习生，扛不住了&lt;span class=&quot;sec-sub&quot;&gt;不是它不努力，是活儿实在太多了&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;上一季，你把 AI 从一个&amp;quot;只会接话的话痨&amp;quot;，一路培养成了&amp;quot;有手册、有装备、有档案柜&amp;quot;的熟练工。它帮你写周报、核发票、整理工地日志，样样干得漂亮。&lt;/p&gt;&lt;p&gt;直到有一天，你一口气甩给它八个活：写方案、查数据、回邮件、排会议、做 PPT、校对合同、翻译、再报个销——然后它就&lt;span class=&quot;em&quot;&gt;开始顾头不顾尾&lt;/span&gt;：方案写到一半想起要回邮件，回完邮件忘了 PPT 还差三页，最后交上来的报销单，把餐饮费填进了差旅费。&lt;/p&gt;&lt;p&gt;你抓狂地问：&amp;quot;你不是挺能干的吗？&amp;quot; 它委屈巴巴：&amp;quot;能干，但我只有一双手、一颗脑子、一段要装下所有事的上下文。&amp;quot;&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;quote reveal&quot;&gt;把一百件事塞给一个人，不是给他机会，是给他埋雷。 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;who&quot;&gt;—— 包工头老张的经验之谈&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s2&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🐺&lt;/div&gt;&lt;h2&gt;独狼 vs 团队：两种干法&lt;span class=&quot;sec-sub&quot;&gt;一个人硬扛，还是一队人分工，天差地别&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;先别急着怪 AI。想想你自己——公司里让你一个人扛下&amp;quot;写代码 + 做设计 + 谈客户 + 财务报销 + 招聘&amp;quot;，你也会疯。区别在于，人干不过来会招人、会外包、会拉团队，而&lt;span class=&quot;em&quot;&gt;一个 AI 只能靠&amp;quot;更长的上下文&amp;quot;硬扛，扛到极限就漏、就串、就编&lt;/span&gt;。&lt;/p&gt;&lt;p&gt;那该怎么办？答案朴素得不像科技圈：&lt;strong&gt;招人。&lt;/strong&gt;一个 AI 干不过来，就招一群 AI，各管一摊。这就是&amp;quot;多 Agent&amp;quot;（Multi-Agent）的起点。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;vs-grid reveal&quot;&gt;&lt;div class=&quot;vs-card mouth&quot;&gt;&lt;div class=&quot;v-ico&quot;&gt;🐺&lt;/div&gt;&lt;h4&gt;独狼模式（单 Agent）&lt;/h4&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;一个脑子记下所有事&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;上下文越堆越长，越靠后越忘&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;活儿一多就顾头不顾尾&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;出错了你都不知道该查谁&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class=&quot;vs-card machine&quot;&gt;&lt;div class=&quot;v-ico&quot;&gt;🏢&lt;/div&gt;&lt;h4&gt;团队模式（多 Agent）&lt;/h4&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;每个人只记自己那一摊&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;各管各的，互不串味&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;拆得开，也拼得起来&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;哪环错了，一眼定位到人&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s3&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🧱&lt;/div&gt;&lt;h2&gt;单个 Agent 的三大极限&lt;span class=&quot;sec-sub&quot;&gt;点开每一条，看它到底卡在哪&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;为什么单个 Agent 一定会到极限？因为有三个绕不过去的坎，卡在它的&amp;quot;生理结构&amp;quot;上：&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;demo reveal&quot;&gt;&lt;div class=&quot;demo-title&quot;&gt;🧱 极限诊断台&lt;/div&gt;&lt;div class=&quot;demo-hint&quot;&gt;点任意一条，看病理和药方&lt;/div&gt;&lt;div class=&quot;diag-grid&quot;&gt;&lt;button class=&quot;d-item&quot; data-k=&quot;ctx&quot;&gt;&lt;span class=&quot;d-ico&quot;&gt;📚&lt;/span&gt;&lt;strong&gt;极限 ①：上下文挤爆了&lt;/strong&gt;活儿一多，读完后面的就忘了前面的&lt;/button&gt;&lt;button class=&quot;d-item&quot; data-k=&quot;single&quot;&gt;&lt;span class=&quot;d-ico&quot;&gt;🥢&lt;/span&gt;&lt;strong&gt;极限 ②：一样本事干所有活&lt;/strong&gt;什么都懂一点，什么都不精&lt;/button&gt;&lt;button class=&quot;d-item&quot; data-k=&quot;check&quot;&gt;&lt;span class=&quot;d-ico&quot;&gt;🎭&lt;/span&gt;&lt;strong&gt;极限 ③：自己人查自己人&lt;/strong&gt;既当运动员，又当裁判&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;d-result&quot; id=&quot;dResult&quot;&gt;&lt;h4&gt;👈 点一条极限开始诊断&lt;/h4&gt;&lt;p style=&quot;font-size:13.5px;color:var(--ink-soft)&quot;&gt;单个 Agent 的极限不是能力问题，是&amp;quot;单打独斗&amp;quot;这个结构本身的天花板。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s4&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🏢&lt;/div&gt;&lt;h2&gt;多 Agent 到底是什么&lt;span class=&quot;sec-sub&quot;&gt;一句话：让一群各司其职的 AI 组队干活&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;多 Agent，说穿了就是&lt;strong&gt;把一件大活拆成若干小活，交给一群&amp;quot;术业有专攻&amp;quot;的 AI 分头干，再由一个&amp;quot;包工头&amp;quot;统一调度、验收、交活&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;这里的关键词不是&amp;quot;多&amp;quot;，而是&lt;span class=&quot;em&quot;&gt;分工&lt;/span&gt;。就像装修一套房，你不会请一个&amp;quot;什么都会的水电木瓦油全能师傅&amp;quot;一个人干完（真有这种师傅你也雇不起），而是请一个工头，下面带着木工、电工、油漆工，各干各的，工头统一盯着进度和质量。&lt;/p&gt;&lt;p&gt;放到 AI 里就是：写文案的 Agent 只管文案，查数据的 Agent 只管查数，验收的 Agent 只管挑刺，调度的那位只负责派活和兜底。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;quote reveal&quot;&gt;独狼拼的是能力上限，团队拼的是分工下限——后者没有天花板。 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;who&quot;&gt;—— AI 打工日志 · Agent 篇&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s5&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;📋&lt;/div&gt;&lt;h2&gt;什么时候该上团队&lt;span class=&quot;sec-sub&quot;&gt;不是所有活都值得组队，先问自己三句&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;多 Agent 不是万能药。一件小事也要拉个团队，就像煮碗泡面还要开个三人会议——纯属浪费。动手前先问自己三句：&lt;/p&gt;&lt;/div&gt;&lt;ul class=&quot;check-list reveal list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;① 活儿能拆开吗？&lt;/strong&gt;如果能拆成&amp;quot;写 + 查 + 验&amp;quot;几个独立环节，适合组队；如果是一气呵成的创作，单 Agent 反而更顺。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;② 拆开后质量会更好吗？&lt;/strong&gt;多一双挑刺的眼睛，比一个人硬撑更可靠，尤其涉及&amp;quot;算钱&amp;quot;&amp;quot;核对&amp;quot;这类不能错的活。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;③ 你受得了那个开销吗？&lt;/strong&gt;人多力量大，但人多账单也长。具体账怎么算，第四篇专门讲。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;这一篇先埋个伏笔：团队要转起来，光有人不行，还得有个&lt;span class=&quot;em&quot;&gt;会派活的包工头&lt;/span&gt;。下一集，我们就把这位项目经理请出来。&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;section id=&quot;s6&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🎯&lt;/div&gt;&lt;h2&gt;三题小测&lt;span class=&quot;sec-sub&quot;&gt;答完，你就摸到了多 Agent 的门槛&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;demo reveal&quot;&gt;&lt;div class=&quot;demo-title&quot;&gt;🎯 开篇小测&lt;/div&gt;&lt;div class=&quot;demo-hint&quot;&gt;三道题，测测你抓到重点没&lt;/div&gt;&lt;div class=&quot;quiz&quot;&gt;&lt;div class=&quot;q-item&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;1&lt;/span&gt;单个 Agent 干大堆活会翻车，最根本的原因是？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;b&quot; data-explain=&quot;根本原因不在 Agent 笨，而在于「单打独斗」这个结构：一个脑子要装下所有事的上下文，活儿一多就挤爆、就顾头不顾尾。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 它太笨了，能力不行&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 一个脑子装不下所有上下文&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;q-item&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;2&lt;/span&gt;多 Agent 的关键词是哪个？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;a&quot; data-explain=&quot;关键词不是「多」，是「分工」。让术业有专攻的 AI 各管一摊，再由一个包工头统一调度、验收，才是多 Agent 的精髓。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 分工&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 数量多&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;q-item&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;3&lt;/span&gt;下面哪种活，最该上多 Agent？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;c&quot; data-explain=&quot;能拆成「写 + 查 + 验」几个独立环节、且涉及不能错的核对，最适合组队：写的人负责写，查的人负责查，验收的人负责挑刺。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 写一首情诗&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 给猫起个名字&lt;/button&gt;&lt;button data-v=&quot;c&quot;&gt;C. 出一份带数据核对的行业报告&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;final-cta reveal&quot;&gt;&lt;div class=&quot;emoji&quot;&gt;🏢&lt;/div&gt;&lt;h2&gt;独狼的尽头，是开一家公司&lt;/h2&gt;&lt;p style=&quot;color: var(--ink-soft)&quot;&gt;下一个问题来了：人齐了，谁来当包工头？&lt;br/&gt;&lt;br/&gt;下一篇：《包工头：给 AI 团队请个项目经理》&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/main&gt;&lt;script&gt;(function () {
  var root = document.currentScript.closest(&#039;.ai-agent&#039;);
  
  // ---- 滚动显现 ----
  const io = new IntersectionObserver((entries) =&gt; {
    entries.forEach(e =&gt; { if (e.isIntersecting) { e.target.classList.add(&#039;in&#039;); io.unobserve(e.target); } });
  }, { threshold: 0.12 });
  root.querySelectorAll(&#039;.reveal&#039;).forEach(el =&gt; io.observe(el));

  // ---- 目录高亮 ----
  const links = root.querySelectorAll(&#039;.toc a&#039;);
  const secs = [...links].map(a =&gt; root.querySelector(a.getAttribute(&#039;href&#039;)));
  const spy = new IntersectionObserver((entries) =&gt; {
    entries.forEach(e =&gt; {
      if (e.isIntersecting) {
        links.forEach(l =&gt; l.classList.remove(&#039;active&#039;));
        const hit = links.find(l =&gt; l.getAttribute(&#039;href&#039;) === &#039;#&#039; + e.target.id);
        if (hit) hit.classList.add(&#039;active&#039;);
      }
    });
  }, { rootMargin: &#039;-30% 0px -60% 0px&#039; });
  secs.forEach(s =&gt; s &amp;&amp; spy.observe(s));

  // ---- S3：三大极限诊断 ----
  const diag = {
    ctx: {
      title: &#039;🧱 极限①：上下文挤爆了&#039;,
      why: &#039;&lt;b&gt;病理：&lt;/b&gt;一个 Agent 只有一段上下文。你把八个活、二十份文件、三页背景全塞进去，它读着读着就把开头的忘了——就像人一次只能端稳三杯水，你偏要他端十杯，还怪他洒了。&#039;,
      rx: &#039;&lt;b&gt;💊 药方：&lt;/b&gt;别让一个人记所有事。把任务拆开，让每个人只端自己那杯水。这正是多 Agent 的意义。&#039;
    },
    single: {
      title: &#039;🧱 极限②：一样本事干所有活&#039;,
      why: &#039;&lt;b&gt;病理：&lt;/b&gt;一个全才 Agent，写方案不如专业文案，算数不如专业脚本，谈客户不如专业销售。什么都会一点的另一面，是什么都不精。&#039;,
      rx: &#039;&lt;b&gt;💊 药方：&lt;/b&gt;让专业的 Agent 干专业的事。写字的管字，算数的管数——把「全才」拆成「专才」。&#039;
    },
    check: {
      title: &#039;🧱 极限③：自己人查自己人&#039;,
      why: &#039;&lt;b&gt;病理：&lt;/b&gt;写方案的是它，验收方案的还是它。自己写的错，自己最看不出来——这就是「既当运动员又当裁判」的坑。&#039;,
      rx: &#039;&lt;b&gt;💊 药方：&lt;/b&gt;让一个 Agent 干活，另一个 Agent 挑刺。有独立的质检员，质量才有保障。&#039;
    }
  };
  const dResult = root.querySelector(&#039;#dResult&#039;);
  root.querySelectorAll(&#039;.d-item&#039;).forEach(item =&gt; {
    item.onclick = () =&gt; {
      root.querySelectorAll(&#039;.d-item&#039;).forEach(x =&gt; x.classList.remove(&#039;on&#039;));
      item.classList.add(&#039;on&#039;);
      const d = diag[item.dataset.k];
      dResult.innerHTML = &#039;&lt;h4&gt;&#039; + d.title + &#039;&lt;/h4&gt;&lt;p&gt;&#039; + d.why + &#039;&lt;/p&gt;&lt;p class=&quot;rx&quot;&gt;&#039; + d.rx + &#039;&lt;/p&gt;&#039;;
    };
  });

  // ---- Quiz ----
  root.querySelectorAll(&#039;.quiz .q-item&#039;).forEach(qi =&gt; {
    const opts = qi.querySelector(&#039;.opts&#039;);
    const explain = qi.querySelector(&#039;.q-explain&#039;);
    const answer = opts.dataset.answer;
    let done = false;
    opts.querySelectorAll(&#039;button&#039;).forEach(btn =&gt; {
      btn.onclick = () =&gt; {
        if (done) return;
        done = true;
        const pick = btn.dataset.v;
        opts.querySelectorAll(&#039;button&#039;).forEach(b =&gt; {
          if (b.dataset.v === answer) b.classList.add(&#039;right&#039;);
          else if (b === btn) b.classList.add(&#039;wrong&#039;);
        });
        explain.textContent = opts.dataset.explain;
        explain.classList.add(&#039;show&#039;);
      };
    });
  });

  // 兜底：2 秒后强制显示所有 reveal 元素，避免任何环境下内容被隐藏
  setTimeout(function () {
    root.querySelectorAll(&#039;.reveal&#039;).forEach(function (el) { el.classList.add(&#039;in&#039;); });
  }, 2000);
})();&lt;/script&gt;&lt;/div&gt;&lt;!-- AI 打工日志 · Agent 篇 · 第1篇 · 结束 --&gt;</description><pubDate>Thu, 17 Sep 2026 21:22:33 +0800</pubDate></item><item><title>技能进阶：从员工手册到技术档案室 | AI 打工日志·技能篇④</title><link>https://imwen.com/post/376.html</link><description>&lt;!-- AI 打工日志 · 技能篇 · 第7篇 · 交互完整版（样式已隔离，勿在可视化编辑器中编辑源码模式之外的内容） --&gt;&lt;div class=&quot;ai-tri ai-tri-7&quot;&gt;&lt;style&gt;.ai-tri-7 {
    --primary: #1C7ED6;
    --primary-light: #E7F5FF;
    --primary-soft: #D0EBFF;
    --primary-deep: #1864AB;
    --accent: #4DABF7;
    --bg: #FAF7F2;
    --card: #FFFFFF;
    --ink: #2B2724;
    --ink-soft: #6B6259;
    --line: #EDE5DA;
    --radius: 20px;
    --serif: &quot;Songti SC&quot;, &quot;STSong&quot;, &quot;SimSun&quot;, Georgia, serif;
    --sans: -apple-system, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Segoe UI&quot;, sans-serif;
  }
  .ai-tri-7 * { margin: 0; padding: 0; box-sizing: border-box; }
  .ai-tri-7 {
    font-family: var(--sans);
    background: var(--bg);
    color: var(--ink);
    line-height: 1.85;
    font-size: 17px;
  }
  .ai-tri-7 .wrap { max-width: 760px; margin: 0 auto; padding: 0 22px; }

  /* ===== Hero ===== */
  .ai-tri-7 .hero {
    background: linear-gradient(160deg, var(--primary) 0%, var(--accent) 100%);
    color: #fff;
    padding: 72px 0 88px;
    position: relative;
    overflow: hidden;
  }
  .ai-tri-7 .hero::after {
    content: &quot;&quot;;
    position: absolute; bottom: -2px; left: 0; right: 0;
    height: 44px;
    background: var(--bg);
    border-radius: 44px 44px 0 0;
  }
  .ai-tri-7 .series-tag {
    display: inline-block;
    background: rgba(255,255,255,.18);
    border: 1px solid rgba(255,255,255,.4);
    border-radius: 999px;
    padding: 5px 16px;
    font-size: 13px;
    letter-spacing: 2px;
    margin-bottom: 26px;
  }
  .ai-tri-7 .hero .ep { font-size: 14px; letter-spacing: 6px; opacity: .85; margin-bottom: 10px; }
  .ai-tri-7 .hero h1 {
    font-family: var(--serif);
    font-size: clamp(30px, 5.6vw, 46px);
    line-height: 1.35;
    font-weight: 700;
    margin-bottom: 18px;
  }
  .ai-tri-7 .hero .sub { font-size: 18px; opacity: .92; }
  .ai-tri-7 .hero .meta { margin-top: 30px; font-size: 13px; opacity: .75; }

  /* ===== Sticky nav ===== */
  .ai-tri-7 .toc {
    position: sticky; top: 0; z-index: 50;
    background: rgba(250,247,242,.92);
    backdrop-filter: blur(10px);
    border-bottom: 1px solid var(--line);
    padding: 10px 0;
  }
  .ai-tri-7 .toc .wrap {
    display: flex; gap: 8px;
    overflow-x: auto; white-space: nowrap;
    scrollbar-width: none;
  }
  .ai-tri-7 .toc .wrap::-webkit-scrollbar { display: none; }
  .ai-tri-7 .toc a {
    flex: 0 0 auto;
    text-decoration: none;
    color: var(--ink-soft);
    font-size: 14px;
    padding: 6px 14px;
    border-radius: 999px;
    border: 1px solid transparent;
    transition: all .25s;
  }
  .ai-tri-7 .toc a:hover, .ai-tri-7 .toc a.active {
    color: var(--primary-deep);
    background: var(--primary-soft);
    border-color: var(--primary-soft);
  }

  /* ===== Sections ===== */
  .ai-tri-7 section { padding: 64px 0 8px; }
  .ai-tri-7 .sec-head {
    display: flex; align-items: center; gap: 14px;
    margin-bottom: 26px;
  }
  .ai-tri-7 .sec-num {
    width: 52px; height: 52px; flex: 0 0 52px;
    border-radius: 16px;
    background: var(--primary-soft);
    display: flex; align-items: center; justify-content: center;
    font-size: 26px;
  }
  .ai-tri-7 .sec-head h2 {
    font-family: var(--serif);
    font-size: clamp(22px, 3.6vw, 28px);
    line-height: 1.4;
  }
  .ai-tri-7 .sec-head .sec-sub { font-size: 13px; color: var(--ink-soft); display: block; font-family: var(--sans); font-weight: 400; margin-top: 2px; }

  .ai-tri-7 .card {
    background: var(--card);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    padding: 28px 26px;
    margin-bottom: 22px;
    box-shadow: 0 2px 10px rgba(43,39,36,.04);
  }
  .ai-tri-7 p + p { margin-top: 16px; }
  .ai-tri-7 .card h3 {
    font-size: 18px; margin-bottom: 12px;
    display: flex; align-items: center; gap: 8px;
  }
  .ai-tri-7 .em { color: var(--primary-deep); font-weight: 700; }
  .ai-tri-7 strong { font-weight: 700; }

  .ai-tri-7 .quote {
    margin: 34px 0;
    background: linear-gradient(135deg, var(--primary) 0%, var(--accent) 100%);
    color: #fff;
    border-radius: var(--radius);
    padding: 34px 30px;
    font-family: var(--serif);
    font-size: clamp(19px, 3vw, 23px);
    line-height: 1.7;
    position: relative;
  }
  .ai-tri-7 .quote::before {
    content: &quot;❝&quot;;
    position: absolute; top: 10px; left: 18px;
    font-size: 44px; opacity: .3;
  }
  .ai-tri-7 .quote .who {
    display: block; margin-top: 14px;
    font-family: var(--sans); font-size: 13px; opacity: .8;
  }

  /* ===== demo 通用 ===== */
  .ai-tri-7 .demo {
    background: var(--card);
    border: 2px dashed var(--primary);
    border-radius: var(--radius);
    padding: 30px 26px;
    margin: 30px 0;
  }
  .ai-tri-7 .demo-title {
    text-align: center; font-weight: 700; font-size: 16px;
    color: var(--primary-deep);
    letter-spacing: 1px; margin-bottom: 6px;
  }
  .ai-tri-7 .demo-hint { text-align: center; font-size: 13px; color: var(--ink-soft); margin-bottom: 20px; }
  .ai-tri-7 .toggle-bar {
    display: flex; justify-content: center; gap: 10px; margin-bottom: 20px;
  }
  .ai-tri-7 .toggle-bar button {
    font-family: var(--sans);
    font-size: 15px; font-weight: 600;
    padding: 9px 20px; border-radius: 999px;
    border: 1.5px solid var(--line);
    background: #fff; color: var(--ink-soft);
    cursor: pointer; transition: all .2s;
  }
  .ai-tri-7 .toggle-bar button.on {
    border-color: var(--primary);
    background: var(--primary); color: #fff;
    box-shadow: 0 4px 14px rgba(28,126,214,.28);
  }

  /* ===== S2：脚本 vs 嘴算 ===== */
  .ai-tri-7 .vs-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin: 22px 0; }
  .ai-tri-7 .vs-card {
    border-radius: 16px;
    padding: 22px 20px;
    font-size: 14.5px;
  }
  .ai-tri-7 .vs-card.mouth { background: #F6F3F0; border: 1px solid var(--line); }
  .ai-tri-7 .vs-card.machine { background: var(--primary-light); border: 1px solid var(--primary-soft); }
  .ai-tri-7 .vs-card .v-ico { font-size: 28px; }
  .ai-tri-7 .vs-card h4 { font-size: 16px; margin: 8px 0 6px; }
  .ai-tri-7 .vs-card.machine h4 { color: var(--primary-deep); }
  .ai-tri-7 .vs-card ul { padding-left: 18px; }
  .ai-tri-7 .vs-card li { margin: 4px 0; }

  /* ===== S3：加载清单对比 ===== */
  .ai-tri-7 .load-list { border-radius: 14px; padding: 18px 20px; font-size: 14.5px; min-height: 170px; }
  .ai-tri-7 .load-list.stuff { background: #F6F3F0; border: 1px solid var(--line); }
  .ai-tri-7 .load-list.lean { background: var(--primary-light); border: 1px solid var(--primary-soft); }
  .ai-tri-7 .load-list h5 { font-size: 15px; margin-bottom: 10px; }
  .ai-tri-7 .load-list.stuff h5 { color: #9A3B1E; }
  .ai-tri-7 .load-list.lean h5 { color: var(--primary-deep); }
  .ai-tri-7 .load-list li { margin: 5px 0; padding-left: 4px; list-style: none; }
  .ai-tri-7 .load-list .tag-bill {
    display: inline-block; margin-top: 10px;
    font-size: 12.5px; font-weight: 700;
    border-radius: 999px; padding: 3px 12px;
  }
  .ai-tri-7 .load-list.stuff .tag-bill { background: #FFE3E3; color: #C92A2A; }
  .ai-tri-7 .load-list.lean .tag-bill { background: #D3F9D8; color: #2B8A3E; }

  /* ===== S4：翻车诊断 ===== */
  .ai-tri-7 .diag-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 16px; }
  .ai-tri-7 .d-item {
    background: #fff;
    border: 1.5px solid var(--line);
    border-radius: 14px;
    padding: 16px 16px;
    cursor: pointer;
    transition: all .2s;
    text-align: left;
    font-family: var(--sans);
  }
  .ai-tri-7 .d-item:hover { transform: translateY(-2px); box-shadow: 0 5px 14px rgba(43,39,36,.1); }
  .ai-tri-7 .d-item.on { border-color: var(--primary); background: var(--primary-light); }
  .ai-tri-7 .d-item .d-ico { font-size: 24px; }
  .ai-tri-7 .d-item b { display: block; font-size: 15px; margin-top: 4px; }
  .ai-tri-7 .d-item span { font-size: 12.5px; color: var(--ink-soft); }
  .ai-tri-7 .d-result {
    background: var(--primary-light);
    border: 1px solid var(--primary-soft);
    border-radius: 14px;
    padding: 18px 20px;
    font-size: 14.5px;
    min-height: 110px;
  }
  .ai-tri-7 .d-result h4 { color: var(--primary-deep); font-size: 15.5px; margin-bottom: 8px; }
  .ai-tri-7 .d-result .rx { margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--primary-soft); }
  .ai-tri-7 .d-result .rx b { color: var(--primary-deep); }

  /* ===== compare table ===== */
  .ai-tri-7 .cmp { width: 100%; border-collapse: separate; border-spacing: 0; margin: 22px 0; font-size: 15px; }
  .ai-tri-7 .cmp th, .ai-tri-7 .cmp td { padding: 13px 14px; border-bottom: 1px solid var(--line); text-align: left; }
  .ai-tri-7 .cmp th { background: var(--primary-soft); color: var(--primary-deep); font-size: 14px; }
  .ai-tri-7 .cmp td:first-child { font-weight: 700; white-space: nowrap; }
  .ai-tri-7 .cmp tr:last-child td { border-bottom: none; }

  /* ===== quiz ===== */
  .ai-tri-7 .quiz { margin: 26px 0 6px; }
  .ai-tri-7 .q-item { margin-bottom: 22px; }
  .ai-tri-7 .q-item .q {
    font-weight: 700; font-size: 16px; margin-bottom: 12px;
  }
  .ai-tri-7 .q-item .q .qn {
    display: inline-flex; align-items: center; justify-content: center;
    width: 26px; height: 26px; border-radius: 8px;
    background: var(--primary); color: #fff;
    font-size: 14px; margin-right: 8px;
    vertical-align: -5px;
  }
  .ai-tri-7 .opts { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
  .ai-tri-7 .opts button {
    font-family: var(--sans); font-size: 14.5px; text-align: left;
    padding: 12px 16px; border-radius: 12px;
    border: 1.5px solid var(--line);
    background: #fff; color: var(--ink);
    cursor: pointer; transition: all .2s; line-height: 1.6;
  }
  .ai-tri-7 .opts button:hover { border-color: var(--primary); }
  .ai-tri-7 .opts button.right { border-color: #2B8A3E; background: #EBF7EE; color: #1B5E2B; font-weight: 700; }
  .ai-tri-7 .opts button.wrong { border-color: #C92A2A; background: #FFF0F0; color: #A61E1E; }
  .ai-tri-7 .q-explain {
    margin-top: 10px; font-size: 13.5px; color: var(--ink-soft);
    background: var(--primary-light); border-radius: 10px;
    padding: 10px 14px; display: none;
  }
  .ai-tri-7 .q-explain.show { display: block; }

  /* ===== 结尾互动 ===== */
  .ai-tri-7 .final-cta {
    margin: 50px 0 10px;
    text-align: center;
    padding: 44px 26px;
    background: var(--card);
    border: 1px solid var(--line);
    border-radius: var(--radius);
  }
  .ai-tri-7 .final-cta .emoji { font-size: 40px; }
  .ai-tri-7 .final-cta h2 { font-family: var(--serif); font-size: 24px; margin: 12px 0 10px; }

  /* ===== series nav ===== */
  .ai-tri-7 .series-nav {
    margin: 40px 0 60px;
    display: grid; grid-template-columns: 1fr; gap: 14px;
  }
  .ai-tri-7 .snav-card {
    display: flex; align-items: center; gap: 16px;
    background: var(--card);
    border: 1px solid var(--line);
    border-radius: 16px;
    padding: 20px 22px;
    text-decoration: none;
    color: var(--ink);
    transition: all .25s;
  }
  .ai-tri-7 .snav-card:hover { transform: translateY(-3px); box-shadow: 0 8px 22px rgba(43,39,36,.09); border-color: var(--primary); }
  .ai-tri-7 .snav-card .arrow { font-size: 22px; color: var(--primary); }
  .ai-tri-7 .snav-card b { display: block; font-size: 16px; }
  .ai-tri-7 .snav-card span { font-size: 13px; color: var(--ink-soft); }

  .ai-tri-7 footer {
    text-align: center;
    padding: 30px 0 50px;
    color: var(--ink-soft);
    font-size: 13px;
  }

  /* reveal on scroll */
  .ai-tri-7 .reveal { opacity: 0; transform: translateY(26px); transition: all .7s cubic-bezier(.22,.61,.36,1); }
  .ai-tri-7 .reveal.in { opacity: 1; transform: none; }

  @media (max-width: 560px) {
  .ai-tri-7 { font-size: 16px; }
  .ai-tri-7 .vs-grid, .ai-tri-7 .diag-grid, .ai-tri-7 .opts { grid-template-columns: 1fr; }
  .ai-tri-7 .cmp { font-size: 14px; }
  .ai-tri-7 .cmp th, .ai-tri-7 .cmp td { padding: 10px 8px; }
  .ai-tri-7 .cmp td:first-child { white-space: normal; }
  }


  /* === Z-Blog 正文适配层 === */
  .ai-tri { font-size: 17px; line-height: 1.85; color: #2B2724; }
  .ai-tri .tri-banner { text-align: center; padding: 8px 0 4px; margin-bottom: 18px; }
  .ai-tri .tri-banner .tri-title {
    font-family: &quot;Songti SC&quot;, &quot;STSong&quot;, &quot;SimSun&quot;, Georgia, serif;
    font-size: clamp(22px, 3.4vw, 30px); line-height: 1.45; margin: 16px 0 8px; font-weight: 700;
  }
  .ai-tri .tri-banner .tri-sub { font-size: 15px; color: #6B6259; }
  .ai-tri .tri-banner .series-tag {
    background: var(--primary-soft); border: 1px solid var(--primary);
    color: var(--primary-deep); margin-bottom: 0;
  }
  .ai-tri main { display: block; }&lt;/style&gt;&lt;header class=&quot;tri-banner&quot;&gt;&lt;span class=&quot;series-tag&quot;&gt;AI 打工日志 · 技能篇&lt;/span&gt;
 &amp;nbsp;&lt;h2 class=&quot;tri-title&quot;&gt;《技能进阶：从员工手册到技术档案室》&lt;/h2&gt;&lt;p class=&quot;tri-sub&quot;&gt;会写手册，还要会开手册柜、配机器、防翻车 · 阅读约 8 分钟 · 无需技术背景&lt;/p&gt;&lt;p class=&quot;tri-sub&quot;&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/09/202609121789209251165329.jpg&quot; alt=&quot;cover-7.jpg&quot; width=&quot;768&quot; height=&quot;512&quot; border=&quot;0&quot; vspace=&quot;0&quot; title=&quot;cover-7.jpg&quot; style=&quot;width: 768px; height: 512px;&quot;/&gt;&lt;/p&gt;&lt;/header&gt;&lt;main class=&quot;wrap&quot;&gt;&lt;!-- S1 --&gt;&lt;section id=&quot;s1&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🏗️&lt;/div&gt;&lt;h2&gt;徒弟出师之后&lt;span class=&quot;sec-sub&quot;&gt;光有手册不够，还得配装备、开档案柜&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;前三篇走完，你的 AI 徒弟已经&amp;quot;认识手册、会用装备、能照菜谱干活&amp;quot;了。但它还是个&lt;span class=&quot;em&quot;&gt;只带了一张纸的徒弟&lt;/span&gt;：算 300 行数据靠心算，查个新税率要现场翻你聊天记录，闯了祸你也不知道该怪谁。&lt;/p&gt;&lt;p&gt;这一篇就是给徒弟配齐&amp;quot;技术档案室&amp;quot;的三件套：&lt;strong&gt;一台机器&lt;/strong&gt;（scripts/ 脚本）、&lt;strong&gt;一个档案柜&lt;/strong&gt;（references/ 资料库）、&lt;strong&gt;一套事故预案&lt;/strong&gt;（翻车急救流程）。最后，把这门手艺上架技能市场——从&amp;quot;会用 AI&amp;quot;正式毕业到&amp;quot;输出方法论&amp;quot;。&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;!-- S2 --&gt;&lt;section id=&quot;s2&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🔧&lt;/div&gt;&lt;h2&gt;配台机器：scripts/ 脚本&lt;span class=&quot;sec-sub&quot;&gt;手册教流程，机器管精度——嘴再溜也算不过计算器&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;上一篇菜谱化解决的是&amp;quot;步骤说清楚&amp;quot;，但有些活不是说得清就干得了的：300 行发票求和、批量重命名 80 个文件、按经纬度算距离——&lt;span class=&quot;em&quot;&gt;AI 用&amp;quot;嘴&amp;quot;算这些，跟大厨用心算找零一样，不是不行，是不敢用&lt;/span&gt;。&lt;/p&gt;&lt;p&gt;所以第三篇埋的那个伏笔（&amp;quot;能交给脚本的，别让它用嘴算&amp;quot;）现在正式展开：把这些活写成脚本，放进技能的 scripts/ 文件夹，手册里只写一句&amp;quot;这一步调用 xxx 脚本&amp;quot;。AI 负责判断和串联，脚本负责精确执行。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;vs-grid reveal&quot;&gt;&lt;div class=&quot;vs-card mouth&quot;&gt;&lt;div class=&quot;v-ico&quot;&gt;🗣️&lt;/div&gt;&lt;h4&gt;嘴算模式&lt;/h4&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;300 行求和：可能对，可能差一点&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;批量文件：逐个&amp;quot;假装&amp;quot;处理&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;同样的问题问三遍，答案能出三个&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;错了还特别自信&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class=&quot;vs-card machine&quot;&gt;&lt;div class=&quot;v-ico&quot;&gt;⚙️&lt;/div&gt;&lt;h4&gt;脚本模式&lt;/h4&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;300 行求和：毫秒出结果，分毫不差&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;批量文件：一次全处理完&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;跑一万遍，结果永远一样&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;错了会报错，绝不装没事&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;h3&gt;💡 冷知识：脚本也是 AI 写&lt;/h3&gt;&lt;p&gt;不会编程？没关系——&lt;strong&gt;让 AI 自己写&lt;/strong&gt;。你用大白话描述&amp;quot;这个脚本要干嘛、输入什么、输出什么&amp;quot;，AI 十有八九能写出来，你负责测试和验收。这是全系列最划算的一笔买卖：用 AI 的脑子，造 AI 的手。&lt;/p&gt;&lt;p&gt;判断该不该上脚本的口诀：&lt;span class=&quot;em&quot;&gt;重复的、算数的、批量的、要分毫不差的——上脚本；要理解、要判断、要措辞的——留给手册。&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;!-- S3 --&gt;&lt;section id=&quot;s3&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🗄️&lt;/div&gt;&lt;h2&gt;开个档案柜：references/ 资料库&lt;span class=&quot;sec-sub&quot;&gt;把知识归档，而不是塞进 AI 的脑子&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;第三篇说过：SKILL.md 只放主干，大块头资料进 references/。这一节讲清楚为什么&amp;quot;归档&amp;quot;比&amp;quot;塞脑内&amp;quot;划算——因为&lt;strong&gt;AI 的脑子是按次计费的&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;你每次派活，AI 都要重新&amp;quot;读&amp;quot;一遍塞给它的所有内容。把 40 页报销制度写进手册正文，等于每次干点小事都背一遍制度全文——又慢又贵，还容易读串行。放进档案柜就优雅多了：手册里写&amp;quot;税率见 references/报销制度2026.md&amp;quot;，用到才去翻，翻完只取那几行。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;demo reveal&quot;&gt;&lt;div class=&quot;demo-title&quot;&gt;🗄️ 账单对比：塞脑内 vs 归档&lt;/div&gt;&lt;div class=&quot;demo-hint&quot;&gt;同一个任务「核对 5 张发票的税率」，看两种存法每次要加载多少&lt;/div&gt;&lt;div class=&quot;toggle-bar&quot;&gt;&lt;button id=&quot;btnStuff&quot; class=&quot;on&quot;&gt;🧠 塞脑内（全写进手册正文）&lt;/button&gt;&lt;button id=&quot;btnLean&quot;&gt;🗄️ 归档（手册 + 档案柜分层）&lt;/button&gt;&lt;/div&gt;&lt;ul class=&quot;load-list stuff list-paddingleft-2&quot; id=&quot;loadList&quot;&gt;&lt;h5&gt;每次干活，AI 都得先读一遍：&lt;/h5&gt;&lt;li&gt;&lt;p&gt;📄 手册正文（含完整报销制度 40 页）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;📄 增值税税率表全文 + 历年政策变更说明&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;📄 报销流程审批权限矩阵（跟本任务无关）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;📄 常见问题 88 条（跟本任务无关）&lt;/p&gt;&lt;/li&gt;&lt;span class=&quot;tag-bill&quot;&gt;⏱️ 慢 · 💸 贵 · 😵 串味风险高&lt;/span&gt;&lt;li&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;h3&gt;🗂️ 档案柜收纳三原则&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;① 一事一柜&lt;/strong&gt;——税率表、审批权限、常见问题分文件放，别记在一个大杂烩里；&lt;strong&gt;② 文件名说人话&lt;/strong&gt;——&amp;quot;报销制度2026.md&amp;quot; 比 &amp;quot;doc3_final_新.md&amp;quot; 好找一百倍；&lt;strong&gt;③ 政策变了只改柜子&lt;/strong&gt;——税率更新只需替换那一个文件，手册正文一个字不用动，技能秒懂新政。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;quote reveal&quot;&gt;脑子用来判断，柜子用来存放，账单用来证明这个决定是对的。 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;who&quot;&gt;—— 档案室主任的节约哲学&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;!-- S4 --&gt;&lt;section id=&quot;s4&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🚑&lt;/div&gt;&lt;h2&gt;翻车急救中心&lt;span class=&quot;sec-sub&quot;&gt;实习生闯祸三步：复盘 → 改手册 → 再放出去&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;技能一定会翻车——这不是悲观，是设定预期。区别在于：&lt;span class=&quot;em&quot;&gt;新手对着翻车的 AI 骂骂咧咧，老手把每次翻车变成一次手册升级&lt;/span&gt;。&lt;/p&gt;&lt;p&gt;急救的总流程固定三步：&lt;strong&gt;① 复盘&lt;/strong&gt;（它当时读了什么、干了什么、错在哪一步）；&lt;strong&gt;② 改手册&lt;/strong&gt;（把坑写进去，让这个错永远不可能再犯）；&lt;strong&gt;③ 再放出去&lt;/strong&gt;（用同样的任务重跑验证）。下面是四个最常见症状的诊断单——点开看看：&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;demo reveal&quot;&gt;&lt;div class=&quot;demo-title&quot;&gt;🚑 症状诊断台&lt;/div&gt;&lt;div class=&quot;demo-hint&quot;&gt;点任意症状卡，看诊断和药方&lt;/div&gt;&lt;div class=&quot;diag-grid&quot;&gt;&lt;button class=&quot;d-item&quot; data-k=&quot;hallu&quot;&gt;&lt;span class=&quot;d-ico&quot;&gt;🤥&lt;/span&gt;&lt;strong&gt;症状 ①：数据是编的&lt;/strong&gt;&amp;quot;这数字哪来的？&amp;quot;&amp;quot;我猜的&amp;quot;&lt;/button&gt;&lt;button class=&quot;d-item&quot; data-k=&quot;miss&quot;&gt;&lt;span class=&quot;d-ico&quot;&gt;🙈&lt;/span&gt;&lt;strong&gt;症状 ②：该上场时装死&lt;/strong&gt;明明有技能，它就是不用&lt;/button&gt;&lt;button class=&quot;d-item&quot; data-k=&quot;fmt&quot;&gt;&lt;span class=&quot;d-ico&quot;&gt;🎲&lt;/span&gt;&lt;strong&gt;症状 ③：格式每次都变&lt;/strong&gt;昨天三栏今天五栏，随心所欲&lt;/button&gt;&lt;button class=&quot;d-item&quot; data-k=&quot;stuck&quot;&gt;&lt;span class=&quot;d-ico&quot;&gt;🧱&lt;/span&gt;&lt;strong&gt;症状 ④：中途停下装死&lt;/strong&gt;干到一半不吭声了&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;d-result&quot; id=&quot;dResult&quot;&gt;&lt;h4&gt;👈 点一个症状开始诊断&lt;/h4&gt;&lt;p style=&quot;font-size:13.5px;color:var(--ink-soft)&quot;&gt;翻车不可怕，可怕的是同一个坑摔三次——那说明你一直没改手册。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;h3&gt;📋 急救中心墙上贴的三句话&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;1. 翻车是手册的免费体检&lt;/strong&gt;——每个 bug 都暴露一处没写清的地方。&lt;br/&gt; &amp;nbsp;&lt;strong&gt;2. 修手册，别修脾气&lt;/strong&gt;——对着 AI 发火不解决任何问题，改一行触发条件立竿见影。&lt;br/&gt; &amp;nbsp;&lt;strong&gt;3. 记事故日志&lt;/strong&gt;——翻过的车简单记一笔（症状+药方），下次同类问题三十秒定位。&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;!-- S5 --&gt;&lt;section id=&quot;s5&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🌍&lt;/div&gt;&lt;h2&gt;上架市场，与更远的地图&lt;span class=&quot;sec-sub&quot;&gt;把手艺共享出去，然后看看整个 AI 江湖&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;技能练成了，最后一件事：&lt;span class=&quot;em&quot;&gt;上架技能市场&lt;/span&gt;。把文件夹打包提交，写清楚简介和适用场景，全世界的用户就能一键安装你的手艺。这跟把精心调好的 Excel 模板共享到全公司是一回事——只不过这次，&amp;quot;全公司&amp;quot;是整个互联网。&lt;/p&gt;&lt;p&gt;别觉得自己的手艺&amp;quot;太土&amp;quot;不值一提。你会的&amp;quot;门店日销对账&amp;quot;“工地日志整理”&amp;quot;宠物医院回访话术&amp;quot;，对同行来说是刚需。&lt;strong&gt;越垂直的经验，越稀缺；越稀缺，越值钱。&lt;/strong&gt;写 App 要一个团队，写技能只要一个下午——这可能是普通人分享知识成本最低、杠杆最大的时代。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;h3&gt;🗺️ 最后，把整张地图摊开&lt;/h3&gt;&lt;p&gt;技能篇完结，把前面所有概念拼成一张&amp;quot;AI 打工宇宙&amp;quot;的全家福：&lt;/p&gt;&lt;table class=&quot;cmp&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th&gt;成员&lt;/th&gt;&lt;th&gt;管什么&lt;/th&gt;&lt;th&gt;一句话&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;大模型&lt;/td&gt;&lt;td&gt;脑子&lt;/td&gt;&lt;td&gt;读完了整个互联网的话痨（前传①）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Agent&lt;/td&gt;&lt;td&gt;手脚&lt;/td&gt;&lt;td&gt;会自己拆任务、用工具的员工（前传②）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Skill&lt;/td&gt;&lt;td&gt;岗位知识&lt;/td&gt;&lt;td&gt;员工手册 + 装备 + 档案柜（本系列）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;MCP&lt;/td&gt;&lt;td&gt;标准插座&lt;/td&gt;&lt;td&gt;让 AI 能插上各种外部系统的新接口&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;顺带认识一下新面孔 &lt;strong&gt;MCP&lt;/strong&gt;：如果说技能是&amp;quot;教 AI 怎么干&amp;quot;，MCP 就是&amp;quot;给 AI 一个标准插座&amp;quot;，让它能统一插上数据库、网盘、企业系统这些外部电源。技能管知识，MCP 管连接，Agent 管调度——三者合体，才是完整的&amp;quot;数字员工&amp;quot;。这就是下一季的故事了。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;quote reveal&quot;&gt;三部曲教会你用 AI，技能篇教会你把经验变成 AI 的本事——后者才是你带得走的行李。 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;who&quot;&gt;—— AI 打工日志 · 技能篇 · 完&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;!-- S6 --&gt;&lt;section id=&quot;s6&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🎓&lt;/div&gt;&lt;h2&gt;系列毕业大考&lt;span class=&quot;sec-sub&quot;&gt;三道题横跨四篇，答完真毕业&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;demo reveal&quot;&gt;&lt;div class=&quot;demo-title&quot;&gt;🎓 毕业大考&lt;/div&gt;&lt;div class=&quot;demo-hint&quot;&gt;答对三题，授予「AI 带教师傅」称号&lt;/div&gt;&lt;div class=&quot;quiz&quot;&gt;&lt;div class=&quot;q-item&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;1&lt;/span&gt;SKILL.md 手册正文越厚越好，资料全塞进去最省事。对吗？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;b&quot; data-explain=&quot;错。手册正文只放主干流程，大块资料放 references/ 档案柜。AI 的脑子按次计费：塞太厚每次都全量加载，又慢又贵还容易串味。用到才翻，才是优雅的姿势。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 对，一步到位省得以后再改&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 错，主干进手册，大块头进档案柜&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;q-item&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;2&lt;/span&gt;AI 用你的技能算 300 行发票求和，你该怎么想？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;c&quot; data-explain=&quot;重复、算数、批量、要分毫不差的活，都该交给 scripts/ 里的脚本。AI 负责判断和串联，脚本负责精确执行——嘴再溜也算不过计算器。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 它是 AI，算数肯定没问题&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 让它算三遍取多数答案&lt;/button&gt;&lt;button data-v=&quot;c&quot;&gt;C. 该上脚本了：这种活别让它用嘴算&lt;/button&gt;&lt;button data-v=&quot;d&quot;&gt;D. 人工再算一遍核对&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;q-item&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;3&lt;/span&gt;技能翻车了，最专业的第一反应是？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;d&quot; data-explain=&quot;急救三步：复盘（它读了什么、错在哪步）→ 改手册（把坑写进去）→ 再放出去（同任务重跑验证）。翻车是手册的免费体检，同一个坑摔三次才是真的失职。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 对着 AI 骂一顿出气&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 立刻卸载换别人的技能&lt;/button&gt;&lt;button data-v=&quot;c&quot;&gt;C. 以后这个活还是自己干吧&lt;/button&gt;&lt;button data-v=&quot;d&quot;&gt;D. 复盘 → 改手册 → 同任务重跑验证&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;final-cta reveal&quot;&gt;&lt;div class=&quot;emoji&quot;&gt;🏁&lt;/div&gt;&lt;h2&gt;技能篇 · 全系列完&lt;/h2&gt;&lt;p style=&quot;color: var(--ink-soft)&quot;&gt;认识手册 → 办装备 → 当师傅 → 开档案室。&lt;br/&gt;四篇读完，你已经完成了从&amp;quot;AI 用户&amp;quot;到&amp;quot;AI 师傅&amp;quot;的转型。&lt;br/&gt;&lt;br/&gt;下一季预告：《AI 打工日志》Agent 篇——&lt;br/&gt;当徒弟越来越多，谁来当包工头？&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/main&gt;&lt;script&gt;(function () {
  var root = document.currentScript.closest(&#039;.ai-tri&#039;);
  
  // ---- 滚动显现 ----
  const io = new IntersectionObserver((entries) =&gt; {
    entries.forEach(e =&gt; { if (e.isIntersecting) { e.target.classList.add(&#039;in&#039;); io.unobserve(e.target); } });
  }, { threshold: 0.12 });
  root.querySelectorAll(&#039;.reveal&#039;).forEach(el =&gt; io.observe(el));

  // ---- 目录高亮 ----
  const links = root.querySelectorAll(&#039;.toc a&#039;);
  const secs = [...links].map(a =&gt; root.querySelector(a.getAttribute(&#039;href&#039;)));
  const spy = new IntersectionObserver((entries) =&gt; {
    entries.forEach(e =&gt; {
      if (e.isIntersecting) {
        links.forEach(l =&gt; l.classList.remove(&#039;active&#039;));
        const hit = links.find(l =&gt; l.getAttribute(&#039;href&#039;) === &#039;#&#039; + e.target.id);
        if (hit) hit.classList.add(&#039;active&#039;);
      }
    });
  }, { rootMargin: &#039;-30% 0px -60% 0px&#039; });
  secs.forEach(s =&gt; s &amp;&amp; spy.observe(s));

  // ---- S3：加载清单切换 ----
  const stuffHtml = &#039;&lt;h5&gt;🧠 塞脑内 · 每次干活，AI 都得先读一遍：&lt;/h5&gt;&#039; +
    &#039;&lt;li&gt;📄 手册正文（含完整报销制度 40 页）&lt;/li&gt;&#039; +
    &#039;&lt;li&gt;📄 增值税税率表全文 + 历年政策变更说明&lt;/li&gt;&#039; +
    &#039;&lt;li&gt;📄 报销流程审批权限矩阵（跟本任务无关）&lt;/li&gt;&#039; +
    &#039;&lt;li&gt;📄 常见问题 88 条（跟本任务无关）&lt;/li&gt;&#039; +
    &#039;&lt;span class=&quot;tag-bill&quot;&gt;⏱️ 慢 · 💸 贵 · 😵 串味风险高&lt;/span&gt;&#039;;
  const leanHtml = &#039;&lt;h5&gt;🗄️ 归档 · 每次干活，AI 只需要：&lt;/h5&gt;&#039; +
    &#039;&lt;li&gt;📄 手册正文（1 页主干流程 + 一句「税率见档案柜」）&lt;/li&gt;&#039; +
    &#039;&lt;li&gt;📄 翻开档案柜，只抽那一页税率表&lt;/li&gt;&#039; +
    &#039;&lt;li&gt;✅ 干完收工&lt;/li&gt;&#039; +
    &#039;&lt;span class=&quot;tag-bill&quot;&gt;⚡ 快 · 💰 省 · 🎯 精准取用零干扰&lt;/span&gt;&#039;;
  const btnStuff = root.querySelector(&#039;#btnStuff&#039;);
  const btnLean = root.querySelector(&#039;#btnLean&#039;);
  const loadList = root.querySelector(&#039;#loadList&#039;);
  function setLoad(mode) {
    const stuff = mode === &#039;stuff&#039;;
    btnStuff.classList.toggle(&#039;on&#039;, stuff);
    btnLean.classList.toggle(&#039;on&#039;, !stuff);
    loadList.className = &#039;load-list &#039; + (stuff ? &#039;stuff&#039; : &#039;lean&#039;);
    loadList.innerHTML = stuff ? stuffHtml : leanHtml;
  }
  btnStuff.onclick = () =&gt; setLoad(&#039;stuff&#039;);
  btnLean.onclick = () =&gt; setLoad(&#039;lean&#039;);

  // ---- S4：症状诊断 ----
  const diag = {
    hallu: {
      title: &#039;🤥 症状 ①：数据是编的&#039;,
      why: &#039;&lt;b&gt;病理：&lt;/b&gt;手册里没写&quot;数据从哪来&quot;，AI 又太想帮你——于是凭训练记忆编了个看起来很像的数。这就是大模型祖传的「幻觉」，有技能也挡不住，除非你把来源焊死。&#039;,
      rx: &#039;&lt;b&gt;💊 药方：&lt;/b&gt;手册里加一条：所有数字必须来自输入文件或脚本输出，&lt;b&gt;禁止凭记忆填数&lt;/b&gt;；拿不准的字段标注&quot;未找到&quot;，不许猜。&#039;
    },
    miss: {
      title: &#039;🙈 症状 ②：该上场时装死&#039;,
      why: &#039;&lt;b&gt;病理：&lt;/b&gt;触发条件写得太窄或太生僻。你手册写&quot;用户提到『报销单核对』时使用&quot;，结果你说的是&quot;帮我看看这堆票&quot;——关键词没对上，技能就一直在架上吃灰。&#039;,
      rx: &#039;&lt;b&gt;💊 药方：&lt;/b&gt;触发条件加宽并列举同义词：发票、报销、票据、报账……都算；再补一条&quot;不确定时，询问用户是否需要本技能&quot;。&#039;
    },
    fmt: {
      title: &#039;🎲 症状 ③：格式每次都变&#039;,
      why: &#039;&lt;b&gt;病理：&lt;/b&gt;手册只说&quot;输出表格&quot;，没锁死格式。AI 每次都自由发挥——列顺序、分组方式、小数位数，全看当天心情。&#039;,
      rx: &#039;&lt;b&gt;💊 药方：&lt;/b&gt;格式三件套写死：列名和顺序逐条列出、附一个标准示例、或直接套 assets/ 里的模板文件。格式这种事，永远不留给 AI 创作空间。&#039;
    },
    stuck: {
      title: &#039;🧱 症状 ④：中途停下装死&#039;,
      why: &#039;&lt;b&gt;病理：&lt;/b&gt;某一步失败了（比如文件读不出来），手册没写失败怎么办，AI 就卡在那——既不敢猜，也不敢问，干脆沉默。&#039;,
      rx: &#039;&lt;b&gt;💊 药方：&lt;/b&gt;给每一步加兜底：&quot;失败时，停止并报告原因，等待用户指示。&quot;会喊救命的徒弟，比硬撑的徒弟安全一百倍。&#039;
    }
  };
  const dResult = root.querySelector(&#039;#dResult&#039;);
  root.querySelectorAll(&#039;.d-item&#039;).forEach(item =&gt; {
    item.onclick = () =&gt; {
      root.querySelectorAll(&#039;.d-item&#039;).forEach(x =&gt; x.classList.remove(&#039;on&#039;));
      item.classList.add(&#039;on&#039;);
      const d = diag[item.dataset.k];
      dResult.innerHTML = &#039;&lt;h4&gt;&#039; + d.title + &#039;&lt;/h4&gt;&lt;p&gt;&#039; + d.why + &#039;&lt;/p&gt;&lt;p class=&quot;rx&quot;&gt;&#039; + d.rx + &#039;&lt;/p&gt;&#039;;
    };
  });

  // ---- Quiz ----
  root.querySelectorAll(&#039;.quiz .q-item&#039;).forEach(qi =&gt; {
    const opts = qi.querySelector(&#039;.opts&#039;);
    const explain = qi.querySelector(&#039;.q-explain&#039;);
    const answer = opts.dataset.answer;
    let done = false;
    opts.querySelectorAll(&#039;button&#039;).forEach(btn =&gt; {
      btn.onclick = () =&gt; {
        if (done) return;
        done = true;
        const pick = btn.dataset.v;
        opts.querySelectorAll(&#039;button&#039;).forEach(b =&gt; {
          if (b.dataset.v === answer) b.classList.add(&#039;right&#039;);
          else if (b === btn) b.classList.add(&#039;wrong&#039;);
        });
        explain.textContent = opts.dataset.explain;
        explain.classList.add(&#039;show&#039;);
      };
    });
  });

  // 兜底：2 秒后强制显示所有 reveal 元素，避免任何环境下内容被隐藏
  setTimeout(function () {
    root.querySelectorAll(&#039;.reveal&#039;).forEach(function (el) { el.classList.add(&#039;in&#039;); });
  }, 2000);
})();&lt;/script&gt;&lt;/div&gt;&lt;!-- AI 打工日志 · 技能篇 · 第7篇 · 结束 --&gt;</description><pubDate>Sat, 12 Sep 2026 17:00:07 +0800</pubDate></item><item><title>写技能：给 AI 当一回带教师傅 | AI 打工日志·技能篇③</title><link>https://imwen.com/post/375.html</link><description>&lt;!-- AI 打工日志 · 技能篇 · 第6篇 · 交互完整版（样式已隔离，勿在可视化编辑器中编辑源码模式之外的内容） --&gt;&lt;div class=&quot;ai-tri ai-tri-6&quot;&gt;&lt;style&gt;.ai-tri-6 {
    --primary: #F76707;
    --primary-light: #FFF4E6;
    --primary-soft: #FFE8D6;
    --primary-deep: #D9480F;
    --accent: #FF922B;
    --bg: #FAF7F2;
    --card: #FFFFFF;
    --ink: #2B2724;
    --ink-soft: #6B6259;
    --line: #EDE5DA;
    --radius: 20px;
    --serif: &quot;Songti SC&quot;, &quot;STSong&quot;, &quot;SimSun&quot;, Georgia, serif;
    --sans: -apple-system, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Segoe UI&quot;, sans-serif;
  }
  .ai-tri-6 * { margin: 0; padding: 0; box-sizing: border-box; }
  .ai-tri-6 {
    font-family: var(--sans);
    background: var(--bg);
    color: var(--ink);
    line-height: 1.85;
    font-size: 17px;
  }
  .ai-tri-6 .wrap { max-width: 760px; margin: 0 auto; padding: 0 22px; }

  /* ===== Hero ===== */
  .ai-tri-6 .hero {
    background: linear-gradient(160deg, var(--primary) 0%, var(--accent) 100%);
    color: #fff;
    padding: 72px 0 88px;
    position: relative;
    overflow: hidden;
  }
  .ai-tri-6 .hero::after {
    content: &quot;&quot;;
    position: absolute; bottom: -2px; left: 0; right: 0;
    height: 44px;
    background: var(--bg);
    border-radius: 44px 44px 0 0;
  }
  .ai-tri-6 .series-tag {
    display: inline-block;
    background: rgba(255,255,255,.18);
    border: 1px solid rgba(255,255,255,.4);
    border-radius: 999px;
    padding: 5px 16px;
    font-size: 13px;
    letter-spacing: 2px;
    margin-bottom: 26px;
  }
  .ai-tri-6 .hero .ep { font-size: 14px; letter-spacing: 6px; opacity: .85; margin-bottom: 10px; }
  .ai-tri-6 .hero h1 {
    font-family: var(--serif);
    font-size: clamp(30px, 5.6vw, 46px);
    line-height: 1.35;
    font-weight: 700;
    margin-bottom: 18px;
  }
  .ai-tri-6 .hero .sub { font-size: 18px; opacity: .92; }
  .ai-tri-6 .hero .meta { margin-top: 30px; font-size: 13px; opacity: .75; }

  /* ===== Sticky nav ===== */
  .ai-tri-6 .toc {
    position: sticky; top: 0; z-index: 50;
    background: rgba(250,247,242,.92);
    backdrop-filter: blur(10px);
    border-bottom: 1px solid var(--line);
    padding: 10px 0;
  }
  .ai-tri-6 .toc .wrap {
    display: flex; gap: 8px;
    overflow-x: auto; white-space: nowrap;
    scrollbar-width: none;
  }
  .ai-tri-6 .toc .wrap::-webkit-scrollbar { display: none; }
  .ai-tri-6 .toc a {
    flex: 0 0 auto;
    text-decoration: none;
    color: var(--ink-soft);
    font-size: 14px;
    padding: 6px 14px;
    border-radius: 999px;
    border: 1px solid transparent;
    transition: all .25s;
  }
  .ai-tri-6 .toc a:hover, .ai-tri-6 .toc a.active {
    color: var(--primary-deep);
    background: var(--primary-soft);
    border-color: var(--primary-soft);
  }

  /* ===== Sections ===== */
  .ai-tri-6 section { padding: 64px 0 8px; }
  .ai-tri-6 .sec-head {
    display: flex; align-items: center; gap: 14px;
    margin-bottom: 26px;
  }
  .ai-tri-6 .sec-num {
    width: 52px; height: 52px; flex: 0 0 52px;
    border-radius: 16px;
    background: var(--primary-soft);
    display: flex; align-items: center; justify-content: center;
    font-size: 26px;
  }
  .ai-tri-6 .sec-head h2 {
    font-family: var(--serif);
    font-size: clamp(22px, 3.6vw, 28px);
    line-height: 1.4;
  }
  .ai-tri-6 .sec-head .sec-sub { font-size: 13px; color: var(--ink-soft); display: block; font-family: var(--sans); font-weight: 400; margin-top: 2px; }

  .ai-tri-6 .card {
    background: var(--card);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    padding: 28px 26px;
    margin-bottom: 22px;
    box-shadow: 0 2px 10px rgba(43,39,36,.04);
  }
  .ai-tri-6 p + p { margin-top: 16px; }
  .ai-tri-6 .card h3 {
    font-size: 18px; margin-bottom: 12px;
    display: flex; align-items: center; gap: 8px;
  }
  .ai-tri-6 .em { color: var(--primary-deep); font-weight: 700; }
  .ai-tri-6 strong { font-weight: 700; }

  .ai-tri-6 .quote {
    margin: 34px 0;
    background: linear-gradient(135deg, var(--primary) 0%, var(--accent) 100%);
    color: #fff;
    border-radius: var(--radius);
    padding: 34px 30px;
    font-family: var(--serif);
    font-size: clamp(19px, 3vw, 23px);
    line-height: 1.7;
    position: relative;
  }
  .ai-tri-6 .quote::before {
    content: &quot;❝&quot;;
    position: absolute; top: 10px; left: 18px;
    font-size: 44px; opacity: .3;
  }
  .ai-tri-6 .quote .who {
    display: block; margin-top: 14px;
    font-family: var(--sans); font-size: 13px; opacity: .8;
  }

  /* ===== demo 通用 ===== */
  .ai-tri-6 .demo {
    background: var(--card);
    border: 2px dashed var(--primary);
    border-radius: var(--radius);
    padding: 30px 26px;
    margin: 30px 0;
  }
  .ai-tri-6 .demo-title {
    text-align: center; font-weight: 700; font-size: 16px;
    color: var(--primary-deep);
    letter-spacing: 1px; margin-bottom: 6px;
  }
  .ai-tri-6 .demo-hint { text-align: center; font-size: 13px; color: var(--ink-soft); margin-bottom: 20px; }
  .ai-tri-6 .toggle-bar {
    display: flex; justify-content: center; gap: 10px; margin-bottom: 20px;
  }
  .ai-tri-6 .toggle-bar button {
    font-family: var(--sans);
    font-size: 15px; font-weight: 600;
    padding: 9px 20px; border-radius: 999px;
    border: 1.5px solid var(--line);
    background: #fff; color: var(--ink-soft);
    cursor: pointer; transition: all .2s;
  }
  .ai-tri-6 .toggle-bar button.on {
    border-color: var(--primary);
    background: var(--primary); color: #fff;
    box-shadow: 0 4px 14px rgba(247,103,7,.28);
  }

  /* ===== S2：SKILL.md 对照 ===== */
  .ai-tri-6 .md-view {
    background: #2B2724;
    border-radius: 14px;
    padding: 20px 22px;
    font-family: &quot;SF Mono&quot;, Consolas, &quot;Courier New&quot;, monospace;
    font-size: 13.5px;
    line-height: 1.95;
    color: #F1E8DE;
    white-space: pre-wrap;
    word-break: break-word;
  }
  .ai-tri-6 .md-view .cmt { color: #B8ABA0; }
  .ai-tri-6 .md-view .key { color: #FFC9A3; font-weight: 700; }
  .ai-tri-6 .md-view .ok { color: #8CE99A; }
  .ai-tri-6 .md-view .bad { color: #FFA8A8; }
  .ai-tri-6 .md-result {
    margin-top: 16px;
    border-radius: 14px;
    padding: 16px 20px;
    font-size: 14.5px;
    line-height: 1.85;
  }
  .ai-tri-6 .md-result.fail { background: #FFF0F0; border: 1px solid #FFD5D5; }
  .ai-tri-6 .md-result.pass { background: var(--primary-light); border: 1px solid var(--primary-soft); }
  .ai-tri-6 .md-result b.r-head { display: block; margin-bottom: 6px; }
  .ai-tri-6 .md-result.fail b.r-head { color: #C92A2A; }
  .ai-tri-6 .md-result.pass b.r-head { color: var(--primary-deep); }

  /* ===== S4：菜谱化切换 ===== */
  .ai-tri-6 .recipe-list { display: grid; gap: 10px; }
  .ai-tri-6 .r-step {
    display: flex; gap: 14px; align-items: flex-start;
    background: #fff;
    border: 1.5px solid var(--line);
    border-radius: 12px;
    padding: 14px 16px;
    transition: all .3s;
  }
  .ai-tri-6 .r-step .r-num {
    flex: 0 0 28px; height: 28px;
    display: flex; align-items: center; justify-content: center;
    border-radius: 50%;
    background: var(--primary-soft); color: var(--primary-deep);
    font-weight: 700; font-size: 14px;
    margin-top: 2px;
  }
  .ai-tri-6 .r-step b { display: block; font-size: 15px; transition: all .3s; }
  .ai-tri-6 .r-step span { font-size: 13.5px; color: var(--ink-soft); transition: all .3s; }
  .ai-tri-6 .r-step.precise { border-color: var(--primary); background: var(--primary-light); }

  /* ===== compare table ===== */
  .ai-tri-6 .cmp { width: 100%; border-collapse: separate; border-spacing: 0; margin: 22px 0; font-size: 15px; }
  .ai-tri-6 .cmp th, .ai-tri-6 .cmp td { padding: 13px 14px; border-bottom: 1px solid var(--line); text-align: left; }
  .ai-tri-6 .cmp th { background: var(--primary-soft); color: var(--primary-deep); font-size: 14px; }
  .ai-tri-6 .cmp td:first-child { font-weight: 700; white-space: nowrap; }
  .ai-tri-6 .cmp tr:last-child td { border-bottom: none; }

  /* ===== quiz ===== */
  .ai-tri-6 .quiz { margin: 26px 0 6px; }
  .ai-tri-6 .q-item { margin-bottom: 22px; }
  .ai-tri-6 .q-item .q {
    font-weight: 700; font-size: 16px; margin-bottom: 12px;
  }
  .ai-tri-6 .q-item .q .qn {
    display: inline-flex; align-items: center; justify-content: center;
    width: 26px; height: 26px; border-radius: 8px;
    background: var(--primary); color: #fff;
    font-size: 14px; margin-right: 8px;
    vertical-align: -5px;
  }
  .ai-tri-6 .opts { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
  .ai-tri-6 .opts button {
    font-family: var(--sans); font-size: 14.5px; text-align: left;
    padding: 12px 16px; border-radius: 12px;
    border: 1.5px solid var(--line);
    background: #fff; color: var(--ink);
    cursor: pointer; transition: all .2s; line-height: 1.6;
  }
  .ai-tri-6 .opts button:hover { border-color: var(--primary); }
  .ai-tri-6 .opts button.right { border-color: #2B8A3E; background: #EBF7EE; color: #1B5E2B; font-weight: 700; }
  .ai-tri-6 .opts button.wrong { border-color: #C92A2A; background: #FFF0F0; color: #A61E1E; }
  .ai-tri-6 .q-explain {
    margin-top: 10px; font-size: 13.5px; color: var(--ink-soft);
    background: var(--primary-light); border-radius: 10px;
    padding: 10px 14px; display: none;
  }
  .ai-tri-6 .q-explain.show { display: block; }

  /* ===== 结尾互动 ===== */
  .ai-tri-6 .final-cta {
    margin: 50px 0 10px;
    text-align: center;
    padding: 44px 26px;
    background: var(--card);
    border: 1px solid var(--line);
    border-radius: var(--radius);
  }
  .ai-tri-6 .final-cta .emoji { font-size: 40px; }
  .ai-tri-6 .final-cta h2 { font-family: var(--serif); font-size: 24px; margin: 12px 0 10px; }

  /* ===== series nav ===== */
  .ai-tri-6 .series-nav {
    margin: 40px 0 60px;
    display: grid; grid-template-columns: 1fr; gap: 14px;
  }
  .ai-tri-6 .snav-card {
    display: flex; align-items: center; gap: 16px;
    background: var(--card);
    border: 1px solid var(--line);
    border-radius: 16px;
    padding: 20px 22px;
    text-decoration: none;
    color: var(--ink);
    transition: all .25s;
  }
  .ai-tri-6 .snav-card:hover { transform: translateY(-3px); box-shadow: 0 8px 22px rgba(43,39,36,.09); border-color: var(--primary); }
  .ai-tri-6 .snav-card .arrow { font-size: 22px; color: var(--primary); }
  .ai-tri-6 .snav-card b { display: block; font-size: 16px; }
  .ai-tri-6 .snav-card span { font-size: 13px; color: var(--ink-soft); }

  .ai-tri-6 footer {
    text-align: center;
    padding: 30px 0 50px;
    color: var(--ink-soft);
    font-size: 13px;
  }

  /* reveal on scroll */
  .ai-tri-6 .reveal { opacity: 0; transform: translateY(26px); transition: all .7s cubic-bezier(.22,.61,.36,1); }
  .ai-tri-6 .reveal.in { opacity: 1; transform: none; }

  @media (max-width: 560px) {
  .ai-tri-6 { font-size: 16px; }
  .ai-tri-6 .opts { grid-template-columns: 1fr; }
  .ai-tri-6 .md-view { font-size: 12px; }
  .ai-tri-6 .cmp { font-size: 14px; }
  .ai-tri-6 .cmp th, .ai-tri-6 .cmp td { padding: 10px 8px; }
  .ai-tri-6 .cmp td:first-child { white-space: normal; }
  }


  /* === Z-Blog 正文适配层 === */
  .ai-tri { font-size: 17px; line-height: 1.85; color: #2B2724; }
  .ai-tri .tri-banner { text-align: center; padding: 8px 0 4px; margin-bottom: 18px; }
  .ai-tri .tri-banner .tri-title {
    font-family: &quot;Songti SC&quot;, &quot;STSong&quot;, &quot;SimSun&quot;, Georgia, serif;
    font-size: clamp(22px, 3.4vw, 30px); line-height: 1.45; margin: 16px 0 8px; font-weight: 700;
  }
  .ai-tri .tri-banner .tri-sub { font-size: 15px; color: #6B6259; }
  .ai-tri .tri-banner .series-tag {
    background: var(--primary-soft); border: 1px solid var(--primary);
    color: var(--primary-deep); margin-bottom: 0;
  }
  .ai-tri main { display: block; }&lt;/style&gt;&lt;header class=&quot;tri-banner&quot;&gt;&lt;span class=&quot;series-tag&quot;&gt;AI 打工日志 · 技能篇&lt;/span&gt;
 &amp;nbsp;&lt;h2 class=&quot;tri-title&quot;&gt;《写技能：给 AI 当一回带教师傅》&lt;/h2&gt;&lt;p class=&quot;tri-sub&quot;&gt;把你的看家本事，写成 AI 能照做的菜谱 · 阅读约 8 分钟 · 无需技术背景&lt;/p&gt;&lt;p class=&quot;tri-sub&quot;&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/09/202609101789046649426458.jpg&quot; alt=&quot;cover-6.jpg&quot; width=&quot;768&quot; height=&quot;512&quot; border=&quot;0&quot; vspace=&quot;0&quot; title=&quot;cover-6.jpg&quot; style=&quot;width: 768px; height: 512px;&quot;/&gt;&lt;/p&gt;&lt;/header&gt;&lt;main class=&quot;wrap&quot;&gt;&lt;!-- S1 --&gt;&lt;section id=&quot;s1&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;👨‍🏫&lt;/div&gt;&lt;h2&gt;为什么要自己写？&lt;span class=&quot;sec-sub&quot;&gt;市面上没有的，恰恰是你最值钱的&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;上一篇说了，技能可以市场下载、同事投喂。那为什么还要自己写？&lt;/p&gt;&lt;p&gt;因为&lt;span class=&quot;em&quot;&gt;市场上的技能是通用款，你的工作是个性款&lt;/span&gt;。市场里的&amp;quot;周报技能&amp;quot;不知道你们组周报要抄送谁；&amp;quot;发票技能&amp;quot;不知道你们财务的隐形规矩。就像食堂的大锅菜能吃饱，但做不出你家的味道——秘方在你脑子里。&lt;/p&gt;&lt;p&gt;而把秘方写出来这件事，本来就是老带新的日常：你入职时，是不是也有个师傅跟你说&amp;quot;这步系统里要这么点，别按回车会直接提交&amp;quot;？&lt;strong&gt;写技能，就是把你自己变成那个师傅，AI 变成你的徒弟。&lt;/strong&gt;徒弟学会之后，这活就再也不用你亲自动手了。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;h3&gt;🎁 写完还有三重意外收获&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;① 经验被逼着想清楚。&lt;/strong&gt;很多&amp;quot;手感&amp;quot;写不出来才发现根本说不清——写技能的过程等于免费给自己做了一次工作复盘。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;② 手艺可以攒资产。&lt;/strong&gt;手册写一次用一年，你换项目它跟着你，你升职它传给下一任。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;③ 别人抢不走。&lt;/strong&gt;会用 AI 的人很多，能把自己手艺教给 AI 的人很少——这才是 AI 时代的真·铁饭碗。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;quote reveal&quot;&gt;教会徒弟，饿死师傅？不，教会 AI 的师傅，把重复劳动全喂给了徒弟。 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;who&quot;&gt;—— 新时代师徒关系&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;!-- S2 --&gt;&lt;section id=&quot;s2&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;📄&lt;/div&gt;&lt;h2&gt;手册骨架：SKILL.md 怎么写&lt;span class=&quot;sec-sub&quot;&gt;带教手册第一页：我是谁、啥时候叫我、怎么干&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;技能的核心就是那个 SKILL.md 文件。别被 Markdown 吓到——它就是带教手册的第一页，只需要回答三个问题：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;我是谁&lt;/strong&gt;（技能名）——起个一眼看懂的名字。&lt;br/&gt; &amp;nbsp;&lt;strong&gt;啥时候叫我&lt;/strong&gt;（触发条件）——写清楚遇到什么任务该翻开这本手册。&lt;br/&gt; &amp;nbsp;&lt;strong&gt;怎么干&lt;/strong&gt;（步骤）——菜谱式地列出操作步骤。&lt;/p&gt;&lt;p&gt;先看一个反例和正例的对比。同一个&amp;quot;整理报销&amp;quot;技能，两版手册，AI 的表现天差地别：&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;demo reveal&quot;&gt;&lt;div class=&quot;demo-title&quot;&gt;📄 对照实验：烂手册 vs 好手册&lt;/div&gt;&lt;div class=&quot;demo-hint&quot;&gt;同一门手艺，两种写法，切换看 AI 的命运分岔&lt;/div&gt;&lt;div class=&quot;toggle-bar&quot;&gt;&lt;button id=&quot;btnBad&quot; class=&quot;on&quot;&gt;🥴 烂手册版&lt;/button&gt;&lt;button id=&quot;btnGood&quot;&gt;🏆 好手册版&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;md-view&quot; id=&quot;mdView&quot;&gt;&lt;/div&gt;&lt;div class=&quot;md-result fail&quot; id=&quot;mdResult&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;h3&gt;🔍 烂在哪，好在哪？&lt;/h3&gt;&lt;p&gt;烂手册的三大死因：&lt;strong&gt;名字含糊&lt;/strong&gt;（&amp;quot;helper&amp;quot;是个筐，什么都往里装，AI 不知道何时该用它）；&lt;strong&gt;没有触发条件&lt;/strong&gt;（永远不知道什么时候翻开）；&lt;strong&gt;步骤全是&amp;quot;酌情处理&amp;quot;&lt;/strong&gt;（把判断题抛还给 AI，等于没教）。&lt;/p&gt;&lt;p&gt;好手册三件套：&lt;strong&gt;名字带业务词&lt;/strong&gt;（invoice-reimburse，一看就知道管报销）；&lt;strong&gt;触发条件写到词&lt;/strong&gt;（&amp;quot;用户提到发票、报销、税&amp;quot;）；&lt;strong&gt;步骤像菜谱&lt;/strong&gt;（先干嘛后干嘛，遇到啥走哪条岔路，全写死）。&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;!-- S3 --&gt;&lt;section id=&quot;s3&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🎯&lt;/div&gt;&lt;h2&gt;触发条件：给权限划清边界&lt;span class=&quot;sec-sub&quot;&gt;只管报销，别管订机票——不写边界，实习生就会越权&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;新人都懂一个道理：管的事越多，越容易出事。技能也一样——&lt;span class=&quot;em&quot;&gt;触发条件写得宽，AI 就会抢戏&lt;/span&gt;。&lt;/p&gt;&lt;p&gt;一本报销技能如果只写&amp;quot;涉及财务的事都找我&amp;quot;，那用户问&amp;quot;这个月预算超了多少&amp;quot;，它也会跳出来插一嘴，还可能给你算错。正确的写法是双向的：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;正向（什么时候用）&lt;/strong&gt;：&amp;quot;用户提到发票整理、报销表、报销单核对时使用。&amp;quot;&lt;br/&gt; &amp;nbsp;&lt;strong&gt;反向（什么时候别用）&lt;/strong&gt;：&amp;quot;仅处理报销整理。预算分析、订票、审批流程等其他财务事务不在范围内，请正常对话回答。&amp;quot;&lt;/p&gt;&lt;p&gt;别小看反向那一行——它就是给实习生划的&amp;quot;越权线&amp;quot;。一行字，少翻十次车。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;h3&gt;⚡ 触发条件速查表&lt;/h3&gt;&lt;table class=&quot;cmp&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th&gt;写法&lt;/th&gt;&lt;th&gt;后果&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;quot;什么都能帮我&amp;quot;&lt;/td&gt;&lt;td&gt;抢戏之王，事事插嘴，错得也多&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;quot;涉及财务就用我&amp;quot;&lt;/td&gt;&lt;td&gt;范围太宽，预算、订票全都伸手&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;只写正向触发词&lt;/td&gt;&lt;td&gt;勉强能用，边界任务容易误触发&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;正向词 + 反向排除 ✅&lt;/td&gt;&lt;td&gt;该出手时才出手，稳&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/section&gt;&lt;!-- S4 --&gt;&lt;section id=&quot;s4&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🍳&lt;/div&gt;&lt;h2&gt;步骤菜谱化：把&amp;quot;适量&amp;quot;写成&amp;quot;3 克&amp;quot;&lt;span class=&quot;sec-sub&quot;&gt;菜谱能复刻，手感不能——除非你把手感翻译成克数&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;中餐菜谱最大的玄学是&amp;quot;盐适量、火候适当&amp;quot;——大厨看了一笑，新手照做翻车。AI 就是那个新手：它没进过你的厨房，&amp;quot;酌情&amp;quot;&amp;quot;大概&amp;quot;&amp;quot;看情况&amp;quot;对它来说等于没说。&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;em&quot;&gt;菜谱化的本质：把你的手感，翻译成它照做不出错的数字和条件。&lt;/span&gt;三个翻译技巧：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;① 数字代替形容&lt;/strong&gt;——&amp;quot;表格适当美化&amp;quot; → &amp;quot;表头加粗、背景浅灰、列宽自适应&amp;quot;。&lt;br/&gt; &amp;nbsp;&lt;strong&gt;② 条件写成分岔&lt;/strong&gt;——&amp;quot;金额不对就处理一下&amp;quot; → &amp;quot;若金额与票据不符，标红并单列，不要自行修改&amp;quot;。&lt;br/&gt; &amp;nbsp;&lt;strong&gt;③ 兜底写出来&lt;/strong&gt;——&amp;quot;遇到问题找我&amp;quot; → &amp;quot;若连续两次提取失败，停止并报告原因，不要猜&amp;quot;。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;demo reveal&quot;&gt;&lt;div class=&quot;demo-title&quot;&gt;🍳 翻译机：手感 → 菜谱&lt;/div&gt;&lt;div class=&quot;demo-hint&quot;&gt;同一套整理周报的步骤，切换看两种写法&lt;/div&gt;&lt;div class=&quot;toggle-bar&quot;&gt;&lt;button id=&quot;btnVague&quot; class=&quot;on&quot;&gt;🌫️ 手感版（大厨式）&lt;/button&gt;&lt;button id=&quot;btnPrecise&quot;&gt;📋 菜谱版（新手也能复刻）&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;recipe-list&quot;&gt;&lt;div class=&quot;r-step&quot; data-p=&quot;0&quot;&gt;&lt;div class=&quot;r-num&quot;&gt;1&lt;/div&gt;&lt;div&gt;&lt;strong&gt;收集本周材料&lt;/strong&gt;把相关的东西都收集起来&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;r-step&quot; data-p=&quot;1&quot;&gt;&lt;div class=&quot;r-num&quot;&gt;2&lt;/div&gt;&lt;div&gt;&lt;strong&gt;提炼工作要点&lt;/strong&gt;挑重点，别太啰嗦&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;r-step&quot; data-p=&quot;2&quot;&gt;&lt;div class=&quot;r-num&quot;&gt;3&lt;/div&gt;&lt;div&gt;&lt;strong&gt;量化工作成果&lt;/strong&gt;能数字化的就数字化&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;r-step&quot; data-p=&quot;3&quot;&gt;&lt;div class=&quot;r-num&quot;&gt;4&lt;/div&gt;&lt;div&gt;&lt;strong&gt;输出周报&lt;/strong&gt;按我们组的格式来&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;h3&gt;💡 最容易被忽略的一条：写清&amp;quot;失败怎么办&amp;quot;&lt;/h3&gt;&lt;p&gt;带徒弟时最有价值的不是教他怎么成功，是教他&lt;strong&gt;失败时别硬撑&lt;/strong&gt;。&amp;quot;提取失败就停下报告&amp;quot;比&amp;quot;尽量提取出来&amp;quot;重要一百倍——AI 最危险的品质是永远自信，你的手册得负责给它装上刹车。&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;!-- S5 --&gt;&lt;section id=&quot;s5&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;📏&lt;/div&gt;&lt;h2&gt;手册多厚才合适？&lt;span class=&quot;sec-sub&quot;&gt;200 页的没人翻，贴工位的 2 页人人背得出&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;p&gt;新手写技能最爱犯的错：想一次写全。把公司制度、历史案例、八百个注意事项全塞进 SKILL.md，写成一篇论文。&lt;/p&gt;&lt;p&gt;结果呢？&lt;span class=&quot;em&quot;&gt;手册越厚，AI 越抓不住重点&lt;/span&gt;——就像员工手册 200 页没人翻，贴在工位上的 2 页人人背得出。而且别忘了：正文是任务命中才加载的，太厚每次都要&amp;quot;读一遍论文&amp;quot;，又慢又贵还容易串味。&lt;/p&gt;&lt;p&gt;正确的厚度观：&lt;strong&gt;SKILL.md 只放主干流程&lt;/strong&gt;（一两百行封顶），大块头的制度、税率表、案例库，放进 references/ 资料夹，让 AI 遇到细节再去翻——上一篇讲过的&amp;quot;渐进式披露&amp;quot;，说的就是这件事。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;card reveal&quot;&gt;&lt;h3&gt;🚀 最小可用技能：先丑后好&lt;/h3&gt;&lt;p&gt;别追求一步到位。第一版手册只要能跑通核心流程就行——哪怕只有名字、触发条件和五步流程。跑几轮真任务，&lt;strong&gt;哪里翻车补哪里&lt;/strong&gt;：误触发了就补反向条件，某步老出错就把那步写细。&lt;/p&gt;&lt;p&gt;技能是养出来的，不是憋出来的。这跟带徒弟一个道理：先让他上手干简单的，闯了祸再复盘，比先关小黑屋培训三个月见效快得多。&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;quote reveal&quot;&gt;第一版手册丑没关系，能跑就行——徒弟都是闯祸闯出来的，技能都是翻车翻出来的。 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;who&quot;&gt;—— 带教师傅语录&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;!-- S6 --&gt;&lt;section id=&quot;s6&quot;&gt;&lt;div class=&quot;sec-head reveal&quot;&gt;&lt;div class=&quot;sec-num&quot;&gt;🧪&lt;/div&gt;&lt;h2&gt;出师小测&lt;span class=&quot;sec-sub&quot;&gt;三道题，考考你这个师傅当得称不称职&lt;/span&gt; &amp;nbsp;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;demo reveal&quot;&gt;&lt;div class=&quot;demo-title&quot;&gt;🧭 出师考核&lt;/div&gt;&lt;div class=&quot;demo-hint&quot;&gt;答对两题以上，可以出师带 AI 徒弟了&lt;/div&gt;&lt;div class=&quot;quiz&quot;&gt;&lt;div class=&quot;q-item&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;1&lt;/span&gt;SKILL.md 骨架要回答的三个问题是？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;c&quot; data-explain=&quot;我是谁（技能名）、啥时候叫我（触发条件）、怎么干（菜谱式步骤）。三问缺一，手册就是摆设——要么不知道何时翻开，要么翻开了不知道干嘛。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 作者是谁、写给谁、何时更新&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 有啥功能、收多少钱、怎么退款&lt;/button&gt;&lt;button data-v=&quot;c&quot;&gt;C. 我是谁、啥时候叫我、怎么干&lt;/button&gt;&lt;button data-v=&quot;d&quot;&gt;D. 语法对不对、格式美不美、字数够不够&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;q-item&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;2&lt;/span&gt;&amp;quot;涉及财务的事都找我&amp;quot;这种触发条件，问题出在哪？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;b&quot; data-explain=&quot;范围太宽的触发条件等于没划边界：预算分析、订机票它都要插一脚，越权又容易错。正确姿势是正向触发词（发票、报销表）+ 反向排除（预算、订票不管）。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 没问题，覆盖面广是好事&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 范围太宽，AI 会越权抢戏&lt;/button&gt;&lt;button data-v=&quot;c&quot;&gt;C. 问题在于没写英文&lt;/button&gt;&lt;button data-v=&quot;d&quot;&gt;D. 问题在于字数太少&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;q-item&quot;&gt;&lt;div class=&quot;q&quot;&gt;&lt;span class=&quot;qn&quot;&gt;3&lt;/span&gt;把&amp;quot;盐适量&amp;quot;翻译成&amp;quot;3 克盐&amp;quot;，对应到写技能里就是？&lt;/div&gt;&lt;div class=&quot;opts&quot; data-answer=&quot;d&quot; data-explain=&quot;菜谱化 = 把手感翻译成可复刻的指令：数字代替形容、条件写成分岔、失败兜底写出来。AI 没进过你的厨房，「酌情处理」对它等于没说。&quot;&gt;&lt;button data-v=&quot;a&quot;&gt;A. 把步骤写得更文艺一些&lt;/button&gt;&lt;button data-v=&quot;b&quot;&gt;B. 让 AI 自己体会其中的奥妙&lt;/button&gt;&lt;button data-v=&quot;c&quot;&gt;C. 多加几个感叹号增强语气&lt;/button&gt;&lt;button data-v=&quot;d&quot;&gt;D. 数字代替形容，条件写成岔路，兜底写出来&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;q-explain&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;final-cta reveal&quot;&gt;&lt;div class=&quot;emoji&quot;&gt;👩‍🏫&lt;/div&gt;&lt;h2&gt;技能篇 3/4 · 完&lt;/h2&gt;&lt;p style=&quot;color: var(--ink-soft)&quot;&gt;你的第一本手册已经有骨架了。&lt;br/&gt;&lt;br/&gt;最后一篇，讲怎么把手册升级成&amp;quot;技术档案室&amp;quot;：&lt;br/&gt;配脚本、建资料库、翻车急救，&lt;br/&gt;以及把你的手艺&lt;span class=&quot;em&quot;&gt;上架技能市场&lt;/span&gt;。&lt;br/&gt;《技能进阶：从员工手册到技术档案室》&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/main&gt;&lt;script&gt;(function () {
  var root = document.currentScript.closest(&#039;.ai-tri&#039;);
  
  // ---- 滚动显现 ----
  const io = new IntersectionObserver((entries) =&gt; {
    entries.forEach(e =&gt; { if (e.isIntersecting) { e.target.classList.add(&#039;in&#039;); io.unobserve(e.target); } });
  }, { threshold: 0.12 });
  root.querySelectorAll(&#039;.reveal&#039;).forEach(el =&gt; io.observe(el));

  // ---- 目录高亮 ----
  const links = root.querySelectorAll(&#039;.toc a&#039;);
  const secs = [...links].map(a =&gt; root.querySelector(a.getAttribute(&#039;href&#039;)));
  const spy = new IntersectionObserver((entries) =&gt; {
    entries.forEach(e =&gt; {
      if (e.isIntersecting) {
        links.forEach(l =&gt; l.classList.remove(&#039;active&#039;));
        const hit = links.find(l =&gt; l.getAttribute(&#039;href&#039;) === &#039;#&#039; + e.target.id);
        if (hit) hit.classList.add(&#039;active&#039;);
      }
    });
  }, { rootMargin: &#039;-30% 0px -60% 0px&#039; });
  secs.forEach(s =&gt; s &amp;&amp; spy.observe(s));

  // ---- S2：烂手册 vs 好手册 ----
  const mdBad = [
    &#039;&lt;span class=&quot;cmt&quot;&gt;# 帮助手册&lt;/span&gt;&#039;,
    &#039;&#039;,
    &#039;&lt;span class=&quot;key&quot;&gt;名字：&lt;/span&gt;helper&#039;,
    &#039;&lt;span class=&quot;key&quot;&gt;用途：&lt;/span&gt;帮助用户处理各种事情&#039;,
    &#039;&#039;,
    &#039;&lt;span class=&quot;cmt&quot;&gt;## 使用方法&lt;/span&gt;&#039;,
    &#039;根据实际情况，酌情处理用户的请求。&#039;,
    &#039;尽量让用户满意。加油！💪&#039;
  ].join(&#039;\n&#039;);
  const resBad = &#039;&lt;b class=&quot;r-head&quot;&gt;🤖 AI 拿到烂手册后的表现：&lt;/b&gt;用户：「整理一下报销单」&lt;br&gt;AI：「好的，我会酌情处理、尽量让您满意！」——然后开始自由发挥：字段自己猜、税率自己选、格式随缘。三小时后你花三小时返工，还没地方说理。&#039;;
  const mdGood = [
    &#039;&lt;span class=&quot;cmt&quot;&gt;# 发票报销整理手册&lt;/span&gt;&#039;,
    &#039;&#039;,
    &#039;&lt;span class=&quot;key&quot;&gt;名字：&lt;/span&gt;invoice-reimburse&#039;,
    &#039;&lt;span class=&quot;key&quot;&gt;触发条件：&lt;/span&gt;用户提到 &lt;span class=&quot;ok&quot;&gt;发票整理、报销表、报销单核对&lt;/span&gt; 时使用；&#039;,
    &#039;预算分析、订机票等&lt;span class=&quot;bad&quot;&gt;不在范围&lt;/span&gt;，正常回答即可。&#039;,
    &#039;&#039;,
    &#039;&lt;span class=&quot;cmt&quot;&gt;## 操作步骤&lt;/span&gt;&#039;,
    &#039;&lt;span class=&quot;ok&quot;&gt;1.&lt;/span&gt; 调用 extract_pdf.py 提取发票数据（发票号/抬头/金额/税额）&#039;,
    &#039;&lt;span class=&quot;ok&quot;&gt;2.&lt;/span&gt; 逐张核对：抬头与公司名不符 → &lt;span class=&quot;bad&quot;&gt;标红单列，不要自行修改&lt;/span&gt;&#039;,
    &#039;&lt;span class=&quot;ok&quot;&gt;3.&lt;/span&gt; 按 references/报销制度2026.md 的税率分类汇总&#039;,
    &#039;&lt;span class=&quot;ok&quot;&gt;4.&lt;/span&gt; 套用 assets/报销模板.xlsx 输出，附给财务的备注&#039;,
    &#039;&#039;,
    &#039;&lt;span class=&quot;cmt&quot;&gt;## 失败兜底&lt;/span&gt;&#039;,
    &#039;连续两次提取失败 → &lt;span class=&quot;bad&quot;&gt;停止并报告原因，禁止瞎猜&lt;/span&gt;&#039;
  ].join(&#039;\n&#039;);
  const resGood = &#039;&lt;b class=&quot;r-head&quot;&gt;🤖 AI 拿到好手册后的表现：&lt;/b&gt;用户：「整理一下报销单」&lt;br&gt;AI：提取 → 核对（2 张抬头不符，已标红）→ 按新税率汇总 → 套模板输出，全程零发挥。你只需要看一眼标红的两张，转发给同事重开。&#039;;

  const btnBad = root.querySelector(&#039;#btnBad&#039;);
  const btnGood = root.querySelector(&#039;#btnGood&#039;);
  const mdView = root.querySelector(&#039;#mdView&#039;);
  const mdResult = root.querySelector(&#039;#mdResult&#039;);

  function setMd(mode) {
    const bad = mode === &#039;bad&#039;;
    btnBad.classList.toggle(&#039;on&#039;, bad);
    btnGood.classList.toggle(&#039;on&#039;, !bad);
    mdView.innerHTML = bad ? mdBad : mdGood;
    mdResult.className = &#039;md-result &#039; + (bad ? &#039;fail&#039; : &#039;pass&#039;);
    mdResult.innerHTML = bad ? resBad : resGood;
  }
  btnBad.onclick = () =&gt; setMd(&#039;bad&#039;);
  btnGood.onclick = () =&gt; setMd(&#039;good&#039;);
  setMd(&#039;bad&#039;);

  // ---- S4：菜谱化切换 ----
  const vagueSteps = [
    [&#039;收集本周材料&#039;, &#039;把相关的东西都收集起来&#039;],
    [&#039;提炼工作要点&#039;, &#039;挑重点，别太啰嗦&#039;],
    [&#039;量化工作成果&#039;, &#039;能数字化的就数字化&#039;],
    [&#039;输出周报&#039;, &#039;按我们组的格式来&#039;]
  ];
  const preciseSteps = [
    [&#039;收集本周材料&#039;, &#039;读取本周的聊天记录、文档改动、待办清单三个来源，逐条列出&#039;],
    [&#039;提炼工作要点&#039;, &#039;按「项目进展 / 问题风险 / 需要支持」三栏归类，每栏不超过 5 条&#039;],
    [&#039;量化工作成果&#039;, &#039;每条进展尽量带数字：完成 N 个、推进 N%、节省 N 小时；没有数字就补「进行中（预计 X 日完成）」&#039;],
    [&#039;输出周报&#039;, &#039;套用 references/周报模板.md：正文四段式，结尾自动生成下周计划，全文不超过 600 字&#039;]
  ];
  const btnVague = root.querySelector(&#039;#btnVague&#039;);
  const btnPrecise = root.querySelector(&#039;#btnPrecise&#039;);
  const stepEls = root.querySelectorAll(&#039;.r-step&#039;);
  function setRecipe(mode) {
    const precise = mode === &#039;precise&#039;;
    btnVague.classList.toggle(&#039;on&#039;, !precise);
    btnPrecise.classList.toggle(&#039;on&#039;, precise);
    const data = precise ? preciseSteps : vagueSteps;
    stepEls.forEach((el, i) =&gt; {
      el.classList.toggle(&#039;precise&#039;, precise);
      const b = el.querySelector(&#039;b&#039;);
      const s = el.querySelector(&#039;span&#039;);
      b.textContent = data[i][0];
      s.textContent = data[i][1];
    });
  }
  btnVague.onclick = () =&gt; setRecipe(&#039;vague&#039;);
  btnPrecise.onclick = () =&gt; setRecipe(&#039;precise&#039;);
  setRecipe(&#039;vague&#039;);

  // ---- Quiz ----
  root.querySelectorAll(&#039;.quiz .q-item&#039;).forEach(qi =&gt; {
    const opts = qi.querySelector(&#039;.opts&#039;);
    const explain = qi.querySelector(&#039;.q-explain&#039;);
    const answer = opts.dataset.answer;
    let done = false;
    opts.querySelectorAll(&#039;button&#039;).forEach(btn =&gt; {
      btn.onclick = () =&gt; {
        if (done) return;
        done = true;
        const pick = btn.dataset.v;
        opts.querySelectorAll(&#039;button&#039;).forEach(b =&gt; {
          if (b.dataset.v === answer) b.classList.add(&#039;right&#039;);
          else if (b === btn) b.classList.add(&#039;wrong&#039;);
        });
        explain.textContent = opts.dataset.explain;
        explain.classList.add(&#039;show&#039;);
      };
    });
  });

  // 兜底：2 秒后强制显示所有 reveal 元素，避免任何环境下内容被隐藏
  setTimeout(function () {
    root.querySelectorAll(&#039;.reveal&#039;).forEach(function (el) { el.classList.add(&#039;in&#039;); });
  }, 2000);
})();&lt;/script&gt;&lt;/div&gt;&lt;!-- AI 打工日志 · 技能篇 · 第6篇 · 结束 --&gt;</description><pubDate>Thu, 10 Sep 2026 20:00:07 +0800</pubDate></item></channel></rss>