Files
ai-video-fullstack/implement-stage/task-backends/DELIVERY.md
T

59 lines
7.1 KiB
Markdown
Raw Normal View History

# 交付记录:Speaker / Task Backend MVP
## 行为与验收边界
仅提示词 Pipeline。已实现独立 Speaker 和 Reasoner/OpenCode 任务后端资源,复用 Pipecat 原生 Jobs/BackendLLMWorker;未修改 Pipecat。新任务委派前读取有效配置,接受后冻结任务快照。任务支持进度、明确结果、提问回复及取消。
## 语义选择(完整)
ASK=never。以下是本版全部语义选择;Source标注用户、默认选择或独立审阅发现。
| ID | Under-determined | Chosen | Class | Source |
|----|------------------|--------|-------|--------|
| B-001 | 支持范围 | 仅提示词 Pipeline;可关闭后端,或选择 reasoner/opencode;一个助手最多一个任务后端 | semantic | user |
| B-004 | 策略归属 | 模型、工具白名单、技能和时限配置在可复用后端资源;助手绑定可补充任务指令。提交时冻结完整解析快照 | semantic | default |
| B-005 | 内置执行 | 复用 BackendLLMWorker 与现有 ToolExecutor;每个任务独立模型实例、上下文和变量,应用级拥有者发原生 Jobs | semantic | user |
| B-006 | Reasoner权限 | 仅资源显式绑定的 HTTP/MCP 服务端工具;拒绝 client/system/task 和循环委派;技能不增加权限 | semantic | default |
| B-007 | 推理强度 | provider_default 或 low/medium/high;非默认值要求模型资源显式声明 supportsReasoningEffort,按 reasoning_effort 参数发送,不支持时拒绝 | semantic | default |
| B-008 | 技能 | Reasoner 使用后端资源中的命名技能正文;OpenCode 使用远端原生技能/agent,平台仅保存说明,不伪装远程安装或权限隔离 | semantic | default |
| B-010 | 执行结果 | Reasoner通过complete_task(status,result)明确报告目标成功或失败;部分完成记为failed并说明限制。该状态是执行模型的报告,非平台独立验证;idle、普通文本、接收回执不证明成功 | semantic | sweep |
| B-011 | 生命周期与取消 | 语音断线继续;取消停止当前任务;原生取消不代表外部工具或远端副作用被回滚,需核查远端停止 | semantic | user |
| B-012 | 恢复 | OpenCode只观察已有句柄;内置Reasoner重启标记中断,不自动重放工具;历史任务保留旧恢复语义 | semantic | default |
| B-013 | 时限与并发 | 新任务保存截止时间,排队和执行均计时;全局原生串行并发1,保留远端状态未确认时阻止新提交策略 | semantic | default |
| B-014 | 迁移 | 自动复制旧task工具连接/凭据至后端资源,迁移助手绑定和instruction来源;保留历史task_id、连接快照和旧时限语义 | semantic | default |
| B-015 | 自动测试与鉴权 | 沿用管理员鉴权;自动测试不得访问真实后端任务,使用显式模拟;无真实服务地址不声称联调完成 | semantic | default |
| B-016 | MVP执行环境 | 内置Reasoner不提供宿主机Shell/文件沙箱;编码由OpenCode处理,界面明确实际权限由执行端配置 | semantic | default |
| B-018 | 回退迁移 | 0027为数据语义迁移,downgrade明确拒绝,需备份恢复;不能把新的Reasoner配置静默回退成旧task工具 | semantic | default |
| B-019 | 切换Realtime | 已绑定任务后端时复用现有配置移除确认交互,确认切换后解除绑定,后端资源保留 | semantic | default |
| B-020 | 配置有效性 | 后端配置拒绝未知字段;启用资源的编辑验证已绑定助手,模型/工具失效时阻止保存和委派;停用资源允许保留结构合法但引用失效的配置 | semantic | sweep |
| B-022 | 指令模板 | 助手绑定 instructions 的业务变量使用接受时冻结的值单次渲染;system__time/system__time_utc沿用共享渲染器执行时刷新。资源 instructions 和技能正文按字面使用,不访问密钥变量 | semantic | sweep |
| B-023 | 通话内更新 | 每次Speaker委派前重新读取后端、模型、工具和MCP启用状态及凭据;绑定或任务参数来源改变时要求重新连接。接受后的任务继续用快照,不因配置编辑撤销已有副作用 | semantic | sweep |
| B-024 | 停用影响 | 允许停用仍被引用的后端并保留绑定;新助手会话因配置校验失败不能启动,需先解绑或启用。已有Speaker通话保留,但新委派会重新校验并拒绝停用资源 | semantic | sweep |
## 运行与验证
- 最终 `make test` exit 0:396项后端、4项前端契约、lint、production build、5项契约快照;仅保留既有BatchTestPage lint警告。
- F0–F4所有MUST验收命令通过。显式模拟模型/远端仍是测试替身,不在生产路径;没有残留生产桩。
- 隔离PostgreSQL17验证0026旧数据迁至0027、四种指令来源、凭据/历史保留、资源CRUD与助手复制,未触碰现有数据库。
- 浏览器6项核心验收使用模拟API,未启动麦克风/WebRTC;旧变量预设刷新场景未完成浏览器验证。390px新页面/弹窗在手动收起现有侧栏后通过布局检查。
- 审阅第一轮:3项未声明语义、2条过时记录;已修正代码或声明。第二轮:未声明0、过时0、clean。review_independence=same-family,acceptance_status=provisional,不代表外部独立正确性证明。
## 接口选择(完整)
| ID | Under-determined | Chosen | Class | Source |
|----|------------------|--------|-------|--------|
| B-002 | 产品资源 | 独立 TaskBackendResource,普通 Tool 仅 HTTP/MCP/client;Speaker 委派由平台内建函数自动注册 | interface | user |
| B-003 | 配置形状 | 后端API使用 id/name/type/description/config/secrets/enabled;助手 taskBackend 使用 backendId/instructionSource/instructions;接口 camelCase | interface | default |
| B-009 | 外部选择 | OpenCode保留地址/目录/服务鉴权,新增可选 agent 与 modelProviderId/modelId;推理强度及沙箱由远端管理 | interface | default |
| B-017 | F0过渡 | Walking skeleton短暂兼容旧tool提交入口以保持累计检查;迁移阶段移除该过渡入口,不保留为新产品接口 | interface | default |
| B-021 | 类型与凭据 | 后端资源可切换类型,但必须提交完整合法配置;OpenCode转Reasoner清除服务凭据,同类型空值/掩码保留原凭据 | interface | default |
## 使用与未覆盖项
1. 升级前备份数据库;0027不能安全downgrade,回退需恢复备份。执行 `make db-init` 迁移并同步接口定义。
2. 在“组件库 → 任务后端”配置资源,再在提示词助手中选择。推理强度要求模型声明实际支持;OpenCode权限/沙箱/技能在远端配置。
3. 真实模型、真实OpenCode编码和WebRTC端到端联调未进行,需有效地址/凭据后单独验证。
4. MVP单进程、全局并发1;多进程调度、任意并发、远程技能同步和沙箱编排未实现。Pipecat保留结束Worker注册对象直至关闭,已清空上下文/工具/处理器引用;长期高任务量运行未验证。
原始记录:BUILD_NOTE.md、database-smoke.json、frontend-smoke.json、SILENT_ASSUMPTION_SWEEP.json、SILENT_ASSUMPTION_SWEEP_ROUND_2.json与sweep-metadata.json。