- 实现ProviderFactory用于构建不同类型的provider适配器 - 添加EnvironmentCredentialResolver用于解析环境变量中的凭证 - 实现OllamaProvider支持本地模型调用 - 实现OpenAICompatibleProvider支持OpenAI兼容接口 - 在AgentRuntime中添加对ProviderError的处理 - 更新Message结构体添加tool_calls字段 - 实现provider配置的增删改查API端点 - 添加provider注册表的replace方法 - 添加HTTP基础类和工具参数解码功能 - 更新依赖添加httpx库 - 添加相关单元测试验证provider适配器功能 ```
5.3 KiB
5.3 KiB
后端接口契约(开发版)
本文档记录当前前后端联调使用的接口壳子。业务服务尚未实现,最终字段以 FastAPI 运行时生成的 OpenAPI 为准。
契约入口
- Swagger UI:
GET /docs - OpenAPI:
GET /openapi.json - 所有普通接口使用 JSON。
- Chat 和 Agent 实时事件使用
text/event-stream(SSE)。 - 内部时间统一使用 UTC ISO 8601。
- ID 使用稳定业务 ID,不使用文件路径代替 ID。
接口清单
System
| 方法 | 路径 | 用途 |
|---|---|---|
| GET | /health |
Sidecar 健康检查 |
| GET | /api/status |
获取服务名称、版本和环境 |
Notes 与 Search
| 方法 | 路径 | 用途 |
|---|---|---|
| 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 |
| 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": {}
}
}
当前接口壳子的写操作主要返回:
501 NOT_IMPLEMENTED:契约已经建立,业务服务尚未接入;422 VALIDATION_ERROR:请求字段不符合 Pydantic Contract;404 RESOURCE_NOT_FOUND:路由或资源不存在。
前端只根据 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、OpenAI-Compatible Chat Completions 和 Ollama。
- 默认提供
mock/mock-1离线 Provider,以及system.echo、math.add开发 Tool。 - Notes、Search、Skills、Plugins、Tasks、Media、Index 等尚未接入业务服务的接口继续返回空结果、
idle或501。 - 需要尚未接入的数据库、文件或扩展 Runtime 的操作统一返回
501。 - 接入业务模块时保持当前路径和 Contract,不在 Router 中直接实现数据库、Provider 或 Agent 逻辑。