<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>状态机 on niuzj</title>
    <link>https://niuzj.org/tags/%E7%8A%B6%E6%80%81%E6%9C%BA/</link>
    <description>Recent content in 状态机 on niuzj</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Thu, 09 Apr 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://niuzj.org/tags/%E7%8A%B6%E6%80%81%E6%9C%BA/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>给 AI Agent 装一个状态机：用 Playbook 模式编排多步骤工作流</title>
      <link>https://niuzj.org/posts/agent-playbook-state-machine/</link>
      <pubDate>Thu, 09 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://niuzj.org/posts/agent-playbook-state-machine/</guid>
      <description>&lt;p&gt;前段时间在做 AI Agent 的时候遇到一个问题：用户说&amp;quot;帮我做个 UGC 视频&amp;quot;，Agent 需要分三步走——先生成脚本，再生图，最后生视频。每一步都要构建工作流模块、运行、展示结果给用户确认，不满意还得回退重做。&lt;/p&gt;&#xA;&lt;p&gt;一开始想的是把整个流程写进 system prompt 里，让 LLM 自己记住做到哪了。试了一下发现不靠谱——对话一长，LLM 就忘了自己在第几步，有时候跳步，有时候重复。&lt;/p&gt;&#xA;&lt;p&gt;后来研究了一圈主流框架（LangGraph、Burr、CrewAI、PocketFlow），发现大家解决这个问题的思路都一样：&lt;strong&gt;给 Agent 装一个状态机&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h2 id=&#34;什么是状态机&#34;&gt;什么是状态机&lt;/h2&gt;&#xA;&lt;p&gt;状态机就是一张图：节点是&amp;quot;状态&amp;quot;，边是&amp;quot;转移条件&amp;quot;。系统在任意时刻只能处于一个状态，满足某个条件后跳到下一个状态。&lt;/p&gt;&#xA;&lt;p&gt;用 UGC 视频制作举例：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;collect_requirements → build_script → run_script → review_script&#xA;                          ↑                              │&#xA;                          └──── approved=false ───────────┘&#xA;                                                          │ approved=true&#xA;                                                          ↓&#xA;                        build_image → run_image → review_image&#xA;                          ↑                              │&#xA;                          └──── approved=false ───────────┘&#xA;                                                          │ approved=true&#xA;                                                          ↓&#xA;                        build_video → run_video → review_video → done&#xA;                          ↑                              │&#xA;                          └──── approved=false ───────────┘&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;每个 review 节点有两条出边：&lt;code&gt;approved=true&lt;/code&gt; 走下一个模块，&lt;code&gt;approved=false&lt;/code&gt; 回退到 build 重做。这就是状态机的全部——状态 + 转移条件。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
