跳转至

04:Workflow:当步骤提前知道

不是所有事情都需要 Agent。很多任务的步骤是提前知道的,这时用固定流程更好。

from __future__ import annotations

from pathlib import Path

from agent_patterns_lab.patterns.workflow_chaining import PromptStep, run_prompt_chain
from agent_patterns_lab.runtime import MockLLM, Tracer


def main() -> None:
    tracer = Tracer()
    model = MockLLM(
        [
            "Preferences: tea, local food, easy walking. Constraint: relaxed one-day trip.",
            "Draft: Morning West Lake, afternoon Tea Museum, evening Hefang Street.",
            "Final itinerary: West Lake -> China National Tea Museum -> Hefang Street.",
        ]
    )

    steps = [
        PromptStep(name="extract_preferences", user_prompt="Extract travel preferences from: {input}"),
        PromptStep(name="draft_itinerary", user_prompt="Draft an itinerary from these preferences:\n{input}"),
        PromptStep(name="format_final", user_prompt="Format this itinerary as a concise final answer:\n{input}"),
    ]

    out = run_prompt_chain(
        model,
        initial_input="Plan a relaxed one-day Hangzhou trip. I like tea, local food, and easy walking.",
        steps=steps,
        tracer=tracer,
    )
    print(out)

    trace_path = tracer.export_jsonl(Path(".traces") / "11_prompt_chaining.jsonl")
    print(f"[trace] {trace_path}")


if __name__ == "__main__":
    main()

运行:

uv run python examples/11_prompt_chaining.py

这次代码怎么变了

我们把任务拆成三个固定步骤:

提取偏好 -> 生成草案 -> 格式化最终答案

这就是 Prompt Chaining:每一步的输出,作为下一步的输入。

Workflow 解决什么

如果旅游助手的流程很明确,Workflow 比 Agent 循环更好:

  • 更容易测试
  • 更容易定位哪一步坏了
  • 成本和延迟更可控
  • 不会让模型乱选下一步

它还是不够

固定流程的问题是:它假设步骤已经知道。

但真实旅游规划经常不是这样:

  • 查到下午下雨,下一步要不要改室内?
  • 景点关门,要不要重新找地点?
  • 用户预算不够,要不要换路线?

当“下一步依赖工具返回”时,固定流程就不够了。看 05:Agent Loop