InfiniSynapse Server API Reference

本文是 InfiniSynapse 服务端(Server)面向外部用户/SDK 的 HTTP API 参考。通过一个 API Key(Bearer Token)即可直接调用,完成多轮 AI 任务对话、数据源管理、RAG 知识库管理、文件上传与下载等操作,无需依赖前端界面。

仅需命令行集成的用户,可优先查阅《InfiniSynapse CLI API Reference》;本文面向需要直接发起 HTTP 请求的开发者。

1. 接入准备

基础信息

基础地址(国内)https://app.infinisynapse.cn
基础地址(海外)https://app.infinisynapse.com
全局路径前缀所有接口均以 /api 开头
鉴权方式HTTP 头 Authorization: Bearer <API Key>
默认内容类型application/json(文件上传为 multipart/form-data

国内用户请使用 .cn 域名,海外用户请使用 .com 域名;私有化部署时替换为你自己的服务地址。下文示例统一以 .cn 域名书写,海外环境将其替换为 .com 即可。

鉴权

所有业务接口都需要在请求头携带 Bearer Token:

Authorization: Bearer <你的 API Key>

服务端从 Token 的 sub 声明中解析出用户身份(userId),所有资源(任务、数据源、知识库、文件)都按用户隔离。少数标注「公开只读」的接口无需鉴权。

语言

可选请求头 x-lang 控制服务端返回的提示文案语言,取值:zh_CN(默认)、enarjakoru

x-lang: zh_CN

统一响应结构

绝大多数接口返回统一信封:

{
  "code": 200,
  "message": "success",
  "data": { }
}
  • code === 200 表示成功,业务数据在 data 中。
  • code1101 / 1105:Token 过期或失效,需更换 API Key。
  • 参数校验失败返回 HTTP 422message 为第一条校验错误信息。
  • 文件下载类接口直接返回二进制流(application/octet-streamapplication/zip),不走该信封。

分页约定

列表类接口(继承自通用分页参数)支持以下 Query 参数:

参数类型默认说明
pagenumber1页码(从 1 开始)
pageSizenumber10每页条数(一般上限 100,数据源列表上限 10000)
fieldstring-排序字段,如 updated_at
orderstringdesc排序方向 asc / desc

分页响应的 data 结构:

{
  "items": [ ],
  "meta": {
    "itemCount": 10,
    "totalItems": 42,
    "itemsPerPage": 10,
    "totalPages": 5,
    "currentPage": 1
  }
}

快速开始示例

curl -X GET "https://app.infinisynapse.cn/api/ai_database/list?page=1&pageSize=10&source=all" \
  -H "Authorization: Bearer <你的 API Key>" \
  -H "x-lang: zh_CN"

2. AI 对话与任务执行

AI 对话采用「SSE 长连接 + 消息投递」的异步模式:先订阅事件流接收实时推送,再通过消息接口发送指令。

2.1 订阅事件流(SSE)

  • GET /api/ai/events
  • 建立 Server-Sent Events 长连接,服务端主动推送消息变更、状态就绪、通知等。

Query 参数

参数必填说明
connId客户端生成的连接 ID(如 UUID);多 Tab/多连接时各用一个,便于服务端定向推送。不传则服务端自动生成

请求头Authorization: Bearer <token> 必填,建议带 Accept: text/event-stream

事件类型(每条格式为 event: <event>\ndata: <JSON>\n\n

eventdata说明
message.add{ taskId, message }向任务追加一条消息
message.update{ taskId, message }更新已有消息
message.partial{ taskId, message }流式增量更新(同 ts 覆盖或追加)
message.remove{ taskId, messageTs: number[] }移除指定消息
state.ready{ taskId }状态就绪,建议随后调用 /api/ai_task/tasks 全量拉取
notification{ type, title, message, duration? }全局通知
heartbeat"ping"保活,可忽略
curl -N "https://app.infinisynapse.cn/api/ai/events?connId=550e8400-e29b-41d4-a716-446655440000" \
  -H "Authorization: Bearer <你的 API Key>" \
  -H "Accept: text/event-stream"

2.2 发送消息

  • POST /api/ai/message
  • 根据 body 的 type 分发到不同逻辑。回复实时推送到 SSE 通道,本接口本身仅返回执行结果。

常用 type 及字段

type必填字段可选字段说明
newTasktexttaskIdconnIdimagesfiles新建任务(会做数据源扣费校验与幂等)
askResponsetaskIdaskResponsetextimagesfiles回复 Agent 的提问,继续多轮对话;askResponse 一般为 messageResponse
cancelTasktaskId-取消运行中的任务
clearTask-taskId清除任务;不传 taskId 清空全部
optionsResponsetaskIdconnIdtext-多选项回复
togglePlanActModechatSettingstaskId切换规划/执行模式
autoApprovalSettingsautoApprovalSettings-更新自动审批配置
rollbackToSnapshottaskIdsnapshotTs-回滚到指定快照
rollbackAndSendMessagetaskIdsnapshotTstextimagesfiles回滚并发送新消息
editFirstMessageAndResendtaskIdtextimagesfiles编辑首条消息并重新执行

响应

  • 成功通常为 { "success": true }
  • newTask、回滚、编辑首条等会附带 { success: true, state, forceReplace? }
  • 失败可能为 { success: false, error }{ success: false, notification: { type, title, message } }(如扣费校验失败)。
# 新建任务
curl -X POST "https://app.infinisynapse.cn/api/ai/message" \
  -H "Authorization: Bearer <你的 API Key>" \
  -H "Content-Type: application/json" \
  -d '{"type":"newTask","text":"分析最近一个月的销售趋势","connId":"550e8400-..."}'

# 多轮追问
curl -X POST "https://app.infinisynapse.cn/api/ai/message" \
  -H "Authorization: Bearer <你的 API Key>" \
  -H "Content-Type: application/json" \
  -d '{"type":"askResponse","taskId":"task-001","askResponse":"messageResponse","text":"再按地区拆分"}'

2.3 其他对话辅助接口

接口方法说明
/api/ai/state?taskId=GET获取指定任务(或全局)的完整前端状态:apiConfiguration、当前任务、消息列表、自动审批、对话模式、todo 等
/api/ai/settingsPOST更新 API 配置、自定义说明、自动审批设置;传 taskId 时同时更新该任务的模型
/api/ai/configurationGET获取当前用户保存的 apiConfiguration
/api/ai/modelsGET按当前 API 配置请求 OpenAI 兼容 /models,返回可用模型 ID 数组
/api/ai/pingGET轻量心跳,返回 { ok: true },用于探测连接存活

3. 任务管理

控制器前缀:/api/ai_task

3.1 任务查询

接口方法参数说明
/api/ai_task/listGET分页参数 + task_namecategory_namecategory_idis_in_ragvirtual_echart_category(均可选,模糊匹配)分页获取任务列表
/api/ai_task/tasks?taskId=GETtaskId(必填)获取任务完整数据(taskInfo + messages + isRunning
/api/ai_task/getTaskInfo/:idGET路径 id获取任务元信息(不创建运行实例)
/api/ai_task/showTaskWithId/:idGET路径 id获取任务详情
/api/ai_task/getUiMessageById?id=GETid(任务 ID)获取任务的 UI 消息列表(已瘦身)
/api/ai_task/messagePayload?taskId=&messageTs=GETtaskIdmessageTs获取单条消息的完整 text(未瘦身)
/api/ai_task/getTaskWorkspace/:idGET路径 id获取任务工作目录及文件列表 { cwd, files }

3.2 任务操作

删除任务

  • POST /api/ai_task/deleteTaskWithId
{ "ids": ["task-001", "task-002"] }

取消任务

  • POST /api/ai_task/cancelTask?taskId=task-001taskId 作为 Query 参数)

重新运行 SQL 任务

  • POST /api/ai_task/rerunSqlTask
{ "id": "task-001", "chat_index": 0 }

运行提取的 SQL

  • POST /api/ai_task/runExtractSql
{
  "variables": { "startDate": "2024-01-01", "endDate": "2024-12-31" },
  "register_tables": "orders,users",
  "databases": "main_db",
  "sqls": "SELECT * FROM orders WHERE created_at BETWEEN :startDate AND :endDate"
}

3.3 任务与 RAG

接口方法请求体/参数说明
/api/ai_task/saveToRagPOST{ taskId, action }actionsave/remove保存或移除任务到 RAG
/api/ai_task/isSavedToRag?taskId=GETtaskId返回布尔值,任务是否已保存到 RAG

3.4 任务分类

接口方法请求体/参数说明
/api/ai_task/category/addPOST{ category_name }添加分类
/api/ai_task/category/updatePOST{ id, category_name }更新分类
/api/ai_task/category/deletePOST{ ids: [] }删除分类
/api/ai_task/category/listGET分页参数 + category_name分页获取分类
/api/ai_task/category/getAllCategoriesGET-获取全部分类
/api/ai_task/getCatetoryById/:idGET路径 id分类详情
/api/ai_task/getCatetoryByTaskId/:idGET路径 id(任务 ID)获取任务关联分类
/api/ai_task/updateCategoryByTaskIdPOST{ id, category_ids: [] }更新任务关联分类

3.5 任务文件

接口方法请求体/参数说明
/api/ai_task/previewFilePOST{ taskId, fileName }预览文件内容,返回 { content, fileType }
/api/ai_task/downloadZip?taskId=GETtaskId下载整个任务目录为 ZIP(返回二进制流)

3.6 任务分享(公开只读,无需鉴权)

接口方法说明
/api/ai_task/setSharePOST{ taskId, isPublic } 设置任务公开/私有(需所有者鉴权)
/api/ai_task/shareStatus?taskId=GET查询分享状态(需所有者鉴权)
/api/ai_task/publicTask?taskId=GET公开只读获取任务数据
/api/ai_task/publicMessagePayload?taskId=&messageTs=GET公开只读获取单条消息完整内容
/api/ai_task/publicTaskFileTree/:taskIdGET公开只读获取文件树
/api/ai_task/publicPreviewFilePOST公开只读预览文件
/api/ai_task/publicDownloadTaskFile/:taskId?path=GET公开只读下载文件
/api/ai_task/publicDownloadZip?taskId=GET公开只读下载任务 ZIP

4. 数据源管理

控制器前缀:/api/ai_database。支持的数据库类型:mysqlpostgressqlitesqlserverclickhousesnowflakedorisstarrocksgbasekingbasedmsupabasedeltalakefile(测试连接还支持 mongodbelasticsearch)。

4.1 列表查询

  • GET /api/ai_database/list

Query 参数:分页参数 + 以下可选项

参数说明
name数据库名称(模糊)
type数据库类型
enabled是否启用:1 / 0
source来源:local / remote / subscribed / all(默认 all
subscribeSource订阅来源:created / subscribed / all(默认 created

4.2 增删改

接口方法请求体说明
/api/ai_database/addPOSTDatabaseAddDto创建数据库连接
/api/ai_database/updatePOSTDatabaseEditDto(含 id更新数据库配置
/api/ai_database/deletePOST{ ids: [] }批量删除
/api/ai_database/enabledPOST{ ids: number[], enabled }批量启用/禁用

add 请求体示例:

{
  "name": "production_db",
  "type": "mysql",
  "config": "{\"mysql_host\":\"127.0.0.1\",\"mysql_port\":3306,\"mysql_username\":\"root\",\"mysql_password\":\"***\",\"mysql_database\":\"sales\"}",
  "enabled": 1,
  "description": "生产环境数据库",
  "nickname": "销售数据源"
}

注意:数据库 name 不能以 remote_subscribe_ 开头。

4.3 连接测试与查询

接口方法请求体/参数说明
/api/ai_database/testConnectionPOST{ type, config }测试连接,返回 { success, message, latencyMs }
/api/ai_database/getDatabaseById/:idGET路径 id按 ID 查询详情
/api/ai_database/getDatabaseByName/:nameGET路径 name按名称查询详情

4.4 文件与知识库绑定

接口方法请求体/参数说明
/api/ai_database/upload/:databaseIdPOSTmultipart/form-data,字段 file(≤1GB)上传数据文件到指定数据库
/api/ai_database/bindRagsPOST{ databaseId, ragIds: [] }设置数据库关联的知识库
/api/ai_database/getBindRags/:databaseIdGET路径 databaseId获取数据库绑定的知识库列表

5. RAG 知识库管理

控制器前缀:/api/ai_rag_sdk

5.1 查询

接口方法参数说明
/api/ai_rag_sdkGET分页参数 + keywordenabledsourcesubscribeSource分页获取知识库列表
/api/ai_rag_sdk/allGET-获取全量知识库(不分页)
/api/ai_rag_sdk/:idGET路径 id知识库详情

5.2 增删改

接口方法请求体说明
/api/ai_rag_sdk/createPOSTRagSdkCreateDto创建知识库
/api/ai_rag_sdk/update/:idPOSTRagSdkUpdateDto更新知识库
/api/ai_rag_sdk/deletePOST{ ids: [] }批量删除
/api/ai_rag_sdk/enabledPOST{ ids: [], enabled }批量启用/禁用

create 请求体示例:

{
  "name": "sales_kb",
  "nickname": "销售知识库",
  "description": "销售相关文档",
  "ragDocFilterRelevance": "0.5",
  "requiredExts": [".pdf", ".docx", ".txt"],
  "docDir": "/path/to/docs",
  "enabled": 1,
  "database_ids": ["uuid-1", "uuid-2"]
}

5.3 数据库绑定

接口方法请求体/参数说明
/api/ai_rag_sdk/bindDatabasesPOST{ ragId, databaseIds: [] }设置知识库关联的数据库
/api/ai_rag_sdk/getBindDatabases/:ragIdGET路径 ragId获取知识库绑定的数据库列表

5.4 文件操作(支持 file / oss / s3)

接口方法请求体说明
/api/ai_rag_sdk/fileTreePOSTListDirectoryDto列出目录文件树
/api/ai_rag_sdk/downloadPOSTDownloadFileDto下载文件(返回二进制流)
/api/ai_rag_sdk/deleteRemoteFilePOSTDeleteRemoteFileDto删除远程文件(仅 OSS/S3)

fileTree 请求体示例(远程 OSS):

{
  "file_system": "oss",
  "directory": "/docs",
  "endpoint": "https://oss-cn-hangzhou.aliyuncs.com",
  "access_key_id": "***",
  "access_key_secret": "***",
  "filter": "both"
}

6. 文件上传

上传相关接口注册在根路径下(即 /api/...)。除任务上传外,普通上传以「目录」组织。

接口方法参数说明
/api/upload/:directoryPOSTmultipart/form-data 字段 file(≤1GB)上传文件到指定目录,返回 { filename }
/api/taskUpload/:taskIdPOSTfile + Query subdirnaming(original/hash)上传文件到任务工作目录,返回 { filename, assetId, logicalPath, name, size }
/api/createDirectoryPOSTCreateDirectoryDto创建目录
/api/deleteDirectoryDELETEDeleteDirectoryDto删除目录
/api/directoriesGET-获取目录列表
/api/fileTree?keyword=GETkeyword(可选)获取文件树结构
/api/taskFileTree/:taskIdGET路径 taskId获取任务工作目录文件树
/api/uploadConfigGET-获取上传限制配置 { maxFileSizeMB, maxFileSizeBytes, chat }
curl -X POST "https://app.infinisynapse.cn/api/upload/my-folder" \
  -H "Authorization: Bearer <你的 API Key>" \
  -F "file=@./data.csv"

7. 文件存储与下载

控制器前缀:/api/storage

接口方法参数说明
/api/storage/deletePOST{ ids: [] }删除文件
/api/storage/download/:idGET路径 id(格式 目录/文件名,需 URL 编码)下载文件(返回二进制流)
/api/storage/downloadTaskFile/:taskId?path=GET路径 taskId + Query path(文件相对路径,需 URL 编码)下载任务工作目录中的文件
curl "https://app.infinisynapse.cn/api/storage/downloadTaskFile/task-001?path=data%2Fresult.csv" \
  -H "Authorization: Bearer <你的 API Key>" \
  -o result.csv

8. 错误处理

现象处理建议
code1101 / 1105Token 过期或失效,更换 API Key 后重试
HTTP 422请求参数校验失败,message 为具体原因
HTTP 400业务校验失败(如文件超限、命名非法、无文件上传等)
HTTP 404资源/文件不存在或无权访问
SSE 无数据检查 Authorization 头与网络,确认已先建立 /api/ai/events 连接再发消息

9. 典型调用流程

  1. 建立 SSE 连接:GET /api/ai/events?connId=<uuid>
  2. 准备资源:GET /api/ai_database/listGET /api/ai_rag_sdk,按需 POST /api/ai_database/enabledPOST /api/ai_rag_sdk/enabled 启用。
  3. 新建任务:POST /api/ai/messagetype=newTask),从 SSE 接收实时回复。
  4. 多轮追问:POST /api/ai/messagetype=askResponse)。
  5. 查看结果:GET /api/ai_task/getTaskWorkspace/:id 列出产物,POST /api/ai_task/previewFile 预览,GET /api/storage/downloadTaskFile/:taskId?path= 下载。