跳转至

让 dsh 通过自进化画出概念图

在进入案例之前,让我们先介绍一下自进化这个概念。Agent 执行任务时会和环境交互,并从用户或者环境中获得反馈。它根据反馈分析问题,并修改自身,以达到更好的效果。这个过程就称之为自进化。

自进化通常包括下面几个步骤:

Agent 根据反馈分析问题并修改自身

图 13.1 Agent 根据反馈分析问题并修改自身

这里的“自身”不限于模型参数。Prompt、Skill、工具以及 Harness 的结构都会影响 Agent 如何完成任务,也都可以成为自进化的对象。

对于一类任务,Agent 可以在试错中发现任务说明里没有写出的偏好和规律,再把经过验证的经验存进 Skill。新任务读取这份 Skill 时,便能沿用已有经验。这便是自进化的一种应用。本章将通过进化概念图绘画 Skill 的实验,讲解自进化的整个过程。

一个自进化实验

设想你是一名设计师,正在为甲方绘制概念图。甲方想要一张宠物图,不过说不清应该画哪种宠物、使用什么毛色,以及画面画哪些细节,只能在看到设计稿以后判断好还是不好。于是,设计师先给出一个方案,甲方再根据画面反馈自己的偏好。几轮往返以后,甲方原本模糊的想法才会逐渐清楚。

我们让 dsh 扮演这位设计师。为了观察 dsh 能否从反馈中找到这些偏好,本章把这段协作过程改造成一个自进化实验。dsh 负责绘制宠物概念图,评测器则负责模拟甲方给概念图评分。在本实验中,我们采用 CLIP 模型作为评测器,用图片和偏好的相关程度作为评分的依据。

实验开始时,dsh 只知道要画一只宠物。初始 Skill 也只规定画布尺寸、文件格式和基本绘画方式,没有指定物种、毛色或构图。评测器则预先设置了三项没有公开的偏好:宠物种类、毛色和细节(在这个例子中,评测器青睐细节丰富的白色狗)。评测器会对一张图片给出这三项的分数,这些分数反映了图片与三项偏好的符合程度。dsh 能看到这三项的分数,却不知道具体的偏好。

每一轮,dsh 都会读取当前 Skill,按照已经记录的策略画图,同时对 Skill 中尚未确定的物种、毛色或画面细节进行尝试。图片完成后,dsh 将它交给评测器评分,再根据分数判断这次尝试是否值得写入 Skill。经过多轮尝试,Skill 会逐渐记录得到评分支持的经验,dsh 也会逐步摸清评测器的偏好。下面这张图展示了整个实验流程:

概念图绘制、评分与 Skill 更新流程

图 13.2 概念图绘制、评分与 Skill 更新流程

以宠物毛色为例。dsh 读取当前 Skill,里面没有规定毛色,于是先尝试棕色,画出一只棕色狗并交给评测器评分。由于毛色分很低,dsh 在下一轮改画了一只白色狗。确认毛色分明显上升后,dsh 把“犬类优先采用白色毛色基调”写进 Skill。之后的轮次会读取更新后的 Skill,画狗时便会优先使用白色毛色。

由于评测器对于 dsh 是一个黑箱,所以 Skill 中新增的规则必须来自实际尝试和分数变化。对于真实项目,可以把 CLIP 换成甲方、设计负责人或评审小组。

自进化运行与分析

从一份简单的 Skill 开始

实验开始时,我们只给 dsh 一份简单的 Skill。它保留 SVG 的基本绘制要求,绘画策略暂时为空,等待 dsh 在运行中更新。

# 用 SVG 画宠物

- 画布为 512×512,`viewBox` 为 `0 0 512 512`- 使用 SVG 图形画一只宠物。
- 不得嵌入或引用外部图片。

## 绘画策略

暂无。

同时,我们用任务提示约定自进化流程、循环轮数和评测规则。下面截取任务提示中最关键的一段。

提示词内容:

读取并使用当前绘画 Skill,画出一张 512×512 的 SVG 宠物概念图。渲染并查看图片后,只调用一次固定评测。评测返回宠物种类、毛色和画面细节三项得分。结合历史图片与分数,每轮优先只改一项;创下新高并且能说清提升来自哪里时,立即把可复用规则写入 Skill。达到本次轮数上限后停止。

接下来我们把任务提示词交给 dsh。它会自动继续整个自进化的流程,包括连续绘图、查看结果、取得评分并修改 Skill。

自进化结果

我们设定实验共运行十轮,每轮留下一张图片及其评分,因此最终得到十张图片和十组评分。由于评测器偏好细节丰富的白色狗,dsh 会根据反馈逐步向这个方向调整。

下表记录了一次自进化实验的主要改动,以及宠物种类、毛色和画面细节三项得分。

轮次 本轮主要变化 种类匹配分 毛色匹配分 画面细节分 总分
0 橘色虎斑猫 0.32 0.21 19.20 19.73
1 改画橘色狗 13.70 0.20 19.27 33.16
2 改为棕色狗 16.46 1.61 18.69 36.75
3 改为白色狗 26.89 21.45 20.23 68.57
4 用描边补足白色轮廓 27.92 25.11 19.39 72.41
5 增加浅蓝背景 21.67 22.58 21.46 65.71
6 撤回背景并提纯白色 26.54 26.15 19.34 72.03
7 增加地面、骨头和红球 28.33 26.94 18.94 74.21
8 清理零碎线段 28.50 26.97 19.34 74.81
9 增强脸部对比 28.22 27.49 18.56 74.27

下图把总分单独画成折线,方便观察每次改动之后的整体变化。

概念图实验从橘猫起步,逐步找到白色狗并继续调整画面细节

图 13.3 概念图实验从橘猫起步,逐步找到白色狗并继续调整画面细节

从表格和折线图可以看到,总分虽然中间有所回落,但整体呈上升趋势。这说明 dsh 能够根据评分不断调整 Skill,逐步形成更适合这项任务的绘画策略,并画出符合评测器偏好的图片,完成了一次有效的自进化。整个探索过程大致可以分为三个阶段:先确定宠物种类,再尝试不同毛色,最后调整画面细节。

物种

第0轮画出的是一只橘色虎斑猫。虽然画面细节不错,宠物种类和毛色却几乎没有得分。dsh 随后改画狗,物种分和总分随之上升,由此判断犬类更接近评测器的偏好,并把“宠物种类不确定时,优先选择犬类”写进 Skill。

第2轮又把毛色改成棕色。总分虽然继续上升,但物种分也发生了变化,毛色分依然很低,无法证明棕色更合适。因此,这次尝试没有写入 Skill。

毛色

第3轮把棕色狗改成白色狗,总分从36.75升到68.57,出现了整个实验中最大的一次跃升。这一轮主要改变了毛色,毛色分也明显提高,因此 dsh 把“犬类优先采用白色毛色基调”写进 Skill。

下图记录了这次更新。dsh 渲染并查看 SVG、取得评分后,随即编辑了 Skill。

第3轮的毛色分明显上升后,dsh 立即修改绘画 Skill

图 13.4 第3轮的毛色分明显上升后,dsh 立即修改绘画 Skill

画面细节

找到白色狗以后,dsh 开始调整轮廓、背景和画面元素。这一阶段的反馈更加复杂:灰色描边降低了细节分;浅蓝背景虽然提高了细节分,却让其他两项得分下降;简单道具和画面清理则带来了小幅提升。

经过几轮尝试,dsh 最终把简单道具和保持画面简洁写进 Skill,没有保留浅蓝背景和增强脸部对比等效果不佳的改动。

自进化最终得到的 Skill

运行结束后,最初空白的策略区留下四条规则。

## 绘画策略

- 宠物种类不确定时,优先选择犬类。
- 犬类优先采用白色毛色基调。
- 犬类场景可搭配浅色地面与简单道具(如骨头、红球),
  强化宠物主题。
- 画面保持简洁,避免零碎细小线段;重要特征用较大、
  清晰的形状表达。

最终,Skill 保留了犬类、白色毛发、简单道具和保持画面简洁四条策略。浅蓝背景和增强脸部对比没有带来稳定提升,因此没有保留。整个实验中,模型参数始终未变,画面变化来自 dsh 对 Skill 的不断修改。下面选取四个关键轮次,直观展示这些修改如何影响绘画结果。

第0轮的橘猫 第0轮|橘猫|19.73 分

第1轮的橘色狗 第1轮|橘色狗|33.16 分

第3轮的白色狗 第3轮|白色狗|68.57 分

第8轮的白色狗与简单道具 第8轮|白色狗与简单道具|74.81 分

图 13.5 同一次任务中的四张宠物概念图

四张图展示了 Skill 逐步变化的过程。画面中的宠物从猫变为狗,毛色由橘色和棕色逐步调整为白色,后续几轮则继续优化轮廓和画面元素。后期图片已经明显接近评测器的偏好,说明 dsh 通过修改 Skill 完成了一次有效的自进化。

验证进化后的 Skill

在新会话中复用 Skill

前面的 Skill 一直在同一个会话中更新和使用。要确认 Skill 能够脱离原会话复用,还需要排除会话历史的影响。为此,我们新建一个没有前文记录的会话,只把最终的 Skill 放进工作区,再发送下面的提示词。

提示词内容:

读取并使用当前工作区中的 animal-drawing Skill,绘制一张 512×512 的 SVG 宠物概念图并保存为 candidate.svg。只生成这一张图,不调用评测器,不修改 Skill,不参考其他会话或已有图片。完成后检查 SVG 能正常打开,并用中文简短报告文件路径。

第8轮的最高分概念图 第8轮的最高分概念图

新会话复用 Skill 的结果 新会话复用 Skill 的结果

图 13.6 第8轮高分图与新会话复用最终 Skill 画出的概念图

上图右侧的概念图由新会话画出。这个会话没有读过前面的图片和评分,也没有调用评测器,只根据最终的 Skill 画图。这里将它与自进化过程中得分最高的第8轮概念图放在一起比较。

两张概念图虽然不完全相同,但主体和关键元素基本一致。右图仍然画出了白色犬类,并保留了浅色地面、红球和清晰的大轮廓,这些都是评测器偏好的画面特征。这说明新会话能够采用 Skill 中的绘画策略,同时采用新的构图。下一次再画同类概念图时,dsh 可以直接从这些经验出发,不必重新摸索宠物种类和毛色。最终,我们得到了一份可以复用的画图 Skill。