Files
Mike-Solar c486c853ff docs: C ABI migration campaign plans, handoffs and roadmap
Complete documentation set for the facade migration (B1-R6) and beyond:
facade-migration-roadmap, handoffs v3-v6, R5 guides, R6 cleanup plan,
R7 pure-ABI plan, long-term plans (riir/ai-agent/gtest/ui-redesign),
updated Chinese README draft, UI design mockups, and the Google Test +
struct-typedef rules in CONTRIBUTING.
2026-07-26 22:42:44 +08:00

7.4 KiB
Raw Permalink Blame History

AI Agent 设计文档(RIIR 拆分后长期规划)

本文是 Oak 引入 AI 能力的长期设计,执行前提是 RIIR 绞杀者拆分完成 (见 riir.md)。彼时 liboakengine.so 已不存在,取而代之的是 一组以纯 C ABI 为缝的小动态库。本文面向没有当前对话记忆的执行者,自包含。

一句话:把多模态 LLM 当成引擎 C ABI 的第三个一等消费者 (继 oak-cli、oak-render-worker 之后),用 MCP 暴露策展过的工具面, 用渲染管线把帧喂回给多模态模型,形成"编辑 → 看图 → 再编辑"的视觉闭环。


1. 定位与前提

1.1 前提(未满足不动工)

  • RIIR 拆分战役完成:引擎已拆为 §2.1 的小库;各库导出仅 C 符号; oakengine_* facade 壳稳定且全量测试绿。
  • Google Test 已是唯一测试框架;gtest_discover_tests 已接入。
  • 本文不改动 RIIR 既定的模块划分,只在模块化树上新增叶子

1.2 设计铁律(继承自迁移/拆分战役)

  1. AI Agent 只经 C ABI 访问引擎,一行 engine C++ 都不碰;不污染符号边界。
  2. Agent 的一切编辑动作必须可撤销undoable 原语),UI 默认"确认后执行"。
  3. 不为 AI 发明新的引擎内部机制;工具面是现有 facade/小库的组合。
  4. 引擎各模块不得新增 Qt 依赖、不得新增 QObject 信号/moc 类

2. 总体架构

2.1 在模块化树上的位置

app / oak-cli / oak-render-worker / oak-agent / oak-mcp-server
                     │
            liboakengine-facade(壳:capi + 事件 + init
                     │
   ┌────────┬────────┼─────────┬──────────┐
 oaktask  oakrender  oakplugin  oakaudio  oakserialize
   │        │         │          │          │
   └────────┴────┬───┴──────────┴──────────┘
                 │
        oakmodel(节点图 + 项目模型 + 时间线模型)
                 │
        ┌────────┼─────────┐
     oakcodec  liboakcore  oakbackendGPU 插件)
        │
   ffmpeg_bridge

新增三个叶子组件(与 oak-cli、oak-render-worker 平级,都是纯消费者):

  • oak-mcp-server:把策展过的工具面经 MCP 暴露给任何 LLM 客户端。
  • oak-agent:无头 Agent 运行时(对话编排 + 视觉闭环),供脚本/CI/本地使用。
  • editor AI 面板:app 内的聊天/操作日志/确认界面,与 oak-agent 复用同一工具面。

AI 功能不进入 oakmodel、oakrender 等引擎模块,引擎核心对 AI 无感知。

2.2 视觉闭环(本设计的核心)

多模态 LLM ──► oak-agent ──► facade/小库执行编辑 ──► 渲染取帧 ──► PNG ──► 回喂 LLM
   ▲                                                              │
   └──────────────── 看图判断(效果/切点/内容定位) ◄───────────────┘
  • 验证式:每次编辑后取一帧,LLM 判断"效果对不对"。
  • 内容感知式:沿时间线批量取缩略图拼 contact sheetLLM 扫图定位 "人何时进画面""哪里该切"),Agent 据此下刀——自动粗剪/打点的雏形。
  • 连续回放:经 playback 族起范围播放,按间隔采样帧。

3. 工具面(策展,非全量 facade)

不暴露全部 ~200+ facade 函数,而是策展约 25 个高层工具,每个是 facade/小库 的组合。oak-mcp-server 内部就是一个薄模块,链接 facade 壳与相关小库。

工具 落到哪个库 说明
create_project / open_project / save_project facade 壳 + oakmodel 工程生命周期
probe_media / import_footage / get_media_info oakcodec + facade 壳 媒体探测与导入
add_track / add_clip / trim_clip / ripple / add_transition / add_marker oakmodel(经 facade 时间线族) 时间线编辑
add_effect(effect_id) / set_param / set_keyframe oakmodel(经 facade node 族) 节点与关键帧
apply_lut / set_color_transform oakmodel + facade color 族 调色
get_frame(time) / get_thumbnails(range,n) / get_audio_levels oakrender + oakbackend 视觉闭环的取帧口
export_render(params) oaktask + oakcodec 导出

取帧→PNG 通路(视觉闭环关键路径): get_frame 经 oakrender 的预览请求得到 RGBA 帧(POD:宽/高/字节流), 再经 oakcodec 的 OIIO 编码器出 PNGbase64 后作为图片消息发给 LLM。 缩略图用同一路径降采样,多张拼 contact sheet。

4. 协议:MCPModel Context Protocol

工具协议定为 MCP,理由:

  • render-worker 已在用 NDJSON over stdin/stdout 的 IPC——MCP 本质是该模式 的标准化,实现路径一致。
  • 暴露成 oak-mcp-server 后,外部 LLM 客户端(Claude Desktop、各类 agent 框架)可直接连接复用,无需自研对话编排。
  • oak-agent 与 editor AI 面板都连同一个 MCP server一份工具面,多处消费

5. 模型层

抽象 LLMProvider 接口(输入:消息 + 图片;输出:文本 + tool_calls),两个后端:

  • 云端Claude / GPT 多模态(效果优先)。
  • 本地llama.cpp 跑 Qwen-VL / LLaVA 类多模态模型(隐私、离线优先)。

API key 只走环境变量,绝不写入 config / 工程文件。无 key 时优雅降级为 "仅本地工具"(仍可用 MCP,但不做对话编排)。

6. 安全

  • 可撤销:所有编辑走 undoable 原语;AI 面板提供"撤销整段会话"。
  • 确认模式:默认每次 Agent 动作需用户确认才 apply;可切换自动模式。
  • 沙箱会话:Agent 默认在临时工程中操作,用户接受后才落盘到真实工程。
  • 资源:取帧/扫描限帧率与分辨率上限,防止批量取帧拖垮渲染进程。

7. 可测试(与项目风格一致)

  1. Mock LLM server:录制/回放 tool_call 序列与固定回复,让 Agent loop 在 CI 无 key 无网络跑通(Google Test)。
  2. 黄金帧校验:复用 render-worker 端到端 harness(真实渲染 ≥2 帧 + 像素非全黑 + 一致性断言),验证"Agent 的编辑确实改变了画面"。
  3. 会话回放tool_call + 帧哈希落盘日志,可回放复现、可作测试夹具。

8. 里程碑(RIIR 完成后启动)

  1. M1 工具面oak-mcp-serverfacade → MCP~25 工具)+ 取帧→PNG 通路。
  2. M2 无头闭环Mock LLM + oak-agent,跑通"LLM→工具→取帧→回喂", CI 可测(无网络)。
  3. M3 AI 面板:editor 内聊天 + 操作日志 + 确认模式 + 撤销会话。
  4. M4 本地模型与内容感知llama.cpp provider、时间线扫描打点、自动粗剪。

9. 风险与边界(明确不做)

  • 把 LLM/推理放进 oakmodel 或任何引擎模块(引擎对 AI 无感知)。
  • 为 AI 绕过 C ABI 直接调 engine C++(边界不污染)。
  • 把 API key 落盘到工程/config。
  • 让取帧回路阻塞 GUI 线程(取帧走渲染/后台路径,UI marshal 回主线程)。
  • 第三方大模型客户端的接入细节(OAuth、计费、配额)超出本文范围,按需另立文档。