概述
立刻智能体平台提供统一的 HTTP API 接口,允许外部系统通过标准 HTTP 请求调用 AI 智能问答能力。系统基于知识库向量检索 + 大语言模型的 RAG 架构,确保回答精准可靠。
调用流程
Customer Code + API Key
获取 Template ID
提交用户问题
流式/非流式输出
Base URL
https://agent.likelic.com/api/v1
认证方式
所有 API 请求必须在 HTTP Headers 中携带以下两个认证字段,且两个凭证必须属于同一企业:
| Header | 说明 | 格式要求 | 示例 |
|---|---|---|---|
X-Customer-Code |
客户唯一代码(由管理员分配) | 1-50 位字母、数字、下划线或短横线 | demo_company |
X-API-Key |
API 访问密钥(在控制台 API 设置中创建) | 以 sk- 开头,后跟 48 位十六进制字符 |
sk-a1b2c3d4e5f6... |
认证校验规则
| 校验项 | 说明 |
|---|---|
| 格式校验 | Customer Code 和 API Key 均需符合上述格式,否则返回 401 |
| 归属校验 | API Key 必须属于该 Customer Code 对应的企业,否则返回 403 |
| 有效期校验 | 如果 API Key 设置了过期时间,过期后将返回 403 |
| 状态校验 | API Key 被禁用后将返回 403 |
智能对话接口 Core
POST /api/v1/chat
向智能体发送问题并获取 AI 回答。支持指定提示词模板和流式/非流式输出模式。
请求参数 (JSON Body)
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
question |
string | 必填 | 用户提出的问题内容。不可为空字符串,最大长度 800 个字符。 |
template_id |
string | 可选 | 指定提示词模板 ID(18-32 位字母数字组合)。不传或留空则使用用户后台设置的默认模板。可在控制台「提示词管理」中查看每个模板的 ID。 |
session_id |
string | 可选 | 会话 ID(最长 36 位)。传入相同的 session_id 可将多次连续对话归组为同一会话,在控制台「对话日志」中合并展示。非流式模式下,首次对话不传此参数,系统将自动生成并在响应中返回;流式模式下,若需记录连续会话,应在首次请求就传入,客户端自行生成 UUID,因为流式返回的内容不包含 session_id。 |
stream |
boolean | 可选 | 是否启用流式输出。默认 false。设为 true 时以 SSE (Server-Sent Events) 格式逐字返回。 |
关键词转人工(企业微信)
若企业已在控制台配置「企业微信 → 人工客服转接」(开启转人工推送并填写群机器人 Webhook、触发词),则开放 API 与网页组件、控制台 Chat 共用同一套触发词:当用户 question 中包含任一条触发词时,本次请求不会调用大模型,而是创建/续接人工会话,并向企微群推送卡片。
- session_id:首条转人工请求可不传,响应中的
session_id须保存;后续用户与人工沟通过程中请继续传入同一session_id,追问会推送到同一企微群线程。 - 响应:
data.human_mode === true表示已进入人工模式;data.answer为提示文案;data.human_session_db_id为内部会话主键(与群内卡片「会话记录ID」一致,供排障或对接工单)。 - 退出人工:用户发送结束类话术(与控制台人工会话一致)且传入当前
session_id时,可结束会话并回到 AI。 - 流式:转人工在流式、非流式下均在调用模型之前判定;命中转人工时返回普通 JSON(非 SSE)。
- 按 API Key 控制:专业版及以上在「API 设置 → 管理密钥权限」中可关闭某密钥的转人工,或指定仅使用某条企微「人工客服转接」配置(多配置时避免串线)。基础版(Lite)无企业微信菜单,亦不展示该项,开放 API 侧沿用默认转人工策略(若企业未配企微则不会命中)。
非流式输出 (stream: false)
完整等待模型生成后一次性返回结果,适用于后台任务、批处理等场景。
请求示例(首次对话)
curl -X POST https://agent.likelic.com/api/v1/chat \
-H "Content-Type: application/json" \
-H "X-Customer-Code: your_customer_code" \
-H "X-API-Key: sk-your-api-key-here" \
-d '{
"question": "你们的退货政策是什么?",
"template_id": "Abc123Def456GhiJkl789Mnop"
}'
请求示例(多轮对话,续接会话)
curl -X POST https://agent.likelic.com/api/v1/chat \
-H "Content-Type: application/json" \
-H "X-Customer-Code: your_customer_code" \
-H "X-API-Key: sk-your-api-key-here" \
-d '{
"question": "那退款需要多长时间到账?",
"template_id": "Abc123Def456GhiJkl789Mnop",
"session_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}'
响应示例
{
"success": true,
"data": {
"answer": "根据我们的退货政策,您可以在收到商品后 7 天内申请无理由退货...",
"session_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"sources": [
{
"question": "退货政策有什么规定?",
"score": 0.92
}
],
"model": "qwen-plus",
"tokensUsed": 486,
"responseTime": 1523
}
}
响应字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
success | boolean | 请求是否成功 |
data.answer | string | AI 生成的回答内容 |
data.session_id | string | 会话 ID。首次对话由系统自动生成,后续对话请回传此值以续接同一会话 |
data.sources | array | 命中的知识库条目及匹配分数 |
data.model | string | 本次使用的模型名称 |
data.tokensUsed | number | 本次消耗的 Token 总量 |
data.responseTime | number | 端到端响应时间 (毫秒) |
data.human_mode | boolean | 可选。为 true 时表示本请求已走关键词转人工,未调用大模型 |
data.human_session_db_id | number | 可选。人工会话在系统中的主键 ID,与企微卡片「会话记录ID」一致 |
data.session_ended | boolean | 可选。用户结束人工会话时为 true |
人工客服回复轮询 GET /api/v1/human-replies
在 human_mode 为 true 且拿到与 /chat 相同的 session_id 后,可用本接口轮询企微群内回复。鉴权与 Chat 一致:X-Customer-Code、X-API-Key。
查询参数
| 参数 | 说明 |
|---|---|
session_id | 必填,与对话接口一致,最长 36 字符 |
since_id | 可选,默认 0。仅返回 id > since_id 的消息(与控制台/组件 human-replies 行为一致) |
响应 data.messages[]
| 字段 | 说明 |
|---|---|
id | 消息主键,下次请求作 since_id |
content | 正文 |
wechat_from_user | 企微侧发送者标识;系统提示(如会话超时结束)为 __system__。前端展示建议:人工客服 {wechat_from_user}:{content},系统消息可仅展示 content |
created_at | 创建时间 |
curl -G "https://agent.likelic.com/api/v1/human-replies" \
-H "X-Customer-Code: your_customer_code" \
-H "X-API-Key: sk-your-api-key-here" \
--data-urlencode "session_id=a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
--data-urlencode "since_id=0"
流式输出 (stream: true)
以 SSE (Server-Sent Events) 格式实时推送生成内容,适用于前端实时展示打字效果等交互场景。
session_id(客户端自行生成 UUID),因为流式返回的内容不包含 session_id,无法像非流式那样从响应中获取。
请求示例(流式 + 首次会话,需传入 session_id 以记录连续对话)
curl -X POST https://agent.likelic.com/api/v1/chat \
-H "Content-Type: application/json" \
-H "X-Customer-Code: your_customer_code" \
-H "X-API-Key: sk-your-api-key-here" \
-d '{
"question": "如何申请退款?",
"template_id": "Abc123Def456GhiJkl789Mnop",
"session_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"stream": true
}'
流式响应格式
响应 Content-Type 为 text/event-stream,数据以 SSE 格式逐行推送:
data: {"content":"根据"}
data: {"content":"我们"}
data: {"content":"的退货"}
data: {"content":"政策,"}
data: {"content":"..."}
data: [DONE]
data: 行包含一个 JSON 对象,其中 content 字段为增量文本片段。当收到 data: [DONE] 时表示生成完毕。
JavaScript 流式调用示例
// 若需记录连续会话,流式首次请求需传入 session_id(流式响应不包含 session_id)
const sessionId = crypto.randomUUID();
const response = await fetch('https://agent.likelic.com/api/v1/chat', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Customer-Code': 'your_customer_code',
'X-API-Key': 'sk-your-api-key-here'
},
body: JSON.stringify({
question: '如何申请退款?',
template_id: 'Abc123Def456GhiJkl789Mnop',
session_id: sessionId,
stream: true
})
});
const reader = response.body.getReader();
const decoder = new TextDecoder();
let result = '';
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = decoder.decode(value);
const lines = chunk.split('\n');
for (const line of lines) {
if (line.startsWith('data: ') && line !== 'data: [DONE]') {
const json = JSON.parse(line.slice(6));
result += json.content;
console.log(json.content); // 实时输出
}
}
}
Python 调用示例
import requests
import json
url = "https://agent.likelic.com/api/v1/chat"
headers = {
"Content-Type": "application/json",
"X-Customer-Code": "your_customer_code",
"X-API-Key": "sk-your-api-key-here"
}
# 非流式调用(首次对话,不传 session_id)
resp = requests.post(url, headers=headers, json={
"question": "你们的退货政策是什么?",
"template_id": "Abc123Def456GhiJkl789Mnop"
})
data = resp.json()["data"]
session_id = data["session_id"] # 保存用于后续多轮对话
print(data["answer"])
# 多轮对话(传入首次返回的 session_id)
resp = requests.post(url, headers=headers, json={
"question": "那退款需要多长时间到账?",
"template_id": "Abc123Def456GhiJkl789Mnop",
"session_id": session_id
})
print(resp.json()["data"]["answer"])
# 流式调用(若需记录连续会话,首次请求需传入 session_id,因流式响应不包含 session_id)
import uuid
stream_session_id = str(uuid.uuid4())
resp = requests.post(url, headers=headers, json={
"question": "还有其他注意事项吗?",
"template_id": "Abc123Def456GhiJkl789Mnop",
"session_id": stream_session_id,
"stream": True
}, stream=True)
for line in resp.iter_lines():
if line:
decoded = line.decode("utf-8")
if decoded.startswith("data: ") and decoded != "data: [DONE]":
data = json.loads(decoded[6:])
print(data["content"], end="", flush=True)
知识库写入接口 KB
POST /api/v1/knowledge/entries
从外部系统向本企业知识库新增一条问答对,鉴权与 Chat 相同(X-Customer-Code + X-API-Key)。校验通过后先写入 MySQL并立即返回成功;向量嵌入与 Qdrant 同步在后台异步执行(与控制台 Excel 批量导入的第二阶段一致),稍后在智能对话中即可检索到该条。
answer_image。
请求参数 (JSON Body)
本接口请求体上限 512 KB(大于通用 v1 的 100 KB)。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
question |
string | 必填 | 问题内容,trim 后非空,最大 800 字符。 |
answer |
string | 必填 | 答案正文,trim 后非空,最大 5000 字符。 |
category |
string | 必填 | 分类名称,最大 20 字符。若该名称在库中已存在则归入该分类;若为新分类且当前方案下分类数已达上限,将返回 403 并附带已有分类列表。 |
answer_image |
string | 可选 | 答案配图,须为可访问的 http(s) 图片 URL,最大 2048 字符。仅专业版及以上支持;基础版传入将返回 403。 |
keywords |
string | 可选 | 关键词,多个关键词用英文逗号 , 分隔(不可用中文逗号)。整段字符串最大 200 字符;单个关键词最长 20 字符;最多 10 个关键词。 |
created_by |
string | 可选 | 对接方自定义的创建人标识(如对方系统用户名),最大 100 字符;便于与控制台「创建人」列对齐审计。 |
成功响应示例
{
"success": true,
"data": {
"id": 12345,
"category": "产品说明",
"created_by": "crm_sync",
"updated_by": null,
"vector_sync": "queued",
"message": "Entry saved to database. Vector embedding sync runs asynchronously; ..."
}
}
配额不足示例(403)
{
"success": false,
"message": "Knowledge base entry limit reached for your plan (...)",
"data": { "limit": 10000, "current": 10000, "remaining": 0 }
}
{
"success": false,
"message": "Cannot create new category: ...",
"data": {
"max_categories": 10,
"current_category_count": 10,
"existing_categories": ["分类A", "分类B"]
}
}
请求示例
curl -X POST https://agent.likelic.com/api/v1/knowledge/entries \
-H "Content-Type: application/json" \
-H "X-Customer-Code: your_customer_code" \
-H "X-API-Key: sk-your-api-key-here" \
-d '{
"question": "如何重置密码?",
"answer": "请在登录页点击「忘记密码」并按邮件指引操作。",
"category": "账户与安全",
"keywords": "password,reset,login",
"answer_image": "https://example.com/help/screenshot.png"
}'
更新单条知识(PUT)
PUT /api/v1/knowledge/entries/:id
使用创建接口返回的 data.id 作为路径参数 :id,更新同一条问答。请求体字段与 POST 相同,另可选传 updated_by(最大 100 字符)作为本次修改人标识。若不传 answer_image,则保留该条原有配图。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
updated_by |
string | 可选 | 本次更新的操作者标识,最大 100 字符。 |
更新成功响应示例
{
"success": true,
"data": {
"id": 12345,
"category": "产品说明",
"created_by": "crm_sync",
"updated_by": "operator_a",
"vector_sync": "queued",
"message": "Entry updated. Vector embedding sync runs asynchronously; ..."
}
}
curl -X PUT https://agent.likelic.com/api/v1/knowledge/entries/12345 \
-H "Content-Type: application/json" \
-H "X-Customer-Code: your_customer_code" \
-H "X-API-Key: sk-your-api-key-here" \
-d '{
"question": "如何重置密码?",
"answer": "请在登录页点击「忘记密码」并按邮件指引操作。",
"category": "账户与安全",
"keywords": "password,reset",
"updated_by": "operator_a"
}'
合作客商写入 WEWORK PARTNER
POST /api/v1/wework/partner-companies/import
从外部系统批量写入合作客商主数据,鉴权与 Chat 相同(X-Customer-Code + X-API-Key)。按 (租户, company_code) upsert:company_code 已存在则合并更新,不存在则新增。行为与控制台「导入合作公司」Excel 导入完全一致。
403。控制台 Excel 导入不受此开关影响。
company_code 再次写入会覆盖销售、跟踪人、状态等已维护字段。无软删/版本机制,请确保来源数据准确。
请求参数 (JSON Body)
顶层字段 rows 为数组,非空且不超过 5000 行;每行字段如下:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
company_code |
string | 必填 | 租户内唯一键,最大 64 字符。用于 upsert 定位:同一代码再次导入即更新该条。 |
company_name |
string | 必填 | 公司全称,最大 255 字符。 |
company_short_name |
string | 可选 | 公司简称,最大 128 字符。 |
sales_name |
string | 可选 | 销售,最大 128 字符。 |
tracker_name |
string | 可选 | 跟踪人,最大 128 字符。 |
company_status |
string | 可选 | 合作状态。取中文 已合作 / 试用中 / 已过期,或枚举 cooperating / trial / expired;留空为未标记。传入非法值则该行被跳过。 |
行级校验
缺少 company_code 或 company_name、或 company_status 非法的行会被跳过并计入 data.skipped,跳过原因逐条列在 data.errors(不影响其余有效行写入)。
请求示例
curl -X POST https://agent.likelic.com/api/v1/wework/partner-companies/import \
-H "Content-Type: application/json" \
-H "X-Customer-Code: your_customer_code" \
-H "X-API-Key: sk-your-api-key-here" \
-d '{
"rows": [
{
"company_code": "C1001",
"company_name": "示例科技有限公司",
"company_short_name": "示例科技",
"sales_name": "张三",
"tracker_name": "李四",
"company_status": "已合作"
},
{
"company_code": "C1002",
"company_name": "另一家公司",
"company_status": "trial"
}
]
}'
成功响应示例
{
"success": true,
"data": {
"inserted": 1,
"updated": 1,
"skipped": 0,
"errors": []
}
}
含跳过行的响应示例
{
"success": true,
"data": {
"inserted": 2,
"updated": 0,
"skipped": 1,
"errors": ["第 3 行:缺少公司代码"]
}
}
错误示例
// 未启用 wework_partner,或调用方 Key 未获授权 → 403
{ "success": false, "message": "开放 API「合作客商写入」未在系统设置中启用" }
{ "success": false, "message": "当前 API Key 未被授权调用「合作客商写入」接口" }
// rows 缺失/非数组,或超过 5000 行 → 400
{ "success": false, "message": "缺少 rows 数组" }
{ "success": false, "message": "单次最多导入 5000 行" }
企微绩效议题同步 WEWORK QA
GET /api/v1/wework/qa/issues
供外部系统(如部门管理系统)轮询拉取已评分的企微绩效议题,写入自有业务库。鉴权与 Chat / 知识库相同(X-Customer-Code + X-API-Key),无需 IP 白名单。
assess_status 为 success 或 failed 均返回);数据范围与控制台绩效看板一致(保留期内)。
查询参数(列表)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
sync_since |
string | 可选 | 增量游标:返回 sync_at >= sync_since 的议题。格式 YYYY-MM-DDTHH:mm:ss、YYYY-MM-DD HH:mm:ss 或 YYYY-MM-DD(当天 00:00:00)。不传则全量分页拉取。 |
page |
int | 可选 | 页码,从 1 开始,默认 1。 |
limit |
int | 可选 | 每页条数,默认 50,最大 100。 |
列表按 sync_at ASC, id ASC 排序,便于增量游标推进。响应 meta 含 page、limit、total、retention_from(生效保留起始日);传入 sync_since 时另回显 meta.sync_since。
列表响应 data[] 字段
| 字段 | 类型 | 说明 |
|---|---|---|
id | number | 议题唯一 ID,建议作为对方系统 source_id 做幂等 upsert |
company_name | string \| null | 群所属公司全称;若未维护则回退为企微群名称 |
company_status | string \| null | 客户合作状态:已合作 / 试用中 / 已过期(未设置时为 null) |
summary | string \| null | 议题摘要 |
start_time | string | 议题在群聊中的开始时间 |
customer_name | string \| null | 客户展示名 |
status | string | open / resolved / timeout |
score_total | number \| null | 综合质量分 0–100;评分失败时为 null |
assess_status | string | success / failed |
primary_staff_name | string \| null | 主责员工姓名(有效回复数最高;并列取第一个) |
staffs | array | 参与员工:name、effective_reply_count |
created_at | string | 议题入库时间(可作对方系统创建时间) |
sync_at | string | 增量游标:末次值得同步的变化时间(状态变更 / 首次评分 / 人工重评) |
列表响应示例
{
"success": true,
"data": [
{
"id": 12345,
"company_name": "示例科技有限公司",
"company_status": "已合作",
"summary": "客户反馈产品无法登录",
"start_time": "2026-06-24T10:30:00",
"customer_name": "张三",
"status": "resolved",
"score_total": 85,
"assess_status": "success",
"primary_staff_name": "李四",
"staffs": [
{ "name": "李四", "effective_reply_count": 3 },
{ "name": "王五", "effective_reply_count": 1 }
],
"created_at": "2026-06-24T10:35:00",
"sync_at": "2026-06-24T10:40:00"
}
],
"meta": {
"page": 1,
"limit": 50,
"total": 128,
"retention_from": "2026-05-25",
"sync_since": "2026-06-24T10:00:00"
}
}
推荐同步流程
- 首次全量:不传
sync_since,按page分页直至data为空;每条以idupsert。 - 增量轮询(建议 5–15 分钟):
sync_since = 上次 max(sync_at) - 1 分钟(重叠防漏);同一id再次出现则 UPDATE。 - 停服恢复:沿用旧
sync_since即可补回期间变更。 - 多页:同一
sync_since下若total > limit,继续page=2,3,...直至拉完本批。
请求示例(增量拉取)
curl -G "https://agent.likelic.com/api/v1/wework/qa/issues" \
-H "X-Customer-Code: your_customer_code" \
-H "X-API-Key: sk-your-api-key-here" \
--data-urlencode "sync_since=2026-06-24T10:00:00" \
--data-urlencode "page=1" \
--data-urlencode "limit=100"
单条详情 GET /api/v1/wework/qa/issues/:id
GET /api/v1/wework/qa/issues/:id
返回字段与列表项相同,用于按 ID 补拉或校验。路径参数 :id 为议题 ID。
curl "https://agent.likelic.com/api/v1/wework/qa/issues/12345" \
-H "X-Customer-Code: your_customer_code" \
-H "X-API-Key: sk-your-api-key-here"
成功返回 { "success": true, "data": { ... } };不存在、未评分或超出保留期返回 404。
错误码说明
| 状态码 | 错误信息 | 说明 |
|---|---|---|
400 | Question is required and must be a string | 请求体缺少 question 字段或类型不是字符串 |
400 | Question cannot be empty | question 为空字符串或仅包含空白字符 |
400 | Question exceeds maximum length of 800 characters | 问题内容超过 800 字符上限 |
400 | Invalid template_id format | template_id 格式不正确,应为 18-32 位字母数字组合 |
400 | Invalid session_id format | session_id 格式不正确,应为字符串且最长 36 位 |
400 | Invalid template_id | 指定的 template_id 不存在 |
400 | Template does not belong to this customer | 该模板不属于当前企业 |
401 | Missing API Key or Customer Code in headers | 请求头缺少 X-API-Key 或 X-Customer-Code |
401 | Invalid API Key format | API Key 格式不正确,应以 sk- 开头后跟 48 位十六进制字符 |
401 | Invalid Customer Code format | Customer Code 格式不正确,仅允许字母、数字、下划线和短横线(1-50位) |
403 | Invalid or disabled API Key | API Key 无效或已被禁用 |
403 | API Key has expired | API Key 已过有效期,请在控制台重新创建 |
403 | API Key does not match Customer Code | API Key 与 Customer Code 不属于同一企业 |
429 | Too many requests | 请求频率超过当前 API Key 设定的速率限制,请稍后重试 |
400 | question / answer / category / keywords … | 知识库写入接口字段校验失败(类型、长度、关键词分隔符、配图 URL 等),见 message |
403 | Knowledge base entry limit reached … | 当前方案知识库条数已满,data.remaining 为 0 |
403 | Cannot create new category … | 无法新增分类(已达上限),请使用 data.existing_categories 中已有名称 |
403 | … does not support answer images … | 当前方案不支持知识库配图,请去掉 answer_image 或升级版本 |
400 | 非法的 sync_since(…) | 企微绩效议题列表的 sync_since 格式不正确 |
400 | 无效的议题 id | 详情路径参数 :id 不是正整数 |
403 | 当前套餐未开通企微绩效 | 非旗舰版或未开通企微绩效能力 |
404 | 议题不存在、未评分或已超出保留期 | 详情接口未找到可同步的议题 |
403 | 开放 API「合作客商写入」未在系统设置中启用 / Key 未被授权 | 合作客商写入未启用,或调用方 Key 不在授权列表 |
400 | 缺少 rows 数组 / 单次最多导入 5000 行 | 合作客商写入 rows 缺失、非数组或超过上限 |
500 | Internal server error | 服务端内部异常,请联系管理员 |
错误响应格式
{
"success": false,
"message": "具体错误描述"
}
频率限制
为保障服务稳定性,每个 API Key 拥有独立的频率限制配置。系统在认证通过后,根据该 Key 的设定进行限流:
限流规则
| 限制维度 | 限额 | 说明 |
|---|---|---|
| 平台全局上限 | 1000 次/分钟 | 所有 API Key 不可超过此上限 |
| 单 Key 速率限制 | 按 Key 配置 | 创建 API Key 时可设置,默认 1000 次/分钟。实际生效值 = min(Key 配置值, 1000) |
| 请求体大小 | 100 KB(通用)/ 512 KB(POST /api/v1/knowledge/entries) | 单次请求 JSON Body 的最大字节数 |
| 问题长度 | 800 字符 | question 字段的最大字符数 |
限流响应头
每次 API 请求的响应中都会包含以下 Headers,方便客户端感知当前额度:
| Header | 说明 |
|---|---|
RateLimit-Limit | 当前 Key 在本窗口内允许的最大请求数 |
RateLimit-Remaining | 当前窗口内剩余可用请求数 |
RateLimit-Reset | 当前窗口重置的 Unix 时间戳(秒) |
RateLimit-Remaining 响应头,在剩余额度不足时主动降速,避免触发 429 限流。如需调整限额,可在控制台「API 密钥管理」中修改对应 Key 的速率设置。
最佳实践
安全建议
| 建议 | 说明 |
|---|---|
| 使用后端代理 | 切勿将 API Key 暴露在前端代码、移动端应用包或公开仓库中,通过后端服务转发请求 |
| 定期轮换密钥 | 建议每 90 天轮换一次 API Key,旧密钥在过渡期后及时禁用或删除 |
| 最小权限原则 | 为不同业务场景创建独立的 API Key,便于权限管控和用量追踪 |
| 设置过期时间 | 为临时集成或外部合作场景的 API Key 设置合理的过期时间 |
| 监控异常调用 | 关注控制台中的 API 调用日志,及时发现异常流量或未授权的调用行为 |
调用建议
| 建议 | 说明 |
|---|---|
| 指定模板 ID | 不同业务场景使用不同提示词模板,获取更精准的回答效果 |
| 利用多轮会话 | 首次对话保存返回的 session_id,后续追问时传入该值,同一会话的所有对话将在控制台中合并展示,便于追踪和复盘 |
| 启用流式输出 | 面向用户的实时交互场景建议使用流式模式,提升用户体验 |
| 错误重试 | 网络异常(5xx)时建议实现指数退避重试机制,最多重试 3 次。注意:400/401/403 错误无需重试 |
| 限流感知 | 读取响应头中的 RateLimit-Remaining 字段,在剩余额度不足时主动降速 |
| 超时设置 | 非流式请求建议设置 30 秒超时,流式请求建议 60 秒 |
| 输入预处理 | 发送前对用户问题进行 trim 处理,去除首尾空白字符,减少无效 Token 消耗 |
| 议题增量同步 | 以 id 幂等 upsert;增量用 sync_since(建议回拨 1 分钟重叠);轮询间隔 5–15 分钟;停服恢复后沿用旧游标即可补数据 |