Editor agent refactored #76
Reference in New Issue
Block a user
Delete Branch "editor-agent-refactored"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
重构了editor agent.
使得它能进行多轮工具调用, 把工具调用的结果嵌入到上下文里。
对于上下文的图片, 使用哈希后的id用来引用,不暴露细节信息to llm。
当前实现, 状态直接维护在json doc里, 需要对整个doc加锁,任务目前只能串行。
把SSE改成一个简单请求( 因为生图工具耗时需要二次确认, 不需要再实时展示给用户进度)。
增加确认/取消生图操作。
把tool的参数和错误情况做了反馈。
TODO: 工具调用的规范/prompt还可以改进。
改用external job来做素材生成, 针对来自editor agent 的生成会把生成资产的引用加入到结果json里,
客户端轮询 external job 确定生成状态, 发现结束了或者失败了就 重新get 会话,后端重新提供会话的时候把 结果插入回会话历史里,用来让 ai 引用 以及显示
EditorAgentMessage.idtype fromStringtousize97d340ad4ceditor_agent.rs37b4329feeeditor_agentto clarify tool call behavior and user interaction d7d888a20dResolvedAssetVideoeeaa0f4766onEditorAgentGenerationResultwithonEditorAgentCanvasRefreshRequestedand update related logic 74361af6bd[P1] 旧 OSS 会话文档会在升级后无法读取。[editor_agent.rs (line 9)](/tmp/genarrative-pr76-review/server-rs/crates/shared-contracts/src/editor_agent.rs:9) 仍将文档版本固定为 1,但 [editor_agent.rs (line 168)](/tmp/genarrative-pr76-review/server-rs/crates/shared-contracts/src/editor_agent.rs:168) 已不兼容地修改持久化消息结构,包括 id: String -> usize、删除旧字段并新增必填形状。读取路径在 [utils.rs (line 354)](/tmp/genarrative-pr76-review/server-rs/crates/api-server/src/editor_agent/utils.rs:354) 直接按新结构反序列化,没有版本迁移或兼容解析。已有会话将报 message document JSON invalid,无法打开或继续。建议升级文档版本并实现 v1→v2 转换,补旧版 fixture 回归测试。
[P1] 大部分确认接口没有在执行生成前持久化 executing,无法兑现防重复执行契约。[api.rs (line 989)](/tmp/genarrative-pr76-review/server-rs/crates/api-server/src/editor_agent/api.rs:989) 明确依赖持久化状态阻止重复确认,但视频、音频和多数图片生成分支直接调用 provider,直到完成后才由 [api.rs (line 1560)](/tmp/genarrative-pr76-review/server-rs/crates/api-server/src/editor_agent/api.rs:1560) 写成 completed;只有编辑图片分支在 [api.rs (line 1348)](/tmp/genarrative-pr76-review/server-rs/crates/api-server/src/editor_agent/api.rs:1348) 提前写入 executing。如果请求在扣费或任务提交后断线/进程重启,消息仍是 pending_confirmation,用户重试会再次扣费和生成。应在所有工具的外部副作用前统一持久化 executing,并明确崩溃后的恢复策略。
id的反序列化逻辑 6edb826324改用external job来做素材生成, 针对来自editor agent 的生成会把生成资产的引用加入到结果json里,
客户端轮询 external job 确定生成状态, 发现结束了或者失败了就 重新get 会话,后端重新提供会话的时候把 结果插入回会话历史里,用来让 ai 引用 以及显示
发送消息期间切换会话,JSON 响应会落到当前会话面板里。
PR 把原来的 SSE 改成普通 JSON POST 后,useEditorAgentConversation.ts 在 sendMessage 返回后直接 applyDeltaMessages(response.deltaMessages),没有再确认 activeConversationIdRef.current === conversationId。applyDeltaMessages 又是直接 append 当前 messages。所以用户在会话 A 发送消息、等待期间切到会话 B,A 的 assistant/tool card 会插进 B 的 UI,并可能触发错误的画布刷新。base 旧 SSE 路径有 eventConversationId !== activeConversationIdRef.current 的过滤,这个是 PR 引入的回归。