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 大纲交叉比对,无内容缺口。


参考资料

相关笔记