05Bread Multi-Agent · 第 5 章
总进度 32 / 33把研究、提纲、写作和编辑接起来
写一篇博客时,可以把准备素材、列提纲、写初稿和编辑分开。这样终稿出问题时,更容易找到是哪一步开始偏离要求。
2026-09-28约 50 分钟390 行代码难度 ★★★
如果想获取全套课程资料,请关注微信公众号 「AI面包君」,回复 「课程资料」 即可领取。
1. 长内容分阶段完成
写一篇博客时,可以把准备素材、列提纲、写初稿和编辑分开。这样终稿出问题时,更容易找到是哪一步开始偏离要求。
例如,事实不准确要回查素材,结构不清楚要看提纲,句子重复则可以集中在编辑环节处理。
先看这几个阶段之间怎样交接:
找资料 → 列大纲 → 写初稿 → 改稿 → 终稿
本课用四个角色分别处理。这样做增加了模型调用和交接成本,是否值得,需要通过产物比较。
先给每个角色一项明确任务:
topic ─→ Researcher(找事实)
│
▼
Outliner(拉大纲)
│
▼
Writer(扩写文章)
│
▼
Editor(润色)─→ 终稿
每阶段:
- 输入 是上一阶段的输出
- 输出 是下一阶段的输入
- 每个阶段围绕自己的职责编写提示词
运行后保留各阶段产物,与一次生成的稿件对照。检查事实、结构和表达是否改善,也记录交接中丢失的信息。
<!-- bread-visual:start -->
<!-- bread-visual:end -->图解: 每个阶段有明确输入、输出与落盘产物。 本章 Researcher 由模型生成资料,不等于已联网核实;中间产物可逐段检查。
2. 跑起来
cd ch04_pipeline
python main.py
预期输出
=== 博客主题 ===
Python 的 GIL:它是什么,为什么有人想去掉,2026 年的进展
=== Stage: researcher ===
[researcher 输出 412 字]
- GIL 是 Global Interpreter Lock,CPython 实现中保护内存的互斥锁
- 只允许同一时间一个线程执行 Python 字节码
- 设计于 1992 年,简化了 CPython 的内存管理
- ...
=== Stage: outliner ===
[outliner 输出 380 字]
# Python 的 GIL:从必要之恶到可选项
## 1. GIL 是什么
- 全局解释锁的定义
- 在 CPython 解释器中的作用
...
=== Stage: writer ===
[writer 输出 850 字]
# Python 的 GIL:从必要之恶到可选项
Python 的并发设计里藏着一道 30 年的"禁忌"——全局解释锁(Global Interpreter Lock,简称 GIL)...
=== Stage: editor ===
[editor 输出 820 字]
# 30 年的 GIL:Python 的最大遗憾,正在被 2026 年解决
...
=== 全部完成 ===
完整文章存到 output/final.md
中间产物在 output/。
打开 output/final.md,先通读,再对照各阶段文件,看看最终稿是怎样一步步形成的。
每个阶段都存了一份产物(output/researcher.md / outliner.md / writer.md / editor.md),可以一一对照看演化过程。
3. 对照代码看实现
Stage:每次根据明确输入运行
class Stage:
NAME = "stage"
SYSTEM = ""
def run(self, prev_output: str, topic: str) -> str:
resp = self.client.chat.completions.create(
messages=[
{"role": "system", "content": self.SYSTEM},
{"role": "user", "content": self._build_user_msg(prev_output, topic)},
],
)
return resp.choices[0].message.content
试读到这里 · 后续内容已封存
关注公众号,继续把这章学完
在「AI面包君」发送关键词「学习AI」拿到口令。验证一次,这个浏览器就能继续阅读全部课程。