DEVELOPER

超级大脑 Open API

通过 RESTful API 把企业知识接入你的现有系统:知识检索、智能问答、文档写入,统一使用 app_key / app_secret 换取 Bearer 令牌后调用。

QUICK START

快速开始

三步即可开始使用超级大脑 API

注册开发者 · 获取 app_key

1

创建 API 应用

在开放平台控制台(open.chaojidanao.com)注册开发者并创建应用,勾选可访问的知识库;创建时一次性获得 app_key / app_secret。

app_key / app_secret
2

换取访问令牌

用应用凭证换取 access_token(2 小时,可刷新);业务请求统一携带 Bearer 令牌,不要每次调用都重新换取。

Authorization: Bearer <access_token>
3

调用业务接口

网关地址固定为 /openapi/v1;成功返回业务 JSON,失败返回 HTTP 状态码 + detail。

https://open.chaojidanao.com/openapi/v1

接入前必读

项说明
网关地址https://open.chaojidanao.com/openapi/v1
鉴权方式先用 app_key + app_secret 换取 access_token,业务接口统一携带 Authorization: Bearer <access_token>
数据范围由应用创建时勾选的知识库决定;请求体里没有扩大范围的参数,范围变更后下一次调用即生效
响应格式成功为业务 JSON(字段见各接口);失败为 HTTP 4xx/5xx + {"detail": "..."}(429 另带业务码 code)
请求追踪每次响应带 X-Request-Id,报障时请提供该值
POST /openapi/v1/auth/token

换取访问令牌

用应用的 app_key / app_secret 换取 access_token(默认 2 小时)。请缓存复用,不要每次调用业务接口都重新换取;本端点另有 IP 级限流。

参数名类型必填说明
app_keystring是*创建 API 应用时下发的应用 Key
app_secretstring是*应用 Secret,明文仅在创建应用/重置主密钥时展示一次
curl -X POST https://open.chaojidanao.com/openapi/v1/auth/token \
  -H "Content-Type: application/json" \
  -d '{"app_key":"ak_xxx","app_secret":"sk_xxx"}'
200 OK
{
  "access_token": "eyJhbGciOiJIUzI1NiIs...",
  "token_type": "Bearer",
  "expires_in": 7200,
  "refresh_token": "9f2c1d...",
  "refresh_expires_in": 604800
}
POST /openapi/v1/auth/refresh

刷新访问令牌

access_token 过期后用 refresh_token(7 天)续期;refresh_token 不轮换,响应不再回传明文。

参数名类型必填说明
refresh_tokenstring是*换取令牌时下发的 refresh_token
200 OK
{
  "access_token": "eyJhbGciOiJIUzI1NiIs...",
  "token_type": "Bearer",
  "expires_in": 7200,
  "refresh_expires_in": 512000
}
POST /openapi/v1/retrieve

知识检索

在应用被授权的知识库内检索原文片段(只读)。返回 results[];授权范围内暂无内容时返回 200 + 空数组 + notice,这不是错误。

参数名类型必填说明
querystring是*检索语句,≤ 2000 字符
top_kint否返回条数 1~20,默认 5;超上限自动收敛并在响应中回显实际值
kb_idsarray否请求级收窄的知识库 ID 列表(≤20);必须在应用授权范围内,否则 403
字段类型说明
query / top_kstring / int回显检索语句与实际生效的条数
results[]array命中片段:title 文档标题、content 片段正文、source 来源标识、doc_id 平台文档 ID、url 原文下载地址、score 相关度
latency_msint本次调用耗时(毫秒)
noticestring仅空结果等提示场景出现
curl -X POST https://open.chaojidanao.com/openapi/v1/retrieve \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"query":"离职交接的要求","top_k":2}'
200 OK
{
  "query": "离职交接的要求",
  "top_k": 2,
  "results": [
    {
      "title": "离职管理机制.docx",
      "content": "第三章 离职交接内容与标准……",
      "source": "eef43b86b56b11f181314791045de899",
      "doc_id": "8c1f0a52-...",
      "url": "https://open.chaojidanao.com/openapi/v1/documents/8c1f0a52-.../download",
      "score": 0.6212
    }
  ],
  "latency_ms": 412
}
POST /openapi/v1/retrieve/batch

批量检索

一次提交 1~50 条检索,逐条返回结果;HTTP 恒为 200,失败条目在自身 error 中标注。该路径需应用显式授权(接口白名单),未开通返回 403「该接口未授权」。

// 请求
{"items": [{"query": "报销流程", "top_k": 3}, {"query": "出差标准"}]}

// 响应
{
  "results": [
    {"ok": true, "query": "报销流程", "top_k": 3, "results": [ ... ], "latency_ms": 260},
    {"ok": false, "query": "出差标准", "top_k": 5,
     "error": {"status": 504, "detail": "知识引擎响应超时"}}
  ]
}

整批 200 但有条目失败时,只重试 ok=false 的条目,不要整批重发(会重复消耗配额)。

POST /openapi/v1/ask

知识问答

在授权知识库内提问,返回生成好的答案与引用来源;默认同步 JSON(服务端聚合),stream=true 时返回 SSE 流。

参数名类型必填说明
querystring是*问题文本,≤ 2000 字符
top_kint否检索条数,默认 8,上限 20
streambool否true = SSE 流式;默认 false = 同步 JSON
conversation_idstring否会话 ID(字母/数字/_/-,≤64 位):服务端保留最近 20 轮历史,实现多轮追问
historyarray否本轮之前的历史 [{"role":"user|assistant","content":"…"}],≤20 轮;与 conversation_id 同传时以本字段为准
kb_idsarray否请求级收窄的知识库 ID 列表(≤20,须在授权范围内)
curl -X POST https://open.chaojidanao.com/openapi/v1/ask \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"query":"离职交接有哪些核心要求?","top_k":3}'
200 OK
{
  "answer": "根据所给资料,离职交接的核心要求包括……",
  "sources": [
    {"title": "离职管理机制.docx", "content": "第三章 离职交接内容与标准……",
     "source": "eef43b86b56b11f181314791045de899", "score": 0.62}
  ],
  "model_used": "ragflow/direct",
  "engine_latency_ms": 3820,
  "usage": null
}
POST /openapi/v1/ask(stream=true)

流式问答(SSE)

请求参数与同步问答一致,仅多传 "stream": true;响应为 text/event-stream,每帧一行 data: <json>。流开始后 HTTP 状态码无法变更,引擎错误以带内 error 帧返回。

帧说明
{"token":"…"}增量正文
{"done":true,"content":"…","sources":[…],"model_used":"…","latency_ms":N}终态帧
{"error":"知识引擎暂时不可用"}引擎异常(同同步 502 文案)
{"error":"知识引擎响应超时"}超时(同同步 504 文案)
import json
import requests

resp = requests.post(
    "https://open.chaojidanao.com/openapi/v1/ask",
    headers={"Authorization": "Bearer " + token},
    json={"query": "如何部署私有化版本?", "stream": True},
    stream=True,
    timeout=90,
)
for line in resp.iter_lines(decode_unicode=True):
    if not line or not line.startswith("data:"): 
        continue
    frame = json.loads(line[5:].strip())
    if frame.get("token"):
        print(frame["token"], end="", flush=True)
    elif frame.get("done"):
        break
POST /openapi/v1/documents

上传文档(写入能力,默认关闭)

把文档写入应用已授权的知识库。需平台运营为应用开通「写入能力」(默认关闭),且 kb_id 必须在授权范围内,否则 403。返回 task_id,解析入库为异步过程。

参数名类型必填说明
kb_idstring是*目标知识库 ID(须在授权范围内)
filefile二选一文档文件:pdf / docx / xlsx / txt / md / csv,≤ 20MB
source_urlstring二选一公网 URL 抓取入库
curl -X POST https://open.chaojidanao.com/openapi/v1/documents \
  -H "Authorization: Bearer $TOKEN" \
  -F "kb_id=8f3c1a90-..." \
  -F "file=@员工手册.pdf"
200 OK
{"task_id": "3b7e...", "status": "pending", "doc_id": null}
GET /openapi/v1/documents/tasks/{task_id}

查询写入任务状态

轮询解析进度直到 done / failed。任务仅限创建它的应用查询(他人任务返回 404);本端点不计量、不受限流。

字段类型说明
task_id / statusstring任务 ID 与状态(pending / running / done / failed)
progressint进度百分比
doc_idstring|null入库成功后的平台文档 ID
document_name / source_type / kb_idstring文档名、来源类型、目标知识库
error_logstring失败原因(成功为空串)
GET /openapi/v1/health

健康检查

无需鉴权,用于接入方探活与连通性自检。

200 OK
{"status": "ok"}

错误码参考

网关按 HTTP 状态码返回错误,响应体为 {"detail": "…"};429 额外带业务码 code。

状态码含义说明
401认证失败认证头缺失/格式错误,或令牌无效、过期(统一文案「凭证无效」,不区分原因)
403无权限应用已停用、接口未授权、知识库不在授权范围内
404资源不存在任务/文档不存在,或不属于本应用
422参数错误必填缺失、超长或格式不合法(detail 为数组)
429限流 / 配额code=42902 调用频率超限;code=42901 周期配额用尽;均带 Retry-After
451内容安全query 命中敏感词,不消耗配额
502引擎异常知识引擎暂时不可用
504引擎超时知识引擎响应超时

限流与配额

限流按应用级分钟/小时双窗口执行(/auth/token 为 IP 级);周期配额与检索、写入共用同一配额桶,超限返回 429。

类别口径说明
频率限流应用级窗口超限 {"detail":"调用频率超限","code":42902},按 Retry-After 退避
周期配额检索/写入/生成共用超限 {"detail":"调用配额已用尽","code":42901},响应头含 X-Quota-Limit / X-Quota-Remaining
换令牌IP 级更严格,建议缓存 access_token 后复用
任务轮询不计量查询写入任务状态不消耗配额、不受限流

Python SDK

官方 Python SDK 位于仓库 openplatform-sdk/,零第三方依赖(纯标准库),自动完成两步鉴权、令牌缓存、到期前刷新与 401 重试。

pip install -e openplatform-sdk/
from openplatform_sdk import Client

# 读取 OPENAPI_BASE_URL / OPENAPI_APP_KEY / OPENAPI_APP_SECRET
client = Client.from_env()

# 知识检索
hits = client.retrieve("离职交接的要求", top_k=3)
for item in hits["results"]:
    print(item["title"], item["score"])

# 同步问答
answer = client.ask("离职交接有哪些核心要求?")
print(answer["answer"])

# 流式问答(逐 token)
for frame in client.ask_stream("那转正后呢?", conversation_id="chat-42"):
    print(frame)

开始集成超级大脑

注册开发者账号、创建 API 应用,即可用 app_key / app_secret 调用开放平台接口。