Files
Agent-System-Documents/docs/proposals/2026-09-29-system-skeleton-design-and-plan.md
weichen e13eb5c38e R4: add the global native-deployment constraint
Details (original message):
R4: add the global native-deployment constraint (single static binary first, split native binaries only when necessary, no containers); storage becomes dual-profile (embedded SQLite default / optional native PostgreSQL); embed frontend via go:embed; native dev environment and release artifacts.
2026-09-29 17:26:34 +00:00

558 lines
57 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Agent-System 对话系统骨架:设计、方案与实施计划
状态:**待审(r4,按 2026-09-29 用户三轮指示修订)**;owner:weichen;主任务:本文档自身(批准后拆分为各阶段主任务记录)。
授权与交付终点:本文档为设计 + 方案 + 计划,**不含实现**。批准后按第 7 节阶段逐项开工。
规范基线:Development-Guidelines(`development/guidelines` submodule,Dev 仓固定版本)。
撰写日期:2026-09-29。
r2 修订:领域插件(CDMO、法规知识库)移出本计划进远期路线,届时按新系统特性全新设计(不兼容、不迁移老系统);扩充扩展性与定制性章节。
r3 修订:新增文档摄取与解析管线(4.11,MinerU 定位为备选/交叉验证)、RAG 检索管线(4.12)、记忆系统(4.13)设计;上下文管理扩充为预算化分层管线(4.10);模型路由增加 embedding/rerank 类别(4.7)。
r4 修订:新增全局部署约束(4.1 原则 8):非容器化优先,单二进制最优先,必要时拆分多个原生二进制;存储改双档(嵌入式 SQLite 默认 / PostgreSQL 可选,D16);前端嵌入二进制;Dev 开发环境与 Releases 分发物改为原生方案。
---
## 1. 问题与证据
### 1.1 用户目标
构建一个对话系统的**骨架**,界面形态仿 zcode / Kimi / Codex:
- **左栏**:项目 → 会话两级组织;底部账户、设置入口;可拖拽调宽(有最小/最大宽度),压过最小宽度继续拖拽以手势触发收起;收起后保留窄栏。
- **中栏**:对话区。支持文档、图片等文件上传;文字消息发送;**流式**回复;须区分回复正文、工具调用、思考过程等不同消息成分;最终回复整理输出后,**之前的过程输出折叠或隐藏**(可回看)。支持卡片交互:HITL 提问卡片(给出选项 + 建议 + 各选项可能造成的影响 + 自由输入;系统判断用户是选择了某项还是提出了别的问题)。
- **右栏**:工具栏。计划、步骤、to-dos;Agent 在对话中产出的文档可在右栏查看;子标签(tab)设计按需规划。
- **弹出窗口**:结合右栏,展示、追踪 sub-agent 的任务、结果、中间过程。
系统必须提供**插件机制**:骨架保证一个通用智能体的使用与功能;领域能力(例:医疗器械 CDMO 工作流、法规知识库检索)**之后**通过插件接入。
**2026-09-29 修订指示(r2)**:当前**先不实现**医疗器械 CDMO 等领域插件与功能,仅纳入之后的实现计划;届时实现**不需要兼容老系统**,要根据新系统的特性为新系统全新设计。先保证通用智能体系统的骨架,尽可能设计完善,多考虑可扩展性、可定制性等方向。
**2026-09-29 修订指示(r3)**:老系统使用了 MinerU、Embedding、Reranker,新系统可以考虑使用。但 **MinerU 要尤其注意**——用户在老系统实际测试过,确实能解析文档但能力有限;现在很多智能体直接编写代码解析 docx/pdf/ppt,可借鉴该思路,MinerU 作为备选或交叉验证,或考虑弃用。系统还需考虑之后的 **RAG、记忆系统、上下文管理**等机制功能,考虑全面。以上为思路,按系统设计与需求实际情况落实。
**2026-09-29 修订指示(r4)**:为系统和所有模块加入部署约束——**尽可能不使用 Docker 容器化部署;最优先考虑单二进制文件的服务;必要时才拆分成多个二进制服务,但仍最优先非容器化方案**。
核心诉求:**充分的可扩展性、可定制性**;新功能以插件接入,不破坏已有功能、不需要大规模重新开发、不与核心过度耦合。
### 1.2 现状与已证实事实
| 事实 | 证据 |
|---|---|
| `Agent-System` 是老系统仓库,新系统**不做迁移**,仅作领域业务知识与机制参考 | 远端默认分支 `dev`,内容为单体(Go 后端 + React 19 前端 `shuimu-workbench`);本地 `Agent-System` 与 `agent-system-multi` 均指向它。用户记忆确认正确,r2 再确认:不迁移、不兼容、不搬代码 |
| 老系统已实测:MinerU 可解析文档但**能力有限**;Embedding 与 Reranker 服务在用 | 用户实测结论(r3 输入);老系统 `internal/mineru`、`internal/kb`、`internal/dataset` 等。处置:MinerU 降级为备选/交叉验证(4.11,D12);Embedding/Reranker 的部署经验直接复用(4.7、4.12) |
| CDMO 领域知识位置(仅参考) | 老系统 `internal/`(docgov、docrevision、workflowdef、bizdev、squad、kb 等)、`configs/agents/`;`~/projects/08-Regulations` 为法规资料 |
| `Agent-System-Dev / Core / Frontend / Backend / Documents / Releases` 六仓在 Gitea 已建、**全部为空仓**(默认分支 main) | Gitea API 查询(2026-09-29) |
| 可复用生态已建成 | `Agent-Native`(执行内核)、`Agent-Squad`(编排底座,含 HITL)、`Agent-Intent`(意图识别,入口闸门 + 能力目录,2026-09-29 完成两轮接入)、`Error-Code-System`、`Logging-System`,均有远端描述与固定 gitlink 关系 |
| 未知仓 | `SMDF-Agent-System`(空仓,用途不明,待澄清);本地 `Agent-System-Ensemble/`(空目录,建议用作 Dev 仓工作副本) |
| `Agent-Intent` 远端此前缺描述 | 2026-09-29 已补全(Gitea API,HTTP 200) |
### 1.3 重要经验命中
- Agent-Intent 记忆:意图注册表 = 能力目录(slots 声明 HITL 该问什么);三触点 = 入口闸门 / 编排目录 / 执行防线;生态 pin 纪律(guidelines / errcode / logsys / agent-intent 的 gitlink 必须跨仓一致);agent-intent 严禁依赖 agent-native/squad。
- Guidelines:父仓 gitlink 是子仓版本权威;模块从 L1 逻辑隔离起步;四类通信语义(Query/Command/Event/Stream);Stream 契约必须定义游标、断连、终态对账;配置项须明确来源、生效时机、实例隔离;文档三层放置。
---
## 2. 目标与边界
### 2.1 目标
1. **完善的通用智能体骨架**:三栏 UI + 流式对话(正文/思考/工具区分与折叠)+ HITL 卡片 + sub-agent 追踪 + 文档工件 + 可定制的模型/智能体/工具/上下文/界面,端到端走通,且每个可定制点不改代码即可调整。
2. **插件机制完备并经示例验证**:五类注册能力(工具/工作流/意图/知识/UI)+ 声明资产热加载 + 装卸回退语义;用一个**最小示例插件**验证机制(装卸不破坏核心)。领域插件(CDMO、法规)**不在本计划实现**。
3. **重能力子系统契约完备**:文档摄取解析、RAG 检索、记忆系统、上下文管理的契约与数据位在本设计中定稿(4.10–4.13),骨架期落最小实现,增强能力按远期路线增量落地——扩展不等待,落地不破坏。
4. **仓网组织**:所有 submodule 独立、通用、可复用、易维护、可扩展;`Agent-System-Dev` 为开发集成父仓,`Agent-System-Releases` 只做打包分发。
5. **规范落地**:开发全程按 Development-Guidelines 执行(阶段方案、验证记录、pin 纪律、模块卡)。
### 2.2 非目标
- **非容器化部署(全局约束,适用于系统与所有模块)**:不依赖 Docker/容器编排;不发布容器镜像(远期确有需要再单独议);默认形态为单二进制,必要时拆分多个原生二进制(拆分原则见 4.1 原则 8)。外部可选服务(MinerU、Embedding/Reranker 等)以原生服务形态接入(URL 配置),其自身部署方式由使用者自定,系统不假定容器。
- **本计划不实现领域插件**:CDMO 工作流、法规知识库进入远期路线(7.2 节);届时按新系统插件契约**全新设计**——不迁移老系统代码、不兼容老系统接口、不复用其数据格式;老系统仅作领域业务知识参考。
- **重能力子系统只落契约与最小实现**:向量 RAG 管线、跨会话记忆、代码执行工具、历史滚动压缩进远期路线(7.2);本计划交付其契约与数据位预留,保证届时接入不改核心。
- 骨架期不做多租户、计费、公开注册;单用户(个人部署)起步,但数据模型预留 owner 字段。
- 不追求移动端;桌面浏览器优先(布局用响应式组件,不为移动端专门优化)。
- 不自研 LLM 接入层——复用 Agent-Native。
- v1 不做插件市场 / 在线安装;插件以仓为单位、构建期组装(热加载仅限声明性资产,见 4.6)。
---
## 3. 仓库组织设计
### 3.1 命名规则(用户定义,本设计确认沿用)
- `Agent-*`:智能体能力库(与具体宿主系统无关)——`Agent-Native`、`Agent-Squad`、`Agent-Intent`。
- `Agent-System-*`:本系统相关。
- 插件仓:`Agent-System-Plugin-<Name>`(**远期按需新建**,本计划不建)。
### 3.2 仓库分配总表
| 仓库 | 角色 | 职责一句话 | Gitea 描述(P0 写入) |
|---|---|---|---|
| **Agent-System-Core** | 契约仓(build-required) | 系统核心契约:领域模型、流式事件协议、HITL 卡片协议、插件 API 与 manifest、设置 schema、UI 扩展词汇、文档解析与检索与记忆契约(JSON Schema / TS 类型) | 系统核心契约:领域模型、流式事件与 HITL 卡片协议、插件 API、设置与 UI 扩展词汇、文档解析/检索/记忆契约,供前后端与插件共同依赖;不含实现。 |
| **Agent-System-Backend** | 后端仓(build-required) | Go 模块化单体:会话/项目域、流式管道、Run 管理、sub-agent 管理、工具注册、智能体画像、上下文管理、文档摄取解析、检索管线、设置、工件存储、插件宿主、持久化;组合 Agent-Native/Squad/Intent;**默认构建为单二进制(go:embed 内嵌前端与嵌入式存储)** | 对话系统后端:会话与流式管道、智能体运行时与画像、工具/上下文/文档解析/检索/设置管理、插件宿主(组合 Agent-Native/Squad/Intent);依赖 Agent-System-Core 契约,默认单二进制非容器部署。 |
| **Agent-System-Frontend** | 前端仓(build-required) | React 19 + Vite + TS:三栏布局、流式渲染、消息成分折叠、HITL 卡片、右栏面板、sub-agent 弹窗、schema 驱动的设置与扩展渲染器 | 对话系统前端:三栏工作台(项目会话 / 流式对话 / 计划与工件面板),含 HITL 卡片、sub-agent 追踪弹窗与 schema 驱动的设置/插件 UI 渲染;渲染协议由 Agent-System-Core 定义。 |
| **Agent-System-Documents** | 文档/过程仓(development-only) | 系统级文档:架构、ADR、插件开发指南、跨仓过程记录(方案/验证/交接);本方案文档即首篇 | 系统文档与过程记录仓:架构决策、方案与验证记录、插件开发指南;不含产品代码。 |
| **Agent-System-Dev** | 开发集成父仓(development-only) | submodule 集成全部模块;顶层构建/测试编排、**原生开发环境脚本**(make dev 直接本地起服务,不依赖容器)、跨仓任务记录入口;**非分发单元** | 开发集成仓:以 submodule 固定全部模块组合,承载跨仓构建、测试编排与原生(非容器)开发环境;发布物在 Agent-System-Releases。 |
| **Agent-System-Releases** | 发布仓(可选分发) | 版本 manifest(pin 全组合 SHA)+ 不可变制品(**单二进制 + 校验和**)+ **原生部署物料**(systemd 单元、安装/升级/回退脚本);只打包分发,不开发源码 | 发布仓:每个版本固定组件组合,分发单二进制制品与原生部署物料(systemd、安装回退脚本);只做打包与分发,不做源码开发,不提供容器镜像。 |
| Agent-Native / Agent-Squad / Agent-Intent | 生态 submodule(build-required) | 执行内核 / 编排底座(含 HITL)/ 意图闸门与能力目录 | 已有描述,不变 |
| Error-Code-System / Logging-System | 基础设施 submodule | 错误码 / 日志 | 已有描述,不变 |
| Development-Guidelines | 规范 submodule(development-only) | 开发规范,路径 `development/guidelines` | 已有描述,不变 |
| Agent-System | **冻结参考仓** | 老系统,只读领域知识与机制参考;不进 Dev 仓组合 | P0 补描述:老系统参考仓(冻结):新系统不迁移、不兼容;仅作领域业务知识与机制参考。 |
| Agent-System-Plugin-CDMO(远期新建) | 领域插件仓 | 医疗器械 CDMO 工作流插件:基于新系统插件契约全新设计 | (远期建仓时写)CDMO 工作流插件:按新系统插件契约全新设计,注册工作流、意图、文档模板与面板。 |
| Agent-System-Plugin-Regulations(远期新建) | 领域插件仓 | 法规知识库插件 | (远期建仓时写)法规知识库插件:注册法规检索工具与知识面板。 |
| SMDF-Agent-System | 待澄清 | 空仓,用途不明 | 暂不使用,待用户澄清 |
### 3.3 依赖方向(无环)
```
Frontend ──→ Core ←── Backend ──→ {Agent-Native, Agent-Squad, Agent-Intent,
Error-Code-System, Logging-System}
Plugin-* ──→ Core(只依赖契约,不依赖 Backend/Frontend 实现)
Dev ──(gitlink)──→ 以上全部
Releases ──(版本 manifest 引用)──→ Dev 固定组合的制品
```
- Backend **不 import** Frontend;插件**不 import** Backend/Frontend 内部包(违者 CI 依赖检查拒绝)。
- 生态仓依赖方向沿用既有纪律(agent-intent 不依赖 native/squad 等)。
- Core 依赖:Go 标准库 + 错误码常量对齐用鸭子接口(同 agent-intent 模式);Core 不依赖任何生态仓。
### 3.4 版本与组合纪律
- 父仓 gitlink 为版本权威(Guidelines 多仓规范);Dev 仓每次推进组合时跑 CI 全量验证后提交 gitlink 更新。
- 各模块仓独立演进,未被 Dev 采用的新版本是合法状态。
- Releases 的版本 manifest 从 Dev 固定提交导出(不提交自引用循环锁文件)。
---
## 4. 系统架构
### 4.1 设计总则:八条扩展性原则
本系统的可扩展性不是事后补丁,而是由以下机制原则保证(每条都对应下文具体设计):
1. **API-first**:后端全部能力走公开 HTTP + SSE API,前端只是第一个客户端。任何功能(面板、卡片、命令)先有 API 再有 UI;Core 同步发布 OpenAPI 规范与生成的 TS client。CLI、其他客户端、远程访问后接不改后端。
2. **数据即能力**:工作流、意图、提示词、文档模板、命令、UI 面板、用户自定义工具尽量表达为**声明性数据**(JSON/MD),热加载,不触碰核心二进制(4.6、4.8、4.14)。
3. **Schema 驱动 UI**:设置界面、插件面板、HITL 表单卡片共用一套**有限词汇的 UI schema 渲染器**(4.6、4.9、4.15)。新增配置项或插件面板不需要前端开发。
4. **统一注册表 + 来源标记**:工具、命令、面板、意图、卡片、**解析器**全部经统一注册表注册并标记来源(builtin / plugin / user / profile)。运行时可枚举「当前生效的能力来自谁」,可按来源一键禁用——既是排障对照(Guidelines 故障定位),也是定制入口(4.8)。
5. **一切可禁用,T0 永远可用**:工具可禁用、面板可隐藏、插件可卸载、意图目录可清空、记忆默认关闭。全部扩展关闭后系统退化为纯通用对话骨架,作为永恒的回归对照基线。
6. **契约版本化与前向兼容**:事件协议、插件 API、UI schema、**解析与检索与记忆契约**各带版本;消费方对未知 `type`/词汇静默忽略;扩展走「新增字段/新增类型 → 双端兼容窗口 → 弃用」流程(5 节)。
7. **契约先行、增量落地**:每个重能力子系统(文档解析、RAG、记忆、上下文管理)都先定契约与数据位,骨架期落**最小可用实现**(能支撑端到端价值流),增强能力按远期路线落地——扩展需求不等待设计,落地不破坏契约。
8. **原生部署、单二进制优先(全局部署约束)**:默认产物是**一个静态链接的二进制**(`agent-system`:HTTP/SSE 服务 + go:embed 内嵌前端 + 嵌入式存储 + 全部内置模块),拷贝即运行,无容器、无外部依赖(模型 API 除外)。**拆分多个二进制仅在必要时**(判据:故障域隔离、资源预算冲突、异构技术栈,如 module-contracts L2/L3 场景——远期 sidecar 插件、重索引 worker 等),拆出的仍是原生二进制,同机以 Unix socket / localhost 通信。**不使用 Docker/容器编排,不发布容器镜像**;外部可选服务(MinerU、Embedding/Reranker)以原生服务形态部署、URL 配置接入(如 ollama 式本地推理服务),系统对其部署方式不做容器假定。
**总体形态**:
- **部署形态**:默认**单二进制** `agent-system`(子命令 `serve` / `migrate` / `version` 等),内嵌前端(go:embed dist)与嵌入式存储,一个进程一个端口对外提供全部 API 与 UI;CLI 子命令兼作运维入口(与 API-first 不冲突:CLI 走同一 API 或直接调用同库用例)。开发期前端走 Vite dev server + 代理,构建期才 embed。
- **后端**:Go 模块化单体(module-contracts L1 逻辑隔离起步),进程内模块以公开契约互调;重负载模块(MinerU 深度解析、向量索引 worker 等)预留 L2 独立二进制拆分位(仍是原生进程)。
- **前端**:React 19 + Vite + TypeScript SPA(沿用老系统技术栈经验:虚拟滚动、docx 预览、mermaid、katex);Node 仅为构建期工具链,运行期不需要。
- **传输**:REST(Query/Command)+ SSE(Stream)。SSE 事件 = Core 定义的统一事件信封。
- **持久化(双档,D16)**:**默认嵌入式档**——SQLite(单文件数据库,配合本地对象目录存文件与工件,零外部服务);**可选 PostgreSQL 档**——原生安装的 PG(非容器),DSN 配置接入,面向更大规模或多实例。迁移脚本双方言同源、两档都在 CI 验证;全文检索(SQLite FTS5 / PG tsvector)与向量索引(见 4.12)均在存储档接口后实现,业务模块不感知方言。
### 4.2 核心抽象:一切运行皆 Run、一切增量皆事件
系统最重要的统一抽象,中栏折叠、sub-agent 弹窗、工具调用展示、用量统计全部复用它:
```go
// 概念示意(详细 schema 在 Core 定稿)
Run {
ID, ParentRunID // 顶层对话轮 = ParentRunID 空;sub-agent / 工具调用 = 子 Run
ConversationID, ProjectID
Kind // conversation | subagent | tool
ProfileID // 使用的智能体画像(4.7)
Status // pending | running | waiting_hitl | completed | failed | cancelled | interrupted
Phase // thinking | acting | responding | done(run.phase 事件驱动 UI 主状态)
}
```
**事件信封**(后端 → 前端,持久化后转发,seq 单调):
```json
{ "seq": 42, "run_id": "...", "conversation_id": "...", "ts": "...", "v": 1,
"type": "message.delta | thinking.delta | tool.call | tool.result |
run.phase | hitl.request | hitl.resolved |
plan.update | todo.update |
agent.spawn | agent.progress | agent.result |
artifact.created | artifact.updated |
run.completed | run.failed | error",
"payload": { } }
```
- `run.completed` payload 附 `usage`(token/时长/工具调用数),支撑用量统计(4.17)。
- Stream 契约按规范补齐:游标 = `Last-Event-ID`(seq);断连重连从游标续传;终态对账 = 会话详情 Query 返回权威消息树,前端以 Query 为准收敛(丢弃未确认的流式残片)。
- **并发策略**:v1 会话内串行(一个会话同时至多一个在途 run),但协议与事件路由按 run_id 设计为天然支持并行——未来开启并行子任务不破坏协议。
- **中断恢复策略**:后端重启时在途 run 标记 `interrupted` 并在 UI 提示,用户可一键重发;不做透明恢复(避免分布式续跑复杂度,远期再议)。
**消息模型**:`Message { id, role, parts: [Part] }`,`Part` 多态(text / thinking / tool_call / tool_result / artifact_ref / hitl / plan / error / **card**——插件自定义卡片,4.6)。流式过程中 parts 逐个追加;**run 终态后前端将过程 parts(thinking/tool)折叠为摘要行**(如「思考了 12s · 调用 3 个工具」),点击展开回看——折叠是纯前端呈现策略,事件与数据不删;折叠默认行为可由用户偏好设置(4.15)。
### 4.3 后端模块划分(组合根装配,模块卡在 Backend 仓 `policy/modules/` 维护)
| 模块 | 职责 | 关键契约 |
|---|---|---|
| project/session | 项目、会话、消息 CRUD 与检索 | Query/Command |
| runmgr | Run 生命周期、事件产生与持久化、游标、取消传播(父 run 取消 → 子 run 级联) | Command(幂等 run 创建)+ Event |
| streamhub | SSE 通道、订阅、断线续传、终态对账数据 | Stream |
| runtime | 智能体执行适配:Agent-Native(主对话 + 工具)、Agent-Squad(sub-agent 编排) | 进程内窄接口;失败映射稳定错误码 |
| intentgate | Agent-Intent 接入:入口闸门 + 能力目录注入规划 + `/`命令识别(4.14) | 可选装配,未配置 = 行为回退(T0 底线沿用其纪律) |
| toolreg | 工具注册表:内置/插件/声明式 HTTP 工具统一注册、schema 校验、启用开关、调用审计、确认策略 | Query/Command |
| profiles | 智能体画像 CRUD、导入导出(4.7) | Query/Command |
| ctxasm | 上下文组装与预算管理:按 ContextPolicy 生成模型输入(4.10) | 内部服务 + Query |
| ingest | 文档摄取与解析:上传→ParsedDocument→各消费方;解析器注册表与策略(4.11) | Command + Event(索引进度) |
| retrieval | 检索管线:全文最小实现;RAG 契约与向量位预留(4.12) | Query |
| memory | 记忆存取与策略:schema 预留、契约先立,实现远期(4.13) | Query/Command |
| settings | 分层设置存取、schema 校验、生效通知(4.9) | Query/Command + Event |
| registry | 统一注册表:工具/命令/面板/意图/卡片/解析器的注册、来源标记、按来源启停(4.1 原则 4) | Query/Command |
| hitl | HITL 卡片生命周期:发起、挂起 run、响应路由(选中项 vs 自由输入再识别)、超时 | Command + Event |
| artifacts | 上传文件、Agent 产出文档、版本与引用 | Query/Command |
| planboard | 计划 / 步骤 / to-dos 状态(Agent 产出 + 用户可读) | Query/Command + Event |
| pluginhost | 插件发现、manifest 校验、能力注册、声明资产热加载(4.6) | Command + Event |
| observability | Logging/Errcode 对齐、进度归属、事件重放、用量归集(4.17) | Event |
### 4.4 前端结构
- **左栏 `ProjectNav`**:项目折叠组 → 会话列表;底部账户/设置入口;宽度拖拽(min 220 / max 420 px,可配置);拖拽越过最小阈值并继续(约 40px 超调)→ 松手收起;收起态为图标窄栏;分隔条双击切换。宽度与收起态持久化(服务端偏好 + localStorage 双写)。
- **中栏 `Conversation`**:虚拟滚动消息流;**Part 渲染器注册表**(按 part 类型查表 → 组件,插件卡片类型经 schema 渲染);流式增量渲染;run 终态触发过程折叠(可展开);输入区:文件上传(拖拽 + 粘贴 + 选择)、发送、中断、`@` 引用与 `/` 命令(4.14)。
- **右栏 `Workbench`**:tab 化——内置 `Plan` / `Todos` / `Artifacts` / `Agents`,插件可注册更多 tab(如知识面板);tab 可配置显示/隐藏/排序(4.15);文档查看器(markdown + docx 预览);可收起。
- **弹窗 `AgentTracker`**:从右栏 `Agents` tab(或消息中的 agent 徽章)打开;任务树(spawn 关系 = Run 父子)、每个 sub-agent 的进度、中间过程(复用 Part 渲染器 + 事件重放)、结果工件链接。
- **设置中心 `Settings`**:schema 驱动(4.9)——模型与密钥、画像管理、工具与扩展、知识库与索引状态、界面偏好、插件管理,全部由后端设置 schema 渲染,加设置项零前端改动。
- **状态 owner**:服务端权威(事件 + Query 对账),前端 store 是投影;查询/命令/取消/过期结果处理按 module-contracts 前端条款明确(切换会话时取消在途请求、旧会话迟到事件按 conversation_id 分流丢弃)。
### 4.5 HITL 卡片协议(Core 定稿,前后端与插件共用)
```json
{ "id": "...", "run_id": "...", "question": "采用哪种输出格式?",
"kind": "choice", // choice | input | confirm | form
"choices": [
{ "id": "md", "label": "Markdown 文档",
"description": "生成可版本管理的轻量文档",
"impact": "写入 artifacts 并可在右栏查看;后续修订走 diff", "recommended": true },
{ "id": "docx", "label": "Word 文档", "description": "...", "impact": "..." }
],
"allowFreeInput": true,
"freeInputHint": "也可以直接输入你的问题或别的格式要求",
"timeoutSec": null }
```
响应路由:用户点选 → `hitl.resolved(choice_id)`;自由输入 → 先走 intentgate 识别(是否命中澄清问题/其他意图/命令),命中其他意图或命令则挂起当前 run 并进入新对话轮(或按 run 策略取消),否则作为澄清回答回填。`form` kind 的字段定义复用 UI schema 词汇(同一渲染器)。发起方(运行时、工作流或插件)必须提供 `impact` 字段——让用户在决策点获得足够上下文。
### 4.6 插件体系
**原则:能数据化的都数据化,代码只留接口。**
**插件 = manifest + 声明资产 + 可选代码模块**:
```
Agent-System-Plugin-<Name>/
plugin.json # id、版本、要求的 plugin API 版本、能力声明与权限清单
workflows/*.json # 工作流定义(步骤、触发、绑定的意图)
intents/*.json # 意图 specs(agent-intent overlay 格式,slots 即 HITL 问题)
prompts/*.md # 角色与任务提示词
templates/ # 文档模板(md/docx)
panels/*.json # 右栏面板声明(UI schema)
cards/*.json # 对话卡片声明(含 HITL 卡片模板)
tools/*.json # 声明式工具(HTTP 请求模板等,无代码)
tools/*.go # 可选:代码实现 ToolProvider / KnowledgeProvider
settings.json # 插件自身设置声明(自动出现在设置中心)
```
**五类注册能力**:
| 能力 | 形态 | 注册效果 |
|---|---|---|
| 工具(Tool) | 声明(HTTP 模板)或代码(Go interface) | 进 toolreg,Agent 可调用;受启用开关与确认策略约束 |
| 工作流(Workflow) | 声明(JSON 定义 + 意图绑定) | 进编排目录;命中意图即可启动;步骤可产 HITL 卡片 |
| 意图(Intent specs) | 声明(agent-intent overlay) | 进 intentgate 目录;slots 自动成为 HITL 询问项 |
| 知识(Knowledge) | 代码(KnowledgeProvider)+ 索引数据 | 注册检索工具 + 右栏知识面板;复用系统 RAG 基础设施(4.12) |
| UI(面板/卡片) | 声明(UI schema) | 前端通用渲染器渲染;**插件不向主 bundle 注入组件** |
**manifest 关键字段**:`id`、`version`、`apiVersion`(插件 API 语义版本,宿主检查兼容窗口)、`provides`(五类能力清单)、`requires`(声明的权限:网络访问域、工具执行、数据读取范围)、`settings`(设置声明)。权限清单在装载时展示并记录——插件能做什么一目了然(信任模型 v1:用户自装自审,权限清单用于可读性)。
**UI 扩展的边界**:前端只实现「通用 schema 渲染器」(有限词汇:section / list / kv / form / markdown / doc-ref / actions / chart-lite)。表达不了的高级交互 → 在 Core 提案新词汇或新卡片类型(走契约扩展流程),而不是开洞让插件写 React。这保证前端不被插件破坏。
**代码类插件的隔离档位演进**:
- v1:**进程内**(构建期组装,Dev 仓组合构建)——单用户部署、插件同生态(Go),L1 足够;崩溃风险由工具调用超时/预算兜底。
- v2(需要时):**sidecar 独立进程**(HTTP,L2;原生二进制,非容器)——插件按同一 port 协议实现,pluginhost 加 transport 适配器即可升级,插件代码不变。契约从 v1 就按跨进程语义定义(四类通信契约),使该升级只是换传输。
**fail-closed 与回退**:manifest 校验失败整批拒绝(沿用 agent-intent 纪律);卸载插件 = 注销其注册项,在途 run 引用的工具/工作流按「定义缺失」稳定错误码失败并提示,不静默。**本计划以最小示例插件验证机制**(见 P4),领域插件远期另立项。
### 4.7 模型接入与智能体画像
**模型接入(复用 Agent-Native,不自研)**:
- Provider 配置:API 端点与密钥(openai 兼容 / anthropic / 本地模型,按 Agent-Native 所支持);密钥存服务端(加密落库或本地文件,不进 git、不回显、设置页掩码显示)。
- **模型路由按用途分类(kind)**:`chat`(主对话)、`lightweight`(轻量任务:标题生成、澄清改写、记忆候选提取)、`embedding`(向量化,RAG/记忆检索用)、`rerank`(重排,RAG 用)。每类可各自指定模型与参数——不同用途不同模型是常态定制点。Embedding/Reranker 的服务部署经验直接来自老系统实测;新系统中它们是**外部原生服务**(URL 配置接入,如 ollama 式本地推理服务),按需启用,系统不假定其部署方式。
- 运行参数:temperature、max tokens、超时、重试预算;按「系统默认 → 画像 → 会话」三层覆盖(4.9)。
- 预算与配额:per-run token/时长/工具调用次数上限(Guidelines 故障影响控制),超限按稳定错误码终止并在 UI 呈现原因。
**智能体画像(AgentProfile)——核心定制机制**:
```json
{ "id": "...", "name": "通用助手", "builtin": true,
"systemPrompt": "...",
"model": { "router": "main" },
"tools": { "allow": ["*"], "deny": [], "confirm": ["http.*"] },
"context": { "policy": "default" },
"hitl": { "askOnAmbiguity": true, "timeoutSec": null },
"budget": { "maxTokens": null, "maxToolCalls": 40 } }
```
- 内置一个默认通用画像(T0 基线);用户可创建自定义画像——系统提示 + 模型与参数 + 工具集(允许/拒绝/需确认三清单)+ 上下文策略 + HITL 策略 + 预算,**全部数据化**,可导入导出(JSON 文件),不写代码。
- 会话绑定画像;sub-agent 派生时可用画像作为模板(结合 Agent-Squad 角色注册)。
- 画像是插件与用户定制的主要载体:插件可注册「画像模板」(声明资产),用户在其上微调。
### 4.8 工具体系与外部工具生态
- **内置最小集**(骨架期):文件读取(限项目工作区与上传文件)、工件写入、会话历史检索、时间。不预置网络抓取等高风险工具——用户可后续以声明式 HTTP 工具或插件自加(一切可禁用原则)。
- **声明式 HTTP 工具**(无代码自定义):manifest 描述端点、方法、参数 schema、鉴权引用、响应裁剪 → 注册为普通工具。个人自动化接 API(翻译、查询、企业内部服务)零开发。
- **确认策略**:每工具可标 `auto / confirm / deny`(画像三清单覆盖);`confirm` 触发 HITL confirm 卡片展示调用参数后执行。
- **调用审计**:所有工具调用(含入参摘要、结果状态、时长)持久化,UI 可查(排障 + 合规基础)。
- **代码执行工具**(远期,D14):通用代码执行沙箱工具。它是「agent 直接写代码解析疑难文档」(4.11 第三档解析)与更多自动化能力的前提,因安全与沙箱复杂度单独立项。
- **MCP 适配位**(远期):`ToolProvider` 是唯一工具接入接口,内置/声明式/插件工具皆走它。远期实现 `MCP Provider` 适配器即可接入整个 MCP 外部工具生态,核心零改动——接口按「动态发现工具清单 + schema 校验 + 调用」语义设计,天然覆盖 MCP client 语义。
### 4.9 设置系统与配置分层
按 Guidelines 配置规范(来源、生效时机、启动依赖、实例隔离)设计:
- **覆盖链**:`system defaults → user → project → conversation`(深合并;数组策略显式声明,不隐式拼接)。
- **Schema 在 Core 定义**:每个设置项带类型、默认值、范围、**生效时机**(`hot`立即 / `new-run`仅影响新 run / `restart`需重启)与说明文案。设置页按 schema 自动渲染并标注生效时机——「改了为什么不生效」不再靠猜。
- **密钥特殊处理**:独立存储、写入不回显、API 响应脱敏、导出时不包含密钥。
- **设置变更事件**:`hot` 类设置变更经事件通道推送(多标签页/未来多客户端一致)。
- 插件与画像声明的设置项并入同一 schema 体系(来源标记),统一出现在设置中心对应分区。
### 4.10 上下文组装与上下文管理
发送给模型的内容由**预算化分层管线**组装,而非散落代码——这决定智能体「看到什么」,是行为定制的深层轴,也是长会话质量的根基:
```
ModelInput = SystemPrompt(画像)
+ 注入槽[memory] ← 记忆:相关性+新近度检索,预算内(4.13,默认关闭)
+ 注入槽[knowledge] ← 知识:按需检索注入(4.12)
+ History ← 窗口内原文;窗口外滚动摘要(远期压缩)
+ CurrentTurn ← 用户消息 + 附件解析结果 + @引用
+ ToolResults ← 按截断策略
```
- **预算管理器**:总预算 = 模型窗口 − 保留余量(输出预留);各槽位带优先级与份额上限(画像可调,如 memory ≤5%、knowledge ≤20%);超预算按优先级裁剪。**每次裁剪记录进组装观测**(4.17)——「模型为什么不知道 X」可定位、可解释。
- **历史策略**:`window`(最近 N 条原文)为基础;窗口外原文永不删除(存储完整),仅不进上下文;滚动摘要压缩(轻量模型生成 `summary` 段注入)为远期增强。
- **工具结果截断**:每结果上限 + 头尾保留策略;溢出自动转工件引用(「结果过长已存为工件 @artifacts:x」,模型与用户都可再取)。
- **附件与引用**:上传文档经 ingest 解析(4.11)后注入;`@artifacts/@knowledge` 引用显式挂载(4.14)。
- **策略数据化**:ContextPolicy 为数据(画像引用、可被会话覆盖),逐版本增加策略项不动组装器接口。
### 4.11 文档摄取与解析管线(r3 新增)
```
上传/工件 → ingest → ParsedDocument(中间表示) → 消费方:附件上下文(ctxasm) / 工件预览 / 检索索引(4.12) / 全文检索
```
**ParsedDocument 中间表示**(Core 契约):`blocks[]`(heading / para / list / table / code / image-ref)+ 文档元数据 + **解析溯源**(解析器 id、置信度、交叉验证结果)。所有下游只消费 IR,不关心解析器——这是解析器可替换、可组合、可交叉验证的关键。
**解析器三档**(ParserProvider 注册表,与工具注册表同纪律、带来源标记):
1. **内置代码解析器(主路线)**:确定性库解析——md/txt 直读;docx/pptx 解 OOXML;pdf 提取文本层。成本低、无外部依赖、可独立测试;这与「现代智能体直接写代码解析」思路一致:解析是**普通代码能力**,不是神秘服务。
2. **MinerU 服务适配器(可选,备选与交叉验证)**:**独立原生服务**(L2,进程隔离;系统侧只以 URL 配置接入,**默认不部署**,设置启用)。定位依据用户老系统实测结论——能解析但能力有限:用于扫描件/图片型 PDF/复杂版式的**深度解析备选**;**交叉验证模式**:与内置解析结果逐块 diff,差异块标记低置信度并在工件视图提示,不静默取信单一来源。
3. **Agent 驱动解析(远期,依赖代码执行工具 D14)**:对疑难文档由智能体现场写代码解析(现代智能体主流做法),产物回写 ParsedDocument 并可沉淀为新的解析器声明(资产化:一次解析、复用为模板)。
**解析策略**(数据可配,per project):默认档位与回退链(如 `pdf: builtin → mineru`)、交叉验证开关、大文档分块解析预算、失败呈递(解析失败不是错误吞掉,而是生成「无法解析」占位与原因,Agent 与用户可见)。
**分期**:P2 落内置解析器(支撑附件上传对话闭环);P4 契约定稿 + 解析策略配置;MinerU 适配器与交叉验证远期(法规插件立项时牵引,D12)。
### 4.12 RAG 检索管线(r3 新增)
**定位**:RAG 引擎是**系统基础设施**(同 toolreg),知识库是**数据**(项目内建或插件提供)——法规插件远期只需带数据与配置,不自带引擎(「数据即能力」原则在检索侧的延续)。
**管线**:
```
Query → 改写(可选,lightweight 模型) → Embedding(kind=embedding 模型路由)
→ 混合检索(向量索引 + 全文,均按存储档) → Rerank(可选,kind=rerank 模型路由)
→ TopK 组装 → 注入(工具结果 或 ctxasm knowledge 槽位)
```
**组件契约**(Core):`Chunker`(切分策略:大小/重叠/结构感知,按 ParsedDocument blocks 切,表格不拦腰断)、`EmbeddingProvider`(模型路由)、`VectorIndex`(**按存储档双实现**:嵌入式档用 sqlite-vec 扩展或进程内向量扫描——个人部署规模(数万级 chunk)内暴力扫描延迟可接受;PG 档用 pgvector。接口不绑定实现,可换独立向量库,D13)、`Retriever`(组合器与策略)。全文检索同样按档实现(SQLite FTS5 / PG tsvector),藏在 retrieval 模块接口后。**Embedding/Reranker 复用老系统已验证的服务部署经验**,以原生服务形态部署(URL 配置接入,非容器假定),作为模型 provider 配置(4.7),不绑定特定实现。
**索引对象与知识库管理**:项目内文档(上传/工件,ingest 产物直接进索引)、插件知识库(法规等,来源标记);设置中心展示每库索引状态(进度/失败重试/重建)。
**分期**:P4 契约定稿 + **全文检索最小实现**(按存储档:FTS5 / tsvector,支撑 `@knowledge` 基础引用与命中);向量管线(embedding + 向量索引 + rerank)远期,由法规插件立项牵引——骨架不背重负载,但插件落地时零核心改动。
### 4.13 记忆系统(r3 新增)
**定位**:跨会话个性化机制;**默认关闭**(一切可禁用原则);契约先立、实现远期。
- **记忆模型**:`{ id, scope: user|project, type: fact|preference|decision|episode|procedure, content, source: run|manual, confidence, created, lastAccessed, expiresAt? }`。
- **写入路径**:① 显式——用户「记住这个」命令 / 设置页手填;② 策略写入——run 结束后由 lightweight 模型提议候选记忆,经 **HITL 卡片确认**入库(复用 HITL 机制);敏感内容必须确认。**禁止无确认静默写入长期记忆**(信任原则)。
- **读取路径**:ctxasm 的 memory 注入槽(预算内按相关性+新近度检索;记忆量小时全量注入)。
- **可管理性**:记忆列表 UI(查看/编辑/删除/导出)、per-project 隔离、保留策略(TTL/容量上限/新近度淘汰)。记忆是用户数据,系统只做工具——可完全关闭、可清空、可迁移。
- **分期**:P4 定契约与存储 schema 预留(不加逻辑);实现(写入提取、检索注入、管理 UI)远期。
### 4.14 输入增强与命令
- **`@` 引用**:`@artifacts:文档名`、`@files:`、`@knowledge:`——把对象显式挂进本轮上下文(映射到 ctxasm 的注入槽)。
- **`/` 命令**:注册式命令(内置:/new /model /profile /export;插件与用户可加)。命令识别走 intentgate 的系统功能命令路径(复用生态能力,不另造解析器)。命令带参数 schema → 输入框内联表单补全。
- **用户命令宏**:`/模板名` 展开为预存提示词模板(数据文件)——高频操作的零代码定制。
- **模板片段库**:提示词片段管理(增删改查 + 导入导出),输入框快速插入。
### 4.15 界面定制与主题
- **布局偏好**:三栏宽度、收起态、右栏 tab 显隐与排序、中栏密度(舒适/紧凑)、字号。
- **主题**:CSS 设计令牌(色彩/圆角/间距/字体),内置亮/暗双主题;令牌层可被用户覆盖(自定义主题 = 数据)。所有组件只消费令牌,不写死颜色——插件 UI 同样经渲染器消费令牌,自动随主题。
- **行为偏好**:过程折叠默认态(自动折叠/保留展开)、流式动画开关、发送快捷键(Enter/Ctrl+Enter)。
- 全部偏好进设置系统(4.9),本地即时生效并同步服务端。
### 4.16 数据可携带性与开放 API
- **导出/导入**:项目/会话导出为 JSON(含消息树、run 与事件、工件引用清单)或 Markdown(可读归档);导入恢复或迁移。工件本体支持批量导出。
- **画像/设置/模板/记忆打包迁移**:个人配置整体搬家(记忆实现后并入)。
- **开放 API**:OpenAPI 规范随 Core 发布;脚本与第三方客户端可用同一 API 完成全部操作(API-first 原则的落地物)。
### 4.17 观测、调试与用量
- **事件重放**:事件已持久化(seq 有序)→ 任意 run/会话可离线重放进调试视图(前端复用渲染器),开发期排障与回归演示的基础。
- **用量统计**:per-run(token/时长/工具调用)→ 汇总 per-conversation/project/模型/天;设置页与项目页展示。
- **上下文组装观测**:每次 run 记录各注入槽实际用量与裁剪记录(4.10)。
- **进度归属**:事件携带 run 归属链(Guidelines observability),任何卡顿可定位到具体 run/工具/子代理。
- 日志走 Logging-System 对齐(脱敏、追踪标识),错误走 Error-Code-System 稳定码(`intent` 域沿用,系统域新增种子域按追加式流程)。
### 4.18 与生态库的接入点(沿用既有方案,不重造)
- Agent-Native:主对话与工具执行的实际后端(runtime 模块窄接口适配)。
- Agent-Squad:sub-agent 编排(spawn/黑板/HITL 由 runmgr 映射为统一 Run + 事件)。
- Agent-Intent:入口闸门(守卫 + 命令识别)+ 编排目录(intent catalog 注入规划);未配置意图 = 行为回退(T0)。
- Error-Code-System / Logging-System:常量对齐 + 鸭子接口。
### 4.19 扩展点与定制点总览
**扩展轴**(系统如何长大):
| 扩展轴 | 机制 | 形态 | 落地 |
|---|---|---|---|
| 工具 | ToolProvider + 声明式 HTTP + MCP 适配位 | 声明/代码 | P2 内置最小集;P4 插件注册;MCP 远期 |
| 工作流 | 声明定义 + 意图绑定 | 声明 | P4 机制(示例插件演示) |
| 意图 | intent overlay,slots→HITL | 声明 | P3 接入,P4 插件注册 |
| 知识/RAG | KnowledgeProvider + Retrieval 管线 + 向量索引双档 | 基础设施+数据 | P4 契约+全文最小;向量远期 |
| 解析器 | ParserProvider + ParsedDocument IR | 代码/服务 | P2 内置档;P4 契约;MinerU/agent 档远期 |
| 记忆 | MemoryStore + HITL 确认写入 | 数据+策略 | P4 契约预留;实现远期 |
| 上下文管理 | ContextPolicy + 预算管理器 | 数据 | P2 基础;压缩/精细预算远期 |
| UI 面板/卡片 | UI schema + 通用渲染器 | 声明 | P1 渲染器基座,P4 插件注册 |
| 模型/Provider | Agent-Native + 按 kind 路由(chat/lightweight/embedding/rerank) | 配置 | P2 |
| 智能体画像 | AgentProfile 数据 + 画像模板 | 数据 | P2 默认,P4 自定义 UI |
| 命令/宏 | 命令注册 + intentgate | 声明 | P3 |
| 客户端 | 开放 API + OpenAPI/TS client | 代码 | P1 API 基线;CLI 远期 |
| 存储 | 对象目录接口(S3 适配位)+ VectorIndex 接口 | 代码 | P1 本地;S3/独立向量库远期 |
**定制轴**(用户不改代码可调):模型与参数(分层覆盖)、智能体画像、工具开关与确认策略、上下文构成与预算、命令宏与提示词模板、HITL 策略与预算、知识库与解析策略、界面布局/主题/行为偏好、面板显隐排序、记忆开关与管理、数据导出迁移。
---
## 5. 兼容、迁移与恢复
- 老系统:冻结不动,仅作领域知识与机制参考;远期领域插件按新系统契约**全新设计**,不迁移、不兼容、不搬代码。MinerU/Embedding/Reranker 复用的是**部署经验与服务形态**,不是老系统代码。
- 生态仓:本系统全部通过 submodule + gitlink 固定;接入时如需扩接口,走「提供方先扩展兼容契约 → 消费方适配 → 组合验证 → Dev 更新 gitlink」顺序(多仓规范)。
- 契约兼容:事件协议、插件 API、UI schema、ParsedDocument、Retrieval、Memory 契约统一版本化;字段只增不改语义;消费方对未知 `type`/词汇静默忽略 + 版本协商(信封 `v` 字段);扩展走兼容窗口流程。
- 回退:Dev 仓恢复旧 gitlink 组合即可整体回退;数据库 schema 迁移显式设计(每阶段附回滚脚本;不假设可反向推导)。
- 未安装任何插件、未启用任何扩展(含记忆、MinerU、向量检索)时,系统即纯通用智能体对话骨架(T0 行为基线,作为验收对照)。
---
## 6. 验收(设计期计划,实现后补证据)
| 需求/验收条件 | 负责模块/契约 | 验证方法 | 预期结果 |
|---|---|---|---|
| 三栏布局:调宽/超调收起/展开/偏好持久化 | Frontend ProjectNav | 组件测试 + Playwright | 拖拽行为与持久化符合 4.4 |
| 流式对话:区分正文/思考/工具,终态后过程折叠可回看、折叠默认可设置 | streamhub + Part 渲染器 | 集成测试(mock runner 事件序列)+ 浏览器验收 | 过程 parts 折叠为摘要,展开可见 |
| 断线重连终态对账 | streamhub Stream 契约 | 故障注入(中断 SSE) | 恢复后消息树与权威 Query 一致 |
| 文件上传→解析→注入→对话闭环;解析失败显式可见 | ingest + ctxasm | 集成测试(md/docx/pdf 样张 + 损坏文件) | ParsedDocument 注入正确;失败不静默 |
| 工件查看 | artifacts + 右栏查看器 | 集成 + 浏览器验收 | 产出→右栏渲染 |
| HITL 卡片:选项/影响/建议/自由输入路由 | hitl + intentgate | 契约测试(选中 vs 自由输入 vs 命令三路径) | run 正确恢复或正确转轨 |
| sub-agent 弹窗:任务树/中间过程/结果 | runmgr + AgentTracker | 多 agent 场景集成测试 | spawn 关系与进度完整展示 |
| 模型路由与画像:换模型/参数/工具集生效 | profiles + settings + runtime | 集成测试(三层覆盖链各取一例) | 生效时机与 4.9 声明一致 |
| 上下文预算与裁剪可观测 | ctxasm 组装观测 | 构造超限场景单测 | 裁剪记录完整、行为符合策略 |
| 声明式 HTTP 工具:注册即用 | toolreg | 契约测试(mock 端点) | 无代码新增可用工具 |
| 设置 schema 驱动:新增设置项零前端改动 | settings + Settings UI | 加一个测试设置项走 schema | 设置页自动出现且生效语义正确 |
| 示例插件装卸不破坏核心 | pluginhost + registry + CI 依赖检查 | 装/卸示例插件 → 核心全量回归 | 核心功能零回归;在途引用稳定报错 |
| 未装插件 = 通用骨架(T0 基线) | 全部 | 无插件全量回归 | 与装插件前行为一致 |
| 全新 clone → 构建运行 | Dev 仓 | 干净环境验证 | 一条命令起完整系统 |
| 版本发布 | Releases | manifest 校验 | 制品与 gitlink 组合一一对应 |
---
## 7. 实施计划
每阶段一张主任务记录(Documents 仓)+ change-plan + 验证记录;Dev 仓组合推进。规模为单人开发粗估,按实际节奏调整。
### 7.1 本计划(骨架 + 插件机制 + 重能力契约)
**P0 仓网引导(半天–1 天)**
- 六个空仓初始化:README、AGENTS.md/PROJECT.md(按模板)、`policy/`、`.gitignore`、gitea 描述(按 3.2 表)、默认分支 main。
- Dev 仓建 submodule 骨架(Core/Backend/Frontend/Documents + Guidelines + 生态五仓),顶层 Makefile(组合构建/测试入口)与**原生开发环境**(`make dev`:本地直接构建运行单二进制 + 嵌入式存储,前端 Vite dev server 代理;不依赖容器。PG 档测试用本机原生 PG 或 CI 服务,不作为默认路径)。
- 本方案文档入库并推送;老系统仓补「冻结参考」描述。
- 出口:全新 clone Dev 仓 → 子模块物化 + 空构建通过;各仓描述齐全。
**P1 契约与骨架闭环(4–6 天)**
- Core:领域模型 + 事件信封 + HITL 卡片协议 + UI schema 词汇 + 设置 schema 框架(Go 类型 + JSON Schema + TS 类型三态一致,代码生成防漂移)+ OpenAPI 基线。
- Backend:project/session、runmgr、streamhub、**mock runner**(按脚本回放事件序列,不接 LLM)、SSE 端点、settings 骨架、**存储层双档(SQLite 默认 / PostgreSQL 可选)schema v1**。
- Frontend:三栏布局 + 左栏交互(调宽/超调收起)+ 主题令牌基座 + 中栏流式渲染与折叠 + 右栏 tab 骨架 + SSE 客户端(游标/重连/对账)+ schema 渲染器基座。
- 出口:浏览器端到端走通一轮 mock 对话,覆盖流式、折叠、断线重连;布局偏好持久化。
**P2 真实智能体接入与定制基座(4–6 天)**
- runtime 接 Agent-Native:真实 LLM 对话、thinking/正文/工具调用事件映射;run 取消与中断恢复策略。
- 模型接入:provider 配置、按 kind 路由(chat/lightweight/embedding/rerank 配置位)、密钥管理、运行参数三层覆盖。
- profiles(默认画像 + 基础 CRUD)、toolreg(内置最小集 + 确认策略 + 审计)、ctxasm 基础(窗口/工具结果截断/注入槽骨架 + 组装观测)、**ingest 内置解析器**(md/txt/docx/pdf 文本层,ParsedDocument IR)+ artifacts(上传/工件/右栏查看器)。
- 出口:真实模型对话端到端;上传文档→解析→注入对话闭环;工具调用折叠正确;换模型/换参数即时生效。
**P3 编排、sub-agent、HITL 与命令(4–6 天)**
- runtime 接 Agent-Squad:sub-agent spawn/进度/结果 → 统一 Run 与事件;右栏 Plan/Todos/Agents tab;AgentTracker 弹窗(含事件重放)。
- intentgate 接 Agent-Intent:入口闸门 + 目录注入 + `/`命令识别;`@` 引用(含 @knowledge 全文最小实现)。
- hitl 完整落地(含自由输入三路径路由:选中/澄清回填/转轨)。
- 出口:多 agent 任务全链路可视化;HITL 三路径验收过;`/`命令与 `@` 引用可用。
**P4 插件框架、重能力契约定稿与机制验证(4–5 天,不含领域插件与向量实现)**
- pluginhost:manifest、五类能力注册、声明资产热加载、fail-closed、卸载语义、权限清单。
- registry 统一注册表 + 来源标记 + 按来源启停;CI 依赖检查。
- 前端插件 tab/卡片经 schema 渲染器注册;插件设置并入设置中心。
- **契约定稿**:ingest 解析策略与 MinerU 适配位、Retrieval(Chunker/EmbeddingProvider/VectorIndex/Retriever)+ 全文检索最小实现、Memory 契约与 schema 预留。
- **示例插件**(`example`,随 Documents 的插件开发指南一同发布):一个声明式 HTTP 工具(指向 mock 端点)+ 一个 demo 面板 + 一个 demo 卡片 + 一个意图 spec + 一段设置声明——最小体量覆盖五类能力。
- 画像自定义 UI + 导入导出;命令宏与提示词模板库;声明式 HTTP 工具用户流程。
- 出口:装卸示例插件核心零回归;插件开发指南可照做;重能力契约评审通过(后续远期实现按契约零核心改动接入)。
**P5 发布链路(1–2 天)**
- Releases 仓:版本 manifest 生成(从 Dev 固定提交导出)、**单二进制制品**(linux amd64/arm64 优先,静态链接 + go:embed 前端 + 校验和)、**原生部署物料**(systemd 单元示例、安装/升级/回退脚本、备份恢复说明、可选外部服务 MinerU/Embedding/Reranker 的原生接入文档)、回退演练。
- 出口:全新裸机环境「下载二进制 → systemd 启动 → 浏览器可用」;manifest↔gitlink 对应校验过。
里程碑:P1 = 可演示骨架;P2 = 可真实对话的定制基座;P3 = 可日常使用的通用智能体系统;P4 = 扩展与重能力契约验证完成;P5 = 可分发产品。
### 7.2 远期路线(骨架完成后另行立项,本计划不含)
| 项 | 说明 |
|---|---|
| **CDMO 工作流插件** | 医疗器械 CDMO 工作流、意图、文档模板与面板,**基于新系统插件契约全新设计**:工作流即数据、意图 slots 驱动 HITL、文档产出走 artifacts、面板走 UI schema。老系统仅作领域业务知识参考(流程、术语、文档体系),不迁移代码、不兼容接口、不复用数据格式。立项时先写该插件的设计方案。 |
| **法规知识库插件** | KnowledgeProvider 契约实现 + 向量 RAG 管线落地(本插件为牵引方)+ 知识面板与检索工具;素材基于 `08-Regulations`。 |
| 向量 RAG 管线 | embedding + 向量索引(按存储档:sqlite-vec/进程内扫描 或 pgvector)+ rerank 全链路;MinerU 深度解析适配器与交叉验证(D12 保留时,原生服务形态接入)。 |
| 代码执行工具 | 通用沙箱执行;解锁 agent 驱动解析(4.11 第三档)与更多自动化;单独立项(安全设计)。 |
| 跨会话记忆实现 | 4.13 契约的实现:提取、确认、注入、管理 UI。 |
| 上下文压缩增强 | 历史滚动摘要、精细预算管理器。 |
| MCP 外部工具接入 | ToolProvider 的 MCP 适配器,接入外部工具生态,核心零改动。 |
| 并行子任务、run 透明恢复 | 协议已预留(4.2),需要时开启。 |
| CLI / headless 客户端 | 复用开放 API。 |
| 多用户 | owner 字段已预留,认证与授权整体设计。 |
| 对象存储 S3 后端、独立向量库 | 按需(VectorIndex 接口已预留)。 |
---
## 8. 决策与剩余项(需用户拍板)
| # | 决策点 | 推荐 | 待确认 |
|---|---|---|---|
| D1 | `Agent-System-Documents` 定位 | 系统文档 + 跨仓过程记录仓(本设计采用) | ☐ |
| D2 | 插件代码形态 v1 | 进程内 + 构建期组装;契约按跨进程定义,v2 可升 sidecar(4.6) | ☐ |
| D3 | 前端栈 | React 19 + Vite + TS(复用老系统经验与依赖) | ☐ |
| D4 | 传输 | REST + SSE(v1);WebSocket 备选 | ☐ |
| D5 | 持久化 | 双档存储:默认嵌入式 SQLite + 可选 PostgreSQL(详见 D16);对象目录本地起步、预留 S3 适配位 | ☐ |
| D6 | `SMDF-Agent-System` 空仓用途 | 暂不使用,待澄清后决定(弃用 / 改名纳入) | ☐ |
| D7 | 本地 `Agent-System-Ensemble/` 空目录 | 用作 Agent-System-Dev 的本地工作副本(clone 目标) | ☐ |
| D8 | 骨架期 HITL 自由输入路由复杂度 | v1 三分支(选中→回填 / 澄清→回填 / 其他意图或命令→转轨),不引入完整 DST(沿用 agent-intent 边界结论) | ☐ |
| D9 | 示例插件范围 | 随 P4 做一个最小 `example` 插件覆盖五类注册能力(验证机制的最小成本方式),领域插件一律远期 | ☐ |
| D10 | 声明式 HTTP 工具进骨架期 | 进(P4,体量小、是「无代码扩展」主张的最有力证明) | ☐ |
| D11 | MCP 适配时机 | 远期(v1 只做接口语义预留,4.8) | ☐ |
| D12 | MinerU 定位 | **备选 + 交叉验证**:主路线为内置代码解析器;MinerU 作为独立可选服务(默认不部署),用于扫描件/复杂版式与交叉验证;保留适配位(4.11)。若你倾向彻底弃用,则删除适配位仅留 ParserProvider 接口 | ☐ |
| D13 | 向量索引实现 | 按存储档双实现:嵌入式档 sqlite-vec 或进程内向量扫描(个人规模数万 chunk 内可接受)、PG 档 pgvector;VectorIndex 接口不绑定实现,可换独立向量库 | ☐ |
| D14 | 代码执行工具(agent 驱动解析的前提) | 远期单独立项(沙箱安全设计复杂度高),v1 不做 | ☐ |
| D15 | 记忆默认状态 | 默认关闭,用户显式开启;写入必须 HITL 确认(4.13) | ☐ |
| D16 | 默认存储档(r4 部署约束的推论) | **默认嵌入式 SQLite**(单文件,零外部服务,支撑单二进制开箱即用);**PostgreSQL 为可选档**(原生安装、DSN 接入,面向更大规模),迁移双方言同源、CI 双档验证。若你倾向默认 PG(接受运行前置一个原生 PG),请批注 | ☐ |
批准本方案(含 D1–D15 或批注修改)后,从 P0 开始执行。