Files
Agent-System-Documents/docs/guides/architecture-overview.md
T
weichen 09d968cb2f Add architecture guide set for overview, intent, runs, and squads
Why: 系统缺少面向新人与新任务的现状导览;把结构/意图识别/任务执行/小队
四条主线的架构、模型与调用链整理成五篇参考文档,降低跨仓定位成本。

Evidence: 锚点核验于 Dev 组合 218fc4b1ba00b0a03b5bb79f292b3eba6c987a58
(2026-10-08,引用的函数入口行号逐一 grep 定位);git diff --check 通过;
五篇互链相对路径全部可解析。SRC=SELF(本地核验,任务卡有记录)。

Impact: 纯文档新增(docs/guides 五篇),无代码/契约/配置影响。

Refs: Dev 任务分支 feature/architecture-guides(R0 218fc4b1)。
2026-10-08 09:33:13 +00:00

214 lines
14 KiB
Markdown
Raw 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 系统结构与架构
> 基准:Agent-System-Dev 组合 `218fc4b1ba00b0a03b5bb79f292b3eba6c987a58`(R0,2026-10-08 锚点核验)。
> 行号为该提交下的函数入口位置(个别内部区段为约略范围),随代码演进漂移;文件与函数名是稳定锚点。
> 文中路径均为 Dev 组合仓内相对路径。
---
## 1. 总体形态:一个父仓 + 12 个子模块仓的组合系统
Agent-System 是**多仓组合(gitlink 固定指针)**的开发集成父仓,不是单一代码库。
`.gitmodules` 定义了 12 个子仓,分两类:
**modules/(5 个产品模块仓)**
| 仓 | 目录 | 定位 | 技术栈 |
|---|---|---|---|
| Agent-System-Core | `modules/core` | 核心契约库:纯数据类型 + 线格式权威,零第三方依赖 | Go(附 `ts/types.ts` TS 镜像) |
| Agent-System-Backend | `modules/backend` | 后端模块化单体,默认单二进制(内嵌前端 + 嵌入式 SQLite) | Go |
| Agent-System-Frontend | `modules/frontend` | Web 前端 | React 19 + Vite + TypeScript |
| Agent-System-UI | `modules/ui` | 纯展示组件库:props 进 events 出,不持状态不调 API | React + CSS 令牌 |
| Agent-System-Documents | `modules/documents` | 文档过程仓(设计提案/记录/报告),无代码 | Markdown |
**deps/(7 个基础库仓)**
| 仓 | go module 名 | 一句话职责 |
|---|---|---|
| agent-native | `agent-native` | Agent 执行内核:ReAct 循环、LLM 客户端、工具注册表、会话转录、MCP、技能 |
| agent-squad | `agent-squad` | 小队编排底座:规划器、Leader 委派、黑板、HITL 挂起恢复、调度 |
| agent-intent | `agent-intent` | 确定性意图识别:四级漏斗(Guard→Expectation→Rules→Adjudicate) |
| agent-command | `agent-command` | 命令总线基础库:命令 spec、危险分级、审计信封(零依赖) |
| error-code-system | `error-code-system` | 跨系统错误码目录 + HTTP 错误信封 + 查询服务 |
| logging-system | `logging-system` | 结构化日志库 + 采集服务 |
| development-guidelines | —(非 Go) | 人与 Agent 共用的开发规范文档基线 |
**依赖方向铁律**(`README.md`):
```
frontend → core ← backend → { agent-native, agent-squad, agent-intent, agent-command }
↘ error-code-system / logging-system
```
core 与各生态仓互不依赖;backend 对 8 个库的引用经自己仓内 `deps/` 子模块 +
`modules/backend/go.mod` 的 `replace` 收敛(父仓顶层 `deps/` 与 `modules/backend/deps/`
是同一批仓的两份 gitlink,`scripts/check-pins.sh` 核对一致)。仓库**不使用 go.work**
(避免工作区最小版本选择抬高 backend 单独构建的依赖版本,见 `PROJECT.md`)。
**三态一致的契约机制**:core 的每个契约同时存在 ① Go 类型(camelCase JSON)、
② `modules/core/testdata/golden/*.json` 黄金样本(线格式权威)、③ `modules/core/ts/types.ts`
手工 TS 镜像。父仓 `make contracts` 把 TS 镜像生成到 frontend 与 ui 的 `src/contracts.ts`。
---
## 2. Backend 功能分布(产品核心)
单二进制入口:`modules/backend/cmd/agent-system/main.go`(子命令 serve/version/apikey/user/config)。
组合根与装配顺序在 `modules/backend/internal/app/app.go` 的 `Run()`:
存储 → 总线 → 工具注册 → settings/prompts/skills/profiles → runmgr(三个 runner + SquadRunner 注入)→
intentgate → 插件宿主 + hostapi → workflow 注册表 → RAG → 可选 intentsem →
cardsvc/cmdbus → server + 限流 + 认证 → HTTP 监听(默认 `127.0.0.1:8787`)。
### internal 包职责一览(功能 → 代码分布)
| 包 | 主文件 | 职责 |
|---|---|---|
| app | `internal/app/app.go` | 组合根:装配一切组件 |
| config | `internal/config/config.go` | 启动配置单一管道:内置默认→`--config` JSON→环境变量→CLI |
| store | `internal/store/store.go` | 持久化唯一入口;SQLite(默认,modernc 纯 Go)/ PostgreSQL 双档;`dialect.go` 方言收敛、`migrate.go` 版本化迁移 |
| blobstore | `internal/blobstore/blobstore.go` | 工件对象存储抽象,默认本地目录 `<data>/artifacts/` |
| bus | `internal/bus/bus.go` | 进程内事件总线:按会话转发已持久化事件给 SSE 订阅者 |
| pgbus | `internal/pgbus/pgbus.go` | PG 档跨实例扇出:`NOTIFY/LISTEN agent_events` |
| cmdbus | `internal/cmdbus/cmdbus.go` | 命令总线宿主:button/card/slash/chat 四入口归一分发、危险命令确认卡、审计 |
| cardsvc | `internal/cardsvc/cardsvc.go` | 收件箱任务卡服务(card.* 事件投影) |
| runmgr | `internal/runmgr/runmgr.go` | **Run 生命周期枢纽**:状态机、事件持久化+广播、HITL、子代理任务树、工具执行策略、取消级联 |
| route | `internal/route/route.go` | 唯一意图 Router:命令总线 > 工作流 > 普通回合 |
| intentgate | `internal/intentgate/gate.go` | 意图闸门:接入 agent-intent 库,插件意图 overlay |
| intentsem | `internal/intentsem/scorer.go` `generator.go` | 意图慢通道:embedding 语义重排 + 轻量模型命令生成(默认关) |
| runtime | `internal/runtime/runner.go` `llm.go` `llm_direct.go` `sub_loop.go` `workflow_compiled.go` `squad_runner.go` `model.go` | 四类 Runner(LLM/Mock/Sub/Squad)+ 工作流执行入口 + 模型路由 |
| wfcompile | `internal/wfcompile/run.go` `compiler.go` | 工作流编译执行驱动:编译图 → 小队引擎装配 → 步进循环 → critic 终判 |
| ctxasm | `internal/ctxasm/ctxasm.go` `finish.go` | 上下文组装与预算裁剪 |
| prompts | `internal/prompts/service.go` | 提示词模块库:embed 内置 + DB 用户覆盖链 |
| skills | `internal/skills/skills.go` | 内置技能种子(go:embed recipes → `<data>/skills/`) |
| tools | `internal/tools/registry.go` | 统一工具注册表:内置/声明式 HTTP/插件工具同形态 |
| plugins | `internal/plugins/host.go` `host_v2.go` | 插件宿主:fail-closed 热加载;sidecar 进程拉起 |
| hostapi | `internal/hostapi/server.go` | sidecar 本机回调面 `/host/v1`(127.0.0.1 随机端口 + 随机 token) |
| workflow | `internal/workflow/registry.go` | 工作流**定义**注册表(编译执行器在 wfcompile) |
| ingest / docgen / rag / quality | 各主文件 | 文档摄取 → ParsedDocument IR;Markdown→docx;混合检索 rerank;交付物六维打分 |
| profiles / settings / ratelimit | 各主文件 | 画像;system→user→project 分层设置;租户限流(内存/Redis) |
### 其他目录
- `modules/backend/pkg/extension/`:对下游仓的**公开扩展面**(下游只许依赖本包与 core,
`surface.txt` 锁导出面);`link/` 把 extension.Main 接回组合根。
- `modules/backend/web/embed.go`:`go:embed` 内嵌前端构建产物。
- `modules/backend/deps/`:8 个库的 submodule 副本(replace 目标)。
---
## 3. 前端与 UI 分工
- **frontend**(`modules/frontend/src/`):`App.tsx` 四栏布局 —— 左(项目/会话树
`TaskSidebar.tsx`)、中(流式对话 `Conversation.tsx` + `ProcessTimeline.tsx`)、
预览区(`PreviewPane.tsx` / `ArtifactsPanel.tsx`)、右(工作台卡流 `Workbench.tsx`)。
职能文件:`api.ts`(HTTP 客户端)、`live.ts`(SSE 到达序投影纯逻辑)、
`store.ts`、`runstate.ts`、`pluginHost.ts`、`outbox.ts`。
- **ui**(`modules/ui/src/`):只渲染词汇有限的 UI schema —— `UIRenderer.tsx`、
`InboxList.tsx`、`InlineConfirmCard.tsx`(危险命令确认卡)、`ToolBlock.tsx`、
`tokens.css`(设计令牌唯一来源)。frontend 经 `@ui` 别名直接源码组合(`vite.config.ts`)。
---
## 4. 通信架构:HTTP + SSE,无 WebSocket
- **全部 HTTP 路由**集中在 `modules/backend/internal/server/server.go` 的 `Handler()`
(约 90 条 `mux.HandleFunc`):auth/users、projects/conversations/messages、cards、
artifacts/uploads、profiles/prompts/settings、tools/plugins、commands/audit、
plan/todos、knowledge、hitl 等。
- **SSE** 是唯一增量通道:`GET /api/events?conversationId=...`(`server.go:171` 注册,
`server.go:275` 处理器),带 `Last-Event-ID`/`since` 游标重放;项目级流用伪会话键
`project:<id>`(`modules/core/events.go:30` `ProjectChannelKey`)。全仓 grep 无 websocket。
- **事件三层转发**:
1. `runmgr/events.go` 事件缓冲:高频 delta 合并(150ms/64 条,`events.go:42-43`),先落
store(会话内单调 seq)再 `bus.Publish`(`events.go:83`);
2. `internal/bus` 内存总线 → 在线 SSE 订阅者;
3. `internal/pgbus`(仅 PG 多实例档):事务提交后 NOTIFY,其他实例 LISTEN 后按 seq 从库
取回转发本地 bus。
- **事件词汇**全部定义在 `modules/core/events.go` 的 `StreamEvent` 信封
(message.delta / thinking.delta / tool.* / run.phase / hitl.request / plan.update /
agent.spawn / agent.progress / card.* / artifact.* 等 20+ 类型)。
---
## 5. 持久化与磁盘布局
- 主库:`<data>/agent-system.db`(SQLite,FTS5 全文 + CJK LIKE 兜底)或 PostgreSQL
(`--dsn`,pgx 驱动);迁移双方言可回滚;租户隔离靠 owner 列硬过滤。
- 工件:`<data>/artifacts/`(blobstore 本地档,Put 原子落盘)+ store 登记。
- 技能:`<data>/skills/`(内置种子 + 用户覆盖)。
- 工作区沙箱:`<data>/workspaces/<owner>/<conversationID>/`(fs 工具根)。
- 小队运行态:编排目录下 `runs/<run_id>/*.json`(磁盘即权威,见小队篇)。
- 本机服务实例(`scripts/svc.sh` 管理):`runtime/dev/`(agent 后端 + SQLite)、
`runtime/pg1/`(PostgreSQL);`data/`、`data-test/` 为默认/测试数据目录。
---
## 6. 插件系统
- 契约:`modules/core/plugin.go`(manifest v1:tools/workflows/intents/prompts/panels/
cards/commands 等 provides);`modules/core/plugin_v2.go`(2.0-experimental 窗口:
PluginScope 可见性、PluginBackend{inproc|sidecar}、技能/MCP/知识集/解析器/代理声明)。
- 宿主:`modules/backend/internal/plugins/host.go` —— 「manifest + 声明资产 + 可选代码」,
任一资产解析失败整批拒绝(fail-closed),支持热加载 `Reload`;`host_v2.go` 拉起 sidecar
进程(注入 `AGENT_HOST_API`/`AGENT_HOST_TOKEN` 环境变量)。
- sidecar 回调经 `internal/hostapi/server.go` 的 `/host/v1`(kv/audit/commands/llm/search);
进程内插件走 `pkg/extension`(EXT-1)+ `link` 包。
- 示例:父仓 `plugins/example/`、`examples/sidecar-demo/`、`examples/downstream-rdm/`。
---
## 7. 端到端数据流(用户输入 → 结果返回)
```
用户输入(中栏)
│ POST /api/conversations/{id}/messages server.go:574 postMessage
├─ "/" 前缀 → cmdbus 命令总线(不启 run,server.go:623)
├─ 附件 → ingest.Parse 文档摄取(并行,互不依赖,server.go:643)
├─ 意图识别 → intentgate(agent-intent 四级漏斗,server.go:655)
├─ 路由裁决 → route.Decide route.go:60
│ ├─ KindCommand → cmdbus.Dispatch(直接执行命令)
│ ├─ KindWorkflow → runmgr.StartClaimedWorkflowRun(:996)
│ └─ KindTurn → runmgr.StartClaimedConversationRun(:991)
├─ runmgr 建 Run(pending)落库 → 选 Runner(runmgr.go:918)→ go execute()
│ ├─ LLMRunner → agent-native 内核 ReAct 循环(默认)
│ ├─ CompiledWorkflowRunner → wfcompile 编译执行(可由规划子代理生成)
│ └─ SquadRunner → squadadapter → agent-squad 引擎
├─ 一切增量皆事件 → runmgr 缓冲 → store(seq 权威)→ bus → SSE
└─ 前端 live.ts 到达序投影 → 中栏对话 / 右栏卡流 / AgentTracker
```
- HITL:`hitl.request` 卡片(choice/input/confirm/form)→ 用户 `POST /api/hitl/{id}/resolve`
→ `runmgr.ResolveHITL`(runmgr.go:1261)恢复或转轨。
- 工件:产物落 blobstore + store → `artifact.created` 事件 → 预览区;quality 六维打分。
---
## 8. 设计文档索引
架构权威文档在 `modules/documents/docs/proposals/`:
- 整体:`2026-09-29-system-skeleton-design-and-plan.md`(骨架设计 + D1–D16 决策,主设计)、
`2026-09-30-dual-tier-storage-and-multitenancy.md`(双档存储/多租户)、
`2026-10-01-base-extension-roadmap.md`(基座不可改、下游二开)。
- Agent 栈:`2026-10-01-agent-harness.md`(回合循环、多代理编排)、
`2026-10-02-agent-stack-completion.md`(通用智能体/小队/意图)、
`2026-10-07-agent-stack-n1q1i1-plans.md`、`n2-plan.md`、`n3-plan.md`(N 系列阶段方案)。
- 其他:卡片流/收件箱/命令总线/工作区(2026-09-30 三篇)、插件契约 v2、UI 重构等。
---
## 9. 关键文件速查
| 想了解什么 | 看哪里 |
|---|---|
| 程序入口与装配 | `modules/backend/cmd/agent-system/main.go`、`internal/app/app.go` |
| 全部 HTTP 路由 | `modules/backend/internal/server/server.go`(`Handler()`) |
| Run 状态机与事件 | `modules/core/model.go`、`modules/core/events.go`、`internal/runmgr/runmgr.go` |
| Agent 执行循环 | `deps/agent-native/runtime/loop.go`、`internal/runtime/llm_direct.go` |
| 意图识别 | `deps/agent-intent/intent/`、`internal/intentgate/gate.go`、`internal/route/route.go` |
| 小队引擎 | `deps/agent-squad/squad/`、`internal/squadadapter/adapter.go`、`entry.go` |
| 工作流 | `internal/workflow/registry.go`(定义)、`internal/wfcompile/`(编译执行)、`internal/runtime/workflow_compiled.go`(入口) |
| 工具体系 | `modules/core/tools.go`、`internal/tools/registry.go`、`internal/runmgr/runmgr.go:740` |
| 提示词/技能 | `internal/prompts/service.go`、`internal/skills/skills.go` |
| 前端投影 | `modules/frontend/src/live.ts`、`src/store.ts` |