Skip to content

管线步骤

Pipeline step 是 adapter 的执行积木。YAML adapter 通过一串步骤完成请求、解析、筛选、映射、浏览器操作、本地命令和断言。

字段名不要翻译:fetchselectmapexec 等都是实际 schema 名称。中文解释只说明怎么用。

基本形状

yaml
pipeline:
  - fetch:
      url: "https://api.example.com/items"
  - select: data.items
  - map:
      title: "${{ item.title }}"
      url: "${{ item.url }}"
  - limit: 20

每一步接收上一步输出,返回下一步输入。

API steps

Step用途
fetch请求 JSON API。
fetch_text请求文本或 HTML。
parse_rss解析 RSS/Atom。
html_to_md把 HTML 转成 Markdown。
websocket连接 WebSocket 服务。

fetch 示例:

yaml
- fetch:
    url: "https://api.example.com/search"
    params:
      q: "${{ args.query }}"
      limit: "${{ args.limit }}"

Transform steps

Step用途
select用 JSONPath 或路径取子树。
map把 item 映射成稳定输出。
filter过滤列表。
sort排序。
limit限制数量。
set设置临时字段。

map 示例:

yaml
- map:
    title: "${{ item.title }}"
    author: "${{ item.by }}"
    url: "${{ item.url }}"

Control steps

Step用途
if条件分支。
each遍历列表,并可并发执行子 pipeline。
parallel并行执行多个分支。
retry对易失败步骤重试。
rate_limit控制请求节奏。
assert明确校验输出。
append追加结果。

并发抓详情页:

yaml
- each:
    parallel: 10
    pipeline:
      - fetch:
          url: "https://api.example.com/item/${{ item.id }}"

Browser steps

Step用途
navigate打开页面。
wait等待 selector、时间或页面状态。
click点击元素。
type输入文本。
press发送按键。
scroll滚动页面。
snapshot读取页面结构或可交互元素。
extract从 DOM 抽取内容。
intercept捕获网络请求。
screenshot截图。

浏览器步骤适合没有稳定 API 的页面:

yaml
- navigate:
    url: "https://example.com"
    waitUntil: networkidle
- wait: "#search"
- type:
    selector: "#search"
    text: "${{ args.query }}"
- press: Enter
- snapshot: { interactive: false }

Desktop / subprocess steps

Step用途
exec运行本地命令。
write_temp写临时文件,常用于脚本型工具。
download下载文件。

示例:

yaml
- exec:
    command: "ffprobe"
    args: ["-v", "quiet", "-print_format", "json", "${{ args.file }}"]
    parse: json

变量

常见变量:

变量含义
${{ args.name }}命令参数。
${{ item.field }}当前 item 的字段。
${{ env.NAME }}环境变量。
${{ step.output }}前面步骤的输出。

变量是模板语法,不要在中文文档里改写。

断言

assert 用来防止“看似成功”的坏输出。

yaml
- assert:
    path: data.items
    minLength: 1
    message: "Expected at least one item"

如果页面或 API 变了,断言能把问题变成结构化错误,方便智能体修复。

设计建议

  • 能用 web-api 就不要先上浏览器。
  • 能用 YAML 就不要先写 TypeScript。
  • 每一步只做一件事。
  • 失败时让错误指向具体 step。
  • 输出字段保持稳定,字段名不要随意改。

完整字段仍以 schema 和 adapter lint 为准:

bash
npm run lint:schema-v2
npm run lint:adapters

基于 Apache-2.0 许可证发布