Skip to content

show-me:让AI把「我懂了」画出来

AI 代码代理最令人疲惫的时刻,不是写不出代码,而是它写了四十行通顺的解释,你读完依然不知道入口在哪、状态归谁、哪一步会写库。show-me 是 HumanLayer 发布的一个 agent skill,核心主张:少解释一点,把系统画出来——而且只画眼前这个问题需要的部分。

[!info] 视频信息 - 频道:为什么叫QQ(Why QQ),6,460 订阅 - 发布:2026-08-22,时长 8:31,9,181 次观看 - Skill 仓库:humanlayer/skills(2.3k stars / 63 forks),show-me 最近一次更新 2026-08-13(Dex Horthy)


目录


一、核心困境:长篇文本的认知负担

AI 编程代理(Claude Code、Cursor、Codex)的解释有一个典型症状:每句话都像是对的,但读完还是不知道 Bug 在哪——入口在哪?数据从哪来?哪一步写数据库?哪一次刷新会把新配置覆盖成旧配置?

代理很勤奋:解释背景、列风险、给建议。但你必须把这些线性文字重新拼成一张系统地图,认知负担全在人这边。

关键洞察:在 AI 辅助开发中,真正费时间的不是产出第一版代码,而是确认副作用(side effect)

副作用类型 风险问题
写数据库 会不会重复写入?事务边界在哪?
发消息/事件 顺序对不对?会不会丢失?
调用外部服务 失败了怎么办?有没有重试风暴?

这些动作一旦重复、漏掉、或顺序不对,线上问题很难只靠一段文字说明排查出来。

瓶颈迁移:

过去:写代码慢 ──────────> 现在:生成代码快了
       │                        │
       v                        v
  瓶颈 = 生成              瓶颈 = 校验生成结果
  (人力编码速度)        (副作用确认、边界核对、返工)

二、show-me 的核心理念:最小视图

show-me 来自 HumanLayer,本质是给代码代理的一张沟通契约,要求:

  • 少写前言、少铺背景
  • 眼前要判断什么,就展示和这件事有关的结构
  • 复杂问题可以组合几种表示,但反对把所有图形一口气塞给用户——否则只是造出一座新的信息垃圾山

「最小视图」翻成大白话:只画眼前这个问题需要的部分。想判断保存顺序,就别先给一张全系统架构图;想找状态归属,也不必把整个页面树摊开。

图的价值不是显得专业,而是逼代理把隐含判断写出来

  • 能确认的 → 标出证据(哪个文件、哪个函数、哪段运行记录)
  • 不能确认的 → 留下问号(「待确认」)
  • 最危险的情况:把猜测画成结论。没有来源的箭头,看着再顺,也只能算假设

一句话:AI 可能已经想明白了,但没让你看明白。人需要的是一个可以质疑、可以修改、也可以回到源码验证的结构


三、五种图形与适用场景

3.1 总览对比表

图形 适用问题 能回答什么 SKILL.md 原生支持
时序图(Sequence Diagram) 异步顺序、竞态条件(Race Condition) 先后顺序对不对,四类顺序检查点 是(Mermaid sequenceDiagram)
调用树(Call Tree) 单一请求的函数路径 入口在哪、外部调用在哪、副作用在哪 是(缩进文本)
组件树(Component Tree) 前端状态归属 谁拥有状态、谁只负责展示 是(含模块边界标注)
浅层文件树(File Tree) 重构范围、目录职责 职责有没有混、边界该不该拆 是(目录 + 一句注释)
差异视图 + 风险路径(Review Map) PR 审查 新入口、权限、写库、缓存失效、失败分支串成一条线 是(diff 格式)

3.2 SKILL.md 的原始示例(实测抓取自仓库原文)

show-me 的 SKILL.md 对每种图形都给了最小示例,风格是「缩进文本优先,重工具其次」:

调用树(call tree)——直接用缩进表示运行时控制流:

submitForm
  createSession
    persistPrompt
  launchAgent
  navigateToSession

浅层文件树(shallow file tree)——每个目录只写一句职责,会话逻辑、网络传输和命令解析如果挤在同一文件,问题立刻显形:

src/
├── commands/   # parses user actions
├── sessions/   # owns session state
└── transport/  # sends API requests

伪代码(pseudocode)——讨论算法/逻辑分支时用:

on(save)
  if content is unchanged
    return cached result
  write new content
  return fresh result

差异视图(diff)——当重点是「改了什么」且周围结构已存在时,用 diff 匹配主题:文件布局变更用目录 diff,调用链变更在调用树上打 +/-,状态控制变更在伪代码上打 +/-。

[!tip] SKILL.md 里视频没细讲的两个增量 1. HTML artifact:概念太密、Mermaid 装不下时(视觉 UI、布局、状态对比),写一个聚焦的 HTML 文件(图表/信息图/短幻灯),匹配产品配色与真实数据,然后直接打开给用户。 2. guidance 节:每张图放在它支撑的那段短文字旁边;只保留回答当前问题所需的 calls、files、props、states、boundaries;「可能用一种,可能用几种,不太可能全用——用判断力,别淹没用户」。

3.3 选择决策树

你要判断什么?
│
├─ 顺序/时序问题(谁先谁后?会不会竞态?)
│    └─> 时序图
│         └─ 顺序结论还要回到代码 + 运行记录确认
│
├─ 一个请求经过哪些函数?入口/副作用在哪?
│    └─> 调用树
│         └─ 调用树负责定位函数,时序图负责核对先后
│
├─ 页面状态归谁?谁展示谁持有?
│    └─> 组件树
│         └─ 注意:安全边界仍须由后端最终授权
│
├─ 重构范围?目录职责?
│    └─> 浅层文件树(每目录一句职责)
│
└─ 审查一次代码改动(PR)
     └─> 差异视图 + 一条风险路径
          └─ 只需一份产物时,优先要风险路径

图跟着问题走,才不会变成另一份没人看的文档。小任务只要一条调用路径;复杂任务再补状态、边界和风险图。


四、案例拆解:保存配置后旧值覆盖

视频的核心范例:用户保存配置后,页面偶尔又恢复成旧值。这种「偶现」描述最耗人,把它整理成时序图后,四个可验证检查点自然浮出。

(SKILL.md 原文用 Mermaid sequenceDiagram 表达;本笔记按 vault 规范用 ASCII 重绘,内容等价)

 用户            页面(本地草稿)         服务端            存储 / 事件总线
  │                  │                    │                    │
  │── 1.点击保存 ───>│                    │                    │
  │                  │── 2.更新本地草稿    │                    │
  │                  │── 3.POST 保存 ───> │                    │
  │                  │                    │── 4.写入存储 ─────>│
  │                  │                    │── 5.发布更新事件 ─>│
  │                  │<──── 6.事件通知 ─────────────────────── │
  │                  │── 7.拉取最新配置 ──────────────────────>│
  │                  │<──── 8.返回配置 ────────────────────────│
  │                  │  9.返回值覆盖本地草稿  ◀── 问题点在这    │

四个检查点(问题没有被解决,但排查范围被急剧缩小):

  1. 数据库提交完成了吗?
  2. 第 7 步拿到的是主库、缓存、还是副本里的旧值?
  3. 事件发布发生在提交前还是提交后
  4. 页面收到结果时,有没有比较配置版本号

这个案例的选型说明:真正关心的是顺序,所以时序图比调用树合适——调用树负责定位函数,时序图负责核对先后。最终顺序仍要回到代码和系统实际运行记录确认。

使用过程的转变:

之前:代理「帮我解释」——一段关于缓存、异步写入、刷新时机的长文
之后:代理「帮我缩小排查范围」——四个可以马上检查的问题

五、防护警讯:漂亮的图也会撒谎

图是导航,不是盖章。它带你去看风险点,但不能替代源码、测试、日志和运行追踪

5.1 各类图形的系统性盲区

图形 容易遗漏什么
静态调用树 反射(Reflection)、依赖注入(DI)、事件总线(Event Bus)、动态加载
时序图 超时(timeout)、重试(retry)路径
组件图 藏在全局状态(global state)里的写入

5.2 最常见的坑:双写一致性

图里把「数据库提交」和「消息发布」画成一个原子动作,现实里它们写入两个独立系统。中间任何一点进程崩溃或通信失败,就会留下不一致数据:

 DB 提交 ✓ ────── 进程崩溃 / 网络断 ✗ ──────> 消息发布 ✗
        (没有 transactional outbox 一类机制时)

 结果:库里有新数据,下游永远收不到通知 —— 图上看不出来

防护规则(要求代理绘审查地图时):

  • ✅ 每个高风险节点附带:文件路径、函数名、测试名、或运行记录标识
  • ✅ 无法百分之百确认的关联,明确标注「待确认」
  • ❌ 不接受没有来源的箭头——看着再顺也只能算假设
  • 「待确认」三个字,比一张自信但错误的图可靠得多

六、标准流程:三阶段检查点

整套方法压成一句话:先表示,再实现,再验证

 ┌─────────────────┐   ┌─────────────────┐   ┌─────────────────┐
 │  检查点 1        │   │  检查点 2        │   │  检查点 3        │
 │  动工前          │   │  编码中          │   │  完成后          │
 │  变更契约        │──>│  决策结构        │──>│  审查地图        │
 └─────────────────┘   └─────────────────┘   └─────────────────┘
  说清改动范围/接口/      讨论超 5 分钟立刻       入口→权限→外部调用
  失败处理/验证命令       沉淀为可修改的结构图     →写库→消息→缓存→失败分支
  信息不够列待办清单      错误在十几行图里露头     审查人先走风险路径
  (别自己补设定)        (不用等几百行代码)     再看细节

检查点 1 —— 动工前的变更契约:让代理先说清这次会动哪些文件、公共接口怎么变、调用或状态会经过哪些节点、失败时怎么处理、验证命令怎么跑。信息不够就列待确认项,别自己补设定

检查点 2 —— 编码中的决策结构,按问题类型选图:

正在争论的问题 立刻要求画的图
缓存问题 状态与失效路径
并发问题 时序图
模块归属问题 文件边界

一次讨论超过 5 分钟,就让代理把争论变成一个能改的结构——还没写几百行代码,错误已经可能在十几行图里露出来。

检查点 3 —— 完成后的审查地图:把新增入口、权限判断、外部调用、写库、发消息、缓存失效和失败分支连成一条风险路径。审查人先走这条路径,再看细节。这也是给别人复查的最友好产物:既能帮你定位,也方便他人复核。


七、成本与研究证据

7.1 视频引用的三项研究(本笔记已逐条验证,详见第九节)

研究 核心发现 对本方法的含义
控制结构图(CSD)早期实验(IEEE TSE 2002) 在公共图形库的单模块源码理解任务里,CSD 能改善答题表现 只证明具体任务上的帮助,推不出所有图形表示都有效
CodeVoyager(ACm 2026) 结合调用图 + 控制流图 + LLM 的工具,在代码理解与用户信任上表现更好 值得继续验证的方向;样本不大(11 人探索 + 16 人受试者内比较)、工具形态具体
仓库级上下文文件评估(AGENTS.md,arXiv 2602.11988) 所测设置中任务成功率没有普遍提高,推理成本平均增加超 20% 额外提示词不免费;任何代理工作流都要用结果证明自己

研究给的许可只是「可以试」,没有替任何团队做结论——团队自己的代码库、协作方式和工具链,还得自己验证。

7.2 成本意识

show-me 式的结构化提示词与 AGENTS.md 式上下文文件虽不是同一物,但同属「给代理加额外指令」:

  • 额外指令 → 更长的上下文 → 推理成本上升(研究实测 20%+)
  • 成功率不保证提升(LLM 生成的上下文文件甚至平均降低约 3% 成功率)
  • 结论:这不是「加上就赢」的开关,是要用返工率证明自己的流程

八、落地建议与行动清单

团队试点方案:

  1. 挑一个中等复杂度任务(不是最难的,也不是 hello world)
  2. 试运行两周
  3. 复盘两个问题:哪些图真减少了返工?哪些图只是多了一次展示
  4. 把有用的留下,把流于形式的删掉

个人行动清单(下次让代理改复杂功能前):

  • 建立事前契约:多文件/架构调整前,指令先限定为「展示调用路径、受影响文件与失败分支」,确认无误后再发编码指令
  • 优先索取风险路径:只让代理交付一份产物时,要「入口 → 权限 → 写库 → 缓存/消息 → 失败处理」串联的风险图
  • 强制代码凭据:图节点必须标注源码路径与函数名;不确定的关联标「待确认」,杜绝幻觉与过度自信

组织收益:以后争论时,大家能指着同一张图说话——产品问操作会不会重复,工程师回到状态图;审查人说风险高,大家先看调用路径。讨论有了共同落点,也更容易留下记录。

展望:未来的代码代理会更少用长篇文字展示「我理解了」,而是先给一张任务相关的图,再根据反馈继续读仓库。图的一部分来自模型,一部分来自代码分析(类型检查、依赖关系、真实运行记录);代理负责组织材料,人负责追问:这张图漏了什么?它的证据在哪?这个决定真的能进代码吗?


九、验证与勘误记录

视频声称 验证结果 来源
show-me 来自 HumanLayer,是一个 agent skill ✅ humanlayer/skills(2.3k stars / 63 forks),plugins/show-me/skills/show-me/SKILL.md,维护者 dexhorthy(Dex Horthy,HumanLayer 创始人),最近 commit 2026-08-13「add some guidance」 GitHub 仓库页 + raw SKILL.md
五种图形(时序/调用/组件/文件树/diff 审查) ✅ SKILL.md 原文证实;且 SKILL.md 还有视频未细讲的:伪代码、Mermaid 组件交互图、HTML artifact、guidance 节(图贴着文字放、别塞全部图形)——此为笔记增量 raw SKILL.md 全文
早期 CSD 研究:两组学生实验,公共图形库单模块任务有效 ✅ 对应 IEEE TSE 28(5) 2002, 463-477(Hansen 等),论文自述为「系列计划实验中的前两组」,与「两组学生实验」吻合 arXiv 2206.11102 引文 + dl.acm.org 条目
CodeVoyager:11 人探索性研究 + 16 人受试者内比较,调用图+控制流图+LLM 在理解与信任上更好 ⚠️ 部分验证:论文真实存在(ACM 2026,Y Kim,DOI 10.1145/3742413.3789057),摘要确认「LLM + call graph + control flow graph 辅助代码理解」方向;样本数(11+16)来自视频口述,ACM 全文反爬未能核实 dl.acm.org 摘要 + ResearchGate 条目
上下文文件研究:成功率未普遍提高,推理成本平均增加超 20% ✅ arXiv 2602.11988(Gloaguen 等):「context files tend to reduce task success rates … increasing inference cost by over 20%」,HN/InfoQ/Reddit 多源一致;InfoQ 补充 LLM 生成文件平均降成功率约 3% arXiv + InfoQ + Hacker News 47034087
双写风险需要「事务发件箱」类机制 术语确认:transactional outbox 模式是分布式系统标准解法;此为视频作者的工程延伸,SKILL.md 本身无此内容
频道名「为什么叫QQ」 ✅ webReader/webExtract 元数据均为 Why QQ,6,460 订阅 YouTube 页面元数据

[!note] 素材获取说明 该频道系统性无字幕(Tier 0 不可用)。本次 Tier 2 路线:web_extract 对 YouTube URL 直接返回完整口播字幕(该频道 2026-09-07 起确认的稳定模式),配合用户提供的 Content Insights 大纲交叉比对,无内容缺口。


参考资料

相关笔记