1. 整体边界
2. Harness
编辑器 AI 面板
│ 创建并持有
▼
AgentLoop:控制一次任务的执行
├─ AgentSkill:提示词、上下文、工具与执行器
├─ AgentTransport:模型请求与流式事件接口
└─ Events / Snapshot:界面反馈与回退挂钩
│
▼
Electron IPC → ai-provider
├─ Genspark 模型网关
├─ 直接连接其他模型供应商
└─ Codex app-server
没有依托于langchain, langgraph进行agent构建,而是用typeScript直接实现。
三个接口把循环、模型和文档操作分开
| 接口 | 职责 | 替换时的影响 |
|---|---|---|
AgentLoop | 历史、循环、停止条件、错误恢复 | 决定任务如何运行 |
AgentTransport | 发起模型请求,回传文本和工具调用 | 可以更换模型供应商 |
AgentSkill | 提示词、工具定义、上下文、工具执行 | 可以接入不同文档类型 |
AgentLoop 是真正的运行控制器
它实现的是典型的“模型—工具—结果反馈”循环:
用户指令+文档上下文 → 请求模型 → 得到工具调用 → 本地依次执行工具 → 将结果追加到历史 → 再次请求模型 → 无工具调用时结束AgentSkill是把一组能力接入AgentLoop的代码接口。它同时包含给模型看的说明,以及本地实际执行操作的函数。composeSkills()则把多个能力对象包装成一个对象,让同一个 AgentLoop 使用。
3. 这个产品实际有几个 agent?
基于当前核查版本,在非测试代码中找到了7 个new AgentLoop(...)创建位置:
| 创建位置 | 用途 |
|---|---|
| Docs AI 面板 | Word 文档主 agent |
| Sheets 编辑器 | Excel 主 agent |
| Slides AI 面板 | PPT 主 agent |
| PDF AI 面板 | PDF 主 agent |
| Markdown AI 面板 | Markdown 主 agent |
| HTML AI 面板 | HTML 主 agent |
Slidesslide-qc.ts | 幻灯片质检与修复 agent |
可以归纳为:6 类编辑器主 agent,加上 1 类按需创建的 Slides 质检 agent。
但不是产品运行时固定只有 7 个实例:
- 每个被创建的编辑面板可以持有自己的 AgentLoop。
- 打开多个文档,可能产生多个同类型实例。
- Slides 质检流程按需创建临时循环。
- 未打开、未触发的功能不一定存在对应运行实例。
不代表产品启动时固定创建7个agent。
打开或新建文档
→ 渲染文档对应的 AiPanel
→ loopRef 为空
→ 创建 AgentLoop
→ 等待用户指令或自动运行的预设任务
→ 调用 loop.run(...)
Slides 的质检循环生命周期更短。进入需要模型参与的质检修复分支时,代码直接创建并运行。
所以主编辑循环是随编辑面板存活的运行时,质检循环是为一次质检修复任务创建的临时运行时。
重新打开文档时,代码会查找文档关联的聊天,再加载历史,将这些信息恢复到新实例。
Brief Writer & Page Writer
把“拟定页面设计方案”和“按方案写出完整 HTML”拆成两次专门的模型请求,避免把大段
所以它把:
主模型生成一个包含超长 HTML 参数的工具调用改成:
主模型发出简短的 plan_page 调用 → 工具代码再发普通文本生成请求 → 接收流式 JSON / HTMLJSON或者整页HTML放进工具调用参数里。