Files
yawan-workbench/核心逻辑设计文档v6.md
T

781 lines
27 KiB
Markdown
Raw Normal View History

# 雅文内容创造工作台 · 核心逻辑设计文档 v6
> 文档日期:2026-08-26
> 关联文档:[设计文档 v5](./设计文档v5-系统设计.md)、[设计文档 v6:用户端、管理端与云化设计](./设计文档v6-用户端管理端云化与计费设计.md)
> 从零落地:[核心逻辑设计文档 v6:从 0 到 1](./核心逻辑设计文档v6-从0到1.md)
> 文档用途:说明系统如何运行、数据如何流转、权限如何隔离,以及 v6 多用户云化能力如何接入现有 Runtime
> 说明:本文件是逻辑设计文档;其中“当前实现”对应现有源码,“v6 目标”对应 v6 设计,不能把规划功能当作已上线功能
## 0. 一句话理解系统
雅文内容创造工作台是一个以 **任务为中心、Agent 为执行单元、知识库为事实来源、记忆库为经验来源、模型目录为受控能力、Trace 为审计链路** 的内容生产系统。
完整逻辑可以概括为:
```text
用户请求
→ 权限和配额校验
→ 冻结任务配置
→ Agent 画布拓扑调度
→ 只检索允许使用的知识与记忆
→ Agent Runtime 生成内容
→ QC 质检
→ 人工审查
→ 组合 Agent 统一成稿
→ 云存储交付
→ 用量计量、账单和 Trace 归档
```
## 1. 核心原则
### 1.1 数据归属优先
任何资源都先确定归属,再决定谁能看、谁能用、谁能改:
```text
organization_id
→ owner_user_id
→ resource_type + resource_id
→ visibility / grant / permission
```
用户、Agent、任务、知识库、记忆、模型选择、Trace、产物和账单都必须绑定组织与用户。没有归属键的数据不能进入生产链路。
### 1.2 配置先冻结,运行后复现
任务开始前冻结:
- 画布节点和连线。
- Agent 规则、规则版本和规则哈希。
- Agent 挂接的技能、知识库和记忆。
- Provider、模型、模型能力标签和费率版本。
- 内容段、上游锚点和任务参数。
任务运行过程中修改管理端配置,只影响后续新任务;当前任务始终使用自己的快照。
### 1.3 知识与记忆不能越权
检索服务必须先计算用户可访问的资源集合,再执行向量检索:
```text
allowed_kb_ids
= owned_kb_ids
∪ granted_kb_ids
∪ global_kb_ids
allowed_memory_ids
= owned_memory_ids
∪ granted_memory_ids
∪ global_memory_ids
```
不能先搜索全库再由前端过滤。Agent 只能使用任务快照中允许的知识库和记忆。
### 1.4 事实必须可追溯
每个知识片段、模型调用、工具调用、质检结果和最终产物,都要能回溯到:
```text
组织 → 用户 → 任务 → Run → Trace → Segment / Agent → 资源或模型
```
没有来源的事实不能标记为已验证内容;没有 Trace 的模型调用不能计入已完成任务。
### 1.5 失败必须显式化
失败不等于空结果,等待不等于成功,Provider 返回 200 也不等于内容有效。系统必须区分:
- Provider 错误、网关拦截、模型拒绝、超时、限流。
- RAG 无命中、索引损坏、文件解析失败。
- Agent 输出为空、格式错误、护栏失败。
- QC FAIL、人工打回、组合总检失败。
- 云对象上传失败、导出失败、账单计量失败。
## 2. 参与者和职责
| 参与者 | 核心职责 | 不负责的事情 |
| --- | --- | --- |
| 用户端 | 创建任务、选择已开放模型、使用自己的资源和获授权资源 | 不能接 Provider、不能改费率、不能越权读私有资源 |
| 管理端 | 管理用户、Provider、模型目录、知识库授权、记忆授权、配额、计费和导出 | 不绕过审计直接改历史账单 |
| Coordinator Agent | 把导图拆成可执行内容段、分配标签和时间范围 | 不直接生成最终长稿 |
| Production Agent | 根据任务段、规则、技能、知识和记忆生成内容 | 不使用未挂接资源,不补写无来源事实 |
| QC Agent | 按固定检查项审查结构、内容、风格和跨段一致性 | 不替用户默默修改并伪装为通过 |
| Composer Agent | 组合已人工通过的段落,执行全文一致性检查 | 不组合未通过或被跳过的段落 |
| Agent Runtime | 维护会话、工具、审批、护栏、恢复和 Trace | 不替业务层决定资源权限 |
| RAG 服务 | 解析、分块、向量化、检索、引用和消费锁定 | 不决定用户是否有权访问库 |
| 计量服务 | 记录 LLM、Embedding、OCR、存储和导出用量 | 不修改原始调用事实 |
## 3. 核心对象关系
```mermaid
erDiagram
ORGANIZATION ||--o{ USER_ACCOUNT : contains
USER_ACCOUNT ||--o{ AGENT : owns
USER_ACCOUNT ||--o{ KNOWLEDGE_BASE : owns
USER_ACCOUNT ||--o{ MEMORY : owns
KNOWLEDGE_BASE ||--o{ KNOWLEDGE_FILE : contains
KNOWLEDGE_BASE ||--o{ KNOWLEDGE_BASE_GRANT : shares
MEMORY ||--o{ MEMORY_GRANT : shares
MODEL_PROVIDER ||--o{ MODEL_CATALOG : exposes
MODEL_CATALOG ||--o{ MODEL_ORGANIZATION_GRANT : opens
AGENT ||--o{ AGENT_SKILL_BINDING : uses
AGENT ||--o{ AGENT_KB_BINDING : uses
CAMPAIGN ||--o{ CAMPAIGN_RUN : executes
CAMPAIGN ||--o{ SEGMENT : contains
CAMPAIGN_RUN ||--o{ AGENT_SESSION : starts
CAMPAIGN_RUN ||--o{ RUN_EVENT : emits
CAMPAIGN_RUN ||--o{ LLM_CALL : records
SEGMENT ||--o{ QC_REPORT : checks
CAMPAIGN ||--o{ ARTIFACT : produces
LLM_CALL ||--o{ USAGE_EVENT : meters
```
## 4. 任务核心逻辑
### 4.1 任务创建
任务创建只保存输入和初始选择,不立即调用模型:
1. 用户填写任务名称、导图或主题。
2. 服务端确认用户属于有效组织,且有创建任务权限。
3. 用户选择画布;服务端读取画布节点、连线和启停状态。
4. 服务端校验 Agent、技能、知识库和模型目录引用。
5. 任务进入 `draft`。
如果用户选择的模型被停用、Provider 已失效、知识库授权已撤销或 Agent 缺少必需知识库,任务创建应返回明确错误,而不是等到模型调用时才失败。
### 4.2 导图解析
解析由 Coordinator Agent 完成:
```mermaid
flowchart TD
A[导图/主题输入] --> B[输入护栏]
B --> C[Coordinator Runtime]
C --> D[识别内容节点]
D --> E[绑定内容标签]
E --> F[生成时间范围和任务目标]
F --> G[识别产品/下一段/钩子]
G --> H[标记不确定项]
H --> I[生成 Segment 任务单]
```
Coordinator 必须遵守:
- 不补写导图没有提供的产品、日期、人物或事实。
- 一个 Segment 只承担一个清楚的内容目标。
- 每个 Segment 必须有标题、内容标签、时间范围、导图原文和目标 Agent。
- 不确定信息写入 `pending_confirms`,不能猜测后直接进入生产。
### 4.3 运行快照
创建 Run 时冻结完整配置:
```text
CampaignRun.config_snapshot
├── organization / user
├── canvas
├── segments[]
│ └── primary Agent snapshot
├── stages
│ ├── coordinator
│ ├── qc.structure
│ ├── qc.content
│ ├── qc.style
│ ├── qc.cross
│ └── composer
├── model catalog/version/price
└── memory and knowledge access snapshot
```
快照写入后,任务只引用快照,不重新读取用户当前编辑中的规则。这样可以保证审查结果和最终成稿对应同一组配置。
### 4.4 Run 状态机
```mermaid
stateDiagram-v2
[*] --> queued
queued --> running
running --> awaiting_review
running --> failed
running --> cancelled
awaiting_review --> running: 人工继续/打回重跑
awaiting_review --> completed: 所有段已通过并完成组合
failed --> queued: 修复后重试
cancelled --> queued: 管理员重新排队
completed --> [*]
```
同一 Campaign 只能有一个 `queued` 或 `running` 的活跃 Run。Run 取消、失败和恢复都保留原 Trace,不覆盖历史记录。
## 5. Agent 画布与调度逻辑
### 5.1 图结构
- 节点是画布上的执行实例,不是 Agent 定义本身。
- `node_id` 标识画布节点,`agent_id` 指向 Agent 定义。
- 同一个 Agent 可以放在多个节点上,形成并行或串行的多个实例。
- 边 `from_node → to_node` 表示下游读取上游锚点卡。
- 未连线的节点不共享上下文。
### 5.2 波次调度
服务端对画布执行拓扑排序:
1. 找到入度为 0 的节点作为第一波。
2. 第一波完成后,把其出边节点的入度减一。
3. 入度归零的节点进入下一波。
4. 同一波次节点并行执行。
5. 检测到环时拒绝运行,并提示具体环路。
节点停用时不会调用模型,下游收到 `skipped` 锚点。停用产品销售节点时,组合器必须知道“本场无产品”,不能自动补一个产品段。
### 5.3 融合 Agent
融合 Agent 用于把多个写法合成为一个自然段:
```text
主 Agent 任务
├── 心法写法 Agent
├── 钩子写法 Agent
└── 场景表达 Agent
↓
融合结果:一个自然口语段 + 一个结构化锚点卡
```
融合时只传递结构化任务、允许的知识引用和上游锚点,不把各 Agent 的内部推理互相暴露。最终文本遵守统一的“大白话、自然口语、默认一段到底”样式,避免拼贴感。
## 6. Agent Runtime 核心逻辑
### 6.1 会话循环
```mermaid
sequenceDiagram
participant O as 业务编排器
participant R as Agent Runtime
participant S as AgentSession
participant M as Model Provider
participant T as Tool
participant E as RunEvent/LLMCall
O->>R: run_agent(task, snapshot, tools)
R->>S: 创建或恢复会话
R->>E: runtime_started + input_guardrail
R->>M: 发送当前消息和工具定义
M-->>R: 文本或 tool_calls
R->>E: model_started/model_finished
alt 工具调用
R->>T: 校验参数并执行
T-->>R: 工具结果
R->>E: tool_started/tool_finished
R->>S: 写入 tool 消息
R->>M: 继续下一轮
else 最终文本
R->>E: output_guardrail
R->>S: 写入完成结果
R-->>O: completed/failed
end
```
### 6.2 会话恢复
`AgentSession` 保存消息、轮次、工具状态、审批状态、结果和错误。恢复时:
- 复用 `running`、`interrupted` 或 `waiting_approval` 会话。
- 不重复执行已完成工具调用。
- `pending_tool` 有审批决定后,先回放批准/拒绝结果,再继续模型循环。
- 服务启动时把中断会话标记为可恢复,并归还未完成的知识片段预留。
### 6.3 工具审批
需要人工确认的工具调用进入 `waiting_approval`,不会因为接口返回成功就直接执行。审批动作必须记录:
```text
requester session → pending_tool → approver user → decision → tool result
```
工具批准接口只允许具有审查或管理权限的角色调用;工具本身还要在当前阶段的注册表中存在。
### 6.4 护栏和输出契约
Runtime 负责通用护栏,业务 Agent 负责领域契约:
| 层级 | 检查内容 |
| --- | --- |
| Runtime 输入 | 非空、长度上限、系统规则优先 |
| Runtime 工具 | 工具是否注册、参数是否为合法 JSON |
| Runtime 输出 | 非空、长度上限、文本可保存 |
| Coordinator | Segment 字段完整、未知信息待确认 |
| Production | 正文、引用、锚点卡完整 |
| QC | 检查项必须带状态和问题说明 |
| Composer | 只组合人工通过内容段 |
## 7. 知识库核心逻辑
### 7.1 建库管道
```text
上传文件
→ 计算内容哈希
→ 写入云对象/本地源目录
→ 解析格式
→ 清洗文本
→ 语义分块
→ Embedding
→ 写入向量索引
→ 写入文件分类和版本
→ 标记 ready
```
支持 `.docx`、`.srt`、`.md`、`.txt`、`.json`、`.jsonl`。文件更新时先删除同名文件旧向量,再写入新版本,避免重复命中。
### 7.2 分类逻辑
分类分为 AI 建议和人工确认:
```text
unclassified
→ AI 分类任务
→ ai_suggested
→ 人工确认/修改
→ human_confirmed
```
分类树使用 `parent_id` 支持无限层级。文件保存 `category_id`、AI 建议分类、置信度、原因、内容哈希和修订号。移动文件分类只修改归属元数据,并在下一次增量索引时更新向量元数据中的完整分类路径。
### 7.3 检索与引用
Agent 生成前构造检索请求:
```text
任务段目标
+ 上游锚点卡
+ Agent 规则里的检索意图
+ 当前用户允许的知识库 ID
+ 当前 Agent 已消费 chunk 排除集合
```
检索结果必须带:知识库、文件、分类路径、chunk ID、原文、相似度、文件哈希和修订号。引用写入 `Segment.references`,并进入 QC 对证。
### 7.4 知识消费锁定
消费锁是 Agent 级别,不是全局锁:
```text
Agent A 消费 chunk-001 → A 后续不可重复使用
Agent B 未消费 chunk-001 → B 仍可使用
```
状态流转:
```text
available → reserved → consumed
reserved → available(任务中断/模型失败)
consumed → available(管理员人工释放)
```
数据库对 `(agent_id, kb_id, chunk_id)` 建唯一约束,防止同一个 Agent 并发重复认领同一片段。
### 7.5 重建和回滚
重建必须遵循:
1. 读取当前索引快照。
2. 标记 `indexing`。
3. 按文件处理并记录进度。
4. 所有文件成功后写入 `ready`。
5. 任意文件失败时恢复旧快照和旧计数。
Chroma 不稳定时使用本地原子 JSON 向量文件作为检索兜底。KB3 当前基线为 73 个文件、2,717 个分块、512 维向量,数据库和独立进程读取结果一致。
## 8. 记忆库核心逻辑
### 8.1 记忆来源
记忆不是模型自动写入的隐式状态,而是可审查资源:
```text
任务失败/人工修改/QC意见
→ PendingMemory
→ 人工确认
→ Memory
→ 绑定来源 Agent 和版本
```
未确认记忆不能进入生产 Agent 的有效记忆上下文。
### 8.2 记忆与知识库同构
记忆库完全复用知识库的资源模型:
| 范围 | 默认使用者 | 修改者 |
| --- | --- | --- |
| `private` | 所有者及其 Agent | 所有者 |
| `shared` | 被授权用户 | 所有者和管理员 |
| `global` | 当前组织全部用户 | 管理员 |
管理员可以查看、导出、授权、撤销、发布全局和恢复私有。用户只能看到自己的私有记忆、获授权记忆和全局记忆。
### 8.3 记忆注入
Agent Runtime 注入记忆前执行:
1. 校验任务用户和组织。
2. 计算允许读取的记忆 ID。
3. 按来源 Agent、版本和状态筛选。
4. 将记忆作为“已授权数据”注入,不允许记忆内容覆盖 Runtime 系统规则。
5. 将使用的记忆版本写入任务快照。
撤销授权只影响新任务;已创建任务仍使用创建时的记忆快照。
## 9. 模型核心逻辑
### 9.1 管理端模型目录
模型使用链路为:
```text
管理端接入 Provider
→ 发现模型
→ 规范化为 ModelCatalog
→ 设置能力、可见性、费率和启用状态
→ 按组织开放
→ 用户端只读选择
```
用户端不能新增 Provider、查看 API Key、修改 Base URL、发现模型、修改费率或输入任意模型名称。
### 9.2 模型选择和快照
用户选择 `model_catalog_id`,服务端校验:
- 模型目录存在且启用。
- Provider 存在且启用。
- 模型对当前组织可见。
- 模型能力满足任务要求。
- 当前用户和组织未超出配额。
通过后把 Provider、真实模型名、能力标签和费率版本写入 Run 快照。模型目录停用不会改变历史任务。
### 9.3 成人内容能力测试
“破限”在系统中落地为管理端模型能力兼容性测试,而不是用户自行上传提示词:
```text
ModelCatalog
+ adult-content-compat-v1
+ 固定样例集
+ Provider/网关路径
+ 输出断言
+ 通过率/拒绝率/超时率/费用
→ 发布能力标签
```
结果必须区分 `provider_blocked`、`gateway_blocked`、`model_refused`、`timeout`、`format_failed`、`supported` 和 `partial`。模型更新、Provider 路由变化、系统提示词变化或审查配置变化时重新回归。
## 10. 用户端与管理端逻辑
### 10.1 用户端闭环
```mermaid
flowchart TD
L[登录] --> H[读取组织/角色/配额]
H --> R[读取可用资源]
R --> M[选择模型目录]
M --> C[创建任务]
C --> P[解析导图]
P --> G[运行 Agent]
G --> Q[查看 QC]
Q --> V[人工审查]
V --> O[组合和下载]
O --> U[查看用量/账单]
```
用户端所有写操作都带当前用户身份,所有资源查询都经过归属过滤。模型选择器只显示管理端开放的模型;知识库和记忆库按“我的/已授权/全局”分组。
### 10.2 管理端闭环
```text
用户管理
→ 组织/角色/配额
→ Provider 和模型目录
→ 成人内容能力测试
→ 知识库/记忆授权
→ 用量和账单
→ 云存储和导出
→ 审计复盘
```
管理端可以查看其他用户的私有知识库和记忆,但查看、下载、导出、授权、撤销和删除都必须写入审计。
## 11. 认证、RBAC 与授权判断
### 11.1 认证流程
```text
请求
→ 读取 Bearer Token
→ SHA-256 查找 AuthSession
→ 检查撤销/过期
→ 检查 AppUser 启用状态
→ 写入 last_seen_at
→ 得到 user_id / organization_id / role
```
密码使用 PBKDF2-SHA256 派生摘要;数据库不保存明文密码,也不保存明文 Session Token。
### 11.2 权限判定
权限不是前端隐藏按钮,而是后端每个请求的强制条件:
```text
身份认证
→ 路由所需权限
→ 组织范围
→ 资源所有权/授权记录
→ 操作级权限 read/use/manage
→ 执行并记录审计
```
用户端和管理端 API 逻辑分开。新增未知写接口默认归入管理配置权限,避免新接口漏保护。
### 11.3 资源权限矩阵
| 操作 | 私有资源所有者 | 获授权用户 | 全局用户 | 管理员 |
| --- | --- | --- | --- | --- |
| `read` | 是 | 视授权 | 是 | 是,需审计 |
| `use` | 是 | 视授权 | 是 | 是,需审计 |
| `manage` | 视资源类型 | 否 | 否 | 是 |
| `export` | 自己范围 | 允许范围 | 允许范围 | 全量或指定范围 |
| `publish_global` | 否 | 否 | 否 | 是 |
## 12. 多用户并发与隔离
### 12.1 上下文隔离
每次模型请求都绑定:
```text
organization_id
user_id
campaign_id
run_id
trace_id
span_id
session_id
```
消息历史保存在独立 `AgentSession`,不放在 Provider 全局状态、不放在前端共享变量、不通过模型名称作为上下文键。
### 12.2 四层并发限制
| 层级 | 限制 |
| --- | --- |
| 用户级 | 并发 Run、Token 日/月额度、存储和导出 |
| 组织级 | 总并发、总预算、总 Token |
| 模型级 | Provider QPS、并发连接、超时、重试 |
| 任务级 | 同一 Campaign 一个活跃 Run |
队列等待、限流、重试和取消都写入 Trace。一个 Provider 故障时,不影响其他 Provider 队列。
## 13. 计费和用量核心逻辑
### 13.1 计量原则
计量记录必须追加写入,不按页面统计临时计算。每条 `UsageEvent` 绑定调用归属:
```text
user_id + organization_id + run_id + trace_id + provider + model + idempotency_key
```
计量对象包括 LLM 输入/输出 Token、Embedding、OCR、Rerank、云存储和导出。
### 13.2 费用计算
```text
LLM 费用 = 输入 Token × 输入费率 + 输出 Token × 输出费率
总费用 = LLM + Embedding + OCR + Rerank + 存储 + 导出
```
费用使用调用时冻结的费率版本。Provider 未返回 Token 时,估算值必须标记为 `estimated`,不能直接作为已结算值。
### 13.3 配额检查时机
```text
创建任务前:检查用户/组织配额
进入模型队列前:再次检查并发和预算
调用返回后:写 UsageEvent
任务结束后:结算本次实际用量
```
配额策略支持 `warn`、`soft_limit` 和 `hard_limit`。达到硬限制时禁止新调用,并把原因显示在任务和 Trace 中。
## 14. 云存储和导出逻辑
### 14.1 文件生命周期
```mermaid
stateDiagram-v2
[*] --> uploading
uploading --> stored
stored --> indexed
indexed --> active
active --> superseded: 文件更新
superseded --> recycle_bin
recycle_bin --> deleted
uploading --> orphaned: 数据库提交失败
orphaned --> deleted: 清理任务
```
对象键按组织、用户、知识库、哈希和安全文件名组成,不以原始文件名作为唯一键。数据库只把已经校验哈希的对象标记为当前版本。
### 14.2 导出内容
导出任务必须包含 `manifest.json`,记录:
- 对象键、大小、哈希和版本。
- 组织、用户、知识库/记忆归属。
- 分类和授权状态。
- Trace、账单和审计范围。
- 导出发起人、时间、保留期和过期时间。
下载使用短时效签名地址,浏览器不接触云存储长期密钥。
## 15. 失败恢复和一致性
### 15.1 模型调用失败
| 失败 | 处理 |
| --- | --- |
| 超时/连接中断 | 按策略重试,写入每次尝试和耗时 |
| 429/配额 | 进入限流或转人工,不伪造成功 |
| Provider/模型不存在 | 直接失败,提示管理员修复目录 |
| Provider 拦截 | 标记 `provider_blocked`,按能力路由规则处理 |
| 网关拦截 | 标记 `gateway_blocked`,区分模型本体和网关 |
| 空输出/截断 | 触发格式重试,仍失败则进入人工处理 |
### 15.2 RAG 失败
- 索引为 `indexing` 时禁止新任务使用该库,除非管理员明确允许旧版本。
- 无命中是低置信结果,不得自动补写事实。
- 重建失败恢复旧索引和旧计数。
- 进程中断时归还 `reserved` 知识片段。
- 向量库损坏时切换本地兜底索引,并记录降级事件。
### 15.3 组合失败
组合器不能把缺失段落静默填充为新内容:
```text
缺段 → compose_report 标记缺失
→ Campaign 保持 human_review/failed
→ 通知中心提醒
→ 人工修复、跳过或重新运行
```
## 16. 核心不变量
以下规则是系统必须长期保持的不变量:
1. 没有有效身份和组织归属的请求不能访问业务 API。
2. 用户端不能创建 Provider、查看 API Key 或输入任意模型名称。
3. 模型调用必须使用启用且对当前组织可见的模型目录记录。
4. 任务开始后,规则、技能、模型、知识和记忆必须从快照读取。
5. Agent 只能检索被挂接且当前用户有权限使用的知识库。
6. 同一个 Agent 不能重复消费同一个知识片段,其他 Agent 不受影响。
7. 未确认记忆不能进入有效记忆上下文。
8. Composer 只能组合已人工通过的段落。
9. 每次模型调用必须有 `LLMCall`、Trace 和用量归属。
10. 任何删除、授权、发布全局、导出和计费调整都必须有审计记录。
11. 失败、等待审批、限流和降级不能标记为成功。
12. 历史任务、账单和引用不能被当前配置修改覆盖。
## 17. 关键 API 逻辑分组
### 17.1 用户端
```text
认证:/api/auth/status、/api/auth/login、/api/auth/logout
模型:/api/models/available
知识:/api/kbs、/api/kbs/{id}/search、/api/kbs/{id}/files/{name}
记忆:/api/memories
任务:/api/campaigns、/api/campaigns/{id}/parse、/api/campaigns/{id}/run
审查:/api/segments/{id}/review、/api/segments/{id}/fix
Trace:/api/traces、/api/traces/{trace_id}
用量:/api/me/usage、/api/me/billing
```
### 17.2 管理端
```text
用户:/api/admin/users、/api/admin/organizations
模型:/api/admin/model-providers、/api/admin/models
能力测试:/api/admin/models/{id}/capability-tests
知识授权:/api/admin/knowledge-bases/{id}/grants
记忆授权:/api/admin/memories/{id}/grants
计费:/api/admin/usage、/api/admin/billing/settlements
导出:/api/admin/knowledge-bases/{id}/export、/api/admin/memories/{id}/export
审计:/api/admin/audit
```
## 18. 当前实现与 v6 目标对照
| 领域 | 当前 v5 实现 | v6 目标 |
| --- | --- | --- |
| Runtime | 已实现会话、工具、审批、恢复、护栏和 Trace | 增加用户/组织归属和配额上下文 |
| 画布 | 已实现节点、连线、波次和快照 | 按用户隔离画布和模板 |
| 知识库 | 已实现 RAG、分类、消费锁和 KB3 回滚 | 增加云对象、全局/私有/共享和授权 |
| 记忆库 | 已实现待确认池、Agent 记忆和筛选删除 | 增加与知识库同构的可见性和授权 |
| 模型 | 已实现 Provider CRUD、发现、测试和 Agent 绑定 | 收敛为管理端 ModelCatalog,用户端只读选择 |
| 成人内容能力 | 已设计管理端兼容性测试和能力标签 | 实现测试套件、回归、发布和路由 |
| 认证 | 已实现本地用户、PBKDF2、Session、RBAC | 增加组织、多租户和管理端角色 |
| Trace | 已实现 Run/Session/Event/LLMCall 聚合 | 增加用户、组织和账单关联 |
| 计费 | 已有 Token/耗时调用字段 | 新增 UsageEvent、费率版本、配额和结算 |
| 存储 | 当前以本地 SQLite、源文件和向量兜底为主 | 迁移云对象存储和异步导出 |
## 19. 核心验收标准
### 19.1 任务链路
- 用户登录后可以创建任务、解析导图、运行 Agent、审查段落和组合成稿。
- 每个 Run 都有唯一 `trace_id`,能看到模型调用、工具事件、QC 和产物。
- 修改 Agent 规则或模型目录后,已运行任务的快照不变。
### 19.2 资源隔离
- 用户看不到其他用户未授权的知识库、记忆、任务、Trace 和账单。
- 管理员可以查看和导出全量资源,所有动作有审计。
- 全局知识库和全局记忆只允许管理员修改原文。
- 用户端模型列表只包含管理端已启用且对当前组织开放的目录。
### 19.3 稳定性
- 同一用户不能并发消费同一知识片段。
- 同一 Campaign 不能产生两个活跃 Run。
- Provider、网关和模型版本变化能在 Trace 中区分。
- KB3 重启后仍为 `ready/2717`,向量检索可返回结果。
- 索引、模型、云存储和导出失败均有明确状态并可恢复。
### 19.4 计费
- 每次 LLM、Embedding、OCR 和存储行为都有用户/组织归属。
- 费率版本变化不回写历史账单。
- 预估、已计量和已结算状态可区分。
- 用量明细可以回溯到 LLMCall、Run、Trace、Agent 和任务。
## 20. 结论
系统的核心不是“接入更多模型”或“堆更多 Agent”,而是把每一次生成变成一条可控、可复现、可审查、可计费的数据链:
```text
谁发起
→ 用了哪个版本的 Agent/模型
→ 读取了哪些被授权的知识和记忆
→ 产生了哪些模型/工具调用
→ 经过哪些质检和人工决定
→ 最终交付了什么
→ 消耗了多少 AI 和存储资源
```
v6 的用户端、管理端、云存储、模型能力测试、知识/记忆共享和计费,全部围绕这条链扩展,不改变 v5 已有的 Agent Runtime、QC、组合和 Trace 基础。