Files
NotesAgentic/docs/后端接口契约-开发版.md
admin 694c1b27c1 docs(backend): 记录全面审阅问题与修复方案
按原因、后果、解决思路、落地方案和回归测试复盘 10 类后端问题。

同步更新接口实现状态、Plugin 权限接口、真实 Streaming、Citation 偏移约定、第一阶段 Tool 列表和测试数量。
2026-08-28 09:57:02 +08:00

5.6 KiB
Raw Permalink Blame History

后端接口契约(开发版)

本文档记录当前前后端联调使用的接口壳子。业务服务尚未实现,最终字段以 FastAPI 运行时生成的 OpenAPI 为准。

契约入口

  • Swagger UIGET /docs
  • OpenAPIGET /openapi.json
  • 所有普通接口使用 JSON。
  • Chat 和 Agent 实时事件使用 text/event-streamSSE)。
  • 内部时间统一使用 UTC ISO 8601。
  • ID 使用稳定业务 ID,不使用文件路径代替 ID。

接口清单

System

方法 路径 用途
GET /health Sidecar 健康检查
GET /api/status 获取服务名称、版本和环境
方法 路径 用途
GET /api/notes 获取笔记列表
POST /api/notes 创建笔记
GET /api/notes/{note_id} 获取笔记及 Block
PATCH /api/notes/{note_id} 更新笔记
DELETE /api/notes/{note_id} 删除笔记
POST /api/notes/{note_id}/move 移动笔记
POST /api/search FTS、Vector 或 Hybrid 检索

Chat、Agent 与 Tool

方法 路径 用途
POST /api/chat 发起聊天并返回 ModelEvent SSE
GET /api/agent/runs 获取 Agent Run 列表
POST /api/agent/runs 创建 Agent Run
GET /api/agent/runs/{run_id} 获取 Agent Run 状态与 Trace 摘要
POST /api/agent/runs/{run_id}/cancel 取消 Agent Run
GET /api/agent/runs/{run_id}/events 订阅 AgentEvent SSE
POST /api/agent/runs/{run_id}/permissions/{request_id} 响应 Tool 权限确认
GET /api/tools 获取已注册 Tool Definition

Skill 与 Plugin

方法 路径 用途
GET /api/skills 获取 Skill 列表及状态
POST /api/skills/install 安装 Skill
GET /api/skills/{skill_id} 获取 Skill Manifest 与状态
POST /api/skills/{skill_id}/enable 启用 Skill
POST /api/skills/{skill_id}/disable 停用 Skill
DELETE /api/skills/{skill_id} 卸载 Skill
GET /api/plugins 获取 Plugin 列表及状态
POST /api/plugins/install 安装 Plugin
GET /api/plugins/{plugin_id} 获取 Plugin Manifest 与状态
POST /api/plugins/{plugin_id}/enable 启用 Plugin
POST /api/plugins/{plugin_id}/disable 停用 Plugin
PUT /api/plugins/{plugin_id}/permissions 设置 Plugin 已授权权限
DELETE /api/plugins/{plugin_id} 卸载 Plugin

Provider

方法 路径 用途
GET /api/providers 获取 Provider 配置列表
POST /api/providers 新建 Provider 配置
GET /api/providers/{provider_id} 获取 Provider 配置
PATCH /api/providers/{provider_id} 更新 Provider 配置
DELETE /api/providers/{provider_id} 删除 Provider 配置
GET /api/providers/{provider_id}/models 获取模型及 Capability 列表
POST /api/providers/test 测试 Provider 连接

Provider Contract 只传递 credential_id 或临时 credential_context_id,不通过普通 JSON 接口传递明文 API Key。

Tasks、Media 与 Index

方法 路径 用途
GET /api/tasks 获取任务列表
POST /api/tasks 创建任务
GET /api/tasks/{task_id} 获取任务
PATCH /api/tasks/{task_id} 更新任务
DELETE /api/tasks/{task_id} 删除任务
POST /api/media/transcriptions 创建音频转写任务
GET /api/media/transcriptions/{job_id} 获取转写任务状态
GET /api/index/status 获取索引服务状态
POST /api/index/rebuild 创建索引重建任务
GET /api/index/jobs/{job_id} 获取索引任务状态

统一错误

所有普通 HTTP 错误统一返回:

{
  "error": {
    "code": "NOT_IMPLEMENTED",
    "message": "The contract is available, but its business service is not implemented.",
    "details": {}
  }
}

当前接口主要返回:

  • 422 VALIDATION_ERROR:请求字段不符合 Pydantic Contract
  • 404 RESOURCE_NOT_FOUND:路由或资源不存在。
  • 409:资源冲突、依赖缺失或扩展尚未获得权限;
  • 429 AGENT_CAPACITY_EXCEEDED:活动 Agent Run 达到上限。

前端只根据 error.code 判断业务错误,不解析第三方 SDK 的原始异常文本。

SSE 约定

每条 SSE 包含事件名和对应 JSON Contract

event: TextDelta
data: {"event":"TextDelta","sequence":1,"data":{"text":"..."},"timestamp":"..."}

ModelEvent 类型:

TextDelta
ThinkingDelta
ToolCallStart
ToolCallDelta
ToolCallEnd
Usage
Error
Done

AgentEvent 类型:

RunStarted
TextDelta
ThinkingDelta
ToolCall
ToolResult
PermissionRequired
Usage
Citation
RunCompleted
RunFailed
RunCancelled

当前实现状态

  • Chat、Agent Run、Agent Events、Tool 列表、Provider 配置生命周期、模型列表和连接测试已经接入 AI Core。
  • Provider Adapter 当前包含 Mock、真正增量 SSE 的 OpenAI-Compatible Chat Completions,以及 Ollama JSONL Streaming。
  • Notes、Search、Index、Skills、Plugins、Tasks 和 Provider 生命周期均已接入业务服务。
  • Note Move 保留 note_id;Citation 的字符偏移统一使用 UTF-16 code unit,供浏览器编辑器直接定位。
  • Plugin 启用前必须通过权限接口记录授权,未知权限默认拒绝。
  • Attachment Tool 读取 Host 管理的 attachments 目录;音频接口读取 Host 生成的转写文本,真实本地语音模型在第二阶段接入。
  • 接入业务模块时保持当前路径和 Contract,不在 Router 中直接实现数据库、Provider 或 Agent 逻辑。