第 5 章 · 第 23 讲 · 16:16
两个最容易出现「演示惊艳、上线翻车」的领域:
核心论点:演示里跑通一次,和每天几万次都稳定跑通,中间隔着的是产品化,不是技术。
| 主题 | 关键判断 | 可落地动作 |
|---|---|---|
| 文生图 vs 垫图 | 涉及角色 → 必须垫图 | 按场景选模式的决策表 |
| Prompt 翻译 | 用户语言 ≠ 生图模型语言 | LLM 翻译层是必要架构 |
| 角色一致性 | 设计问题,不是参数问题 | 角色参考表(Character Sheet) |
| 降级链 | 用户不关心哪个模型挂了 | 优先级 + 探活 + 垫图降级 |
| 产品化清单 | 调通 API = 10% | 体验 / 质量 / 工程 / 安全四维 |
| Agent 真实循环 | 教科书 3 步 ≠ 生产 N 步 | 六类隐藏逻辑 |
| 卡死模式 | 用户只会说「慢/蠢」 | 四种典型模式的识别 |
| 防呆 | 三层网,不是一道墙 | 硬限制 / 检测 / 降级 |
| 进度感 | ≠ 进度条 | 三原则 + 五种手段 |
| 文生图(Text-to-Image) | 垫图(Image-to-Image) | |
|---|---|---|
| 输入 | 只有文字 | 参考图 + 文字 |
| 机制 | 模型凭想象力生成 | 模型以参考图为锚生成 |
| 角色外貌 | 每次靠运气 | 每次都长一样 |
| 场景 | 推荐模式 | 原因 |
|---|---|---|
| 纯背景 / 环境图 | 文生图 | 不涉及角色 |
| 食物、物品特写 | 文生图 | 无需人物一致性约束 |
| 角色出镜 | 垫图 | 必须保证还是同一个角色 |
| 角色换装 | 垫图 | 脸不变衣服变,必须有脸部参考 |
| 多场景系列图 | 垫图 | 一组图里角色外貌需一致 |
| 创意发散 / 概念探索 | 文生图 | 不需要锁定形象,越多变越好 |
在有固定形象的产品里,绝大多数出图都走垫图——用户不能接受「每次角色长得不一样」。
用户说「Alice 在阳台发呆」,但生图模型需要的是一长段精确的视觉描述。中间有一个翻译步骤:用 LLM 把人话翻译成生图语言。
翻译前:Alice 在阳台发呆
翻译后:一位年轻女性站在洒满阳光的阳台上,靠着栏杆,望着远方,表情有些出神。齐肩深色头发,白衬衫,小星星项链。柔和午后光线,阳台有盆栽,背景虚化城市天际线。插画风格,暖色调,安静氛围,半身到全身构图。
这不是锦上添花,这是必要架构——每一次出图背后都有一个 LLM 在做翻译,把一句话扩展成几百 token 的详细视觉描述。
用同一句文字描述连续生成四次:
结论:纯靠文字无法锁定一个角色的视觉身份。
同样的角色在四个场景(书房、厨房、阳台、办公)中:脸型始终一致、发型颜色稳定、身材比例不变,只有场景和动作在变。
一张标准化的角色参考图,每次生图都作为参考一起发给模型。它锚定三样东西:
| 锚定项 | 说明 |
|---|---|
| 脸型 & 体型 | 锁定五官比例、身材轮廓、发型长度 |
| 表情风格 | 多种表情变体,让模型理解这个角色的表情范围 |
| 穿搭风格 | 标志性服装,换装时只换衣服不换脸 |
角色一致性是产品设计问题,调参数解决不了。 解法是参考图锚定策略,不是把 Prompt 写得更长。
用户说「帮我画一张图」,背后可能是主力模型超时、备选限流、第三备选也出错。用户不关心哪个模型挂了,他只关心图能不能出来。
模型 A 超时 15 秒 → 超时熔断 → 降级
切换到模型 B → 接管,用户无感知
模型 B 限流错误 → 继续降级
切换到模型 C → 第三备选顶上
模型 C 成功出图 → 用户拿到图片,全程感知不到切换
全部失败 → 友好降级:「抱歉服务繁忙,已加入队列稍后通知您」。
用户最差也只是多等几秒或收到一句友好提示,永远不会撞上冷冰冰的错误页面。
调通生图 API 只花了一天;从那一天到用户真正能用,还做了三个月的产品化工作。
| 项 | 说明 |
|---|---|
| 生成进度反馈 | 「正在画…」状态动画 + 预计时间,不让用户面对空白屏幕 |
| 失败重试机制 | 一键重试,不用重新描述需求 |
| 结果预览与选择 | 一次出多张供选择,支持放大预览 |
| 历史记录 | 回看、重用、对比 |
这张清单不只适用于生图。 任何 AI 功能从 Demo 走向 Production,都需要在体验、质量、工程、安全四个维度做到位。
教科书版 ReAct:Think(思考)→ Act(调用工具)→ Observe(拿到结果)→ 循环。
真实生产版:每一轮循环里,教科书省略的部分恰恰是让 Agent 稳定、安全、可用的关键:
| 隐藏步骤 | 解决什么 |
|---|---|
| 上下文压缩 | 对话越来越长,不裁剪就会超出窗口 |
| 权限校验 | 这个工具用户有没有权限调?参数合不合法? |
| 并发调度 | 多个工具能同时跑吗?怎么协调? |
| 错误处理 | 工具超时了怎么办?返回格式错了怎么办? |
| 结果回写 | 写回上下文、更新状态、触发通知 |
| 安全审计 | 记录每一步,出问题可追溯 |
真实的 Agent 每转一圈,要做的事比你想的多 5 倍。
实验室里的死循环很好发现;生产环境的卡死更隐蔽——用户不会说「你的 Agent 死循环了」,他只会说「你的 AI 怎么这么慢」或者「它是不是傻了」。
| 模式 | 表现 | 用户看到 | 典型场景 |
|---|---|---|---|
| 同参数死循环 | 连续 3 次用完全相同参数调同一工具 | 「它转了好久都没反应」 | 反复读同一文件、搜同一关键词 |
| 收益递减 | 跑 50 轮但几乎没产出有价值内容 | 「等了两分钟,结果就给我这?」 | 只做整理格式、反复确认等边缘操作 |
| 文本复读 | 开始重复自己说过的话 | 「它在说车轱辘话」 | 长对话后期、上下文接近上限、任务模糊 |
| 工具雪崩 | 一个工具挂了,疯狂重试拖垮整条链路 | 「它好像卡住了」「等好久突然说失败」 | 外部 API 限流、连接池耗尽、第三方宕机 |
关键提醒:第三种模式里模型并没有卡住,它已经迷路了。识别这些模式,是做防护的前提。
| 层 | 策略 | 具体手段 |
|---|---|---|
| 硬限制(无条件刹车) | 最后兜底 | 迭代上限(如 50 轮)· 总超时(如 3 分钟)· 单工具次数上限(如同一接口最多 5 次) |
| 检测类(发现异常预警) | 及时发现 | 同参数检测 · 同工具名检测 · 收益递减检测(10 轮新内容 < 50 字判定空转) |
| 降级类(优雅续命) | 先不直接停 | 注入纠错提示「你已经重复了 3 次,请换一种方法」· 禁用故障工具 · 强制总结当前进度 |
发现异常 → 降级类尝试自救
自救失败 → 检测类上报
最终 → 硬限制兜底
大多数情况下,Agent 应该被温柔地纠正,粗暴杀死是下策。 对用户来说,带着半成品回来比空手而归好得多。
后台跑 30 秒,用户屏幕上应该看到什么?同样是等 30 秒,有没有进度感,体验天差地别。
| 手段 | 示例 |
|---|---|
| 状态文案 | 「正在搜索相关信息…」→「找到 5 条结果,正在分析…」 |
| 工具展示 | 展示正在调用的工具名与参数 |
| 流式输出 | 文字逐 token 显示,让等待变成阅读 |
| 阶段标记 | 「第 1 步 / 共 3 步」——无法精确预估时,分阶段也比不分好 |
| 中间产物 | 先给粗略结果再精化(先大纲,后细节) |
用户能忍受等待,但不能忍受不知道在等什么。进度感 ≠ 进度条——核心是让用户觉得「AI 在认真干活」。
角色出镜、换装、系列图一律垫图;纯背景和创意发散才用文生图。这条分界线能解决八成的生图选型争论。
用户说人话,模型要视觉描述。这一层不是优化项,是必要架构——缺了它,用户永远觉得「出图质量不稳定」。
做一张标准化的角色参考表,把脸型、体型、表情范围、标志性穿搭都定下来。这比调一百次提示词都管用。
不要一发现异常就杀死 Agent。先注入纠错提示,再禁故障工具,最后强制总结进度——带着半成品回来,远好过空手而归。
展示「第 2 步 / 共 5 步」之前,先确认你的链路真的有五个可辨识阶段。虚构的进度被识破,代价远大于老实转圈。
Q:垫图能保证角色百分百一致吗?
不能保证百分百,但能把脸型、发型、体型稳定下来。它解决的是「视觉身份」,不是像素级复刻。
Q:降级到不支持垫图的模型怎么办?
退化为纯文生图,明确告知质量会下降。能出图优先于出对图,但不要假装没降级。
Q:Agent 卡死时该直接终止吗?
下策。先让降级类尝试自救(纠偏、换工具、总结进度),硬限制只作最后兜底。
Q:为什么用户不直接报告死循环?
因为用户看不到日志。他只会说「慢」或「蠢」——所以要靠检测类策略主动识别,不能等反馈。
Q:流式输出能替代进度条吗?
在文字生成场景可以,它本身就是最好的进度条。但工具调用阶段仍需状态文案与阶段标记。
AI 产品的分水岭,从来不在演示那一刻,而在它第几万次运行的时候还能不能稳住。
来源:xueai.miyang.cn(小山学堂 · 洛小山《学 AI 产品,从入门到精通》)
本页文字与音频为基于小山学堂原课程的二次演绎版本,仅供学习交流使用。