跳到主要内容

端到端 — 把五原则装进一条流水线

这一章讲三件事: 为什么「写一个更好的提示」做不出能上线的应用——书里拿五原则给复杂提示做体检,五项全挂; 一条真实的八步博客写作流水线,每一步调用前面某一章的技术; 以及全书的落点:提示工程的终态是把五条原则落成一条可观测的流水线。 对应原书第 10 章全章。

1. 这一章讲什么

前十三章 each 管一层:原则、模型、格式、分块、战术、评测、框架、检索、智能体、图像。这一章把它们装成一台机器:一个博客写作服务——用户给一个主题,系统调研、采访用户、列大纲、分节成文、改写成用户的风格、起标题、配插图,最后包一个能分享给早期用户的界面。这个系统最早发表在 Saxifrage 博客上,本章是它的完整复盘1

主走查就是这条流水线本身。 输入是「一个主题」,输出是「一篇带图、像用户本人写的博客」。我们先看朴素的办法为什么五项全挂,再逐段走管线。

2. 顶层全景:八步,每步都有出处

主题 → ① 调研:搜索引擎取前三条结果,抓网页、切块、逐篇摘要
→ ② 访谈:LLM 基于摘要向用户提 5 个开放问题,收信息增量
→ ③ 大纲:Pydantic 结构化的标题+小节清单
→ ④ 分节写作:每节检索相关网页段落当上下文,逐节成文
→ ⑤ 风格改写:整篇改成用户的文风(最难,必须 GPT-4)
→ ⑥ 标题:多个候选 + 拇指评分 A/B
→ ⑦ 配图:GPT-4 写图像提示 → Stable Diffusion 出图
→ ⑧ UI:Gradio 包界面,share=True 发公网链接收反馈

图说:每一步都是前面某一章的工程化:②③④ 是分工(第 01 章),
③ 是结构化输出(第 04 章),④ 是检索(第 09 章)与记忆(第 10 章),
⑤⑥ 是评测(第 07 章),⑦ 是元提示加图像(第 06、12 章)。

3. 核心原理

3.1 先体检:复杂提示为什么也五项全挂

朴素版是「Write a blog post on {topic}」——结果质量凑合,但没有观点、没有独特经验,短而泛,排不上搜索榜2。那写一个上千词、九节两段的复杂提示呢?书里拿第 01 章的五原则当体检表,逐项打钩3:

原则体检结果
给方向有语气、过渡词、主动语态的指令,但写出来还是像 AI,不像用户本人
定格式「九节、每节两段」会被无视——模型不擅长数数的指令(第 01 章已见:数不对卡片数)
给例子一个没有;哪怕给一个(一次一个例子的提示)都能大幅改善可靠性
评质量典型的盲提示——指令有没有用、是不是在白花标记,都没测过
分工一把梭:调研、结构、写作、风格全压在一次调用里

体检结论:提示层面的修补到顶了,要换的是架构——把一篇文章拆成一条流水线,每步单独可控、可测。

3.2 调研与访谈:信息增量只能从人那里来

第 ① 步调研:用 SerpAPI(一个把 Google 搜索结果做成 API 的服务)取主题的前三条结果,抓回网页正文,切块(第 05 章),逐篇摘要——摘要器带 Pydantic 解析器(第 08 章),保证摘要的结构可解析4

第 ② 步是全书我最喜欢的一个设计:让 LLM 采访用户。模型读完调研摘要,生成 5 个开放式问题,逐个问用户、收回答5。它解决的是第 ① 步解决不了的问题:网上的摘要人人查得到,只有用户脑子里的经验和观点是信息增量——没有这一步,文章注定「正确但平庸」。这也回答了「模型自带知识不够吗」:不够,因为它有的是公共知识,而好文章要的是私有知识。

3.3 大纲与分节写作:每节都是一次独立的小任务

第 ③ 步大纲:主题、访谈问答、调研摘要一起进大纲生成器,产出是一个 Pydantic 对象 BlogOutline(标题 + 小节清单)——结构由 schema 钉死,下游程序直接读字段,不用解析自由文本(第 04 章的军规在这里由解析器自动执行)6

第 ④ 步分节写作,每个小节独立成一次调用,提示里带三样东西7:

  • 检索来的上下文:拿小节标题去向量库查相关网页段落塞进去(第 09 章);检索代码带降级重试——k 从 5 开始,失败就减一重试,减到 0 还不行就放空字符串继续,绝不让一节失败拖死整篇8;
  • 访谈问答:提示里明写必须用上用户的洞见;
  • 一条明令:「绝不可照抄检索到的文档,那是抄袭」——防的正是「上下文给了就照搬」这个真实的失败模式7

还有一个记忆细节:写作循环用的记忆类 OnlyStoreAIMemory 是「摘要+缓冲」混合记忆(第 10 章)的定制子类——只存 AI 的消息,不存用户的9。为什么:塞回提示的历史是为了让后文不重复前文,用户的输入(小节标题之类)存进去只会白白吃窗口预算。

3.4 风格改写:最难的一步

第 ⑤ 步把整篇草稿改写成用户的文风。书里的原话:这是整个写作流程里最难搞对的环节,也是唯一必须动用更大更贵的 GPT-4 的环节——搞不对,用户就得自己手动改10

这一步就是第 07 章主走查的那个实验:四种提示策略、三个案例、各跑十次以上、嵌入距离当尺子,最后胜出的提示是一份七条的写作风格描述。不重复展开——要点是:最难的一步恰恰是经过最完整评测的一步,这不是巧合,是因果:正因为难,才值得为它建评测。

3.5 标题、配图、UI:先收反馈,再谈完美

第 ⑥ 步标题:生成多个候选,用第 07 章的拇指评分 A/B 出来11。第 ⑦ 步配图:让 GPT-4 根据标题写图像提示(元提示,第 06 章),再调 Stability API 出图;书里选的风格是 Corporate Memphis——一种 B2B 公司爱用的扁平插画风,书里连它的来历都讲了:这种风格原本是公司「请得起设计师」的实力信号,于是自带可信感,用 AI 复制它等于白捡这份联想12。第 ⑧ 步界面:Gradio(Hugging Face 收购的开源 UI 库,AUTOMATIC1111 的界面就是它做的)几行代码包出网页;share=True 一开,拿到一个公网链接,直接发给早期用户收反馈13

注意第 ⑧ 步的位置:UI 不是最后的包装,是反馈环的入口——没有它,第 07 章那套评测收不到真实用户的数据。

3.6 全书的落点

回头看这条管线,它没有用到任何一章之外的新技术。它的每个设计决策都能答出「为什么」:

  • 为什么访谈?——因为公共知识生产不出观点(§3.2);
  • 为什么大纲要 Pydantic?——因为下游要程序化地读(第 04 章);
  • 为什么分节写而不是一口气写?——因为一次调用扛不住全局质量,且每节可以单独检索上下文(第 01 章分工 + 第 09 章检索);
  • 为什么记忆只存 AI 消息?——因为窗口是预算,每一格都要花在刀刃上(第 05 章);
  • 为什么风格步必须 GPT-4、必须配实验?——因为它最难,而难的步骤必须可测(第 07 章);
  • 为什么要 UI?——因为评测的终极数据源是真实用户(第 07 章)。

这就是五原则的终态:不是五条提示技巧,而是把「方向、格式、例子、评测、分工」落成一条每一步都可观测、可替换、可定价的流水线。

4. 作者的判断与证据

  • 系统是真实跑过的项目,最早公开在 Saxifrage 博客,代码在书的 GitHub 仓库1;
  • 五原则体检表、八步结构、k 递减重试、OnlyStoreAIMemory,全部有代码或原文;
  • 「风格步最难、唯一需要 GPT-4」是作者在实测后的结论,有第 07 章的实验撑着10;
  • Corporate Memphis 的「实力信号」来历是作者的营销行业解读——两位作者都是营销出身,这是他们的本行判断12;
  • 标题 A/B、配图元提示、Gradio 公网分享,均有代码。

判断(我们的,不是书里的): 这条管线里真正不可自动化的只有一处:第 ② 步用户的回答。其余八步都在把公共能力(搜索、模型、检索)组装起来,唯有访谈在引入只有这个用户才有的东西。这回答了「AI 写作的产品壁垒在哪」:不在提示里,不在模型里,在「从人那里取信息增量」的设计里。 如果错,会错在: 如果模型能力强到能针对主题生成真正新颖的洞见(而不只是重组公共知识),访谈步的价值会下降;但「用户自己的经历与口味」本质上仍然只能来自用户——这条错也只会错一半。

5. 边界与局限

  • 系统处处是 2024 年的快照:SerpAPI、GPT-4、Stability API、Gradio 的具体接口都可能变;
  • 「访谈 5 个问题」「检索 k=5」「前三条搜索结果」都是经验值,不是算出来的最优;
  • 降级重试保证了「不崩」,代价是检索全失败时那一节没有上下文也在写——质量监控要补(第 07 章);
  • 书里没算这条管线的单篇成本;以当时的定价,九个步骤意味着一篇文章十几次模型调用——上线前这本账要自己算;
  • 长文的连贯性靠「摘要记忆 + 每节检索」维持,跨章节的深层呼应(伏笔、递进)不在系统能力内。

6. 可带走的

  1. 提示修不动的时候,换架构:把任务拆成每步可控、可测的流水线;
  2. 复杂提示先过五原则体检——数数类指令(「九节两段」)默认会被无视;
  3. 公共知识产出平庸;信息增量要设计「向人要」的环节;
  4. 大纲、摘要这类中间产物,全部用 schema 钉死结构,别留给自由文本;
  5. 每节独立检索上下文;检索带降级重试,一节失败不拖死全篇;
  6. 记忆里只存对后文有用的部分——窗口预算按格花;
  7. 检索进提示的内容必须配「不许照抄」的明令;
  8. 最难的步骤配最完整的评测;评测不过,不上最贵模型;
  9. 配图可以元提示自动生成,风格词本身就是品牌资产;
  10. UI 早上线:它是反馈环的入口,不是收尾的包装。

7. 原文地图

主题原书章原文位置
项目出处与 SaxifrageCh.10 端到端应用text/64-ch10-chapter-10-building-ai-powered-applications.txt:5(搜「Saxifrage」)
朴素提示的平庸Ch.10 端到端应用text/64-ch10-chapter-10-building-ai-powered-applications.txt:9(搜「Write a blog post」)
五原则体检Ch.10 端到端应用text/64-ch10-chapter-10-building-ai-powered-applications.txt:27(搜「Direction」) · text/64-ch10-chapter-10-building-ai-powered-applications.txt:33(搜「nine sections」) · text/64-ch10-chapter-10-building-ai-powered-applications.txt:41(搜「blind prompting」)
调研:前三条结果Ch.10 端到端应用text/64-ch10-chapter-10-building-ai-powered-applications.txt:173(搜「top three results」)
专家访谈Ch.10 端到端应用text/64-ch10-chapter-10-building-ai-powered-applications.txt:175(搜「InterviewChain」) · text/64-ch10-chapter-10-building-ai-powered-applications.txt:195(搜「input()」)
Pydantic 大纲Ch.10 端到端应用text/64-ch10-chapter-10-building-ai-powered-applications.txt:255(搜「BlogOutline」)
k 递减重试Ch.10 端到端应用text/64-ch10-chapter-10-building-ai-powered-applications.txt:384(搜「k -= 1」)
不许照抄与每节提示Ch.10 端到端应用text/64-ch10-chapter-10-building-ai-powered-applications.txt:401(搜「plagiarism」) · text/64-ch10-chapter-10-building-ai-powered-applications.txt:416(搜「informed coauthor」)
只存 AI 消息的记忆Ch.10 端到端应用text/64-ch10-chapter-10-building-ai-powered-applications.txt:346(搜「OnlyStoreAIMemory」)
风格步最难Ch.10 端到端应用text/64-ch10-chapter-10-building-ai-powered-applications.txt:455(搜「the most difficult」)
标题 A/BCh.10 端到端应用text/64-ch10-chapter-10-building-ai-powered-applications.txt:520(搜「thumbs-up/thumbs-down」)
配图与 Corporate MemphisCh.10 端到端应用text/64-ch10-chapter-10-building-ai-powered-applications.txt:534(搜「Corporate Memphis」) · text/64-ch10-chapter-10-building-ai-powered-applications.txt:659(搜「Create an image prompt」)
Gradio 与公网链接Ch.10 端到端应用text/64-ch10-chapter-10-building-ai-powered-applications.txt:722(搜「gradio」) · text/64-ch10-chapter-10-building-ai-powered-applications.txt:732(搜「share=True」)

Footnotes

  1. 出处:「Ch.10 端到端应用」第 5 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:5,搜「Saxifrage」)。 2

  2. 出处:「Ch.10 端到端应用」第 9 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:9,搜「Write a blog post」)。

  3. 出处:「Ch.10 端到端应用」第 27-41 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:27,搜「Direction」;text/64-ch10-chapter-10-building-ai-powered-applications.txt:33,搜「nine sections」;text/64-ch10-chapter-10-building-ai-powered-applications.txt:41,搜「blind prompting」)。

  4. 出处:「Ch.10 端到端应用」第 173 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:173,搜「top three results」)与第 125 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:125,搜「PydanticOutputParser」)。

  5. 出处:「Ch.10 端到端应用」第 173-177 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:175,搜「InterviewChain」)与第 195 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:195,搜「input()」)。

  6. 出处:「Ch.10 端到端应用」第 255 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:255,搜「BlogOutline」)与第 293 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:293,搜「PydanticOutputParser」)。

  7. 出处:「Ch.10 端到端应用」第 401 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:401,搜「plagiarism」)与第 416 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:416,搜「informed coauthor」)。 2

  8. 出处:「Ch.10 端到端应用」第 370-390 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:384,搜「k -= 1」)。

  9. 出处:「Ch.10 端到端应用」第 346 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:346,搜「OnlyStoreAIMemory」)。

  10. 出处:「Ch.10 端到端应用」第 455 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:455,搜「the most difficult」)。 2

  11. 出处:「Ch.10 端到端应用」第 520 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:520,搜「thumbs-up/thumbs-down」)。

  12. 出处:「Ch.10 端到端应用」第 534 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:534,搜「Corporate Memphis」)与第 659 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:659,搜「Create an image prompt」)。 2

  13. 出处:「Ch.10 端到端应用」第 722 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:722,搜「gradio」)与第 732 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:732,搜「share=True」)。