oh-my-muse/design-docs/后端-05-统一API契约-v1.md
zizi 2124a79312 docs(design): 补知识效用缺环——新增专题-07 消费契约与质量闭环 + 七册配套拍板
第一性原理结论:知识的价值只在被选中并改善产出的那一刻兑现;此前 SoT 钉死了治理
(谁能读什么),缺消费选择(该读哪几条)与输入侧质量(什么算好知识、怎么测)。

- 新增 专题-07 v1(唯一 owner):术语桥(卡↔SoT 载体)、按用途默认消费合同与注入
  视图两档、知识质量三性(可命中/可行动/可持续+口径)、回放评测(参考书=标准答案,
  三评测线+两道合规闸+知识策略对象与上线门禁)、长线进度三期消费、实验台实证附录、
  验收清单 8 条
- 专题-06 v4:拍板双层型判定(craft 1326 条实测无损→不拆,判据不变);新增 §6.4
  参照作品面(参考书实体演变=系统侧证据资产,蒸馏成叙事域成长曲线范式才入 Global);
  世界域六型登记演变历程元素;读取器 purpose 枚举 parse→extraction
- 架构-02 v11:aiContext 值域升级为布尔或用途集(实验台字段级用途裁剪实证反哺)
- 专题-03 v3 / 专题-04 v2(补 .md 改名+离线评估允许样本第 5 类)/ 后端-05 v11 /
  前端-03 v7 / 产品-01·02、前端-02、后端-03 断链修复 / 大纲 v10 / 映射表 v8
- prototypes/ 新增四页签开发者总览

依据:设计文档全库横切取证 + 实验台 9 批实拆实证(活卡 8587、消费端 0 实现、升格
卡向量 0%、p50 实例数 1)。经 codex 与 opus 双独立评审,必修项全部落实。
2026-07-18 00:02:51 +08:00

806 lines
60 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.

# 后端-05统一 API(接口) 契约-v1
- 版本v11
- 更新日期2026-07-17
- 目标读者:前端 / 后端 / 架构 / 测试
- 阅读时间35-55 分钟
- 边界说明:本文件只定义 Muse 在 Yudao Cloud fork 上的 API 分组、资源语义、关键命令、错误模型与异步交互。底层表结构看 `后端-04`,状态机看 `架构-04`,关键流程看 `后端-03`
## 1. 总体原则
阶段 7 API 契约改为两类入口:
| 入口 | 调用方 | 语义 |
|---|---|---|
| `/admin-api/**` | `muse-admin/` | 管理后台接口 |
| `/app-api/**` | `muse-studio/` | 普通用户端接口 |
Yudao 原生 `system/infra/member/pay/bpm/report/mp` 接口按 Yudao 约定保留,本文件不重复定义其全部内置接口。本文只定义 Muse 新增或二开的业务接口。
核心约束:
- 管理员接口不能替用户确认正文、知识草稿、规划候选或 AI 候选。
- 用户端接口不能修改系统 Prompt、系统 Agent、MetaSchema、质量策略或市场治理结果。
- API 分 admin/app不代表领域模型分 admin/app。
- 前端隐藏入口不是安全边界;后端必须强制鉴权、业务 owner、来源状态和状态机前置条件。
- 市场安装、绑定、购买或授权接口只能产生市场记录、来源侧授权摘要、handoff token 和跳转审计;目标 owner precheck/session 必须由目标 owner 自己生成和消费Market 不能直接写作品正文、Local KB 或正式规划。
- Yudao 原生接口只通过引用和集成点使用;除 Muse 二开接口外,不在本文件复制 system、infra、pay、bpm、report、mp 的完整 API。
Muse API 分组与 owner
| 分组 | 入口 | owner module | 说明 |
|---|---|---|---|
| Governance | `/admin-api/muse/governance/**` | Admin/Governance 逻辑 owner物理表按对象落到 `content` / `ai``system` 只做权限 | MetaSchema、保护节点、系统功能链路、影响预览 |
| Content | `/admin-api/muse/content/**``/app-api/muse/works/**` | `yudao-module-content` | 作品、章节、Block、导入导出、正文来源归因 |
| Knowledge | `/admin-api/muse/knowledge/**``/app-api/muse/knowledge-*/**` | `yudao-module-knowledge` | 全局/用户/局域知识库、草稿、绑定、投影 |
| AI / Agent | `/admin-api/muse/ai/**``/app-api/muse/ai/**``/app-api/muse/agents/**` | `yudao-module-ai` 二开 | Prompt、Agent、任务、候选、质量门控、评估 |
| Market | `/admin-api/muse/market/**``/app-api/muse/marketplace/**` | `yudao-module-market` | 市场资产、授权、安装、handoff、发布、治理 |
| Account | `/admin-api/muse/account/**``/app-api/muse/account/**``/app-api/muse/me` | `yudao-module-member`已决策member 模块实现 account API 路径) | 权益、配额、用量、授权/购买/发布摘要 |
| Jobs / Events | `/admin-api/muse/jobs/**``/app-api/muse/jobs/**``/admin-api/muse/source-events/**` | 各 owner + outbox | 异步任务状态、来源事件传播和重试入口 |
## 2. 通用约定
### 2.1 响应格式
API 响应遵循 Yudao 风格的统一响应壳。产品语义字段可以在 `data` 内表达。
```json
{
"code": 0,
"data": {},
"msg": "success"
}
```
分页响应使用 Yudao `PageResult` 或等价结构:
```json
{
"code": 0,
"data": {
"list": [],
"total": 0
},
"msg": "success"
}
```
错误响应必须包含可稳定识别的业务错误码。HTTP 状态可以按 Yudao 网关和全局异常处理约定处理,但前端不得只依赖 HTTP status 判断业务状态。
### 2.2 ID 契约
- 前端 TypeScript 统一把业务 ID 当 `string` 处理,避免 Long 精度、后续迁移和跨模块差异。
- 后端物理主键可遵循 Yudao 常规 `Long id`;需要公开稳定业务 ID 时,可以补 `bizNo/publicId`
- API 不承诺暴露数据库自增主键语义。
- 同一接口内 ID 类型必须稳定,不能混用数字和字符串。
### 2.3 认证权限
- 认证、会话、菜单、角色和权限基础能力复用 `yudao-module-system`
- `/admin-api/**` 需要后台权限点。
- `/app-api/**` 需要登录身份和业务资源访问权。
- 系统任务或内部回调必须使用服务身份,不得复用普通用户 token。
### 2.4 异步任务
需要外部 AI、索引、导出、导入、评估、来源传播的操作默认异步。
命令响应至少返回:
```json
{
"jobId": "string",
"status": "queued",
"pollUrl": "/app-api/muse/jobs/{jobId}"
}
```
例外Accept Suggestion 的正文写入必须在主事务内完成,响应返回 Block 新 revision 和候选归档结果;重新提取只作为 followup task 返回。
### 2.5 幂等
高风险命令必须带 `commandId` 或等价幂等键:
- Accept / Reject Suggestion。
- Knowledge Draft 确认/忽略。
- Planning 保存、候选确认、候选丢弃。
- 用户知识库资料删除、重建索引、发布提交和知识绑定。
- Agent Slot Binding。
- 市场安装、绑定、购买、发布提交。
- New-API 绑定、额度请求、调用归属和配额调整。
- 导出创建。
- 来源重验。
- 管理员激活、回滚、治理处理。
幂等规则:
- 同一 actor、同一资源、同一动作、同一 `commandId`、同一请求语义,重复提交必须返回第一次结果或当前可恢复状态。
- 同一 `commandId` 但请求语义不同,返回 `IDEMPOTENCY_CONFLICT`
- 预检、handoff 和下载凭证这类一次性资源必须区分“重复查询结果”和“重复消费写入”。
### 2.6 权限和审计
| 入口 | 必须校验 | 审计要求 |
|---|---|---|
| `/admin-api/**` | 后台登录、菜单/操作权限、数据范围、分权复核、高危动作理由 | 操作日志;高危治理进入业务审计 |
| `/app-api/**` | 登录身份、资源 owner、作品访问权、知识库授权、市场许可、来源状态 | 用户决策、正文写入、知识确认、导出、授权消费进入业务审计 |
| 系统任务 / 内部回调 | 服务身份、任务 owner、幂等键、回调签名或内部通道 | 任务日志、失败原因、重试组和补偿记录 |
管理员可见摘要不等于可见私有正文。需要查看用户私有内容时,必须另有合规访问接口、最小字段、原因、时效、分权和审计;不得用通用内容列表绕过。
### 2.7 API 版本策略
API 版本通过 HTTP Header 传递,路由路径不变:
| 项目 | 说明 |
|---|---|
| Header | `X-API-Version: 1`(当前版本为 1 |
| 默认行为 | 未传 header 时使用最新稳定版本 |
| 版本影响范围 | 响应结构和字段语义;不影响路由路径和认证方式 |
| Deprecation Policy | 旧版本至少保留 6 个月;期间响应头返回 `Deprecation: true``Sunset: <date>` 提示迁移 |
| 到期行为 | 到期后返回 `API_VERSION_DEPRECATED` 错误码HTTP 410 Gone |
| 版本变更触发条件 | 响应字段删除、字段语义不兼容变更、枚举值语义变化 |
| 非破坏性变更 | 新增可选字段、新增枚举值、新增接口不触发版本升级 |
客户端集成要求:
- 前端 SDK 和 API 客户端必须显式传递 `X-API-Version` header。
- 后端网关层解析 header 并注入请求上下文,各模块 controller 按版本返回对应响应结构。
- 版本不匹配或已废弃时,响应 body 必须包含 `currentVersion``supportedVersions``migrationGuide` 字段。
## 3. Admin APIs
### 3.1 治理和元结构
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | `/admin-api/muse/governance/meta-schemas` | MetaSchema 列表和版本摘要 |
| GET | `/admin-api/muse/governance/meta-schemas/{schemaKey}` | Schema 详情、当前 active 版本、灰度版本、字段继承和影响摘要 |
| GET | `/admin-api/muse/governance/meta-schemas/{schemaKey}/versions/{version}` | 指定版本详情、字段、校验规则、可见性策略和发布记录 |
| POST | `/admin-api/muse/governance/meta-schemas/{schemaKey}/drafts` | 保存 MetaSchema 草稿,返回 draftVersion 和校验摘要 |
| POST | `/admin-api/muse/governance/meta-schemas/{schemaKey}/drafts/{draftVersion}/validate` | 校验字段类型、必填、枚举、引用、兼容性和保护节点边界 |
| POST | `/admin-api/muse/governance/meta-schemas/{schemaKey}/drafts/{draftVersion}/impact-preview` | 影响预览返回作品、规划、知识投影、AI 上下文和导出影响 |
| POST | `/admin-api/muse/governance/meta-schemas/{schemaKey}/drafts/{draftVersion}/publish` | 发布版本,必须带 commandId、理由、校验结果和影响预览引用 |
| POST | `/admin-api/muse/governance/meta-schemas/{schemaKey}/versions/{version}/activate` | 激活 MetaSchema 版本,支持全量或灰度范围 |
| POST | `/admin-api/muse/governance/meta-schemas/{schemaKey}/versions/{version}/rollback` | 回滚到指定已发布版本,触发投影失效或重建任务 |
| POST | `/admin-api/muse/governance/meta-schemas/{schemaKey}/versions/{version}/deprecate` | 废弃版本或字段,必须给出替代字段、保留期和迁移提示 |
| POST | `/admin-api/muse/governance/meta-schemas/{schemaKey}/versions/{version}/gray-rules` | 设置或调整灰度规则,返回灰度范围和回滚入口 |
| GET | `/admin-api/muse/governance/protection-nodes` | 保护节点注册表、权限点、不可替换原因和审计摘要 |
| GET | `/admin-api/muse/governance/protection-nodes/{nodeKey}` | 保护节点详情、所属链路、Shadow -> Canonical 边界和可观测指标 |
| GET | `/admin-api/muse/governance/function-chains` | 系统功能链路和开放槽位 |
| POST | `/admin-api/muse/governance/function-chains/{chainKey}/impact-preview` | 发布前影响预览 |
| POST | `/admin-api/muse/governance/function-chains/{chainKey}/versions/{version}/activate` | 激活功能链路版本 |
治理接口是管理后台 surface也是 MetaSchema、系统链路和保护节点的逻辑 owner。MetaSchema 物理表可以落在 `content`,保护节点、系统功能链路和质量策略物理表可以落在 `ai`,但写入必须经 Governance/Admin facade、影响预览、版本发布和审计Content 或 AI 的 app/admin 业务接口不能绕过治理 facade 修改结构或保护节点。这些接口不直接写用户作品事实。
MetaSchema 管理命令必须带 `commandId`、操作者、权限点、变更理由、`expectedVersion`、校验结果引用和影响预览引用。发布、激活、回滚、废弃和灰度调整都必须写操作日志和业务审计;失败时返回可恢复的 `currentVersion``validationErrors``affectedProjectionCount``nextActions`
`MetaField` 可见性字段至少包含:
| 字段 | 语义 |
|---|---|
| `uiVisible` | 是否进入用户可见投影 |
| `aiContext` | 是否允许进入 AI 上下文组装(布尔或用途集,值域权威见 `架构-02` §9 |
| `userEditable` | 用户端是否允许保存该动态字段 |
| `userSearchable` | 是否允许用户搜索或筛选 |
| `exportable` | 是否可被导出预检纳入 |
`uiVisible=false` 不代表不能进入 AI 上下文;`aiContext=true` 不代表用户可见;`exportable=true` 仍必须受 owner、授权、来源状态和导出许可约束。字段废弃不能删除历史数据只能让新保存、投影、检索和导出按 `FIELD_DEPRECATED` 或迁移提示处理。
保护节点 API 必须显式返回权限要求、审计要求、不可替换原因和 Shadow -> Canonical 责任边界。管理员只能治理系统链路和开放槽位,不能把输入输出合规、拆分切块、入 RAG、语义安全围栏、静态检查、质量门控等保护节点降级成普通用户可替换槽位。
### 3.2 内容管理
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | `/admin-api/muse/content/works` | 查询作品列表和治理摘要 |
| GET | `/admin-api/muse/content/works/{workId}` | 查看作品元信息、章节摘要、异常摘要 |
| GET | `/admin-api/muse/content/works/{workId}/chapters` | 查看章节列表 |
| GET | `/admin-api/muse/content/import-tasks` | 查询导入任务 |
| GET | `/admin-api/muse/content/export-tasks` | 查询导出任务 |
| POST | `/admin-api/muse/content/works/{workId}/risk-actions` | 异常内容治理动作 |
管理员内容接口默认不返回用户私有正文全文。确需查看必须另有合规访问设计、审计和最小化字段。
### 3.3 知识管理
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | `/admin-api/muse/knowledge/global-kbs` | 全局知识库列表 |
| POST | `/admin-api/muse/knowledge/global-kbs` | 创建全局知识库 |
| GET | `/admin-api/muse/knowledge/global-kbs/{kbId}` | 全局知识库详情、当前版本、授权策略、来源状态和处理摘要 |
| PATCH | `/admin-api/muse/knowledge/global-kbs/{kbId}` | 更新名称、说明、分类、可见范围和停用原因 |
| GET | `/admin-api/muse/knowledge/global-kbs/{kbId}/documents` | 资料列表、处理状态、版本和来源摘要 |
| POST | `/admin-api/muse/knowledge/global-kbs/{kbId}/documents` | 上传或登记资料,返回 documentId 和处理任务 |
| GET | `/admin-api/muse/knowledge/global-kbs/{kbId}/documents/{documentId}` | 资料详情、版本、解析状态和索引状态 |
| POST | `/admin-api/muse/knowledge/global-kbs/{kbId}/documents/{documentId}/versions` | 新增资料版本,触发处理任务 |
| DELETE | `/admin-api/muse/knowledge/global-kbs/{kbId}/documents/{documentId}` | 停用资料,触发来源事件和索引刷新 |
| GET | `/admin-api/muse/knowledge/global-kbs/{kbId}/versions` | 知识库版本列表和发布摘要 |
| POST | `/admin-api/muse/knowledge/global-kbs/{kbId}/versions/{version}/activate` | 激活知识库版本 |
| GET | `/admin-api/muse/knowledge/global-kbs/{kbId}/access-policies` | 授权策略列表和 active 摘要 |
| POST | `/admin-api/muse/knowledge/global-kbs/{kbId}/access-policies/drafts` | 保存授权策略草稿 |
| POST | `/admin-api/muse/knowledge/global-kbs/{kbId}/access-policies/drafts/{draftId}/publish` | 发布授权策略,必须带 commandId 和影响预览 |
| POST | `/admin-api/muse/knowledge/global-kbs/{kbId}/enable` | 启用全局知识库 |
| POST | `/admin-api/muse/knowledge/global-kbs/{kbId}/disable` | 停用全局知识库,触发来源事件 |
| POST | `/admin-api/muse/knowledge/global-kbs/{kbId}/impact-preview` | 影响预览,返回授权、绑定、检索、导出和运行任务影响 |
| POST | `/admin-api/muse/knowledge/global-kbs/{kbId}/reindex` | 重建索引,返回处理任务 |
| GET | `/admin-api/muse/knowledge/global-kbs/{kbId}/processing-tasks` | 资料处理、索引和投影任务状态 |
| POST | `/admin-api/muse/knowledge/global-kbs/{kbId}/source-events` | 触发来源事件,传播 SourceEventType、SourceStatus、SourceActionPolicy 和原因归因 |
| GET | `/admin-api/muse/knowledge/source-bindings` | 查询来源绑定和状态 |
| GET | `/admin-api/muse/knowledge/drafts` | 查询知识草稿治理摘要 |
| GET | `/admin-api/muse/knowledge/projection-tasks` | 查询知识投影和索引任务 |
管理员可治理来源、全局知识库和异常草稿,但不替普通用户确认单作品 Local KB。
全局知识库启停、版本激活、资料停用、授权策略发布和来源事件触发都必须带 `commandId`、操作者、原因、影响预览引用和审计字段。授权策略缺 active 版本时,全局知识库不得展示、检索、进入 AI 上下文或参与导出。
### 3.4 AI 管理
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | `/admin-api/muse/ai/prompts` | Prompt 列表 |
| POST | `/admin-api/muse/ai/prompts/{promptKey}/versions` | 新建 Prompt 版本 |
| POST | `/admin-api/muse/ai/prompts/{promptKey}/versions/{version}/activate` | 激活 Prompt 版本 |
| GET | `/admin-api/muse/ai/agents` | Agent 列表 |
| POST | `/admin-api/muse/ai/agents` | 创建系统 Agent |
| POST | `/admin-api/muse/ai/agents/{agentId}/versions` | 新建 Agent 版本 |
| GET | `/admin-api/muse/ai/tool-grants` | Tool Grant 列表 |
| POST | `/admin-api/muse/ai/tool-grants` | 创建或调整工具授权 |
| GET | `/admin-api/muse/ai/tasks` | AI 任务列表 |
| GET | `/admin-api/muse/ai/quality-policies` | 质量策略列表 |
| POST | `/admin-api/muse/ai/quality-policies/{policyKey}/versions` | 新建质量策略版本 |
| POST | `/admin-api/muse/ai/evaluation-runs` | 启动离线评估 |
| GET | `/admin-api/muse/ai/evaluation-runs/{runId}` | 查询离线评估运行 |
AI 管理接口不得返回 New-API token、Dify API Key、RAGFlow token 明文、完整 Prompt/Response、私有正文全文、外部知识全文、New-API provider authority、供应商路由、供应商密钥、底层成本策略或网关调用权威日志。管理员只能配置 Muse 侧 Prompt、Agent 编排、质量策略、工具授权、外部运行时 provider 引用和评测运行New-API 网关用户、额度请求、余额快照和调用归属只通过账户/集成接口暴露摘要。
系统 Agent 版本契约补充:
| 字段 | 位置 | 要求 |
|---|---|---|
| `runtimeProvider` | 创建系统 Agent 版本请求 / 版本详情摘要 | 新建、复制、发布必须显式提交;取值 `new-api` / `dify`,预留 `agentscope`;历史版本缺失仅运行时兼容为 `new-api` |
| `providerRef.dify.appType` | 创建系统 Agent 版本请求 / 版本详情摘要 | `agent` / `workflow` |
| `providerRef.dify.appId` | 创建系统 Agent 版本请求 / 版本详情摘要 | `appType=agent` 必填;仅保存引用,不保存密钥 |
| `providerRef.dify.workflowId` | 创建系统 Agent 版本请求 / 版本详情摘要 | `appType=workflow` 必填;仅保存引用,不保存密钥 |
| `providerRef.dify.credentialRef` | 创建系统 Agent 版本请求 / 版本详情摘要 | Dify 必填,值为后端安全配置引用名;不允许空值默认 |
| `providerRef.dify.consoleUrl` | 响应只读 | 后端按 Dify baseUrl allowlist 拼装;前端请求不得提交任意 URL |
| `outputContract.traceabilityPolicy` | 创建系统 Agent 版本请求 / 运行摘要 | 要求 Muse source refs 时Dify 不可追溯输出必须 fail-closed允许 Dify 内部知识时标记 `untraceable_provider_context` |
系统 Agent 版本发布校验错误至少覆盖:`AI_AGENT_PROVIDER_REQUIRED``AI_AGENT_PROVIDER_UNSUPPORTED``AI_AGENT_DIFY_REF_INVALID``AI_AGENT_DIFY_CREDENTIAL_REQUIRED``AI_AGENT_DIFY_CONSOLE_URL_REJECTED`。试运行失败分类至少覆盖:`auth_failed``provider_bad_request``provider_bad_response``network_timeout``rate_limited``runtime_unavailable`。所有失败响应只能返回脱敏消息、`correlationId``providerRequestId` 摘要和可恢复建议,不能返回 Authorization header、API Key 或 provider 原始响应体。
Tool Grant 写入必须经 Governance / Security facade 校验审批、用途、外发策略、预算、来源和审计要求AI 管理接口只能展示或提交待审授权草稿,不能让 `yudao-module-ai`、Prompt、模型输出或用户智能体自授工具、上下文、外发和预算权限。运行时权限以 Runtime Permission Envelope 为准,前端传入的权限声明只作请求意图。
### 3.5 市场管理
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | `/admin-api/muse/market/assets` | 市场资产列表 |
| GET | `/admin-api/muse/market/assets/{assetId}` | 市场资产详情、版本、授权、安装、治理和来源摘要 |
| GET | `/admin-api/muse/market/publish-requests` | 发布申请列表 |
| POST | `/admin-api/muse/market/publish-requests/{requestId}/approve` | 审核通过 |
| POST | `/admin-api/muse/market/publish-requests/{requestId}/reject` | 审核拒绝 |
| POST | `/admin-api/muse/market/assets/{assetId}/governance-impact` | 治理影响预览返回购买、安装、绑定、handoff、导出和个人中心影响 |
| POST | `/admin-api/muse/market/assets/{assetId}/delist` | 下架 |
| POST | `/admin-api/muse/market/assets/{assetId}/recall` | 召回 |
| GET | `/admin-api/muse/market/appeals` | 申诉列表 |
| GET | `/admin-api/muse/market/appeals/{appealId}` | 申诉详情、补充材料和处理审计 |
| POST | `/admin-api/muse/market/appeals/{appealId}/resolve` | 处理申诉 |
召回、下架、blocked 必须触发 Source Status Event。
### 3.6 账户管理
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | `/admin-api/muse/account/users` | 用户账户摘要 |
| GET | `/admin-api/muse/account/users/{userId}/entitlements` | 权益和配额 |
| POST | `/admin-api/muse/account/users/{userId}/quota-adjustments` | 调整配额 |
| GET | `/admin-api/muse/account/users/{userId}/quota-adjustments` | 配额调整 ledger展示调整来源、幂等键、前后快照和审计状态 |
| GET | `/admin-api/muse/account/new-api-bindings` | 网关用户绑定状态列表 |
| POST | `/admin-api/muse/account/users/{userId}/new-api-binding` | 创建或刷新 New-API 网关用户绑定 |
| POST | `/admin-api/muse/account/users/{userId}/quota-requests` | 向 New-API 发起额度配置请求,返回 requestId 和 correlationId |
| GET | `/admin-api/muse/account/users/{userId}/balance-snapshots` | New-API 余额和权益快照摘要 |
| POST | `/admin-api/muse/account/call-attribution-jobs` | 创建调用归属 job绑定用户、任务、作品、智能体、知识来源或市场授权 |
| GET | `/admin-api/muse/account/call-attribution-jobs/{jobId}` | 查询调用归属状态、失败原因和补偿建议 |
| GET | `/admin-api/muse/account/integration-calls/by-correlation/{correlationId}` | 按 correlationId 查询外部调用去重、重试组和归属状态 |
| GET | `/admin-api/muse/account/usage-records` | 用量摘要 |
| GET | `/admin-api/muse/account/purchase-records` | 购买记录摘要 |
支付底层交易、退款和充值能力优先复用 `yudao-module-pay`
Quota adjustment 是账户侧审计语义:每次人工调整、套餐变更、市场补偿、导出扣减回滚或 New-API 配置请求回填都必须记录 `commandId``correlationId`、调整原因、前后权益快照、操作者、审批或复核信息和幂等状态。权益审计日志不是 New-API 成本账本 authority也不能被 AI 管理接口用来推断供应商路由或底层成本。
Pay callback、refund、套餐撤销和市场补偿必须通过 account entitlement 可变表 + 审计日志幂等传播:以支付订单、退款单、市场授权或调额请求作为 `sourceOwner/sourceId`,以回调或补偿事件作为 `idempotencyKey`。重复回调返回同一处理结果;退款和撤销使用反向变更更新可变表并写审计日志。
### 3.7 任务、来源事件和审计
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | `/admin-api/muse/jobs` | 查询 Muse 异步任务 |
| GET | `/admin-api/muse/jobs/{jobId}` | 查看任务详情、失败原因和重试组 |
| POST | `/admin-api/muse/jobs/{jobId}/retry` | 有权限重试可重试任务 |
| POST | `/admin-api/muse/jobs/{jobId}/cancel` | 取消可取消任务 |
| GET | `/admin-api/muse/source-events` | 查询来源状态事件和影响范围 |
| GET | `/admin-api/muse/source-events/{eventId}` | 来源事件详情 |
| POST | `/admin-api/muse/source-events/{eventId}/retry` | 重试来源传播 |
| GET | `/admin-api/muse/audit/business-events` | 查询业务审计摘要 |
任务治理不能绕过 owner 边界。重试来源传播只能让受影响对象进入重验、禁用、失效或摘要刷新,不能改写已确认 Canonical。
## 4. App APIs
### 4.1 当前用户和入口
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | `/app-api/muse/me` | 当前用户、权益摘要、默认入口、可见产品空间 |
`/app-api/muse/me` 不返回系统权限表、后台菜单、New-API token、Prompt secret 或私有审计字段。
### 4.2 通用任务和来源状态
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | `/app-api/muse/jobs/{jobId}` | 查询当前用户可见任务 |
| POST | `/app-api/muse/jobs/{jobId}/cancel` | 取消当前用户可取消任务 |
| POST | `/app-api/muse/source-status/query` | 按上下文查询来源对当前用途、目标 owner 和目标对象的可用状态 |
| POST | `/app-api/muse/source-status/recheck` | 按上下文发起来源重验 |
用户端只能查看自己有权访问的任务和来源摘要。来源重验是任务,不直接恢复绑定、确认或导出许可。
Source Status 请求必须带业务上下文,不能只用 `sourceType + sourceId` 做泛查询:
| 字段 | 要求 |
|---|---|
| `sourceType` / `sourceId` | 来源对象 |
| `purpose` | `bind` / `generate` / `export` / `publish` / `confirm` / `install` / `handoff` 等用途 |
| `targetOwner` | `content` / `knowledge` / `ai` / `market` / `account` |
| `targetId` | 目标作品、知识库、槽位、任务、发布申请或导出任务 |
| `sourceVersion` | 调用方当前持有的来源版本 |
| `authorizationSnapshotId` | 调用方当前持有的授权快照 |
Source Status 响应必须返回 `sourceStatus``actionPolicy``blockedReasons``needsRecheckReasons`needsRecheckReasons 是 ActionPolicy 层面的补充信息,说明为何 actionPolicy=needs_recheck不是 SourceStatus 枚举值)、`reasonAttributions``sourceEvents``nextActions``currentSourceVersion``currentAuthorizationSnapshotId` 和可选 `jobId``sourceStatus` 使用 SourceStatus`active``stale``revoked``recalled``delisted``blocked``owner_missing``unauthorized``actionPolicy` 使用 SourceActionPolicy`allowed``read_only``blocked``needs_recheck`。API 不能只返回一个 `blocked=true`,必须保留 revoked / recalled / delisted / unauthorized / processing_failed 等原因和归因;`read_only` 只允许历史查看或授权记录展示,不允许写入、绑定、生成、接受候选或受限导出;`needs_recheck` 不等于允许继续写入,目标 owner 必须在自己的命令接口重新校验。
### 4.3 作品和正文
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | `/app-api/muse/works` | 我的作品列表 |
| POST | `/app-api/muse/works` | 新建作品 |
| GET | `/app-api/muse/works/{workId}` | 作品详情 |
| PATCH | `/app-api/muse/works/{workId}` | 修改作品基础信息 |
| GET | `/app-api/muse/works/{workId}/chapters` | 章节列表 |
| POST | `/app-api/muse/works/{workId}/chapters` | 新建章节 |
| GET | `/app-api/muse/chapters/{chapterId}/blocks` | Block 列表 |
| POST | `/app-api/muse/chapters/{chapterId}/blocks` | 新建 Block |
| PUT | `/app-api/muse/blocks/{blockId}` | 保存 Block必须带 expectedRevision |
| GET | `/app-api/muse/blocks/{blockId}/source-attribution` | 查看当前 Block revision 来源归因 |
Block 保存(`PUT /blocks/{blockId}`)响应除返回新 revision 外,可包含 `followupTasks` 字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| `revision` | int | 保存成功后的新 revision |
| `wordCount` | int | 当前字数 |
| `followupTasks` | array | 可选,保存后触发的异步任务摘要列表,例如知识提取任务 |
`followupTasks` 数组元素结构:
| 字段 | 类型 | 说明 |
|---|---|---|
| `taskType` | enum | `knowledge_extraction` / `source_recheck` / `projection_refresh` |
| `jobId` | string | 异步任务 ID可用于轮询 |
| `status` | enum | `queued` / `skipped` |
| `reason` | string | 若 skipped说明跳过原因例如无变更、策略未启用 |
前端可基于 `followupTasks` 展示知识提取进度提示或刷新知识草稿列表。`followupTasks` 为空或不返回时表示无后续异步任务。
| GET | `/app-api/muse/works/{workId}/meta-projections` | 查询作品维度用户可见 MetaSchema 投影 |
| GET | `/app-api/muse/works/{workId}/meta-projections/{projectionKey}` | 查询指定投影结构、字段数据和版本 |
| POST | `/app-api/muse/works/{workId}/dynamic-fields/validate` | 校验动态字段数据,不写入 |
作品维度可见投影不是事实源,只是 MetaSchema、用户权限、来源状态和目标对象版本计算后的 read model。投影响应至少返回
| 字段 | 语义 |
|---|---|
| `schemaVersion` | 本次投影使用的 MetaSchema active 或灰度版本 |
| `projectionVersion` | 可见投影版本,用于判断前端缓存是否过期 |
| `dataRevision` | 目标对象动态字段数据 revision |
| `sourceSnapshot` | 来源对象、来源版本、授权快照和来源状态摘要 |
| `fields` | 仅包含当前用户可见、可编辑、可搜索或可导出的字段策略,并标注 `writeOwner``ownerCommand` |
动态字段没有跨 owner 的通用写接口。`/dynamic-fields/validate` 只做校验和路由建议,不写入任何 Canonical fact正式写入必须回到目标 owner API例如规划写 `PUT /works/{workId}/planning/{sectionKey}`,正文写 `PUT /blocks/{blockId}`,知识写 Knowledge Draft / Local KB 命令Agent 写 Agent 配置命令。Owner 命令必须校验 `schemaVersion``projectionVersion``expectedDataRevision`、字段 allowlist、来源状态和目标 owner 权限。Schema 过期返回 `SCHEMA_STALE`;字段已废弃返回 `FIELD_DEPRECATED`;投影过期返回 `PROJECTION_STALE`;字段试图写 Canonical fact 但没有 owner 命令时返回 `FORBIDDEN``FEATURE_DISABLED`
各 owner 命令版本校验要求:
| Owner 命令 | `expectedSchemaVersion` | `expectedProjectionVersion` | `expectedDataRevision` | 说明 |
|---|---|---|---|---|
| `PUT /blocks/{blockId}` | 可选(正文保存不依赖动态字段 Schema | 不要求 | 必须(即 `expectedRevision` | 正文保存以 Block revision 为乐观锁 |
| `PUT /works/{workId}/planning/{sectionKey}` | 必须 | 必须 | 必须 | 规划保存必须确保 Schema 和投影未过期 |
| `POST /knowledge-drafts/{draftId}/confirm` | 可选 | 不要求 | 必须(即 draft version | 知识确认以 draft 状态和来源为准 |
| `POST /works/{workId}/agent-slots/{slotKey}/bind` | 不要求 | 不要求 | 必须(即 `expectedSlotRevision` | 槽位绑定以 slot revision 为乐观锁 |
| `PATCH /works/{workId}` | 必须(若修改动态字段) | 必须(若修改动态字段) | 必须 | 作品基础信息修改涉及动态字段时校验 |
| `POST /agents/{agentId}/versions` | 不要求 | 不要求 | 不要求 | Agent 版本创建不涉及动态字段 |
规则:
- 涉及 MetaSchema 管控的动态字段写入时,`expectedSchemaVersion``expectedProjectionVersion` 必须校验;不匹配时分别返回 `SCHEMA_STALE``PROJECTION_STALE`
- 所有写入命令必须校验目标对象的 `expectedDataRevision`(或等价乐观锁字段);不匹配时返回 `REVISION_CONFLICT``DATA_REVISION_CONFLICT`
- 不涉及动态字段的纯正文或纯配置命令可以不要求 `expectedSchemaVersion`,但必须保留 `expectedRevision` 乐观锁。
### 4.4 作品规划
作品规划台面向作品设定、章节大纲、世界设定、角色关系、情节节拍和文风检查。规划正式数据由用户确认后进入 `content` ownerAI 只能产生 Planning Candidate不直接写正式规划。
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | `/app-api/muse/works/{workId}/planning` | 查询当前作品可见规划结构、已确认规划数据、revision 和来源摘要 |
| PUT | `/app-api/muse/works/{workId}/planning/{sectionKey}` | 保存规划项,必须带 commandId 和 expectedRevision |
| POST | `/app-api/muse/works/{workId}/planning/candidates` | 创建规划候选任务,支持生成、补全、整理和多组选项 |
| GET | `/app-api/muse/works/{workId}/planning/candidates` | 查询待确认、已确认和已丢弃规划候选 |
| GET | `/app-api/muse/works/{workId}/planning/candidates/{candidateId}` | 查询候选详情、来源、质量结果和 diff |
| POST | `/app-api/muse/works/{workId}/planning/candidates/{candidateId}/confirm` | 确认候选进入正式规划,必须带 commandId 和 expectedRevision |
| POST | `/app-api/muse/works/{workId}/planning/candidates/{candidateId}/discard` | 丢弃候选,必须带 commandId 和原因 |
| POST | `/app-api/muse/works/{workId}/planning/style-checks` | 创建文风检查任务,返回 jobId |
| GET | `/app-api/muse/works/{workId}/planning/style-checks/{jobId}` | 查询文风检查结果、风险标记和建议入口 |
规划保存、候选确认和候选丢弃请求必须包含:
| 字段 | 要求 |
|---|---|
| `commandId` | 幂等键 |
| `expectedRevision` | 目标规划 section 或候选 revision |
| `sourceSnapshot` | 输入正文、知识、市场资产或全局知识的来源快照摘要 |
| `authorizationSnapshotId` | 生成或确认时使用的授权快照 |
| `sourceVersion` | 调用方持有的来源版本 |
| `auditReason` | 用户确认、丢弃、覆盖或重新生成原因 |
Planning Candidate 是 Shadow 对象;确认时目标 owner 必须重验 work 权限、候选状态、来源状态、授权快照、质量结果和目标 revision。确认成功只写正式规划项和业务审计不写正文或 Local KB失败返回 `REVISION_CONFLICT``SOURCE_NEEDS_RECHECK``SOURCE_BLOCKED``QUALITY_BLOCKED``PRECHECK_EXPIRED`
### 4.5 AI 候选
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | `/app-api/muse/ai/tasks` | 创建生成、续写、扩写、润色、检测、规划任务 |
| GET | `/app-api/muse/ai/tasks/{taskId}` | 查询任务 |
| GET | `/app-api/muse/ai/tasks/{taskId}/stream` | AI 任务 SSE 流式事件(生成增量、质检、结束、错误) |
| GET | `/app-api/muse/works/{workId}/suggestions` | 当前作品候选列表 |
| GET | `/app-api/muse/suggestions/{suggestionId}` | 候选详情 |
| POST | `/app-api/muse/suggestions/{suggestionId}/accept` | 接受候选 |
| POST | `/app-api/muse/suggestions/{suggestionId}/reject` | 丢弃候选 |
AI 任务流(`GET .../ai/tasks/{taskId}/stream`)按 SSE 规范发送:`event:` 行为事件名,`data:` 行为该事件 payload JSON`id:` 行为可续传的事件序号;无事件时发 SSE comment 作为 keepalive。事件契约
| event | data 字段 | 说明 |
|---|---|---|
| `chunk` | `content``sequenceNo` | Token 级增量文本 |
| `quality_check` | `dimension``score``passed` | 影子层质检结果 |
| `done` | `taskId``suggestionId`(可选 `summary` | 终态:生成完成;`suggestionId` 缺失则不发 `done` |
| `error` | `code``message` | 终态:已脱敏错误 |
> 待确认(类型不一致):当前后端实现把 `done` 的 `taskId` / `suggestionId` 按 Long 序列化为 JSON **数字**,与本契约中候选/任务 ID 采用的 `uuid` 字符串(见候选详情等资源)不一致。需后端统一为 uuid 字符串或全局改判;统一前,前端已在 SSE 解析边界将其归一为字符串以保证类型稳定。
Accept 请求语义:
| 字段 | 要求 |
|---|---|
| `commandId` / `idempotencyKey` | 幂等键;二者只允许一个作为稳定业务幂等键,重复请求必须返回同一结果 |
| `expectedRevision` | 目标 Block revision |
| `acceptMode` | `accept_as_is` / `merge_after_edit` |
| `finalContent` | 修改后合并时必填 |
| `qualityResultVersion` | 候选质量结果版本 |
| `outputComplianceResultId` | 输出合规结果 |
| `staticCheckResultId` | 静态检查结果 |
| `sourceSnapshotId` / `sourceVersion` | 候选来源快照和来源版本;接受时实时对比当前来源版本 |
| `authorizationSnapshotId` | 接受时使用的授权快照 |
| `workAssetUsePrecheckId` | 使用市场作品资产作为参考或上下文时必填feature gate 未开启默认返回 `FEATURE_DISABLED` |
| `auditReason` | 用户接受、修改后合并或覆盖原因 |
Accept 响应语义:
- Block 新 revision。
- Suggestion 归档结果。
- Candidate Decision Archive 引用。
- Block Source Attribution 写入结果,包含 source status、authorization snapshot、lineage 和许可限制。
- Knowledge Draft 结果:原样接受保持待确认;修改后合并让旧草稿失效。
- followup task投影刷新或重新提取。
Accept / Merge 失败必须返回 `blockedReasons``sourceStatusReasons``reasonAttributions``blockSourceAttributionPreview``currentRevision``currentQualityResultVersion``currentAuthorizationSnapshotId``requiredPrecheckType``nextActions`。后端不得让 stale、revoked、recalled、blocked、owner_missing 或 unauthorized 来源进入 Canonical也不得把质量版本不匹配、输出合规失败、静态检查失败、市场 feature gate 关闭压缩成普通 `STATE_CONFLICT`
### 4.6 知识库和知识草稿
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | `/app-api/muse/knowledge-bases` | 用户知识库和已安装知识库 |
| POST | `/app-api/muse/knowledge-bases` | 创建用户知识库 |
| GET | `/app-api/muse/knowledge-bases/{kbId}` | 用户知识库详情、资料摘要、版本、来源状态和处理状态 |
| PATCH | `/app-api/muse/knowledge-bases/{kbId}` | 更新用户知识库基础信息 |
| POST | `/app-api/muse/knowledge-bases/{kbId}/disable` | 停用用户知识库,阻断新绑定和新检索 |
| DELETE | `/app-api/muse/knowledge-bases/{kbId}` | 删除用户知识库,按状态进入软删除或异步清理 |
| POST | `/app-api/muse/knowledge-bases/{kbId}/restore` | 恢复可恢复的用户知识库 |
| GET | `/app-api/muse/knowledge-bases/{kbId}/documents` | 资料列表、版本、处理状态和来源摘要 |
| POST | `/app-api/muse/knowledge-bases/{kbId}/documents` | 上传资料,返回 documentId 和处理任务 |
| GET | `/app-api/muse/knowledge-bases/{kbId}/documents/{documentId}/versions` | 资料版本列表 |
| POST | `/app-api/muse/knowledge-bases/{kbId}/documents/{documentId}/versions` | 上传资料新版本,触发处理任务 |
| DELETE | `/app-api/muse/knowledge-bases/{kbId}/documents/{documentId}` | 删除或停用资料,触发来源事件 |
| GET | `/app-api/muse/knowledge-bases/{kbId}/processing-tasks/{taskId}` | 查询资料处理、解析、切分、索引或投影任务 |
| POST | `/app-api/muse/knowledge-bases/{kbId}/reindex` | 重建索引,返回任务 |
| GET | `/app-api/muse/installed-knowledge-bases` | 已安装知识库列表、授权、来源状态和可绑定范围 |
| POST | `/app-api/muse/installed-knowledge-bases/{installId}/disable` | 停用已安装知识库 |
| DELETE | `/app-api/muse/installed-knowledge-bases/{installId}` | 删除已安装知识库记录,不删除来源市场资产 |
| POST | `/app-api/muse/installed-knowledge-bases/{installId}/restore` | 恢复已安装知识库 |
| POST | `/app-api/muse/knowledge-bases/{kbId}/publish-prechecks` | 发布准备预检,返回 marketPublishCheckId 或阻断原因 |
| POST | `/app-api/muse/knowledge-bases/{kbId}/publish-snapshots` | 生成发布快照,固化版本、授权和来源摘要 |
| POST | `/app-api/muse/knowledge-bases/{kbId}/publish-requests` | 提交发布申请,消费 marketPublishCheckId 和发布快照 |
| GET | `/app-api/muse/works/{workId}/local-knowledge` | 作品 Local KB |
| GET | `/app-api/muse/works/{workId}/knowledge-drafts` | 待确认知识草稿 |
| POST | `/app-api/muse/knowledge-drafts/{draftId}/confirm` | 确认知识草稿 |
| POST | `/app-api/muse/knowledge-drafts/{draftId}/ignore` | 忽略知识草稿 |
| POST | `/app-api/muse/knowledge-drafts/{draftId}/recheck` | 重验来源 |
| POST | `/app-api/muse/works/{workId}/knowledge-bindings/prechecks` | 目标 owner 绑定预检,消费市场 handoff 或授权摘要,返回 `kbBindPrecheckId` |
| POST | `/app-api/muse/works/{workId}/knowledge-bindings` | 绑定用户/市场知识库 |
| DELETE | `/app-api/muse/works/{workId}/knowledge-bindings/{bindingId}` | 解绑作品知识来源 |
| POST | `/app-api/muse/knowledge-bases/{kbId}/export-tasks` | 创建知识库导出任务 |
知识草稿确认必须重新校验来源状态、授权快照、source hash、目标版本和风险标记。
知识绑定预检和绑定写入都属于 Knowledge owner。Market 只能提供来源侧 handoff token、授权摘要和跳转审计Knowledge 预检接口必须重新校验 work owner、目标对象、来源版本、授权快照、来源状态、许可范围和幂等键生成 `kbBindPrecheckId` 或签名消费凭证。知识绑定命令必须消费 `kbBindPrecheckId`,并显式传入 `commandId``workId``targetOwner=knowledge``targetId``sourceType``sourceId``sourceVersion``authorizationSnapshotId``expectedBindingRevision`
资料上传、删除、重建索引、停用、恢复和发布提交都必须写审计。资料处理任务失败时返回 `jobId``retryable``failedStage``blockedReason``nextActions`;删除或停用资料必须触发来源事件,让绑定、检索、生成、导出和个人中心摘要进入 blocked 或 stale 状态。
资料上传必须带 owner、用途、文件名、大小、MIME、hash 和幂等键;服务端必须写扫描状态、存储引用、保留期和清理策略。扫描 blocked / failed 或 MIME、大小、扩展名不匹配时资料不得进入切块、索引、AI 上下文或市场发布。
### 4.7 智能体工作台
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | `/app-api/muse/agents` | 用户可用智能体列表 |
| POST | `/app-api/muse/agents` | 创建用户智能体 |
| POST | `/app-api/muse/agents/{agentId}/versions` | 新建版本 |
| POST | `/app-api/muse/agents/{agentId}/test` | 试用 |
| GET | `/app-api/muse/works/{workId}/agent-slots` | 作品槽位 |
| POST | `/app-api/muse/works/{workId}/agent-slots/{slotKey}/prechecks` | 目标 owner 槽位预检,消费市场 handoff 或授权摘要,返回 `agentSlotPrecheckId` |
| POST | `/app-api/muse/works/{workId}/agent-slots/{slotKey}/bind` | 绑定槽位,消费预检 |
用户只能替换开放槽位,不能替换输入输出合规、拆分切块、入 RAG、语义安全围栏、静态检查、质量门控等保护节点。
智能体试用接口(`POST /app-api/muse/agents/{agentId}/test`)详情:
试用请求字段:
| 字段 | 类型 | 要求 |
|---|---|---|
| `workId` | string | 可选,关联作品上下文;不传时使用沙箱上下文 |
| `contextScope` | enum | `none` / `work` / `chapter`;决定试用时可读取的上下文范围 |
| `usagePolicy` | enum | `charge` / `free_trial`;决定本次试用是否计费 |
| `outputTarget` | enum | `preview_only` / `shadow``preview_only` 只返回预览不落库,`shadow` 写入 Shadow Candidate 供后续决策 |
| `input` | object | 试用输入内容,包含 prompt 或指令 |
| `commandId` | string | 幂等键 |
试用响应字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| `trialSessionId` | string | 本次试用会话 ID用于关联后续查询和审计 |
| `outputPreview` | object | 智能体输出预览内容 |
| `usageCharged` | boolean | 本次试用是否实际计费 |
| `outputDestination` | string | 输出实际落点:`preview_only` / `shadow_candidate` |
| `jobId` | string | 若异步执行,返回任务 ID 供轮询 |
约束:
- `contextScope=work``chapter` 时,必须校验用户对 `workId` 的访问权限。
- `usagePolicy=free_trial` 受账户免费试用额度限制;额度耗尽时返回 `QUOTA_EXCEEDED`
- `outputTarget=shadow` 时,输出进入 Shadow Candidate 状态,用户可后续接受或丢弃。
- 试用不写正文 Canonical、Local KB 或正式规划。
- Runtime Permission Envelope 由服务端按试用场景生成scope 受限于试用上下文。
槽位绑定命令必须显式声明:
| 字段 | 要求 |
|---|---|
| `agentSlotPrecheckId` | AI target owner 生成的槽位绑定预检或签名消费凭证,必须由 AI owner 原子消费 |
| `commandId` | 幂等键 |
| `workId` / `slotKey` | 目标作品和开放槽位 |
| `targetOwner` / `targetId` | 目标 owner 和目标对象,不能由前端自造 owner |
| `sourceAgentId` / `sourceAgentVersion` | 绑定来源智能体和版本 |
| `authorizationSnapshotId` | 授权快照 |
| `expectedSlotRevision` | 目标槽位当前 revision |
绑定成功只写 Agent Slot Binding、绑定来源、版本、工具授权快照和审计不修改保护节点定义。Market 只能提供来源侧 handoff token 和授权摘要,不能写 `agentSlotPrecheckId` 或槽位事实。`sourceAgentVersion`、授权快照、来源状态或槽位 revision 变化时必须返回 `SOURCE_NEEDS_RECHECK``SOURCE_BLOCKED``PRECHECK_EXPIRED``REVISION_CONFLICT`
### 4.8 市场
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | `/app-api/muse/marketplace/assets` | 市场资产列表 |
| GET | `/app-api/muse/marketplace/categories` | 分类曝光、推荐位、排序和可见性摘要 |
| GET | `/app-api/muse/marketplace/recommendations` | 个性化推荐资产列表 |
| GET | `/app-api/muse/marketplace/assets/{assetId}` | 资产详情 |
| POST | `/app-api/muse/marketplace/assets/{assetId}/favorite` | 收藏资产 |
| DELETE | `/app-api/muse/marketplace/assets/{assetId}/favorite` | 取消收藏 |
| POST | `/app-api/muse/marketplace/assets/{assetId}/purchase` | 购买或获取授权 |
| POST | `/app-api/muse/marketplace/assets/{assetId}/install` | 安装智能体或知识库 |
| POST | `/app-api/muse/marketplace/assets/{assetId}/bind-precheck` | 创建来源侧授权摘要和 handoff 准备,不返回目标 owner 写入凭证 |
| POST | `/app-api/muse/marketplace/handoffs` | 创建市场 handoff只返回短期 handoff 和目标 owner 消费入口 |
| GET | `/app-api/muse/marketplace/handoffs/{handoffToken}` | 查询 handoff 状态、过期时间和目标 owner |
| POST | `/app-api/muse/marketplace/handoffs/{handoffToken}/cancel` | 取消市场 handoff |
| POST | `/app-api/muse/marketplace/publish-drafts` | 保存发布草稿 |
| POST | `/app-api/muse/marketplace/publish-drafts/{draftId}/checks` | 发布检查,生成 marketPublishCheckId |
| POST | `/app-api/muse/marketplace/publish-requests` | 提交发布申请,消费 marketPublishCheckId 和发布快照 |
| POST | `/app-api/muse/marketplace/publish-requests/{requestId}/withdraw` | 撤回发布申请 |
| GET | `/app-api/muse/marketplace/my-publish-records` | 我的发布记录 |
| GET | `/app-api/muse/marketplace/assets/{assetId}/governance-impact` | 查看下架、召回、授权变化对本人安装、绑定、导出和任务的影响 |
| POST | `/app-api/muse/marketplace/appeals` | 提交申诉 |
| POST | `/app-api/muse/marketplace/appeals/{appealId}/supplements` | 补充申诉材料 |
| POST | `/app-api/muse/marketplace/appeals/{appealId}/withdraw` | 撤回申诉 |
作品资产 feature gate 未开启前,只允许阅读、收藏和授权记录,不允许模板化、参考写入或进入 AI 上下文;相关 target owner 预检和绑定/使用命令默认返回 `FEATURE_DISABLED`,直到 Content / AI owner、API、Schema、lineage 和导出限制闭合。
市场资产列表查询(`GET /app-api/muse/marketplace/assets`)排序和筛选参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| `sortBy` | enum | `popularity` / `newest` / `rating` / `relevance`;默认 `relevance` |
| `assetType` | enum | `work` / `agent` / `knowledge_base`;可选筛选 |
| `category` | string | 分类筛选 |
| `keyword` | string | 关键词搜索 |
| `pageNo` / `pageSize` | int | 分页参数 |
个性化推荐接口(`GET /app-api/muse/marketplace/recommendations`)参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| `recommendationContext` | enum | 可选,`home` / `after_install` / `similar_to_asset` / `work_context`;决定推荐策略 |
| `referenceAssetId` | string | 可选,`similar_to_asset` 时必填,基于该资产推荐相似资产 |
| `workId` | string | 可选,`work_context` 时可填,基于作品上下文推荐适配的智能体或知识库 |
| `limit` | int | 推荐数量上限,默认 10 |
推荐响应返回 `assets` 列表和 `recommendationId`(用于后续点击归因和推荐效果追踪)。推荐不暴露用户私有正文或知识内容作为推荐依据。
市场接口的返回必须区分 `licenseStatus``installStatus``bindStatus``sourceStatus``nextAction`。购买或安装成功只表示账户可用资产变化;绑定或使用必须由目标 owner 自己生成并消费预检后完成。
Market 只负责资产、授权、安装记录、发布申请、申诉、来源侧授权摘要、handoff token 和跳转审计。Market API 可以生成、查询、取消 handoff但不能写作品正文、正式规划、Local KB、Agent Slot Binding、目标 precheck/session 或动态字段数据;目标 owner API 必须基于 handoff token 或授权摘要自行生成并消费 `kbBindPrecheckId``agentSlotPrecheckId``workAssetUsePrecheckId` 或签名消费凭证,并重新校验 owner、目标对象、来源版本、授权快照、状态机和幂等键。
### 4.9 导入导出
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | `/app-api/muse/works/{workId}/import-tasks` | 上传并创建导入任务 |
| GET | `/app-api/muse/import-tasks/{taskId}` | 查询导入任务 |
| POST | `/app-api/muse/works/{workId}/parse-jobs` | 创建 AI 全书解析任务,读取 Content 导入文件或章节上下文 |
| GET | `/app-api/muse/parse-jobs/{jobId}` | 查询 AI 解析任务 |
| POST | `/app-api/muse/parse-jobs/{jobId}/retry` | 重试可重试解析任务或失败阶段 |
| GET | `/app-api/muse/parse-jobs/{jobId}/chapters` | AI 章节解析结果 |
| POST | `/app-api/muse/chapter-parse-results/{resultId}/confirm` | 章节审阅确认,通知 Knowledge 生成或刷新知识草稿 |
| POST | `/app-api/muse/chapter-parse-results/{resultId}/reject` | 章节驳回,记录原因并作废对应 AI Shadow 结果 |
| POST | `/app-api/muse/parse-jobs/{jobId}/chapters/batch-confirm` | 批量确认章节,返回逐章成功、失败和部分失败摘要 |
| POST | `/app-api/muse/works/{workId}/export-tasks` | 创建导出任务 |
| GET | `/app-api/muse/export-tasks/{taskId}` | 查询导出任务 |
| GET | `/app-api/muse/downloads/{credentialId}` | 下载导出包 |
章节确认接口只表示 AI Chapter Parse Result 审阅通过并进入 Knowledge Draft 处理,不写正式知识。章节驳回必须写用户原因、当前 parse result revision 和审计,不删除原始导入文件。
Import task、import file 和 chapter context owner 是 `content`Parse Job 和 Chapter Parse Result owner 是 `ai`Knowledge Draft owner 是 `knowledge`。Parse Job 必须绑定 `workId`、发起人、Content 上下文引用、source snapshot、authorization snapshot、解析配置版本、Runtime Permission Envelope 和重试组。批量确认以章节为事务边界,允许部分失败;响应必须返回 `confirmedChapterResultIds``createdDraftIds``failedChapters``skippedChapters``partialFailure=true/false`、失败错误码和下一步动作。某章失败不得回滚已成功章节,也不得把跨章节批量确认变成不可解释的单事务写入。
导入上传必须绑定 owner、用途、大小、MIME、hash、扫描状态、source snapshot、authorization snapshot、保留期和清理策略扫描 blocked / failed 的文件不得创建 Parse Job。下载凭证必须携带来源传播版本和授权快照来源 revoked / recalled / blocked / unauthorized 或授权过期时返回 `SOURCE_BLOCKED``SOURCE_NEEDS_RECHECK``PRECHECK_EXPIRED`,不能继续下载。
下载与导入预检的契约姿态(行为与决策见 `后端-03` §6/§9 和 `架构-03` ADR-019模型不变式见 `架构-02` Download Credential / Export Package
- `GET /downloads/{credentialId}` 是后端字节代理:以凭证解析出的稳定存储路径取流并回传字节,不返回对象存储签名 URL存储对象按租户/用户命名空间隔离,凭证只解析 owner 范围内的路径。字节代理后端不可用时返回 `UPSTREAM_UNAVAILABLE`
- 导入预检以服务端权威 `scanStatus` 为准(失败关闭);扫描器接入前 `scanStatus=scan_blocked`,对应导入任务停在终态、不创建 Parse Job。外部来源命中 SSRF 白名单外目标时按 `VALIDATION_ERROR` 拒绝,不发起回源。
### 4.10 个人中心
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | `/app-api/muse/profile` | 个人资料 |
| PATCH | `/app-api/muse/profile` | 修改资料 |
| GET | `/app-api/muse/account/entitlements` | 权益和配额 |
| GET | `/app-api/muse/account/usage` | 用量摘要 |
| GET | `/app-api/muse/account/new-api-binding` | 当前用户 New-API 网关用户绑定摘要 |
| POST | `/app-api/muse/account/new-api-binding/recheck` | 发起网关用户绑定重验 |
| GET | `/app-api/muse/account/balance-snapshots` | 余额和权益快照摘要 |
| POST | `/app-api/muse/account/quota-requests` | 发起本人套餐或余额同步请求,返回 requestId 和 correlationId |
| GET | `/app-api/muse/account/quota-requests/{requestId}` | 查询额度请求状态、correlationId 和失败原因 |
| GET | `/app-api/muse/account/integration-calls/by-correlation/{correlationId}` | 查询本人外部调用去重、重试和归属状态 |
| GET | `/app-api/muse/account/purchases` | 购买记录 |
| GET | `/app-api/muse/account/licenses` | 授权记录 |
| GET | `/app-api/muse/account/publish-records` | 发布记录 |
| GET | `/app-api/muse/account/security-events` | 安全事件摘要 |
| GET | `/app-api/muse/account/security-events/{eventId}` | 安全事件详情,返回事件类型、发生时间、来源 IP、设备信息、影响范围和处理建议 |
| POST | `/app-api/muse/account/security-events/{eventId}/acknowledge` | 确认/处理安全事件,标记用户已知晓或已采取措施 |
| POST | `/app-api/muse/account/export-tasks` | 创建个人资料、账户记录或安全事件导出任务 |
| GET | `/app-api/muse/account/export-tasks/{taskId}` | 查询个人中心导出任务 |
| GET | `/app-api/muse/account/downloads/{credentialId}` | 下载个人中心导出包 |
个人中心是 read model 和跳转入口,不拥有作品、知识、市场资产或 AI 任务事实。
个人中心账户接口只返回当前用户可见的摘要和下载凭证,不暴露 New-API token、provider authority、供应商路由、底层成本账本、完整 Prompt/Response 或私有审计字段。`correlationId` 查询只能查本人可见调用,重复请求必须返回同一重试组和归属状态,不能重复扣减、重复补偿或重复归属。
账户导出在 Account BC 内组装本人数据并按脱敏级别(`standard` / `strict`)处理后落包,脱敏级别未知按 `strict` 失败关闭;`GET /app-api/muse/account/downloads/{credentialId}` 与作品导出一致,走后端字节代理、以稳定存储路径取流,不签发签名 URL行为见 `后端-03` §9决策见 `架构-03` ADR-019
安全事件详情接口(`GET /app-api/muse/account/security-events/{eventId}`)响应字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| `eventId` | string | 安全事件 ID |
| `eventType` | enum | `login_anomaly` / `credential_expired` / `sensitive_export` / `access_denied_burst` / `device_change` / `permission_escalation` |
| `severity` | enum | `info` / `warning` / `critical` |
| `occurredAt` | datetime | 事件发生时间 |
| `sourceIp` | string | 来源 IP 地址 |
| `deviceInfo` | object | 设备信息摘要UA、平台、地理位置 |
| `affectedScope` | string | 影响范围描述 |
| `description` | string | 事件描述 |
| `suggestedActions` | array | 建议处理措施列表 |
| `acknowledgedAt` | datetime | 用户确认时间,未确认为空 |
| `acknowledgedAction` | string | 用户确认时选择的处理措施 |
安全事件确认接口(`POST /app-api/muse/account/security-events/{eventId}/acknowledge`)请求字段:
| 字段 | 类型 | 要求 |
|---|---|---|
| `commandId` | string | 幂等键 |
| `action` | enum | `acknowledged` / `password_changed` / `session_revoked` / `false_positive` |
| `note` | string | 可选,用户备注 |
约束:
- 安全事件只能由事件所属用户查看和确认。
- 确认操作是 append-only不删除安全事件记录。
- `action=session_revoked` 时,后端应联动 session 管理服务使相关会话失效。
- 安全事件确认写审计。
## 5. 通用错误码
| 错误码 | 语义 | 前端建议 |
|---|---|---|
| `UNAUTHENTICATED` | 未登录或登录失效 | 重新登录 |
| `FORBIDDEN` | 无接口或资源权限 | 展示无权限或申请授权入口 |
| `RESOURCE_NOT_FOUND` | 资源不存在或不可见 | 返回列表或刷新 |
| `VALIDATION_ERROR` | 请求字段不合法 | 定位字段并提示 |
| `REVISION_CONFLICT` | Block revision 冲突 | 展示冲突恢复信息和当前 revision |
| `DATA_REVISION_CONFLICT` | 动态字段数据 revision 冲突expectedDataRevision 不匹配),语义覆盖所有 owner 命令中的 expectedRevision / expectedDataRevision 冲突场景 | 展示当前 dataRevision 和冲突字段,引导用户刷新后重试 |
| `QUOTA_EXCEEDED` | 账户配额已用尽,例如 AI 调用次数、存储空间、知识库数量等 | 展示当前配额和升级/购买入口 |
| `BUDGET_EXCEEDED` | 单次任务或会话预算超限,例如 token 预算、调用次数预算 | 展示预算限制和调整建议 |
| `SCHEMA_STALE` | 调用方持有的 MetaSchema 版本已过期 | 刷新 Schema 和投影后重试 |
| `FIELD_DEPRECATED` | 动态字段已废弃或不再允许保存 | 显示迁移提示或隐藏保存入口 |
| `PROJECTION_STALE` | 用户可见投影版本已过期 | 重新拉取投影和字段数据 |
| `STATE_CONFLICT` | 当前状态不允许该动作 | 刷新对象状态和可用动作 |
| `SOURCE_NEEDS_RECHECK` | 来源需重验 | 引导重验或替换来源 |
| `SOURCE_BLOCKED` | 来源 actionPolicy 为 blocked例如 revoked / recalled / blocked / owner_missing / unauthorized | 禁用确认、绑定、生成或导出动作,并展示原因归因 |
| `QUALITY_BLOCKED` | 候选质量或合规阻断 | 展示风险和重生成/修改入口 |
| `FEATURE_DISABLED` | feature gate 关闭 | 隐藏或禁用对应入口 |
| `PRECHECK_REQUIRED` | 缺少 handoff/precheck | 返回来源空间刷新预检 |
| `PRECHECK_EXPIRED` | handoff/precheck 已过期或已消费 | 重新发起预检 |
| `MARKET_HANDOFF_INVALID` | handoff 不存在、过期、已取消、已消费或目标 owner 不匹配 | 返回市场刷新状态并重新发起 |
| `CORRELATION_CONFLICT` | correlationId 对应的外部调用语义不一致 | 阻断重复请求并展示当前归属状态 |
| `IDEMPOTENCY_CONFLICT` | 幂等键与请求语义不匹配 | 阻断重复提交并提示刷新 |
| `TASK_FAILED` | 异步任务失败 | 展示失败原因、重试或取消 |
| `PARTIAL_FAILURE` | 批量操作部分成功、部分失败 | 展示逐项结果和可重试项 |
| `UPSTREAM_UNAVAILABLE` | New-API、检索、文件或通知服务不可用 | 展示稍后重试,不暴露密钥或内部响应 |
| `AI_AGENT_PROVIDER_REQUIRED` | 新系统 Agent 版本缺少 runtimeProvider | 定位系统 Agent 版本配置并要求选择 provider |
| `AI_AGENT_PROVIDER_UNSUPPORTED` | runtimeProvider 未被后端支持 | 展示 provider 不支持,不允许发布 |
| `AI_AGENT_DIFY_REF_INVALID` | Dify app/workflow 引用不完整或不符合 appType | 定位 Dify 引用字段并提示修正 |
| `AI_AGENT_DIFY_CREDENTIAL_REQUIRED` | Dify provider 缺少 credentialRef 或安全配置不可用 | 要求选择有效 credentialRef不展示密钥 |
| `AI_AGENT_DIFY_CONSOLE_URL_REJECTED` | Dify console 跳转不在 allowlist 或携带敏感 query | 阻断跳转并提示联系管理员 |
| `API_VERSION_DEPRECATED` | 请求的 API 版本已废弃X-API-Version header 指定的版本已过期) | 展示迁移指引,升级到最新版本 |
错误响应 `data` 可以按场景携带 `currentRevision``currentState``currentSchemaVersion``currentProjectionVersion``currentDataRevision``requiredPrecheckType``sourceStatus``actionPolicy``reasonAttributions``correlationStatus``retryable``jobId``partialResults``nextActions` 等可恢复字段,但不得返回密钥、完整 Prompt/Response、私有正文全文或越权来源全文。
## 6. 非目标
- 不在本文件复制 Yudao system/infra/pay/bpm 的全部内置接口。
- 不使用旧版统一入口作为阶段 7 Muse API 入口。
- 不把管理后台和用户端合并成同一套前端 API。
- 不允许前端通过隐藏按钮承担安全职责。
- 不允许 AI 或管理员接口绕过用户主权写 Canonical。
## 7. 关联阅读
- 后端工程结构:`后端-02-工程结构与模块职责.md`
- 关键流程:`后端-03-关键流程实现与接口契约.md`
- Schema`后端-04-统一数据库Schema-v1.md`
- 前端工程结构:`前端-01-工程结构与核心依赖.md`
- 状态机:`架构-04-状态机与约束清单.md`