跳转至

Acquired

这张图从经过批准的公司主题出发,在线搜集带来源的资料,形成三幕播客脚本,再生成主持人与嘉宾的 Audio Director 清单。

合约路径使用固定材料。真实路径需要可用的 Codex 凭据与网络,并会访问研究 Rule 允许的站点。

Acquired 研究与制作图

完整图定义

下面是实际运行的完整配置,共有六路并行研究、一道证据门、三幕并行写作和两路音频清单输出。你也可以下载原始 YAML

version: 1
project:
  name: acquired-podcast
  default_targets: [audio_manifest_host, audio_manifest_guest]
slots:
  topic_prompt: { kind: file, path: fixtures/topic.md }
  gate_request: { kind: file, path: fixtures/gate-request.json }
  topic: { kind: file, path: topic.md }
  origins: { kind: file, path: research/origins.json }
  business_model: { kind: file, path: research/business-model.json }
  product: { kind: file, path: research/product.json }
  competition: { kind: file, path: research/competition.json }
  leadership: { kind: file, path: research/leadership.json }
  inflections: { kind: file, path: research/inflections.json }
  research_gate: { kind: file, path: research-gate.json }
  supplement: { kind: file, path: research/supplement.json }
  meeting: { kind: file, path: production-meeting.md }
  act_one: { kind: file, path: script/act-one.md }
  act_two: { kind: file, path: script/act-two.md }
  act_three: { kind: file, path: script/act-three.md }
  draft_script: { kind: file, path: episode-draft.md }
  script: { kind: file, path: episode.md }
  qa: { kind: file, path: fixtures/qa.bootstrap.json }
  qa_result: { kind: file, path: qa.json }
  audio_manifest_host: { kind: file, path: audio-director-host.json }
  audio_manifest_guest: { kind: file, path: audio-director-guest.json }
rules:
  - id: choose_topic
    in: [topic_prompt]
    out: [topic]
    run: { using: human, command: "Approve the exact company topic file" }
  - id: research_origins
    in: [topic]
    out: [origins]
    run:
      using: codex
      model: gpt-5.6-luna
      reasoning_effort: none
      command: >-
        Research the origins and founding history of the company named in
        in/topic using live web sources. Write only out/origins as JSON with
        dimension, summary, claims, and sources. sources must contain at least
        two objects with url, title, retrieved_at, and evidence fields. Every
        material claim must be supported by those sources; do not use prior
        knowledge as unrecorded evidence.
  - id: research_business_model
    in: [topic]
    out: [business_model]
    run:
      using: codex
      model: gpt-5.6-luna
      reasoning_effort: none
      command: >-
        Research how the company in in/topic makes money, allocates capital,
        and reports its operating segments using live web sources. Write only
        out/business_model as JSON with dimension, summary, claims, and sources.
        sources must contain at least two objects with url, title, retrieved_at,
        and evidence fields. Bind every claim to recorded evidence.
  - id: research_product
    in: [topic]
    out: [product]
    run:
      using: codex
      model: gpt-5.6-luna
      reasoning_effort: none
      command: >-
        Research the company's principal products, services, and customer value
        from live web sources. Write only out/product as JSON with dimension,
        summary, claims, and sources. sources must contain at least two objects
        with url, title, retrieved_at, and evidence fields. Do not emit an
        unsupported product list.
  - id: research_competition
    in: [topic]
    out: [competition]
    run:
      using: codex
      model: gpt-5.6-luna
      reasoning_effort: none
      command: >-
        Research the company's competitive landscape and defensibility using
        live web sources. Write only out/competition as JSON with dimension,
        summary, claims, and sources. sources must contain at least two objects
        with url, title, retrieved_at, and evidence fields. Separate sourced
        facts from analysis.
  - id: research_leadership
    in: [topic]
    out: [leadership]
    run:
      using: codex
      model: gpt-5.6-luna
      reasoning_effort: none
      command: >-
        Research the leadership history, governance, and succession of the
        company in in/topic using live web sources. Write only out/leadership as
        JSON with dimension, summary, claims, and sources. sources must contain
        at least two objects with url, title, retrieved_at, and evidence fields.
  - id: research_inflections
    in: [topic]
    out: [inflections]
    run:
      using: codex
      model: gpt-5.6-luna
      reasoning_effort: none
      command: >-
        Research the decisive strategic inflection points in the company's
        history using live web sources. Write only out/inflections as JSON with
        dimension, summary, claims, and sources. sources must contain at least
        two objects with url, title, retrieved_at, and evidence fields, and each
        inflection must include a date and sourced consequence.
  - id: supplement_competition
    in: [topic, competition, gate_request]
    out: [supplement]
    run:
      using: codex
      model: gpt-5.6-luna
      reasoning_effort: none
      command: >-
        Read in/gate_request and in/competition, perform the requested targeted
        follow-up research about in/topic, and write only out/supplement as JSON
        with status equal to complete, dimension, request, findings, and sources.
        sources must contain at least two source objects with URLs and evidence.
  - id: review_research
    in: [origins, business_model, product, competition, leadership, inflections, supplement, gate_request]
    out: [research_gate]
    run: >-
      for artifact in in/origins in/business_model in/product in/competition in/leadership in/inflections;
      do jq -e '(.sources | length) >= 2 and (.summary | length) > 0' "$artifact" >/dev/null || exit 1; done;
      jq -e '.status == "complete" and (.sources | length) >= 2' in/supplement >/dev/null;
      jq -n --arg request "$(jq -r '.request' in/gate_request)"
      '{decision:"accept",round:2,request:$request}' > out/research_gate
  - id: production_meeting
    in: [topic, origins, business_model, product, competition, leadership, inflections, supplement, research_gate]
    out: [meeting]
    when: "test \"$(jq -r '.decision' research_gate)\" = accept"
    permissions: { network: none, secrets: [] }
    run:
      using: codex
      model: gpt-5.6-luna
      reasoning_effort: none
      command: >-
        Synthesize the accepted source-backed research in the declared inputs.
        Write only out/meeting as a three-act production brief with the central
        thesis, narrative tension, evidence assigned to each act, and source
        URLs beside the claims they support.
  - id: write_act_one
    in: [meeting, origins, business_model]
    out: [act_one]
    permissions: { network: none, secrets: [] }
    run:
      using: codex
      model: gpt-5.6-luna
      reasoning_effort: none
      command: >-
        Write only out/act_one from the supplied production brief, origins, and
        business-model evidence. Preserve source URLs inline and distinguish
        narration from host dialogue.
  - id: write_act_two
    in: [meeting, product, competition]
    out: [act_two]
    permissions: { network: none, secrets: [] }
    run:
      using: codex
      model: gpt-5.6-luna
      reasoning_effort: none
      command: >-
        Write only out/act_two from the supplied production brief, product, and
        competition evidence. Preserve source URLs inline and build the central
        strategic tension without inventing facts.
  - id: write_act_three
    in: [meeting, leadership, inflections]
    out: [act_three]
    permissions: { network: none, secrets: [] }
    run:
      using: codex
      model: gpt-5.6-luna
      reasoning_effort: none
      command: >-
        Write only out/act_three from the supplied production brief, leadership,
        and inflection evidence. Preserve source URLs inline and close the thesis
        with sourced consequences.
  - id: assemble_episode
    in: [act_one, act_two, act_three]
    out: [draft_script]
    run: "cat in/act_one in/act_two in/act_three > out/draft_script"
  - id: revise_episode
    in: [draft_script, qa]
    out: [script]
    when: "decision=$(jq -r '.decision' qa); test \"$decision\" = pending || test \"$decision\" = revise"
    run: "{ cat in/draft_script; printf '\nRevision applied: source transitions verified.\n'; } > out/script"
  - id: qa_episode
    in: [script, qa]
    out: [qa_result]
    run: >-
      if grep -Eq 'https?://' in/script && grep -q 'Revision applied' in/script;
      then printf '{"decision":"accept","round":2}\n';
      else printf '{"decision":"revise","round":1}\n'; fi > out/qa_result
  - id: direct_host_audio
    in: [script, qa_result]
    out: [audio_manifest_host]
    when: "test \"$(jq -r '.decision' qa_result)\" = accept"
    run: >-
      jq -n --arg script "$(cksum in/script | cut -d' ' -f1)"
      '{schema:"audio-director/v1",voice:"host",script_checksum:$script,segments:["act_one","act_two","act_three"]}'
      > out/audio_manifest_host
  - id: direct_guest_audio
    in: [script, qa_result]
    out: [audio_manifest_guest]
    when: "test \"$(jq -r '.decision' qa_result)\" = accept"
    run: >-
      jq -n --arg script "$(cksum in/script | cut -d' ' -f1)"
      '{schema:"audio-director/v1",voice:"guest",script_checksum:$script,segments:["act_one","act_two","act_three"]}'
      > out/audio_manifest_guest

Slot 怎样分工

Slot 阶段 在图里的作用
topic_prompt 输入 等待用户确认的公司主题。
gate_request 输入 证据门要求补充调查的具体问题。
topic 定界 Human Rule 批准后的研究主题 Revision。
origins 研究 创立与早期历史的来源化资料。
business_model 研究 收入、资本分配与经营分部资料。
product 研究 产品、服务与客户价值资料。
competition 研究 竞争格局与防御能力资料。
leadership 研究 管理层、治理与继任资料。
inflections 研究 带日期和后果的战略转折资料。
supplement 研究 针对 gate_request 完成的补充竞争研究。
research_gate 验收 检查六份研究与补充材料后写出的决定。
meeting 制作 经过证据门后形成的三幕制作提纲。
act_one 写作 起源与商业模式对应的第一幕。
act_two 写作 产品与竞争对应的第二幕。
act_three 写作 领导层与转折对应的第三幕。
draft_script 汇合 三幕直接合并的初稿。
script 修订 加入来源衔接修订后的节目稿。
qa 输入 QA 的初始决定,允许 pending 或 revise 触发修订。
qa_result 验收 对来源 URL 与修订标记的机器检查结果。
audio_manifest_host 输出 主持人声音使用的 Audio Director 清单。
audio_manifest_guest 输出 嘉宾声音使用的 Audio Director 清单。

Rule 逐条看

Rule 读取 写入 作用
choose_topic topic_prompt topic 让用户批准确切主题文件。
research_origins topic origins 搜集创立历史,每份结果至少保留两个来源。
research_business_model topic business_model 调查收入、资本分配和经营分部。
research_product topic product 调查主要产品、服务和客户价值。
research_competition topic competition 调查竞争格局,分开来源事实与分析。
research_leadership topic leadership 调查管理层历史、治理与继任。
research_inflections topic inflections 调查战略转折,每项保留日期与来源化后果。
supplement_competition topic、competition、gate_request supplement 根据门请求完成一次有边界的补充调查。
review_research 六份研究、supplement、gate_request research_gate jq 检查来源数量、摘要与补充状态。
production_meeting topic、全部研究、research_gate meeting 门接受后,把资料组织成三幕制作提纲。
write_act_one meeting、origins、business_model act_one 写第一幕并保留来源 URL。
write_act_two meeting、product、competition act_two 写第二幕,建立中心战略冲突。
write_act_three meeting、leadership、inflections act_three 写第三幕,用来源化后果收束主题。
assemble_episode act_one、act_two、act_three draft_script 按顺序合并三幕。
revise_episode draft_script、qa script QA 为 pending 或 revise 时补上来源衔接修订。
qa_episode script、qa qa_result 检查脚本含来源 URL 和修订标记。
direct_host_audio script、qa_result audio_manifest_host QA 接受后生成主持人清单。
direct_guest_audio script、qa_result audio_manifest_guest QA 接受后生成嘉宾清单。

六条主题研究 Rule 只共享 topic,所以可以并行。三幕写作只共享 meeting,也可以并行。两份音频清单读取同一个已接受脚本,同样没有彼此依赖。

运行并观察

先跑合约路径。

scripts/test-real-world-cases.sh acquired-podcast contract

它保留相同的 Slot、Rule、门和 JSON schema,用固定输入检查调度与恢复。

准备好网络和 Codex 凭据后再跑真实研究。

scripts/test-real-world-cases.sh acquired-podcast live

运行后先查看六份 research/*.json。每份材料至少应有两个带 URL、标题、获取时间和 evidence 的来源。随后检查 research-gate.json、三幕脚本和两份 audio director 清单。