#基础约定
本指南默认使用 Compose 的公共入口 http://localhost:21108;单独运行 Backend 时,可改为 http://localhost:21109。所有业务 API 使用 /api 前缀。JSON 请求带 Content-Type: application/json;上传使用 multipart/form-data。运行服务的 /openapi.json 提供完整机器可读定义,/docs 打开 Swagger。
表中的 {sid}、{pid}、{did} 分别代表服务端返回的 session_id、project_id、dataset_id;{rid} 为 run_id,{jid} 为 job_id。路径缩写只用于阅读,实际调用时替换为对应标识。以下为主要入口索引,字段约束与完整响应以同一部署的 /openapi.json 为准。
#单用户工作区
/api/workspace公共 /api/* 请求统一绑定到 IGRAPH_ADMIN_USER_ID 指定的默认工作区归属,默认 admin。客户端无需提交 X-User-ID;旧客户端即使发送该头,也会被服务端替换为固定归属,不能用它切换账号。本接口无请求体,返回工作区状态与可用模型信息,不进行用户认证,也不颁发登录令牌。
{
"valid": true,
"single_user": true,
"user_id": "admin",
"is_admin": true,
"available_models": [
"CONFIGURED_MODEL"
],
"default_model": "CONFIGURED_MODEL"
}上例的 CONFIGURED_MODEL 是占位符,实际模型以工作区响应和 GET /api/models 为准。旧 POST /api/auth/validate 仅保留为隐藏兼容入口,返回相同工作区信息;/api/admin/users 及其用户管理操作已移除。is_admin 是内部兼容字段,不表示存在管理员登录流程。
模型 API Key 和 IGRAPH_CONTROL_SERVICE_KEY 仍分别用于模型供应商连接与内部服务校验。项目、会话、数据集和文件的范围检查仍然生效。单用户应用默认通过本机回环地址或 SSH 隧道访问;没有登录页面并不意味着应把内部服务直接暴露到公网。
#创建会话
/api/sessions| 字段 | 类型 / 默认值 | 含义 |
|---|---|---|
| client_session_id | UUID string | null | 可选客户端幂等 UUID,最长 64 字符;非 UUID 返回 400。 |
| model | string | null | 可选模型 ID;使用当前工作区可用、已启用且连接配置完整的模型。 |
| project_id | string | null | 项目归属;null 为非项目会话。 |
| active_dataset_id | string | null | 可选当前数据集;必须属于会话可访问的工作区和项目范围。 |
| initial_message_preview | string / "" | 最长 1000 字符;作为会话标题等元信息。 |
| reasoning_mode | "direct" | "staged" / "direct" | 推理模式。 |
| planning_mode | "never" | "auto" | "always" / "auto" | 规划策略。 |
{
"client_session_id": "799888e3-5ae2-43ad-bec3-5b1e8e64fa25",
"reasoning_mode": "direct",
"planning_mode": "auto"
}成功响应包含 success、session_id,以及当前 model、project_id、active_dataset_id 等信息。复用客户端 ID 时可能返回 reused: true。创建会话后调用 chat/stream 发送消息。
#会话与运行接口
| 方法 | 路径 | 用途 |
|---|---|---|
| GET / POST | /api/sessions | 列出 / 创建默认工作区的会话 |
| POST | /api/sessions/{sid}/activate | 激活会话并恢复可用状态 |
| GET | /api/sessions/{sid}/messages | 读取持久化消息与可恢复的界面内容 |
| GET | /api/sessions/{sid}/info | 会话信息、活动数据和运行状态 |
| GET | /api/sessions/{sid}/context-usage | 上下文用量信息 |
| PATCH | /api/sessions/{sid} | 更新会话名称等元数据 |
| PATCH | /api/sessions/{sid}/model | 切换当前工作区可用的模型 |
| PATCH | /api/sessions/{sid}/dataset | 更新会话数据集绑定 |
| PATCH | /api/sessions/{sid}/reasoning-mode | 更新推理模式 |
| PATCH | /api/sessions/{sid}/planning-mode | 更新规划模式 |
| DELETE | /api/sessions/{sid} | 删除会话;活动任务可能要求先停止 |
| POST | /api/sessions/{sid}/chat/stream | 发送问题并接收 SSE |
| POST | /api/sessions/{sid}/feedback/stream | 提交工具审批决定并继续原运行 |
| POST | /api/sessions/{sid}/runs/{rid}/resume | 从 last_event_index 继续观察已有运行 |
| GET | /api/sessions/{sid}/runs/{rid}/snapshot | 读取阶段快照;检查 snapshot_complete |
| GET | /api/capabilities | 读取停止与最新一轮编辑的能力开关 |
| POST | /api/sessions/{sid}/runs/cancel | 停止指定运行,需要启用 run_cancel_v1 |
| GET | /api/sessions/{sid}/runs/control | 按 run_id 或 start_request_id 查询控制状态 |
| POST | /api/sessions/{sid}/jobs/{jid}/cancel | 停止指定后台作业,需要启用 job_cancel_v1 |
| GET | /api/sessions/{sid}/jobs/{jid}/control | 查询作业停止与持久化状态 |
项目和数据集接口保留独立作用域:项目数据使用 /api/projects/{pid}/datasets,个人数据使用 /api/personal-datasets。项目下的会话与训练实验可分别从 conversations 和 training-runs 子路径读取;训练接口提供已记录实验的汇总,不会仅因读取列表而启动训练。
| 方法 | 路径 | 用途 |
|---|---|---|
| GET / POST | /api/projects | 列出 / 创建项目 |
| GET / PATCH / DELETE | /api/projects/{pid} | 查看 / 修改 / 删除项目 |
| GET | /api/projects/{pid}/conversations | 项目会话列表 |
| GET | /api/projects/{pid}/training-runs | 项目训练记录与配置、指标、模型信息 |
| GET | /api/server-datasets | 列出服务器预置数据源 |
| POST | /api/projects/{pid}/datasets/from-server | 将可访问的服务器数据源加入项目 |
| GET / POST | /api/models/custom | 列出 / 保存工作区自定义模型配置 |
| DELETE | /api/models/custom/{model_id} | 删除工作区的自定义模型配置 |
| GET | /api/models | 读取模型目录与默认模型 |
| PUT | /api/models/default | 设置默认模型 |
| GET / POST | /api/model-providers | 列出 / 保存模型服务提供商 |
| GET | /api/construction-models | 读取可选构图模型 |
| GET / POST | /api/construction-model-settings | 读取 / 保存独立构图模型连接设置 |
工作区、记忆与技能也有公共 API。技能上传使用 multipart/form-data 的 file 字段,支持 .md 和 .zip,当前 Backend 限制为 2 MiB。候选批准与工具执行审批是两个不同流程。
| 方法 | 路径 | 用途 |
|---|---|---|
| GET | /api/sessions/{sid}/workspace/files | 列出可见上传文件与已发布结果文件 |
| GET | /api/sessions/{sid}/workspace/derived/{artifact_path} | 通过会话与文件范围校验后下载 Derived 结果 |
| GET / POST | /api/memory | 查询 / 创建记忆;GET 支持 scope、query、limit |
| PATCH / DELETE | /api/memory/{memory_id} | 修改 / 删除记忆 |
| GET | /api/memory/events | 读取记忆相关事件 |
| GET | /api/memory/usage | 读取记忆用量信息 |
| GET / POST | /api/skills | 列出 / 创建技能 |
| POST | /api/skills/upload | 上传技能文件或归档 |
| GET / PUT / DELETE | /api/skills/{name} | 读取全文 / 编辑 / 删除技能 |
| POST | /api/skills/{name}/approve | 批准候选技能 |
| POST | /api/skills/{name}/reject | 拒绝候选技能 |
| GET | /api/export/sft | 导出默认工作区已有会话中的输入输出样本 |
/api/export/sft 支持 format=alpaca、sharegpt 或 raw,以及 min_turns、require_tool_calls 筛选参数;返回包含 items 的 JSON。它导出已有记录,不代表样本已经经过质量筛选或可以直接用于训练。此接口未在当前前端提供独立的 SFT 导出按钮;文件下载、报告展示和会话样本导出应分别理解。
#上传数据集
/api/projects/{project_id}/datasets/api/personal-datasets数据集上传使用 multipart/form-data。至少提供一个 file 或 files 文件字段;files 可重复用于多文件上传。多表 CSV 可连同描述关系的 schema JSON 组成同一数据集,具体支持的组合以返回的验证结果为准。项目和个人作用域使用各自的上传地址。
| 字段 | 说明 |
|---|---|
| file / files | 上传一个或多个文件,至少一项必填 |
| csv_schema | 可选的 CSV schema JSON 文本 |
| name / description | 可选的数据集名称和描述 |
| session_id | 可选关联会话,仍需通过归属校验 |
| set_as_default | 仅项目上传支持;默认 false |
curl -X POST "http://localhost:21108/api/projects/PROJECT_ID/datasets" \
-F "files=@customers.csv" \
-F "files=@orders.csv" \
-F "files=@schema.json" \
-F "name=Commerce tables"聊天附件另用 POST /api/sessions/{sid}/upload 的 file 字段。响应中的 file_token 用于后续聊天请求,workspace_path 表示工作区文件位置;不能用浏览器本地路径代替 file_token。CSV、SQL、TXT 附件可登记为待构图数据源。上传成功、源数据预览成功、构图完成和当前会话加载图,是四个不同状态。
源数据预览地址是 /api/projects/{pid}/datasets/{did}/construction/source-preview,个人数据对应 /api/personal-datasets/{did}/construction/source-preview。该只读接口可在构图前调用;CSV 可携带 delimiter。结果中的 tables、text、limits 和 warnings 表示有上限的表格样例或文本片段。SQL 字段说明标明注释、结构信息或未提供说明,不能把结构推断当成业务定义;预览解析成功也不保证 SQL 方言适用于后续构图。
#错误与重试
| 状态 | 常见含义 | 客户端处理 |
|---|---|---|
| 403 | 内部服务凭据或数据范围检查未通过 | 检查错误 detail、内部服务密钥和项目 / 会话归属;无需重新登录 |
| 404 | 资源不存在或不可访问 | 核对资源 ID 与工作区 / 项目 / 会话范围;已移除的用户管理入口也返回 404 |
| 409 | 状态或图 revision 冲突 | 重新读取状态后再操作,勿盲目重试写入 |
| 422 | 参数验证失败 | 检查响应 detail 与字段类型 |
| 429 | 构图容量已满:construction_capacity_exhausted | 本次未启动,退避后重试。 |
| 504 | 构图仍在运行或未确认:construction_running_unconfirmed | 先读取构图状态,避免超时后立即重复构图。 |
FastAPI 的 detail 可能是字符串、结构化对象或验证错误数组,不应假定统一错误 envelope。流建立后的失败需结合 SSE 终止事件、快照与 control 状态处理。