Sean Ren AI 体验产品设计师

输入访问码

这份作品集仅供受邀查看。

跳到​案例​正文

Relay把​工作​委派​给​许多​编程​智能体。 只​决定​需要​你​判断​的​事。

一套​管理​多​智能体​编排​的​审阅​模型:工作​怎样​在​智能体​之间​流​转,怎样​被​检查,工程​师​又在​什么时候​介入。

角色
研究​与​交互​设计​师
设计​工程​师
时间
2026 年 8 月​至今
平台
桌面​端​和 iPhone
研究
四次​访​谈、三次​概念​测试、竞​品​分析
工具
Figma、Cursor、Claude Code
团队
个人​项目

概​览

智能体可以无限扩展,
人的注意力不能。

问题
工程​师​把​任务​交给​编程​智能体,走开,回来​时​面对​的是​没​看​着​写​出来​的​代码。我​聊​过的​工程​师​已经​在​好​几个​分支​上​同时​跑​好​几个​了,工作​变成​了​管理​智能体。
设计​问题
当​智能体​写的​东西​多​到​没​人​读得​完,一位​工程​师​怎样​才能​继续​掌握​全局?
关键​洞察
智能体​的​大​多数​改​动​都​不需要​批准。可以​由​另​一个​智能体​验证,或者​只要有​人​知道​发生​过​就​够​了。
我的​设计
概念​和​原型:一条​能​同时​看到​所有​智能体​的​跑道,由​人​回答​的​决定,以及​离开​时​用​的​锁​屏​版本。

过程

它​最初​是​给​单​个​智能体​用​的 IDE 插​件。

第​一轮​访​谈
我​访​谈​了​四位​工程​师。他们​要​自己​检查​过,才​会​信任​智能体​的​工作:重新​跑​一遍、把​要求​再说​一遍、请​同事​看​一眼。所以​我​一​开始​做的​更像 IDE 插​件,而不是​独立​产品。

第一​版​之前:一张​草​图、流程​和​线​框​图

  1. 白板​草​图

  2. 用户​流程

  3. 线​框​图

第一​版
一个​审阅​面板,对照​项目​规格​检查​智能体​的​工作。一位 staff 工程​师​告诉​我,大部分​工作​都​从​一句​随​口​的​要求​开始,正式​的​规格​很少​见。
第二​版
一个​引导​式​视图,带​你​看​自己​不在​时​智能体​做了​什么。一位​业界​研究​工程​师​告诉​我,他们​实际​上​会​同时​跑​好​几个​智能体,那位 staff 工程​师​也​说​过​同样​的话。这​就是​转折​点。
和 Claude Code 一起
我把​所有​研究​都​给​了​它,问​它​怎么​同时​运行​很多​智能体。它​带来​了​很多​新​功能,但​设计​并不​一致,整个​方案​看起来​就是​随​处​可见​的 AI slop。
纸​上​草​图
我​画​了​比赛​如何​进行,列出​设计​还​需要​回答​的​问题,并​写下​提示​词​规则。

比赛​的​草​图,以及​我的​提示​词​规则

我​对 AI 迭代​的​笔记

第三​版
这​就​成了​跑道:每​个​智能体​都是​同一​屏​上​的​一个​赛​道,需要​你​时​就​举起​接力棒。一位​工艺​验证​工程​师​又​提了​两​点:每​个​结论​都能​追溯到​来源,每​个​决定​都要​显示​它​会​影响​什么。

编排

智能体​像​接力​赛​一样​把​工作​传​下去。

一个​赛​道​依次​走过​规划、构​建、测试、审查、落地,每次​交接​的​结果​决定​下一步​由​谁​行动。

把​所有​智能体​放到​一条​赛​道上

人​怎么​才能​看到​全部,又​知道​哪个​需要​自己?

被​否​掉​的​方案每​个​智能体​一次​审阅,第二​版

第二​版:代码​旁边​是​对​单​个​智能体​工作​的​引导​式​审阅。

第二​版​一次​审​一个​智能体,多​一个​智能体​就​多​一次​审阅。

采用同​一条​跑道​上​的​赛​道

8
Safari address autofill Plan agent workingrelay/safari-autofill
2
3DS timeout retry Plan agent workingrelay/3ds-retry
5
Decline analytics Plan agent workingrelay/decline-analytics
0 handoff checks0 sent back and fixed by agents0 sent to you

三条​跑道​从 Plan 出发。每次​交接,都由​接棒​的​智能体​做​一次​检查。

原因
那位研究工程师的团队已经用集成测试、智能体审阅和代码负责人批准来检查智能体的产出,所以我把检查变成交接的一部分。智能体会在问人之前先抓住彼此的错误。

交接​结果

智能体​自行​解决
检查​通过,或者​工作​被​退回,修好​后​再​传​回来。
Worth knowing
有​东西​变​了,应该​有人​知道。它​会​进​一张​清单,不​打扰​任何人。
需要​人​来​处理
产品​决定、智能体​之间​的​分歧,以及​任何​不可逆​的​事。工程​师​可以​修改​这些​规则,最后​一条​除外。
赛​道​冲突
我的​草​图​问过:分支​冲突​时​该​怎么​呈现?两​条​跑道​可能​各自​通过、放​在一起​却​失败,所以 Land 智能体会​在​合​入​之前​把​它们​放​在一起​测试,冲突​会​作为​一个​决定​交给​人。
独立​验证
同一​模型​的​智能体​可能​漏掉​同​一个 bug。所以​涉及​资金​或​数据​的​改​动​在​合​入​前,会​用​真实​流量​做​一次​回​放​检查。

决策

难​的是​智能体​该​多久​问​一次。

问得​太​勤,批准​就​成了​条件​反射。问得​太少,问题​落地​时​没​人​看​过。

上报

把​需要​知道​的​和​需要​批准​的​分开

最​容易​想到​的​设计​是​审批​收件​箱,每​个​改​动​都​等着​一个“同意”。

被​否​掉​的​方案一个​审批​收件​箱

批准​变成​了​工作​本身,真正​的​决定​反而​淹没​其中。

采用决定​用​接力棒,其余​的​放进“Worth knowing”

From agents

Waiting for the next update

Your hand0

Nothing needs you yet.

八个​智能体​边​干​边​汇报。每​条​更新​在​到达​你​之前,Relay 都会​先​分​好​类。

原因
那位 staff 工程师给了我一个后来反复想起的例子:新增一张数据库表是需要知道的事,但没什么要批准的。

可​解释​性

先​给​证据,再​给​建议

Test 智能体​说​这个​不​稳定​的​测试​是​时序​问题,Review 智能体​说​是​竞​态​条件。

被​否​掉​的​方案带​置信​度​分数​的​投票

它​掩盖​了​智能体​之间​的​分歧,也没​告诉​人​该​检查​什么。

采用先​给​证据,再​给​建议

InvestigateLane 6Waiting 4 min

Test agent and Review agent disagree about the flaky test.

Relay won’t recommend a side while its own agents disagree. Check first, or decide.

Test agent

It’s timing. With one retry, 10 of 10 runs pass.

Review agent

It’s a race. The order total can change after Pay is pressed.

Relay suggests a check before anyone decides.

1Fix the raceSide with Review agent. Build agent locks the total while paying.
2Keep the retrySide with Test agent. Review agent logs the race as a known risk.

Relay 还​不​选​边​站。

原因
我访谈的一位 Android 工程师只相信亲眼看到先失败、后通过的修复,所以 Relay 会先把测试跑 20 次,再给出建议。

回答

把​你​自己​的话​复述​回来

选项​是​智能体​给​的,有​时候​没有​一个​是​对​的。

被​否​掉​的​方案一个​直通​跑道​的​文本​框

被​误​读​的​回答,要到​审查​时​才​会​暴露。

采用你​的话,在​生效​之前​先​复述​一遍

DecideLane 1Unblocks 2 lanes

What should customers see when the bank flags fraud?

1“Your card was declined. Try another card or contact your bank.”Recommended
2“We couldn’t verify this payment. Contact your bank.”
3Ask Maya, product manager

The receiving agent reads your answer back before it reaches the lane.

没有​合适​的​选项​时,输入​框​可以​接收​你​自己​的话。

原因
工程师会用自己的话纠正智能体,比如我访谈的一位前端工程师,每条需求都要重述一遍。所以 Plan 智能体会先把你的回答和规格对照一遍。

关于​什么​交给​谁​的​其他​决定

  1. 决策​溯源

    每​个​决定​都​写​明​谁​检查​了​什么,以及​它​从​哪里​来。

  2. 为​不可逆​操作​增加​阻力

    大​多数​回答​会​先​在​撤销​托​盘里​等​一下。删除​一张​表​需要​长​按,卡片​也​会​先​说明​它​会​影响​什么。

  3. 按​影响​排序

    按​最新​排序,会​把​最能​推动​工作​的​回答​埋​在​下面。

  4. 按​负责​人​分发

    决定​交给​负责​这​段​代码​的​人,而不是​把​每​个 pull request 发​给​每位​队友。

每个决定的完整内容,连同研究、细节打磨和实现,都在完整版案例研究里。

管理

智能体​跑起来​之后,人的​工作​就像​一位​经理。

自主​权

让​过往​记录​决定​智能体能​自己​解决​什么

大​多数​工具​都是​提前​按​工具​和​命令​设​好。

被​否​掉​的​方案提前​设​好的​权限

它​只​说明​智能体​可以​运行​什么,完全​不​说​它​判断​得​有​多​好。

采用按​决定​类型,根据​它们​的​记录​来​提议

Let agents settle Pick calls?

Agents would have answered all 7 of your last Pick calls the same way you did. When more than one fix works, they’d settle it and tell you under Worth knowing.

Matched 7 of 7
Every call comes to you

你​每​回答​一次,Relay 都会​记​下​智能体​会不会​选​一样​的​答案。在“挑选”类​决定​上,它们​和​你​最近​七次​都​一致。

原因
当​智能体​和​你的​回答​至少​十次​有​九​次​一致,Relay 才​会​提议​把​这类​决定​交给​它们。产品​决定​和​任何​不可逆​的​事​始终​由​人​决定,手​牌​下方​的​一行​字​会​显示​已经​交出​了​什么。

移动​端

在​手机​上​回答

留给​人的​大部分​工作​就是​选​一个​答案,这​不需要​大​屏幕。

决定​汇​总​到​一起

决定​汇​总​成​一叠,按​能​放行​多少​跑道​排序。“Worth knowing”从不​震动,只​安静​地​留在​一行​字​里。

升级​超​时
你​走开​时,决定​会​转​到​手机​上。25 分钟​后,它​转​给​那​段​代码​或​文案​的​负责​人。如果​没有​负责​人,这​条​跑道​就​等着,因为​没有​回答​就不​会合​入。
恢复​流程
人​和​智能体​都会​出错,所以​每​个​阶段​都有​自己​的​退路:传递​途中、在 Lane 上、合​入 main 之后,以及​智能体​已经​做了​决定​之后。

对比

今天​的​工具​能​并行​跑​智能体,然后​把​工作​交还给​你。

我把 Cursor、OpenAI Codex、GitHub Copilot、Claude Code 和 Google Antigravity 都过了一遍。它们是已经上线的产品,Relay 只是概念,所以我只比较工作是怎么管理的。

分​诊
Claude Code 的 agent view 最接近我想要的:会话按是否需要输入排序,问题就写在那一行上。但它说不了为什么这个需要你,也说不了什么在等着它。在 Relay 里,决定带着理由到来,能放行最多跑道的排在最前面。
Claude Code 的 agent view:会话​按 Needs input、Working、Completed 分组,等待​回答​的​问题​写在​那一​行​上。
Claude Code 的 agent view,来自官方文档。
结果​审阅
Cursor 的 Agents Window 把智能体的总结放在代码旁边。那是智能体在描述自己的工作,你还得自己想象客户看到的有什么变化。Relay 把每个修复都按上线后的样子显示出来。
Cursor 的 Agents Window:左边​是​智能体​列表,中间​是​智能体​对​改​动​和​测试​的​总结,右边​是​代码。
Cursor 的 Agents Window,来自更新日志。

Lane 4, three forks in German

German overflows the payment panel. Pick a fix.

AShorter copy

Zahlung49,00 €
•••• 4242
Karte abgelehnt. Andere Karte nutzen.
49,00 € bezahlen

All checks pass

locales/de/checkout.json+1 −1

− "decline.generic": "Ihre Karte wur…

+ "decline.generic": "Karte abgelehn…

BWrap to two lines

Zahlung49,00 €
•••• 4242
Ihre Karte wurde abgelehnt. Versuchen Sie es mit einer anderen Karte.
49,00 € bezahlen

Panel grows on small phones

decline-message.css+2 −1

− white-space: nowrap;

+ white-space: normal;

+ min-height: 2lh;

CCut off, full text on hover

Zahlung49,00 €
•••• 4242
Ihre Karte wurde abgelehnt. Versuchen Sie es mit einer anderen Karte.
49,00 € bezahlen

Hides most of the message

DeclineMessage.tsx+2

+ style={{ textOverflow: "ellipsis" }}

+ title={message}

测试​智能体​发现​德语​文案​撑​破​了​支付​面板,构​建​智能体​试​了三​种​修复,各​在​自己​的​分支​上。

移动​端
GitHub Mobile 的​实​时​活动:一个​进行​中的​任务,还有​查看​拉​取​请求​的​按钮。
GitHub Mobile,来自更新日志。
GitHub Mobile 的实时活动告诉你会话进展如何,Claude Code 的 Remote Control 可以在 Claude 应用里回答。我希望问题已经写在通知里,答案点一下就能选。

成果

Relay 将​在 Fall Symposium 上​展出。

我​会​在​现场​展示,并​带​观众​走​一遍​原型。

反馈
一位​资​深​工程​师​对​第一​版​评价​很高,认为​它​比​自己​公司​的​内部​工具​更好。
我​学​到​的

站不住​的​两​个​前提​都是​我​自己​定​的,而且​都是​工程​师​第一次​看到​设计​时​就​倒了。下次​我​会​先​请​他们​讲​讲​真实​的​一天,再​拿出​界面。

和 Claude Code 一起​时,功能​来​得​很快,但​没有​一个​屏幕​能​直接​用。等​研究、手稿​和​规则​都​先​定​好,它​才​真正​有用。

我​最先​会​看​什么
人们​在​接受​推荐​答案​之前​打开​证据​的​频率。这个​数字​一​降,就​说明​大家​开始​不读​就​批准​了。

未完待续…