跳转到主内容
版本发布

42md 知识编排(4):让编排更灵活、更可靠

自己写编排写顺手后,会先后撞上三件事,每件都有一招:同一条流程想换个花样(比如换套排版),用参数留个旋钮;一步产出好几个文件,指定主产物,中间产物也能都留下;还有尤其该养成的一招——跑前先校验、预检,把工具名写错、引用写错这类问题提前抓出来,别跑到一半才炸、白花了钱。三招都配可直接抄的 YAML。

7 分钟
产品发布知识编排recipe编排写法校验

上一篇你从零搭了一条编排,能跑了。再用一阵,你会先后撞上三件事。一件比一件实用,第三件尤其该养成习惯。每件都只要一招,下面挨个讲清,YAML 都能直接抄。

一、同一条流程,想换个花样

先说个常见的。你写了一条「笔记 → 精排 PDF」的流程,平时用学术排版自己看;哪天要发给同事,想换成杂志风。

图省事,你可能会复制一份、把样式名一改,存成第二条。可两条几乎一样的编排,以后改哪条都得想半天。

更省事的做法:把那个「会变的地方」留成一个旋钮。在编排里它叫参数——声明一次,运行时随手拨。

name: notes2pdf-my
params:
  - name: style              # 声明一个旋钮,名叫 style
    description: 排版样式
    default: academic        # 不拨就用这个:学术排版
steps:
  - id: build
    run: tools.md2pdf
    with: ["{{ input }}", "--style", "{{ params.style }}"]   # 把旋钮的值填进来
output: "{{ steps.build.output }}"

{{ params.style }} 就是「把 style 这个旋钮当前的值填到这里」。运行时用 --set 拨一下,不拨就走默认:

42md recipe run notes2pdf-my 笔记.md                  # 默认学术排版
42md recipe run notes2pdf-my 笔记.md --set style=magazine   # 这次要杂志风

一条编排,两种用法,不用再维护两份。参数能放的不止样式——翻译的目标语言、摘要的风格,凡是「这条流程偶尔要换个值」的地方,都能留成旋钮。想让某个旋钮必须拨(不拨就报错、不许用默认),给它标 required: true

小提示:--style 后面填什么,去 42md tools md2pdf --style list 里挑——序号、中文名、英文短标识都认。这套「按名取用配置」另开一篇细讲。

二、一步产出好几个文件,该往下传哪个

大多数步骤只产出一个文件,引擎自己就认得,不用你操心。但偶尔一步会同时吐出好几个——这时你得告诉它:把哪个往下传。用 produces 指定主产物的类型(按扩展名):

  - id: extract
    run: acquire
    with: ["{{ input }}"]
    produces: md           # 这步主产物是 .md,往下就传它

还有个相关的小开关。默认情况下,编排只把最后一步的产物交到你手上,中间的就丢了。可有些流程,中间产物你也想留——比如「提取英文原文 → 翻译成中文 → 提炼要点摘要」,原文、译文、摘要三份你都想存着对照。加一句就行:

deliver: all              # 整条流程的产物都留给你,整目录交付

内置的 pdf2digest 就是这么做的:跑完一篇论文,英文原文、中文译文、中文摘要三份都在交付目录里,方便你逐句比对。

三、跑之前先自检,别白花钱

这一招,尤其该记住。

编排是一步接一步往下跑的。假设你手滑,把 tools.translate 写成了 tools.translater(多打一个字母)。会怎样?提取照跑、翻译照跑——钱也照花了——一直跑到那个根本不存在的工具名,才整个炸掉。前面的时间和额度,白搭。

42md 让你在开跑前就把这类错抓出来。两个命令:

42md recipe validate ~/.42md/recipes/notes2pdf-my.yaml   # 只检查这份编排写得对不对
42md recipe run notes2pdf-my 笔记.md --dry-run            # 预演一遍:只打印计划,不真跑、不扣费

它们会在你花一分钱之前,替你抓出这几类常见错:

它能帮你抓出的错例子
工具名写错tools.translater 不存在,当场报错,提示你用 recipe verbs 看有哪些合法动作
参数没声明用了 {{ params.style }},却忘了在 params 里声明 style
步骤引用错引用了一个不存在的步骤,或引用了排在自己后面、还没跑的步骤

--dry-run 还会把整条计划摆给你看——分几步、每步调什么、哪步花钱、预估多少。看准了,去掉 --dry-run 再真跑。

先 validate / dry-run,再 run——这个顺序养成习惯,自定义编排基本不会在半路翻车,更不会写错一个字母就白烧一笔额度。

顺带一提:编排不一定非得先存进 ~/.42md/recipes/。手头有一份现成的 YAML 想直接试,42md recipe run -f 文件.yaml 笔记.md 就能跑,从管道喂进去也行(--recipe -)。这给下一篇「让 AI 生成编排、直接拿来跑」埋个引子。

知识编排系列


活水 AI 实验室(42ailab) — 探索智能边界的 AI 创新实验室,以认知科学为基石,推动 AI 与人类智能的深度融合,真正理解并增强智能 —— 碳基的,也是硅基的。

活水MD(42md) — 活水 AI 实验室出品的高性能 Markdown 处理工具。AI 时代的 Markdown,一站式处理:42+ 种格式一行转 Markdown,还支持翻译、摘要、导出等十余种知识工具,并支持知识编译、流程编排、本地引擎与 Agent 调用。