让 dsh 通过自进化画出概念图¶
在进入案例之前,让我们先介绍一下自进化这个概念。Agent 执行任务时会和环境交互,并从用户或者环境中获得反馈。它根据反馈分析问题,并修改自身,以达到更好的效果。这个过程就称之为自进化。
自进化通常包括下面几个步骤:
这里的“自身”不限于模型参数。Prompt、Skill、工具以及 Harness 的结构都会影响 Agent 如何完成任务,也都可以成为自进化的对象。
对于一类任务,Agent 可以在试错中发现任务说明里没有写出的偏好和规律,再把经过验证的经验存进 Skill。新任务读取这份 Skill 时,便能沿用已有经验。这便是自进化的一种应用。本章将通过进化概念图绘画 Skill 的实验,讲解自进化的整个过程。
一个自进化实验¶
设想你是一名设计师,正在为甲方绘制概念图。甲方想要一张宠物图,不过说不清应该画哪种宠物、使用什么毛色,以及画面画哪些细节,只能在看到设计稿以后判断好还是不好。于是,设计师先给出一个方案,甲方再根据画面反馈自己的偏好。几轮往返以后,甲方原本模糊的想法才会逐渐清楚。
我们让 dsh 扮演这位设计师。为了观察 dsh 能否从反馈中找到这些偏好,本章把这段协作过程改造成一个自进化实验。dsh 负责绘制宠物概念图,评测器则负责模拟甲方给概念图评分。在本实验中,我们采用 CLIP 模型作为评测器,用图片和偏好的相关程度作为评分的依据。
实验开始时,dsh 只知道要画一只宠物。初始 Skill 也只规定画布尺寸、文件格式和基本绘画方式,没有指定物种、毛色或构图。评测器则预先设置了三项没有公开的偏好:宠物种类、毛色和细节(在这个例子中,评测器青睐细节丰富的白色狗)。评测器会对一张图片给出这三项的分数,这些分数反映了图片与三项偏好的符合程度。dsh 能看到这三项的分数,却不知道具体的偏好。
每一轮,dsh 都会读取当前 Skill,按照已经记录的策略画图,同时对 Skill 中尚未确定的物种、毛色或画面细节进行尝试。图片完成后,dsh 将它交给评测器评分,再根据分数判断这次尝试是否值得写入 Skill。经过多轮尝试,Skill 会逐渐记录得到评分支持的经验,dsh 也会逐步摸清评测器的偏好。下面这张图展示了整个实验流程:
以宠物毛色为例。dsh 读取当前 Skill,里面没有规定毛色,于是先尝试棕色,画出一只棕色狗并交给评测器评分。由于毛色分很低,dsh 在下一轮改画了一只白色狗。确认毛色分明显上升后,dsh 把“犬类优先采用白色毛色基调”写进 Skill。之后的轮次会读取更新后的 Skill,画狗时便会优先使用白色毛色。
由于评测器对于 dsh 是一个黑箱,所以 Skill 中新增的规则必须来自实际尝试和分数变化。对于真实项目,可以把 CLIP 换成甲方、设计负责人或评审小组。
自进化运行与分析¶
从一份简单的 Skill 开始¶
实验开始时,我们只给 dsh 一份简单的 Skill。它保留 SVG 的基本绘制要求,绘画策略暂时为空,等待 dsh 在运行中更新。
同时,我们用任务提示约定自进化流程、循环轮数和评测规则。下面截取任务提示中最关键的一段。
提示词内容:
读取并使用当前绘画 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 |
下图把总分单独画成折线,方便观察每次改动之后的整体变化。

从表格和折线图可以看到,总分虽然中间有所回落,但整体呈上升趋势。这说明 dsh 能够根据评分不断调整 Skill,逐步形成更适合这项任务的绘画策略,并画出符合评测器偏好的图片,完成了一次有效的自进化。整个探索过程大致可以分为三个阶段:先确定宠物种类,再尝试不同毛色,最后调整画面细节。
物种¶
第0轮画出的是一只橘色虎斑猫。虽然画面细节不错,宠物种类和毛色却几乎没有得分。dsh 随后改画狗,物种分和总分随之上升,由此判断犬类更接近评测器的偏好,并把“宠物种类不确定时,优先选择犬类”写进 Skill。
第2轮又把毛色改成棕色。总分虽然继续上升,但物种分也发生了变化,毛色分依然很低,无法证明棕色更合适。因此,这次尝试没有写入 Skill。
毛色¶
第3轮把棕色狗改成白色狗,总分从36.75升到68.57,出现了整个实验中最大的一次跃升。这一轮主要改变了毛色,毛色分也明显提高,因此 dsh 把“犬类优先采用白色毛色基调”写进 Skill。
下图记录了这次更新。dsh 渲染并查看 SVG、取得评分后,随即编辑了 Skill。

画面细节¶
找到白色狗以后,dsh 开始调整轮廓、背景和画面元素。这一阶段的反馈更加复杂:灰色描边降低了细节分;浅蓝背景虽然提高了细节分,却让其他两项得分下降;简单道具和画面清理则带来了小幅提升。
经过几轮尝试,dsh 最终把简单道具和保持画面简洁写进 Skill,没有保留浅蓝背景和增强脸部对比等效果不佳的改动。
自进化最终得到的 Skill¶
运行结束后,最初空白的策略区留下四条规则。
## 绘画策略
- 宠物种类不确定时,优先选择犬类。
- 犬类优先采用白色毛色基调。
- 犬类场景可搭配浅色地面与简单道具(如骨头、红球),
强化宠物主题。
- 画面保持简洁,避免零碎细小线段;重要特征用较大、
清晰的形状表达。
最终,Skill 保留了犬类、白色毛发、简单道具和保持画面简洁四条策略。浅蓝背景和增强脸部对比没有带来稳定提升,因此没有保留。整个实验中,模型参数始终未变,画面变化来自 dsh 对 Skill 的不断修改。下面选取四个关键轮次,直观展示这些修改如何影响绘画结果。
第0轮|橘猫|19.73 分
第1轮|橘色狗|33.16 分
第3轮|白色狗|68.57 分
第8轮|白色狗与简单道具|74.81 分
四张图展示了 Skill 逐步变化的过程。画面中的宠物从猫变为狗,毛色由橘色和棕色逐步调整为白色,后续几轮则继续优化轮廓和画面元素。后期图片已经明显接近评测器的偏好,说明 dsh 通过修改 Skill 完成了一次有效的自进化。
验证进化后的 Skill¶
在新会话中复用 Skill¶
前面的 Skill 一直在同一个会话中更新和使用。要确认 Skill 能够脱离原会话复用,还需要排除会话历史的影响。为此,我们新建一个没有前文记录的会话,只把最终的 Skill 放进工作区,再发送下面的提示词。
提示词内容:
读取并使用当前工作区中的 animal-drawing Skill,绘制一张 512×512 的 SVG 宠物概念图并保存为 candidate.svg。只生成这一张图,不调用评测器,不修改 Skill,不参考其他会话或已有图片。完成后检查 SVG 能正常打开,并用中文简短报告文件路径。
第8轮的最高分概念图
新会话复用 Skill 的结果
上图右侧的概念图由新会话画出。这个会话没有读过前面的图片和评分,也没有调用评测器,只根据最终的 Skill 画图。这里将它与自进化过程中得分最高的第8轮概念图放在一起比较。
两张概念图虽然不完全相同,但主体和关键元素基本一致。右图仍然画出了白色犬类,并保留了浅色地面、红球和清晰的大轮廓,这些都是评测器偏好的画面特征。这说明新会话能够采用 Skill 中的绘画策略,同时采用新的构图。下一次再画同类概念图时,dsh 可以直接从这些经验出发,不必重新摸索宠物种类和毛色。最终,我们得到了一份可以复用的画图 Skill。