AI API 中转站使用指南:接入流程、Key 安全与排错
最后更新:
API 中转服务为应用提供统一的模型调用入口。接入时需要同时核对请求地址、API Key、模型标识和支持的接口格式。本页按首次调用到上线验证的顺序说明操作,适用于聊天应用、内容处理和内部自动化工具;图像输入、工具调用等能力需逐个模型确认。
实际接入流程
- 进入 Kejike 控制台,确认账户权限和可用额度,创建项目使用的 API Key,并从当前列表复制模型 ID。
- 核对接口文档中的完整请求地址。本页使用
POST https://sub.kejike.top/v1/chat/completions。自动拼接/chat/completions的 SDK 应使用基础地址https://sub.kejike.top/v1,不要填入完整端点或重复拼接/v1。 - 在服务端配置环境变量,先发送一条短文本请求,确认 HTTP 状态码、响应正文及用量记录。
- 最小请求成功后,再逐项加入多轮上下文、输出限制或流式参数,分别验证支持情况。
- 由应用后端转发请求,配置超时、并发上限与错误提示,通过测试后再逐步增加流量。
配置环境变量并完成首次请求
以下命令适用于 Bash 或 Git Bash,在本地终端或受保护的服务端运行。占位符必须替换为实际值;不要把真实 Key 放进共享脚本或命令截图。生产环境通过部署平台的密钥配置注入。
export KEJIKE_CHAT_COMPLETIONS_URL='https://sub.kejike.top/v1/chat/completions'
export KEJIKE_API_KEY='YOUR_API_KEY'
export KEJIKE_MODEL_ID='YOUR_MODEL_ID'
curl --fail-with-body --connect-timeout 10 --max-time 60 "$KEJIKE_CHAT_COMPLETIONS_URL" \
-H "Authorization: Bearer $KEJIKE_API_KEY" \
-H 'Content-Type: application/json' \
--data "{\"model\":\"$KEJIKE_MODEL_ID\",\"messages\":[{\"role\":\"user\",\"content\":\"请回复:连接成功\"}],\"stream\":false}"
示例设置了连接和总请求超时,可按实际任务调整。若本机 cURL 版本不支持 --fail-with-body,可用 -i 查看状态与响应。这些选项可能显示错误正文或响应头;记录日志、截图或分享排错信息前,应移除密钥、个人数据及敏感请求或响应内容。需要 JavaScript、字段说明和流式响应处理时,继续阅读兼容 API 接入说明。
API Key 安全与环境管理
- Key 仅保存在后端、密钥管理服务或受保护的 CI 环境。前端构建中的环境变量可能被打包进浏览器代码,不能用来保存密钥。
- 本地使用环境文件时将其排除在版本控制之外;环境变量不等于自动保密,日志、崩溃报告和调试输出也需要脱敏。
- 测试与生产使用独立 Key;控制台支持时,为项目配置权限和额度限制,并定期轮换。
- 发现泄露后立即撤销旧 Key、替换应用配置并检查异常调用;仅删除仓库中的明文不能使旧 Key 失效。
常见错误的排查顺序
- 401 / 403:检查 Bearer 请求头、Key 是否有效及模型权限。不要通过反复重试解决鉴权问题。
- 404:分别核对完整 URL 与模型 ID,避免把模型展示名当作接口标识,或重复拼接路径。
- 400:先验证 JSON 语法和字段类型,移除可选参数,再检查上下文长度、图片格式等模型限制。
- 429:根据响应正文区分额度不足和频率限制;频率限制可遵循
Retry-After(如有),配合有限次数的退避重试。 - 5xx / 超时:记录时间、状态码和请求标识(如有),缩短输入后复测。超时不代表上游未执行,重试可能产生重复用量。
- 流式中断:检查代理缓冲、读取超时和事件解析,保留已接收内容并提示未完成,不把部分输出当作最终成功。
上线前验证与持续观察
使用脱敏样例覆盖正常响应、无效 Key、无效模型、超时和取消请求。记录模型、耗时、状态码及返回的用量信息,避免记录完整密钥和敏感正文。对可能触发外部操作的任务,在应用侧使用任务标识防止重复执行;不要假定接口提供幂等保证。
按业务样例比较质量、延迟和实际用量,再决定默认模型及回退方式。回退模型也要验证参数和输出格式,不能仅替换模型名称。
账户、额度与项目准备
正式接入前先把账户侧的事情确认清楚,能避免绝大多数“接口没问题但业务跑不起来”的情况。
- 确认账户可用状态。登录控制台确认账户正常、额度充足,并了解额度与消耗的展示口径。
- 按项目创建独立 Key。测试与生产分开,便于单独撤销和统计;不要多人共用一个 Key。
- 确认模型可用范围。并非所有模型对所有账户开放,以控制台当前列表为准。
- 记录接口基础地址。本页示例统一使用
https://sub.kejike.top/v1,SDK 只填基础地址。 - 准备最小样例。一条短文本请求,用于验证链路、鉴权与模型 ID 三件事。
网关转发、超时与重试幂等
中转链路上多了一层网关,超时和重试就需要比直连更明确地设计。核心原则是:超时要有分层,重试要有上限,写操作要有幂等保护。
- 分层超时。客户端连接超时、读取超时、服务端总超时分别设置,不要只依赖一个默认值。
- 限定重试条件。只对明确的瞬时故障(连接中断、5xx、限流)重试;400、401、403、404 重试没有意义。
- 指数退避加抖动。固定间隔重试会形成同步冲击,退避加随机抖动更稳。
- 限制重试上限。两到三次足够;超时后盲目重试可能产生重复用量。
- 写操作使用任务标识。涉及创建、扣减、通知等外部动作时,在应用侧用唯一任务标识做防重,不要假定接口提供幂等保证。
// 退避重试的最小实现(仅对可重试状态码)
async function callWithRetry(fn, maxAttempts = 3) {
const retryable = new Set([408, 429, 500, 502, 503, 504]);
for (let i = 0; i < maxAttempts; i++) {
try { return await fn(); }
catch (e) {
const status = e && e.status;
if (!retryable.has(status) || i === maxAttempts - 1) throw e;
await new Promise(r => setTimeout(r, 300 * 2 ** i + Math.random() * 200));
}
}
}
观测与告警的最小配置
不需要复杂平台,先做到“出错时能一眼看出是哪一类问题”。建议按下面三项建立最小观测面。
| 观测项 | 看什么 | 异常信号 |
|---|---|---|
| 请求结果分布 | 按状态码统计成功与失败 | 401/403 集中出现说明凭证或权限异常;429 上升说明触及限流或额度 |
| 延迟分布 | 首字节时间与总耗时分位数 | 分位数持续抬升通常是链路拥塞或输入过大 |
| 消耗趋势 | 单位时间内的用量与请求量 | 请求量平稳但消耗突增,需排查重试与上下文膨胀 |
告警阈值先用保守值,观察一周后再调整;过早设置严格阈值只会带来噪声。
数据处理与日志脱敏
- 明确边界。只发送业务必需的内容;密钥、身份信息、支付数据不应出现在请求体里。
- 日志脱敏。记录 Key 的前后几位或哈希即可,禁止记录完整密钥;用户正文按需截断。
- 控制留存。调试日志设置保留期限,任务结束后及时清理。
- 注意合规要求。涉及个人信息或用户内容时,按你所在地区的规则和内部制度处理,数据范围以隐私政策说明为准。
- 分享排障信息前先自查。截图、报错正文和响应头都可能带出凭证。
从直连上游迁移的检查表
- 基础地址替换为
https://sub.kejike.top/v1,确认没有重复拼接/v1或/chat/completions。 - 密钥替换为控制台创建的项目 Key,并从旧环境变量中彻底移除原厂密钥。
- 模型标识替换为控制台模型 ID,避免沿用旧名称。
- 移除仅原厂需要的组织头、项目头等自定义表头。
- 重新设置超时与重试策略,按上文的分层与上限执行。
- 用脱敏样例跑通非流式、流式、多轮和异常分支四类用例。
- 灰度放量:先小流量观察延迟、失败率与消耗,再逐步提升。
- 保留回退方案:旧配置在切换后至少保留一个观察周期。
接口细节见 兼容 API 接入说明,错误处理见 错误码与排障手册。