SaaS 订阅
开箱即用,按年订阅,几分钟上线
适用对象
想快速上手的中小药企与研发团队
通过 RESTful API 把企业知识接入你的现有系统:知识检索、智能问答、文档写入,统一使用 app_key / app_secret 换取 Bearer 令牌后调用。
在开放平台控制台(open.chaojidanao.com)注册开发者并创建应用,勾选可访问的知识库;创建时一次性获得 app_key / app_secret。
app_key / app_secret
用应用凭证换取 access_token(2 小时,可刷新);业务请求统一携带 Bearer 令牌,不要每次调用都重新换取。
Authorization: Bearer <access_token>
网关地址固定为 /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,报障时请提供该值 |
用应用的 app_key / app_secret 换取 access_token(默认 2 小时)。请缓存复用,不要每次调用业务接口都重新换取;本端点另有 IP 级限流。
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| app_key | string | 是* | 创建 API 应用时下发的应用 Key |
| app_secret | string | 是* | 应用 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"}'
{
"access_token": "eyJhbGciOiJIUzI1NiIs...",
"token_type": "Bearer",
"expires_in": 7200,
"refresh_token": "9f2c1d...",
"refresh_expires_in": 604800
}
access_token 过期后用 refresh_token(7 天)续期;refresh_token 不轮换,响应不再回传明文。
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| refresh_token | string | 是* | 换取令牌时下发的 refresh_token |
{
"access_token": "eyJhbGciOiJIUzI1NiIs...",
"token_type": "Bearer",
"expires_in": 7200,
"refresh_expires_in": 512000
}
在应用被授权的知识库内检索原文片段(只读)。返回 results[];授权范围内暂无内容时返回 200 + 空数组 + notice,这不是错误。
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| query | string | 是* | 检索语句,≤ 2000 字符 |
| top_k | int | 否 | 返回条数 1~20,默认 5;超上限自动收敛并在响应中回显实际值 |
| kb_ids | array | 否 | 请求级收窄的知识库 ID 列表(≤20);必须在应用授权范围内,否则 403 |
| 字段 | 类型 | 说明 |
|---|---|---|
| query / top_k | string / int | 回显检索语句与实际生效的条数 |
| results[] | array | 命中片段:title 文档标题、content 片段正文、source 来源标识、doc_id 平台文档 ID、url 原文下载地址、score 相关度 |
| latency_ms | int | 本次调用耗时(毫秒) |
| notice | string | 仅空结果等提示场景出现 |
curl -X POST https://open.chaojidanao.com/openapi/v1/retrieve \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"query":"离职交接的要求","top_k":2}'
{
"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
}
一次提交 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 的条目,不要整批重发(会重复消耗配额)。
在授权知识库内提问,返回生成好的答案与引用来源;默认同步 JSON(服务端聚合),stream=true 时返回 SSE 流。
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| query | string | 是* | 问题文本,≤ 2000 字符 |
| top_k | int | 否 | 检索条数,默认 8,上限 20 |
| stream | bool | 否 | true = SSE 流式;默认 false = 同步 JSON |
| conversation_id | string | 否 | 会话 ID(字母/数字/_/-,≤64 位):服务端保留最近 20 轮历史,实现多轮追问 |
| history | array | 否 | 本轮之前的历史 [{"role":"user|assistant","content":"…"}],≤20 轮;与 conversation_id 同传时以本字段为准 |
| kb_ids | array | 否 | 请求级收窄的知识库 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}'
{
"answer": "根据所给资料,离职交接的核心要求包括……",
"sources": [
{"title": "离职管理机制.docx", "content": "第三章 离职交接内容与标准……",
"source": "eef43b86b56b11f181314791045de899", "score": 0.62}
],
"model_used": "ragflow/direct",
"engine_latency_ms": 3820,
"usage": null
}
请求参数与同步问答一致,仅多传 "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
把文档写入应用已授权的知识库。需平台运营为应用开通「写入能力」(默认关闭),且 kb_id 必须在授权范围内,否则 403。返回 task_id,解析入库为异步过程。
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| kb_id | string | 是* | 目标知识库 ID(须在授权范围内) |
| file | file | 二选一 | 文档文件:pdf / docx / xlsx / txt / md / csv,≤ 20MB |
| source_url | string | 二选一 | 公网 URL 抓取入库 |
curl -X POST https://open.chaojidanao.com/openapi/v1/documents \ -H "Authorization: Bearer $TOKEN" \ -F "kb_id=8f3c1a90-..." \ -F "file=@员工手册.pdf"
{"task_id": "3b7e...", "status": "pending", "doc_id": null}
轮询解析进度直到 done / failed。任务仅限创建它的应用查询(他人任务返回 404);本端点不计量、不受限流。
| 字段 | 类型 | 说明 |
|---|---|---|
| task_id / status | string | 任务 ID 与状态(pending / running / done / failed) |
| progress | int | 进度百分比 |
| doc_id | string|null | 入库成功后的平台文档 ID |
| document_name / source_type / kb_id | string | 文档名、来源类型、目标知识库 |
| error_log | string | 失败原因(成功为空串) |
无需鉴权,用于接入方探活与连通性自检。
{"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 位于仓库 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)