AI Loop · Agent 化改造

从"CLI 脚本串联"到"真正的 Agent 引擎"

Frank 抓到了 Loop 最本质的问题——它不是 Agent。ai-loop skill 没有自己的 runtime engine,靠 LLM 读 3000 行 SKILL.md 调起 Python CLI 脚本。本方案给出:现状架构、目标 Agent 架构、5 个技术选型对比、推荐的 LangGraph 路径、4 阶段改造路线、团队需要补的能力。

现状
CLI 脚本
LLM 触发一次跑一次
目标
真正的 Agent
持续运行 + 自动决策
推荐
LangGraph
图结构 + checkpointer + HITL
MVP 周期
2 周
Phase 1 可跑通的最小 Agent
01 / 现状

当前架构:LLM + CLI 工具集

不是 Agent,是"prompt-driven 编排"
flowchart TB U[用户/Frank] -->|自然语言| LLM[CodeX / Claude Code
读 3000 行 SKILL.md] LLM -->|解析 prompt| D{driven by 决策树} D -->|调起| S1[ai-drama.py
argparse + urllib] D -->|调起| S2[ai-publish.py] D -->|调起| S3[ai-cut-animation.py] D -->|调起| S4[ai-cut-vidu.py] S1 --> API[北斗后端 API] S2 --> API S3 --> API S4 --> API LLM -.->|写| H[history.jsonl
纯文本追加] style LLM fill:#f4e5d4,stroke:#c97b3f style S1 fill:#f0dfe1,stroke:#b06367 style S2 fill:#f0dfe1,stroke:#b06367 style S3 fill:#f0dfe1,stroke:#b06367 style S4 fill:#f0dfe1,stroke:#b06367 style H fill:#f0eadf,stroke:#7c7a72,stroke-dasharray: 4 4

现状核心问题:9 个"反 Agent"特征

P1 · NO RUNTIME
没有 runtime engine

ai-loop skill 自己没 scripts 目录,ls skills/ai-loop/scripts/ 是空的。运行完全靠 LLM 在 IDE 里"读 prompt 调脚本"。

证据:仓库结构 + install.sh 把 skills 复制到 ~/.codex/skills
P2 · NO AUTONOMY
无自主运行能力

每次都要 Frank 或 LLM 主动说"用 ai-loop 跑一遍"。没有 cron、没有事件触发、没有"自动醒来"机制。

证据:SKILL.md 全篇都是"if 用户说 X then 调 Y"的人工触发
P3 · NO MEMORY
无长期记忆

Loop 状态只在 history.jsonl 里追加,LLM 每次都要从零读起。无法"上次的经验指导这次"。

证据:loop-state.md 只定义 JSON 格式,无向量记忆/经验库
P4 · NO FEEDBACK
无反馈回路

数据回来后 LLM 不主动分析。要 Frank 看到异常再 prompt 问。策略调整延迟以"天"为单位。

证据:6/3 子明会议"只能看 T-2 数据";6/3 抖音"AI Cut 跌到 0 没人主动发现"
P5 · STATIC TOOLS
工具集静态

LLM "知道有什么 skill"靠 SKILL.md 提示,工具集是软描述不是注册表。新增/替换工具要改 SKILL.md。

证据:每次新增 ai-cut-tool 都要人工改 SKILL.md 段落
P6 · NO RECOVERY
无错误恢复

任务失败后 LLM 不主动重试/切换。AI Cut 持续 0 播放时不会自动切人工。

证据:5/25→6/1 AI Cut 跌 0,6/3 才在会议被讨论
P7 · NO PARALLEL
无并行协调

100 账号 × 多变量实验的并行全靠 LLM 脑内串。无法做"100 个剪任务并发跑、自动负载均衡"。

证据:ai-cut-animation SKILL.md 提到"cut_concurrency=3"是硬参数
P8 · NO OBSERV
无可观测性

运行状态只在 history.jsonl 里。无法可视化"哪个任务卡在哪个阶段"、"为什么没出单"。

证据:6/1 复盘会 CEO "看不到过程数据"
P9 · NO POLICY
无策略动态调整

所有"决策"都是 SKILL.md 里硬编码的规则。LLM 不会"根据数据"动态修改 SKILL.md。

证据:loop-state.md 评分公式 45/35/15/5 写死

一句话总结:当前 Loop = "CodeX 在 LLM 提示词里硬塞了 4 阶段流程",没有自主运行能力。要变成真正的 Agent,需要引入 runtime engine + 持久记忆 + 反馈回路 + 动态工具。

02 / 目标

目标架构:自治 Agent 引擎

感知 → 思考 → 决策 → 行动 → 记忆 → 反馈
flowchart TB subgraph TRIG[触发层 · 多源] T1[cron 定时] T2[数据事件
订单/播放/出单] T3[异常告警] T4[Frank 手动] end subgraph AGT[Agent Engine · LangGraph] P[感知 Perception
定时拉取数据] M[记忆 Memory
checkpointer + 向量库] R[推理 Reasoning
Qwen-Max LLM] D[决策 Decision
选工具/选参数/选策略] PL[计划 Planning
动态生成 run plan] EX[执行 Execution
tool calling] end subgraph TOOL[工具集 · 注册表] T01[ai-drama.tool] T02[ai-publish.tool] T03[ai-cut-animation.tool] T04[ai-cut-vidu.tool] T05[广大大.api] T06[Qwen 打标.api] T07[爬虫.tool] T08[数据分析.tool] end subgraph OBS[可观测层] DB[(PostgreSQL
长记忆)] TR[Langfuse
trace + 调试] DA[Dashboard
北极星看板] AL[飞书告警] end subgraph HITL[Human-in-the-Loop] FR[Frank 拍板] AP[CEO 拍板] end T1 --> P T2 --> P T3 --> P T4 --> P P --> M M --> R R --> PL PL --> D D --> EX EX --> T01 EX --> T02 EX --> T03 EX --> T04 EX --> T05 EX --> T06 EX --> T07 EX --> T08 T01 --> API[北斗后端] T02 --> API T03 --> API T04 --> API EX --> TR EX --> DB P --> DA R -.异常时.-> FR D -.关键决策时.-> AP EX --> AL style AGT fill:#f4e5d4,stroke:#c97b3f style TOOL fill:#d9eae3,stroke:#2f6f5e style OBS fill:#f0dfe1,stroke:#b06367 style HITL fill:#f5e6c4,stroke:#c98b1f

目标架构核心能力:8 个

A1 · 持续运行
Cron + 事件双触发

不再需要 LLM 主动触发。cron 每 3 小时跑一次 + 订单/播放异常事件触发即时分析

A2 · 长期记忆
checkpointer + 向量库

PostgreSQL 存结构化状态 + pgvector 存历史经验/出单案例。Agent 跨 run 共享"上次为什么爆"

A3 · 动态规划
LLM 动态生成 run plan

每次 run 不是固定流程。LLM 根据数据反馈决定:今天跑 5 剧还是 10 剧、剪什么手法、发什么平台

A4 · 工具注册表
Tool schema 化

新增工具只需要注册一个 Python function + JSON schema,不需要改 SKILL.md

A5 · 自适应策略
数据驱动的策略调整

发现 AI Cut 持续 0 播放 → 自动切人工;发现某剧爆了 → 自动加码跟发;不依赖 Frank 提醒

A6 · 错误恢复
自动重试 + 降级

AI Cut 失败自动切 Manus → Vidu;连 3 次失败告警 Frank;不是"LLM 看到错才能反应"

A7 · 并发调度
100 账号并行编排

100 个剪任务并发跑、自动负载均衡、自动失败重派。LLM 不用脑内串

A8 · 可观测
trace + 看板 + 告警

Langfuse 记每步决策依据;Dashboard 看实时 run 状态;飞书异常告警

03 / 选型

技术选型对比:5 个候选方案

从最容易到最灵活
维度 A. LangGraph B. CrewAI / AutoGen C. CodeX Agent SDK D. 完全自研 E. 当前方式 (LLM + CLI)
控制力 高(图结构) 中(多 agent 协议) 中(prompt 驱动) 极高
图结构表达 原生支持 通过 agent 协作 不支持 完全自定义 靠 prompt 描述
长期记忆 内置 checkpointer 需自建 完全可控 jsonl 追加
工具注册 Tool decorator Tool wrapper Tool schema 完全自定义 硬编码 SKILL.md
Human-in-the-Loop 原生 interrupt 完全可控 靠 Frank 主动
可观测性 LangSmith / Langfuse 完全可控 jsonl 翻日志
并发执行 Send() API + async 通过 task 异步 顺序 完全可控 LLM 脑内串
LLM 切换 多 provider 多 provider 绑定 CodeX 任意 绑定
迁移成本 中(包装 CLI) 中(重写编排) 高(2-3 人月) —(现状)
维护成本 中-高 极高 高(SKILL.md 维护)
Loop 适配 ★★★★★ ★★★ ★★ ★★★★
团队学习曲线 中(Python 友好) 高(架构师级)
推荐度 ★ 首推 备选 不推荐 长期可演进 被替代

推荐:LangGraph 为骨架(短期)+ 自研 Runtime Engine(长期)。LangGraph 解决 80% 问题(持久记忆/工具/HITL/可观测/并发),剩下 20%(业务特定调度、AB 编排)用自研 wrapper 补。

04 / 架构

推荐架构:LangGraph 骨架 + 自研 Runtime

4 层 + 5 个核心组件

技术栈选型(最终版)

ORCHESTRATION
LangGraph(Python)

图结构 + checkpointer + interrupt + Send() 并发。Loop 的 4 阶段 = 4 个 node + 条件边。

LLM
Qwen-Max(主)+ Qwen-Plus(兜底)+ Qwen-Coder(工具实现)

6/3 短剧全流程会议已经决定生产环境切阿里云,国内稳定 + 不封号。Phase 3 引入推荐算法时加一个 BGE-M3 做 embedding。

MEMORY
PostgreSQL + pgvector

结构化状态(run records、用户画像、账号池)+ 向量记忆(出单案例、剪辑手法 embedding)。LangGraph checkpointer 直接用。

TOOL RUNTIME
FastAPI + LangGraph Tool decorator

每个 CLI 脚本包成 FastAPI service + LangGraph @tool 包装。新增工具 = 新增一个 Python 文件,零改 SKILL.md。

SCHEDULER
Celery + Redis

cron 任务 + 异步任务队列 + 失败重试。100 账号并行剪任务、3 小时爬虫、每日播报。

OBSERVABILITY
Langfuse + 阿里云日志 + 飞书

trace 每次 run 的每步决策依据 + 异常告警 + 数据看板。CEO 群每天 8:30 自动播报。

DEPLOY
Docker + 阿里云 ACK / 火山引擎

短期跑在 Frank 那台 Mac 即可,2 周内迁到云。Q4 跑 100+ 账号并行时必须上云。

LangGraph 图结构设计(4 节点 + 5 条件边)

# ai-loop-agent/graph.py
from langgraph.graph import StateGraph, END
from langgraph.checkpoint.postgres import PostgresSaver
from langgraph.prebuilt import ToolNode

# 状态:每个 run 的完整上下文
class LoopState(TypedDict):
    run_id: str
    feedback: dict           # 最近 7 天的数据
    candidates: list[dict]   # 候选剧
    selected: list[dict]     # 选中的剧
    owned_tasks: list[dict]  # 已领取激活
    cut_outputs: list[dict]  # 剪辑输出
    publish_results: list[dict]  # 发布结果
    errors: list[dict]
    human_decisions: list[dict]  # Frank 拍板记录

# 4 个核心节点
builder = StateGraph(LoopState)
builder.add_node("perceive", perceive_node)         # 拉取数据 + 加载记忆
builder.add_node("plan", plan_node)                # LLM 动态生成 run plan
builder.add_node("act", act_node)                  # 执行 4 阶段(send 并发)
builder.add_node("reflect", reflect_node)         # 反思 + 更新记忆

# 5 条条件边
builder.add_conditional_edges("perceive", lambda s: "need_human" if s["anomaly_score"] > 0.8 else "plan")
builder.add_edge("plan", "act")
builder.add_conditional_edges("act", lambda s: "retry" if s["errors"] else "reflect")
builder.add_conditional_edges("reflect", lambda s: "perceive" if s["should_continue"] else END)

# interrupt:关键决策点暂停,等 Frank 拍板
app = builder.compile(checkpointer=PostgresSaver(...), interrupt_before=["plan"])
05 / 路径

4 阶段改造路径:12 周

每个阶段独立可交付,不卡下个阶段
01 MVP:能自主跑的最小 Agent(2 周) D1 — D14
阶段目标:不再依赖 CodeX,单条命令 python -m ai_loop_agent 启动 Agent,自动跑完一次完整 loop
  • 搭 LangGraph 项目骨架(ai-loop-agent/ 目录)
  • 把 4 个 CLI 脚本包成 LangGraph @tool(不改 Python 逻辑,只加 wrapper)
  • 实现 perceive → plan → act → reflect 4 节点 + 基础条件边
  • 接 PostgreSQL checkpointer(短期可跑 SQLite)
  • interrupt:关键决策点暂停等 Frank
  • 接 Langfuse 看 trace
  • 第一个 run:跑 1 部剧,完整流程走通
02 感知 + 决策(3 周) D15 — D35
阶段目标:Agent 能根据"今天数据"自动决定"今天怎么跑"
  • 加 cron 触发(Celery beat,3 小时一次)
  • 感知层:接 iCenter API / 飞书 / 阿里表格 → 自动入库
  • 决策层:LLM 读数据 → 生成 run plan(不是固定流程)
  • 工具动态选择:tool_router 根据 plan 选工具(AI Cut vs 人工 vs Vidu)
  • 自适应策略:if AI Cut 0播放率 > 30% → 自动切人工
  • 记忆:pgvector 存出单案例,相似剧可"借鉴"
  • 飞书告警:异常 → 飞书机器人
03 并发 + 调度(3 周) D36 — D56
阶段目标:100 账号并行跑,负载均衡,失败自动重派
  • LangGraph Send() 实现 100 任务并发
  • Celery 任务队列 + Redis 状态
  • 失败重试 + 降级策略
  • 负载均衡:根据账号权重分批跑
  • 多渠道并行:FB / TK / YT / Ins 各自独立 run
  • Dashboard 实时看每账号进度
04 自研 Runtime + 多 Agent 协同(4 周) D57 — D84
阶段目标:从"单 Agent 跑"升级为"多 Agent 协同"
  • 拆 4 个专门 Agent:选剧 Agent / 剪辑 Agent / 发布 Agent / 数据 Agent,各自有自己的记忆和工具
  • 加一个 Orchestrator Agent 调度
  • 自研 Runtime Engine 替换 LangGraph 部分(业务特定)
  • Agent 间通信(消息队列)
  • 为下一品类(小游戏)预留 Agent 接口
  • 完整可观测 + A/B 测试框架
06 / 团队

团队需要补什么能力

不是加人,是升级
MUST · 招聘 1
LLM 应用工程师(1 人)

熟悉 LangGraph / LangChain / LlamaIndex。有真实 Agent 上线经验,能搭 runtime + checkpointer + tool。能跟子明对接口。

MUST · 招聘 2
MLOps / 数据工程师(1 人)

搭 PostgreSQL + pgvector + Celery + Redis + Langfuse。负责数据基建 + 监控告警。能跟博恒对接。

NICE · 招聘 3
推荐算法专家(1 人)

匹配算法 v1→v2(ML 模型)。6/3 短剧自动化分发会议已经说要招,宋健推荐。

现有 · 升级
子明(CodeX 强项)

从"写 Python 脚本"升级为"写 LangGraph tool"。学 LangGraph 1 周即可上手。

现有 · 升级
博恒(数据)

从"看板"升级为"实时数据 pipeline + 向量记忆库"。学 pgvector 1 周。

现有 · 升级
丁浩(选剧)

从"Excel 选剧"升级为"提示词工程 + 案例库管理"。学 prompt + embedding。

关键人力瓶颈:招聘 1(LLM 应用工程师)是必须的。子明是 Python 强但 LangGraph 经验 0。Phase 1 启动前必须到岗,否则 2 周 MVP 跑不通。

07 / 拍板

需要 Frank 直接拍板的 4 个事

不要把这 4 个事往后推,否则方案就是空话
D1 · LLM 锁定:Qwen-Max 还是 GPT-4o?

短期推荐 Qwen-Max(国内稳定 + 成本低 + 6/3 已经定调)。如果考虑长期跨语言 / 多模态更强可以混 GPT-4o。

★ 推荐
Qwen-Max 为主

国内稳定 + ¥0.04/千 tokens + 6/3 已经定调

备选
GPT-4o 兜底

多模态更强 + 工具调用更稳,但封号风险 + 贵

D2 · 改造起点:MVP 还是直接全量?

推荐 Phase 1 MVP(2 周跑通 1 部剧),不要一开始就想"全量替换"。Agent 化是渐进过程。

★ 推荐
Phase 1 MVP(2 周)

先跑通 1 部剧完整 Agent 流程,验证可行性

激进
直接全量替换(6 周)

跳过 MVP,直接 100 账号全跑 Agent。风险大

D3 · LangGraph 还是完全自研?

推荐 LangGraph 起步 + 长期演进到自研 Runtime。不要一开始就完全自研(成本高 2-3 人月)。

★ 推荐
LangGraph 起步 + 自研演进

2 周出 MVP,12 周演进出业务特定 Runtime

备选
完全自研

更可控但启动慢 2-3 人月,错过 Q3 窗口

D4 · 招聘 LLM 应用工程师的优先级?

没有这个人 Phase 1 跑不通。Q3 窗口期不等人,建议把招聘提到 P0 级别。

★ 推荐
P0 招聘(2 周内到岗)

50-80K/月,3-5 年 LangGraph 经验,最好有短视频/分发背景

备选
子明转岗 + 外包

短期可行但子明要兼顾 CLI + LangGraph 会崩

08 / 风险

改造过程中的 5 个真风险 + 2 个待澄清

风险

R1 · LangGraph checkpointer 写 PostgreSQL 高并发性能未知。100 账号 × 每 run 100 状态写入 = 1 万次/小时,可能需要 Redis 中间层。Plan B:前期用 SQLite,10 账号规模验证后再上 PG。

R2 · Qwen-Max 工具调用稳定性未验证。6/3 短剧全流程会议有提,但 1 个月实操数据没有。Plan B:准备 Qwen-Plus + Qwen-Coder 兜底,关键路径双重 LLM。

R3 · 子明 + 博恒 改造期产能下降。Phase 1-2 需要他们边跑业务边搭 Agent,必然分散精力。Plan B:招到 LLM 工程师后立即接手 CLI 维护,子明只做 review。

R4 · Frank 拍板频率问题。Agent 大量使用 interrupt 等待 Frank 拍板,可能拖慢执行。Plan B:设置"低风险决策 Agent 自主 + 高风险决策 Frank 拍板"的两层机制。

R5 · 既有 SKILL.md 投资不能浪费。3000+ 行 SKILL.md 写了大量业务知识,Agent 化后这些是 prompt 资产。Plan B:把 SKILL.md 当"业务规则手册",让 LLM 持续引用,不删除。

待澄清

Q1 · 部署在哪里?Frank Mac 跑 / 阿里云 / 火山引擎?影响 Docker + 网络配置。

Q2 · 多 LLM 切换的运维成本?Qwen + GPT-4o 混用,账户 / 计费 / 监控怎么管?需要 Frank 协调 1 个固定的云账号 owner。