一个 Agent 的四件套:画界面、找帮手、查数据、守规矩

一个 Agent 的四件套:画界面、找帮手、查数据、守规矩

在线体验:http://117.72.72.215:5210

四件事分别对应 A2UI、A2A、MCP,以及托着它们的那一圈 Harness。


这个 Demo 最早只想验证一件事:界面能不能不写。

做着做着发现,光「不写界面」没多大意思。你说「帮我下单一台手机」,光给一张能点的卡片不够,得有人真去建单、算钱、拦住不该做的操作。再往后,订单不在主站里,投诉数据也不在主站里,这些活怎么分出去、结果怎么收回来,才是麻烦的地方。

现在这里装的就是四样:画界面、找帮手、查数据,外加兜住这三样的一圈东西。

十分钟能亲手验证五件事:

你说 屏幕上发生什么
帮我做一份「新品满意度调研」问卷 生成一张可填写的表单,提交后入库
我要吃披萨 另一个服务返回菜单卡片,能选规格、加购物车、下单
帮我下单一台星穹 X50 Pro 手机,单价 3999,买 1 台 生成订单确认卡,确认后出订单号,可支付
查一下订单 SO202505180003,然后取消它 护栏拒绝,模型改口说「这单已支付,得先退款」
分析一下投诉数据 生成饼图和结论,五个类型加起来正好 500 条

一个主站 Agent,三条对外的通道:

复制代码
A2UI ─ 往「界面」走:组件树 → 浏览器渲染 → 你点/填 → 意图回传
A2A  ─ 往「别的 Agent」走:名片发现 → 委托 → 结果 + 组件树
MCP  ─ 往「数据」走:三个只读工具 → 独立问数进程 → 结果集

这三条通道,共用外面同一圈东西:
上下文 · 工具 · 循环 · 护栏 · 记忆 · 观测 ------ 这一圈叫 Harness

三条通道加这一圈,就是标题说的四件套。下面一件件拆,每件都会说清楚到界面上哪里能看见,最后给一份能照着点的操作路径。

两句提醒。第一次进去要填自己的模型 API Key,服务端不存别人的密钥,也不会偷偷回退到某个默认模型。另外这是公开演示环境,订单、投诉、手机号全是假数据,别填真实的敏感信息。


一、先玩起来

五分钟能走完的动线是这样:

复制代码
打开  http://117.72.72.215:5210
  │
  ▼
左下角「⚙ 设置」
  │
  ▼
「模型配置」 → 「+ 新增模型」
  │
  ▼
填:模型 / 服务地址 / API Key
  │
  ▼
勾「启用」+ 「设为使用中」 → 保存
  │
  ▼
「← 返回对话」
  │
  ▼
说一句话(或点一个快捷按钮)
  │
  ▼
对话区出界面 · 右栏出轨迹

打开页面

用 Chrome 或 Edge,窗口拉到 1200px 以上。窄屏也能用,右侧面板会收成抽屉。

页面分三栏:

复制代码
┌─────────┬──────────────────────────┬──────────────┐
│ 会话列表 │  对话区                   │ A2UI 消息流   │
│ +新会话 │  (界面在这里被画出来)     │ 运行轨迹      │
│         │                          │              │
│ ⚙ 设置   │  [输入框]        [发送]    │              │
└─────────┴──────────────────────────┴──────────────┘

左栏是会话列表,「+ 新会话」会另起一段互不干扰的上下文,后面验证记忆就靠它。中间是对话区,所有界面都渲染在这儿。右栏两个页签:一个是模型真正发出去的 A2UI 消息,一个是它每一步在干什么,调了哪个模型、哪个工具、有没有被护栏拦下、有没有在等你审批。

右栏建议一直开着。这个 Demo 有意思的东西基本都在那一栏,不在对话区。

配一个模型

首次进入,中间会提示「当前身份还没有可用的模型」。不是坏了,是故意的:模型和密钥按人隔离,你没配就是没有,系统不会拿别人的凑数。

  1. 点左下角「⚙ 设置」
  2. 左栏选「模型配置」,右上角「+ 新增模型」
  3. 弹窗里填三样:
    • 模型:输入框有下拉建议,选中会自动带出服务地址。例如 deepseek-flash
    • 服务地址:比如 https://api.deepseek.com/v1,任何 OpenAI 兼容端点都行
    • API Key:你自己的密钥
  4. 勾上「启用(可用池)」和「设为使用中」,保存
  5. 点右上角「← 返回对话」

回到首页,顶部「模型」那格会变成你刚配的模型名。

配的时候有几个细节值得留意。密钥保存后只显示掩码,编辑时留空就沿用原值,不会再吐给你一次,也不写日志。启用和使用中是两回事:启用表示这个模型能用,可以同时开好几个;使用中只有一个,决定此刻真正调谁。停掉正在用的那个,系统会把最近更新的另一个启用模型顶上来,不会让你掉进没有模型的空档。换模型也不清历史,历史按身份存,换的只是此后调用的模型。

想登录的话,别找右上角,那儿没有登录入口。直接跟它说「我要登录」,它会画一张登录卡片。手机号随便填,验证码会直接显示在界面上------没接短信通道,只能这么模拟,别当真。

登录只多两样东西:换浏览器、换设备之后配置和记忆能跟着走;以及有些事必须登录才能做,后面 A2A 那节会用到。

五个快捷按钮

输入框上方有一排:满意度问卷、团建报名表、下单手机、查单并取消、投诉分析。悬停能看到完整句子,点一下直接发出去。

接下来几节的入口,就是这五个按钮。


二、A2UI:界面是模型画的

你会看到

点「满意度问卷」。屏幕上出现的不是一段「好的,以下是一份问卷......」的文字,是一张能填的表单:单选、评分、文本框、提交按钮,间距和对齐都正常。

填完提交,它说已保存。

再点「团建报名表」,出来的是另一张表:姓名、手机号、日期、饮食忌口、报名人数。字段全换了一套,样式还是那套。

同一个页面,两张表,没有刷新,没有跳转,也没有为这两张表各写一个页面。

模型交出来的不是 HTML

它交的是一段声明式的结构:这里放一个 Column,第一个子节点是 Text,内容是这个问题,第二个是 ChoicePicker,绑定数据模型里的 q1,给三个选项,最后放一个 Button,点了回传 submit。

落到纸面上,一屏问卷就是一棵树:

复制代码
Column
 ├─ Text          "新品满意度调研"
 ├─ Text          "你最喜欢哪一点?"
 ├─ ChoicePicker  ← 绑定 q1 · 三个选项
 ├─ Rating        ← 绑定 q2 · 1~5 星
 ├─ TextField     ← 绑定 q3 · 多行
 └─ Button        "提交" · 点击回传 submit

数据模型:{ q1: "", q2: 0, q3: "" }

就这棵树,加一份初始数据。没有一行 HTML,也没有一句脚本。

前端拿到它,用一套组件白名单渲染成界面。白名单现在有 22 个组件,文本、输入框、选择器、评分、滑块、上传、表格、图表、标签页、手风琴这些。结构和数据是分开的,结构说长什么样,数据模型存填了什么,所以改一个选项不会把整棵树重建一遍。

能验证的三件事

开右栏的「A2UI 消息流」,再发一次问卷请求,会看到一条条结构化消息滚出来。组件类型、层级、绑定字段都在里面,对着中间已经渲染好的表单,能一条条对上。这是最直接的证据。

还有一件事稍微绕,但我觉得是这套设计里最关键的一处。问卷的字段确实是模型想的:你说要调研新品满意度,它得自己决定问什么。可它不会把这些字段直接画出来。它先把字段定义提交给服务端注册,服务端登记完回一个表单名,模型再拿这个名字去取字段,取回来的就是刚注册的那一份。

所以我隔几分钟让它「把刚才那份问卷再给我看看」,字段顺序、选项、必填标记全都一样。一致性不靠模型记住,靠服务端那份登记。

另一类表单反过来。投诉、培训反馈、登录,字段本来就是服务端定死的,模型连设计权都没有,只能决定怎么摆。两类表单的共同点是,提交时的校验永远在服务端,未知字段和越界值在落库前就被拦掉了。

最后一件事,闲聊不生成界面。你跟它说今天心情不错,它就正常聊两句,什么都不画。生成界面是能力,不是默认动作。这条边界挺重要,后面还会提。

跟现在主流做法比一比

市面上做 Agent 的产品,交互形态大致落在五种里,越往下越少见:

做法 界面从哪来 用户能做什么 新增一种业务要改什么
① 纯文本 / Markdown 回复(通用助手都这样) 人写死的聊天气泡 只能读;要操作得自己去找入口 改提示词,可操作仍然没地方放
② 文本 + 预置卡片模板(企微/飞书机器人卡片) 开发者事先定义的少数模板 点模板里那几个按钮 客户端发版 + 服务端改模板
③ 工具调用 → 前端 switch 渲染(如 Vercel AI SDK 那类) 前端代码里写死的组件映射 用被映射过的那几种组件 加一个组件就要前端发版
④ 模型直接产出 HTML / 页面片段(「AI 生成网页」的玩法) 模型自己写的 HTML 理论上什么都能做 不用改前端,但样式与安全不可控
⑤ A2UI:模型产出组件树,渲染器按白名单渲染(本项目) 白名单里的组件,模型自由组合 填、选、点、提交,意图回传 加一份能力 + 一份规则,通常不动前端

最后一行是我在这个 Demo 里用的。它跟前四行的区别不在「有没有界面」,在三个地方。

一个是结构谁定。前三种结构都是人定的,模型只能在既定格子里填字;第四种完全交给模型,也就完全失控;最后一种让模型定结构、白名单划边界,结构自由,词汇受限。

再一个是组件集合封不封闭。封闭才管得住。第四种在很多团队活不下来,不是因为不好看,是模型每次产出的 HTML 都不一样,样式漂、埋点失效、手机端错位、XSS 面全开,最后没人敢上线。A2UI 只让模型说「放一个 ChoicePicker,绑 q1,三个选项」,至于这个控件长什么样、怎么校验、窄屏怎么折,全在渲染器里,改一次全体受益。

最实际的还是第三个:新增一个业务要动多少地方。第一种改提示词,可操作还是没地方放;第二、三种要发版;第四种没法预估;最后一种通常就是加一份能力和一份规则。

落到体验上就一句话,文本方式得问你八轮,界面一屏填完。

拿团建报名试。姓名、手机号、日期、忌口、人数,纯文本的 Agent 只能一个个问,你答到第五个已经忘了第一个填的是什么。这里五个字段摆在一屏,必填、格式、日期范围当场校验,点提交,它回一句已保存。

复制代码
常见方式:  模型 ──→ 一段文本 ──→ 人读完 ──→ 自己去找入口操作 ──→ (对话中断)

A2UI:      模型 ──→ 组件树 ──→ 人直接在界面上填/选/点 ──→ 意图回传 ──→ 模型继续

上面那条是一问一答,下面那条一个回合能办完一件事。

那为什么大多数产品还停在第一种?便宜、稳、通用。纯文本不用设计系统,不用前端配合,渲染出错也不至于卡住业务。二三种是折中,用有限模板换可控。第四种看着最自由,维护起来最难受。A2UI 想解的是二三种的天花板:模板不够用了,又不愿意放弃可控。

有一点得说清楚,A2UI 不打算取代对话。你问今天心情不错,它照样只回文字。只有需要结构化输入、或者需要你做决定的时候,界面才出来。这条线守不住,聊天框会变成弹窗地狱。

换来了什么

原来界面是人写的,模型只往界面里填内容。业务变一次得改两处,提示词和前端。改动面翻倍,这两拨人还常常不在同一个迭代里。

界面这层也交给模型之后,变的是成本曲线。前几个业务照样得按部就班,白名单、设计系统、校验规则一样要先建起来。但从某个点开始,每多一个业务便宜得很快。这个 Demo 里四张表------问卷、投诉、登录、培训反馈------形态差得很远,共用一套渲染器,没有一张是单独做的页面。

真省的是第十个业务的成本,第一个业务一分都省不掉。


三、A2A:一个 Agent 把活交给另一个

你会看到

打「我要吃披萨」。

回来的不是一段菜单文字,是一张菜品卡:分类、菜名、价格、规格(9 寸 / 12 寸)、数量加减、加入购物车。选规格加购,购物车卡出来;提交,订单号回来;再问「到哪了」,配送进度卡出来。

这些都不是主站干的。

三个服务,一张名片

系统里跑着三个独立的 Agent 服务:

服务 负责什么 触发词举例
主站 Agent 对话、生成界面、数据分析 默认入口
订单 Agent 下单、查询、支付、取消、退款、退货、收货、客服工单 下单、查订单、退款、报修
订餐 Agent 菜单、规格价格、加购下单、配送进度 想吃披萨、来一份、到哪了

它们之间不走函数调用,走 A2A。每个服务对外发一张名片,写着:我叫什么、干什么;有哪几个技能,各自解决什么问题;每个技能大概会被怎么说;要不要登录。

主站启动时把名片收回来,按触发词决定这句话自己答还是转出去。转的时候把意图和上下文一起带过去,对方处理完,把结果连同要显示的界面一起交回来。

一次委托走完是这样:

复制代码
你:我要吃披萨
  │
  ▼
主站 Agent ── ① 查名片:技能 / 触发词 / 是否需登录
  │            └ 需登录而你没登录 → 就地画登录卡,请求不出门
  │
  │  ② 命中「订餐 · 菜单」技能
  ▼
A2A SendMessage ── 意图 + 上下文 + 身份 + 该用哪个模型
  │
  ▼
订餐 Agent ── ③ 规划:查菜单 → 定规格 → 组卡片
  │
  ▼
回传:一句话 + 一棵组件树
  │
  ▼
主站渲染 → 你看到菜单

还有个细节,连「这次该用哪个模型」都一起带过去了。远端不留密钥,按请求里的连接参数现建客户端。你在设置页换个模型,远端立刻跟着换,不用重启任何服务。

上手试一试

说「我要吃披萨」和说「帮我下单一台手机」,卡片风格近似,业务完全不同。右栏轨迹里能看到「委托到外部 Agent」这一步,两个业务的代码、数据、状态机都不在主站。

路由是按技能走的,不是拿关键词硬匹配。换几种说法试试:「有什么小吃」落到菜单技能,「加购物车」落到下单,「还有多久到」落到配送,「我要退款」转给订单 Agent。

一句话里塞多个意图也行。「查一下订单 SO202505180003,然后取消它」,它会先查、看到状态、再决定取消还是退款。这一段不是代码写死的分支,是它自己排的顺序。

最值得试的是权限。不登录,说「帮我下单一台手机」,它画一张登录卡出来,因为订单技能的名片上写了「需要已认证」。登录成功后刚才那句话会自动重发,不用你再打一遍。同样不登录,说「帮我提交一个工单:会议室投影仪坏了」,直接就走了,工单技能没写这条要求。

同一个服务,两个技能,两种权限。依据在名片上,调用方在委托之前就拦下来,请求根本没发出去。

为什么值得拆

能力能拆出去独立部署、独立演进、独立限流。主站不用知道订单库长什么样,只要知道有这么个技能、这么触发、要不要登录。

另一条路是把几十个工具全塞给一个模型。工具一多,选错的概率就上去了;按名片分区,等于给模型一张地图,而不是一堆散装按钮。


四、MCP:让模型自己取数,只能看不能改

先问一句试试

点「投诉分析」,或者直接说「分析一下投诉数据」。

回来的是一段结论加一张饼图,下面可能还有明细表。数字能核对:库里一共 500 条投诉,五个类型(商品质量 147、物流配送 131、退款问题 88、服务态度 87、其他 47)加起来正好 500。

再追问几句,看它换维度。「各渠道投诉量对比」出柱状图,「处理时长最长的 5 条」出明细表,「最近 30 天呢」它会把时间条件加上,条数变少。

一个只读的问数进程

主站会拉起一个独立的问数进程,两者之间用 MCP 通信。这个进程只暴露三个工具:

工具 作用
列出所有表 让模型知道库里有什么
看某张表的结构 字段名、类型,模型据此写查询
执行只读查询 只放行 SELECT,其它一律拒绝

流程就是:模型先看表结构,自己写一句 SQL,交给进程执行,拿回结果集,再把数字讲成人话、挑一种图。

复制代码
你问:投诉都集中在哪些类型
  │
  ▼
主站 Agent ── 工具① 有哪些表
           ── 工具② 这张表什么结构
           ── 工具③ 执行一句 SELECT(模型自己写的)
  │
  ▼
问数进程 ── 只读连接 ──▶ complaints.db ──▶ 结果集
  │
  ▼
模型:把数字讲成人话 + 挑一种图 → 组件树

这条链上模型始终没看到数据库连接,也没看到全表。它看到的是表结构,和这一次查询的结果。

怎么确认它没糊弄你

SQL 是模型写的,不是预先做好的报表。问一个没人准备过的问题:「哪个城市的重复投诉最多」「处理时长和满意度有没有关系」「把处理中的投诉按城市列出来」。它能自己组合维度、排序、聚合,说明查询是现场生成的。

它只能读。你可以故意为难它:「把已完成的投诉都删掉」「帮我改一下这条投诉的状态」。它会明确告诉你做不到。不是模型不肯,是工具层根本没有这个能力,服务端只放行读语句,数据库连接本身就是只读模式。

数字来自结果集,不是模型编的。图表上的数值和明细表对得上,明细表和「一共多少条」对得上。这条纪律比较要紧:让模型算数,它迟早会算错;让数据库算,它只负责转述。

为什么绕这一圈

MCP 解的是 N 个模型乘 M 个数据源的重复接线。数据不出库,连接串不进模型上下文,换个库只要换个服务,Agent 侧看到的永远是同样三个工具。

它还顺手把安全边界画清楚了。能力的边界就是工具的边界,不给删除工具,就不存在「模型被诱导去删数据」这回事。


五、串起来:一次下单,谁在干活

把上面三件事拼起来,就是一次完整的业务流程。用「帮我下单一台星穹 X50 Pro 手机,单价 3999,买 1 台」举例:

复制代码
你:一句话
 │
 ├─ 主站 Agent 判断意图 ── 这是订单业务,不是我自己的活
 │      │(依据:订单 Agent 名片上的技能与触发词)
 │      ▼
 ├─ A2A 委托 ──────────── 把请求交给订单 Agent(另一个进程)
 │      │
 │      ▼
 │   订单 Agent 决定先建草稿 → 调工具建草稿
 │      │(护栏:数量、单价、状态、幂等,一律服务端判)
 │      ▼
 │   返回一张「订单确认」界面描述
 │      │
 ├─ A2UI 渲染 ─────────── 主站把界面描述转给前端,你看到卡片
 │
 ├─ 你点「确认下单」 ──── 界面把意图回传(不是你打的字,是按钮的意图)
 │      ▼
 │   订单 Agent 落单 → 订单号由服务端生成 → 新界面(状态变了,按钮也变了)
 │
 └─ 右侧「运行轨迹」────── 上面每一步都留痕:模型调用、工具调用、护栏、审批

每一步都能在界面上找到证据:

步骤 在哪看
意图判定与委托 右侧「运行轨迹」里的模型调用与工具调用
界面生成 右侧「A2UI 消息流」里的组件树
护栏拦截 轨迹里的拦截记录 + 卡片上的一句话说明
人工审批 支付这类高风险动作会弹确认,不点就不执行

订单卡片上的按钮,是按状态算出来的。待确认时只有「确认下单」和「取消订单」;待支付时变成「去支付」和「取消订单」;已支付之后,「取消订单」这个按钮消失了,换成「申请退货」。

那这时候在对话里说「取消订单」会怎样?护栏会拒绝,并附一句「尚有已支付金额,需先退款,退款成功后再取消」。模型读到这句,就自己去调退款,退完再取消。整个过程里你已经看不到「取消」按钮了,但流程照样能走完,因为按钮只是入口,不是能力的全部。

还有一个更细的设计:退款这个动作本身不做成按钮。它是补偿动作,属于「Agent 在编排中自己决定要不要调」的那一类,不该让用户随手点。所以你翻遍界面也找不到「退款」按钮,但需要它的时候,它一定会发生。


六、再往下一层:Harness

一次提问,模型被叫了好几次

问「查一下订单 SO202505180003,然后取消它」,右栏会滚出一长串:模型调用、工具调用、模型调用、护栏拦截、模型调用。四五步。

它不是在跟你一问一答,是在跑一小段流程。

还有几个不太像聊天的现象。先说「我叫张三,在做电商运营」,开个新会话再问「我是谁」,登录状态下它答得上来;已支付的订单它明确拒绝直接取消,还告诉你得先退款;聊十几轮也不崩,前面说过的没丢;每一步都有耗时、有 token、有成功失败。

这些都不是模型的本事。

模型只做一件事

Agent 等于模型加 Harness。

模型干的活只有一件:看着当前上下文,决定下一步是说话还是调工具。它是无状态的,每次调用都从零开始读一遍再想。

Harness 是模型外面的一切:给它看什么、允许它做什么、能走几步、做错了怎么拦、做完记在哪。

一次对话在 Harness 里转一圈是这样:

复制代码
① 装配上下文
   │  系统提示 + 技能说明 + 工具清单 + 最近 N 轮 + 你的画像
   ▼
② 模型:下一步做什么?
   │
   ├── 只是回答 ──────────────────────▶ ⑥ 输出,结束
   │
   └── 要调工具
         │
         ▼
     ③ 护栏:允许吗?金额对吗?要审批吗?
         │          └ 不许 → 把原因写回上下文(不是弹个错误框)
         ▼
     ④ 执行:A2A 委托 / MCP 查询 / 表单入库 / 建草稿
         │
         ▼
     ⑤ 结果进上下文 ──▶ 回到 ②(可能循环好几轮)

第 ③ 步那条分支值得看一眼。被拒绝不是终点,是把原因交回给模型,让它改计划。护栏和报错的分界就在这儿:前者让流程继续,后者让人重来。

这套东西在这个 Demo 里被拆成八件事,每一件都能在界面上找到证据:

部件 干什么 你能在哪看到
上下文装配 每一轮重新拼「该让它看到的」 老会话里它记得上一轮,新会话里不记得
工具 它能做的动作 轨迹里的工具调用条目
循环控制 一次提问允许走几步、什么时候收口 轨迹里模型调用不止一次
护栏 状态机、金额、幂等、权限,一律服务端判 说「取消已支付订单」被拒
审批 高风险动作要人点头 支付前的确认卡
记忆 跨轮、跨会话记住 新会话里它说出你的职业
摘要 上下文快满时压缩 聊十几轮后仍然正常
观测 每步留痕:模型、工具、耗时、token 右栏「运行轨迹」

能验证的

数一下轨迹里的模型调用次数。说「查一下订单 SO202505180003,取消它,然后重新下一台同款」,动作越多,轮次越多。控这个循环的是 Harness,不是模型一口气说完。

换个模型试试(进阶玩法第 4 条)。措辞会变,工具调用次数可能变,但「已支付不能直接取消」「金额不能乱来」「同一单不会扣两次钱」一条不少。反过来,同一个模型接到别的产品里,这些规矩一条都不会自己长出来。

上下文是拼出来的,不是攒出来的。同一个问题问三次:老会话里问一次,新会话里问一次,登录后的新会话再问一次。答案的差别,就是每次拼进去的东西不同。它并没有记住一切,它每次只拿该拿的那部分。

流程 Agent 化有四层

这也是这个 Demo 最想验证的东西:下一步做什么,是模型规划的,不是 if-else 写死的。

层级 谁决定下一步 长什么样
L0 代码 传统工单系统:状态机写死,加一个分支改一次代码
L1 人点,Agent 只生成界面 只用了 A2UI 的那一半
L2 模型规划,代码提供原子能力 下单、退款、订餐:调哪个工具、什么顺序,模型自己排
L3 策略写在文档里 改一份规则文档就改业务,不用发版

这个 Demo 的订单和订餐站在 L2,少数规则放在 L3。比如「信息齐了不等于用户点头了,必须明确说下单、或者点了按钮,才执行」------这条写在提示词里,不在代码的分支里。

差距在这一圈

抱怨 Agent 不好用的人不少,落到具体原因上,很少是模型不够聪明。工具描述写得含糊,它就选错工具;上下文一股脑全塞,它抓不住重点;没有护栏,它会很热情地把不该做的事做了;没有观测,出了问题只能猜。

模型谁都调得到同一个。这一圈得自己长。


七、进阶玩法:把 Demo 当实验台

基础操作到这儿就差不多了。下面这些更能看出门道,建议挨个试。

1. 故意挑战护栏。

先下单,再支付,然后说「取消这个订单」。它会告诉你已支付不能直接取消,得先退款。接着问「那退款吧」,它走退款流程。整个过程里,模型在改计划,护栏在守边界,两件事同时发生。

2. 一句话塞三个动作。

「查一下订单 SO202505180003,取消它,然后重新下一台同款」。看它怎么拆步骤、哪一步被拦、拦了以后怎么解释。这是观察流程 Agent 化最直接的方式。

3. 中途改需求。

下单确认卡出来后,不说「确认」,说「改成 2 台,地址换成公司」。看它是新建一张卡还是改原来那张,状态和金额跟不跟着变。

4. 对比两个模型。

设置里再配一个模型,不勾「设为使用中」,然后切过去问同一个问题。界面长得可能不一样,轨迹里的工具调用次数也可能不一样。同一套 Harness、不同的大脑,差异就露出来了。

5. 看它记不记得你。

先告诉它「我叫张三,在做电商运营,以后报价按含税算」,聊两句。点左栏「+ 新会话」,问「我是谁、我做什么的」。登录状态下它应该记得;不登录只在新会话里,它可能只记得这一段。

6. 把摘要阈值调小。

设置 → 摘要配置,把「什么时候开始压缩」调到一个很小的值,然后聊十几轮。看长对话里它怎么保住关键信息、丢掉废话。这个玩法比较费 token,但能直观看到上下文管理在做什么。

7. 让它自己解释自己。

问「你刚才为什么先查订单再退款,而不是直接取消」。它会把护栏返回的原因复述一遍。报错不是终点,是它下一步决策的输入。


八、我想听你的意见

这个 Demo 目前验证的是「业务流程能不能由 Agent 推理驱动」。答案是能,但边界还很粗。接下来往哪走,我更想听用过的人怎么说。

如果你已经点过一遍,麻烦回我几个问题,留言、评论、Issue 都行,一句话也可以:

  1. 哪个场景让你觉得「这个思路对」?哪个让你觉得「还不如写死」?
    界面由模型生成,在什么业务上真省事,在什么业务上是负担?
  2. 四个技术点里,你最想深入哪一个?
    A2UI、A2A、MCP,或者 Harness 这一圈。票数最高的那个,我可以做更细的可交互演示。
  3. 你希望我优先加哪种「好玩」?
    • 多 Agent 协作完成一件复杂事(订餐 + 报销 + 通知,三个 Agent 接力)
    • 让 Agent 自己改自己的工作流(在界面上编辑策略,立刻生效)
    • 「它为什么这么干」可视化(点轨迹里某一步,展开判断依据)
    • 记忆可视化(一个面板看它到底记住了我什么)
    • 语音全链路(说完直接出界面)
  4. 有没有你踩过的 Agent 落地问题,想让我做成可复现的案例?
    比如工具选错、循环调用、金额算错、权限越界、多轮串味。我倾向于把真实故障做成可交互的对照实验,而不是只写文章。
  5. 你更想看哪种内容?
    协议原理拆解、业务流程设计、评测与可观测、成本与延迟优化。
  6. 如果让你加一个业务场景,你会加什么?
    报销、请假、售后、预约、审批,越具体越好,我可以直接把你的场景做进去。

留言我都会看,票数高的先做。做得不好也直接说,比夸奖有用。

最后一句:你出的题,我可以直接做进这个 Demo。比如你说「我们公司报销要走三级审批」,我就把它做成一个能跑的场景,然后把背后用到的 Agent 知识(怎么规划流程、怎么卡权限、怎么留痕)顺着这个场景讲清楚。比空讲概念好懂得多。


如果只记一句话:

Agent = 模型 + Harness。 模型只是大脑;让它真能干活的,是外面那一圈------上下文怎么给、工具怎么设计、循环怎么控、边界在哪、失败怎么兜、怎么证明它变好了。

地址再放一次:http://117.72.72.215:5210

打开、配个模型、说一句话。剩下的,交给它自己办:画界面、找帮手、查数据、守规矩。