---
title: "经历写下去，写成什么？"
description: "写成事件、教训还是技能，决定以后能复用什么；读结果要检查基线和反馈是否可靠。"
---

## 这一页为什么在这里

第三站的第二个决策点：经历写下去，写成什么？同一个春天出现了三种写法：事件（小镇）、教训（Reflexion）、技能代码（Voyager）。学生先为“写代码的 agent”和“Minecraft 里探索的 agent”各押一种，再看真数字，然后读出两条边界：91 对 80 不是消融；教训要有可靠反馈才写得对。右下角出口接第 10 讲。

## 上屏

- 第 1 步：三栏同一画法，每栏：名字｜一条示例（等宽字体）｜谁、哪年。写成事件｜2/13 晚上 答应玛丽亚 2/14 17:00 去 Hobbs 咖啡馆｜Generative Agents 的记忆流，2023-04。写成教训｜上次没处理空列表就返回，测试失败；这次先处理边界情况｜Reflexion，2023-03：失败后让模型写一段反思，存起来，重试时读回。写成技能｜def craftStoneShovel(bot): …｜Voyager，2023-05：学会的做法写成可执行代码，按描述检索，可以组合。底部：做一个写代码的 agent、一个在 Minecraft 里探索的 agent，各押哪一种？
- 第 2 步：两行结果。Reflexion：写函数、跑单元测试（HumanEval），一次通过率 91%；此前报告的 GPT-4 为 80%。Voyager：和改造到 Minecraft 里的 ReAct、Reflexion、AutoGPT 比，拿到的物品种类 3.3 倍，关键科技树最快 15.3 倍。
- 第 3 步：两条读法：① 91 对 80 不是同一次实验里去掉反思的对照：基线是谁跑的？条件一样吗？② 教训要靠可靠的反馈（单元测试、报错）才写得对；写错的教训也会一直被读回来。一行迁移：你的 agent 里，哪些经历该写成事件、教训，还是代码？右下角出口：→ 第 10 讲｜编程智能体把经验写成什么。

## 讲

### 第 1 步 · 教师可说的话

选择经历的写法

Smallville 写下的是事件。2023 年春天，还有两种写法几乎同时出现。Reflexion：失败之后，让模型写一段“下次该怎么做”，存起来，重试时读回。Voyager：在 Minecraft 里，把学会的做法直接写成代码，攒成技能库，用的时候按描述取。做写代码的 agent，你押哪种？做 Minecraft 的呢？

#### 指图与比较

比较事件、教训与可执行技能三栏。

### 第 2 步 · 教师可说的话

看两项报告结果

Reflexion 在写函数的测试集上，一次通过率 91%，此前报告的 GPT-4 是 80%。Voyager 拿到的物品种类是对手的 3.3 倍，关键科技树最快快了 15.3 倍。

#### 指图与比较

读 Reflexion 的 91% 与此前 GPT-4 的 80%，再读 Voyager 的 3.3 倍与 15.3 倍。

### 第 3 步 · 教师可说的话

核对基线与反馈

读这两个数要小心。91 对 80，不是同一次实验里去掉反思的对照：基线是谁跑的、条件一不一样，都要问。还有，教训要有可靠的反馈才写得对：写代码有单元测试，生活里往往没有；写错的教训会一直被读回来。写成什么，决定了以后能复用什么，也决定了会错在哪里。

#### 指图与比较

回看两条读法，把结论迁移到自己的 agent。

### 本页衔接

除了写成什么，还要决定窗口满了由谁选择留下什么。

### 连续教师稿原文

Smallville 写下的是事件。2023 年春天，还有两种写法几乎同时出现。Reflexion：失败之后，让模型写一段“下次该怎么做”，存起来，重试时读回。Voyager：在 Minecraft 里，把学会的做法直接写成代码，攒成技能库，用的时候按描述取。做写代码的 agent，你押哪种？做 Minecraft 的呢？

Reflexion 在写函数的测试集上，一次通过率 91%，此前报告的 GPT-4 是 80%。Voyager 拿到的物品种类是对手的 3.3 倍，关键科技树最快快了 15.3 倍。

读这两个数要小心。91 对 80，不是同一次实验里去掉反思的对照：基线是谁跑的、条件一不一样，都要问。还有，教训要有可靠的反馈才写得对：写代码有单元测试，生活里往往没有；写错的教训会一直被读回来。写成什么，决定了以后能复用什么，也决定了会错在哪里。

### 讲授出口

→ 第 10 讲｜编程智能体把经验写成什么。可以展开：修一个 bug 学到的东西，写成一条笔记（教训）、一个回归测试（可执行的检查），还是一个脚本（技能）？三种写法复用的方式和出错的方式都不同。第 10 讲讲单个编程智能体。

## 完整推理

**三种写法。**

- 事件：记下发生了什么（小镇的记忆流）。最忠实，复用时还要再推理一遍。
- 教训：失败后让模型写一段“下次该怎么做”，存进情景记忆，重试时读回（Reflexion，2023-03 首发）。复用的是经验，不改模型参数，作者称之为“语言强化”。
- 技能：把学会的做法写成可执行代码，存进技能库，按描述检索，还能组合成更复杂的技能（Voyager，2023-05，在 Minecraft 里）。复用的是能直接运行的东西。

**结果。** Reflexion 在 HumanEval（写 Python 函数、用单元测试判对错）上报告一次通过率 91%，而此前报告的 GPT-4 为 80%。这里的 pass@1 是经过自己写测试、反思、修改之后交出一个候选，不是第一次生成就通过。Voyager 与改造到 Minecraft 里的 ReAct、Reflexion、AutoGPT 比较，报告拿到的不同物品种类多 3.3 倍、移动距离长 2.3 倍、解锁关键科技树最快快 15.3 倍；15.3 倍是木工具那一层，比较的是所需的提示迭代次数，不是实际时间。去掉技能库后，Voyager 在后期会停滞。

**两条边界。**

1. 91 对 80 不是同一次实验里去掉反思的对照：80% 是此前报告的 GPT-4 成绩，模型版本、提示、评测细节未必相同。要证明“反思带来提升”，需要同一模型、同一设置下有无反思的对照。
2. 教训要靠可靠的反馈才写得对。写代码有单元测试和报错，反馈清楚；日常任务、开放式问题往往没有，写下的“教训”可能是错的，而错的教训会被反复读回来。

**带走的判断。** 写成什么，决定以后能复用什么，也决定会错在哪里。还有一个读论文的习惯：看到一个倍数或百分比，先问基线是谁跑的、条件一样吗。

**迁移到 PokeAgent。** 局内程序的 state 是这一局的记忆；局外开发时，把对局的教训写成规则还是写成代码，就是这一页的选择。

## 学生可能的回答与误区

- 第 1 步｜写代码的 agent 多数押“教训”，Minecraft 多数押“技能”。追问：教训写错了怎么办？技能代码在新环境里不适用怎么办？
- 第 2 步｜“91% 比 80% 高，说明反思让 GPT-4 提高了 11 个点。”不是同一次实验，不能这样归因。
- 第 2 步｜“15.3 倍是快了 15 倍时间。”比较的是提示迭代次数，而且只指木工具这一层。
- 第 3 步｜“教训越多越好。”没有可靠反馈的教训可能是错的，而且会一直被读回来。

## 教学构造与出处

- 教学构造：三栏里“教训”和“技能”两条示例（空列表的教训、craftStoneShovel）是课件编的，不出自原文；“事件”一条用的是 Q18 的聚会情节。
- [Reflexion · Language Agents with Verbal Reinforcement Learning](https://arxiv.org/abs/2303.11366)：Shinn 等（美国东北大学、MIT、普林斯顿），arXiv 2303.11366；第一版（2023-03-20）没有 HumanEval 结果，91% 出自 2023-05-21 的第二版；读摘要与 HumanEval 结果。作者报告；80% 为此前报告的 GPT-4 成绩，不是同实验对照。
- [Voyager · An Open-Ended Embodied Agent with Large Language Models](https://arxiv.org/abs/2305.16291)：Wang 等（NVIDIA、加州理工等），arXiv 2305.16291v2，第一版 2023-05-25；读摘要与主要结果：3.3 倍物品种类、2.3 倍移动距离、关键科技树最快 15.3 倍（木工具层的提示迭代次数）。作者报告，基线是作者改造到 Minecraft 的版本。

[在课堂中打开](/slides/memory-writing-formats)
