AI答题系统 · API 对接文档
用户中心 登录

API 对接文档

供第三方开发者集成 AI 搜题能力。基础路径:https://你的域名/api

1. 基本信息

协议HTTPS(生产环境建议)
格式application/json; charset=utf-8
编码UTF-8

统一响应

成功时返回 codemessagedata;失败时无 data

{
  "code": 200,
  "message": "success",
  "data": { }
}
HTTPcode说明
200200成功
400400参数错误
401401未认证
403403无权限
429429次数不足
500500服务器错误

2. 认证方式

对接搜题推荐使用 API Key(用户中心 → API 密钥,32 位十六进制字符串)。

方式示例
请求头(推荐)X-Api-Key: 你的密钥
备用请求头X-User-Key: 你的密钥
查询参数?api_key=你的密钥
JSON 体{"api_key":"你的密钥", ...}
Web 登录Authorization: Bearer <64位Token>

同时提供 Key 与 Token 时,API Key 优先。

3. 快速开始

健康检查

GET/api/health

无需认证,用于检测服务是否可用。

单选题搜题

POST/api/ask
curl -X POST "https://你的域名/api/ask" \
  -H "X-Api-Key: 你的密钥" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "0",
    "question": "下列哪项是 PHP 的文件扩展名?",
    "options": [".php", ".java", ".py", ".go"],
    "provider": "deepseek"
  }'
{
  "code": 200,
  "message": "success",
  "data": {
    "valid": true,
    "answer": ["A"],
    "provider": "deepseek",
    "provider_name": "DeepSeek",
    "model": "deepseek-chat",
    "duration_ms": 1234
  }
}

AI 调用成功即扣 1 次额度,即使 valid 为 false(答案解析失败)。

4. 搜题接口

POST/api/ask
字段类型必填说明
typestring题型,默认 0
questionstring题目正文
optionsarray选项(字符串数组,不含 A/B 前缀)
blank_countint填空题空数,别名 blankCount
providerstringAI 接口 ID,默认系统配置
modelstring模型名称
temperaturefloat采样温度
max_tokensint最大输出 token

5. 题型与答案格式

type题型answer 示例
0单选题["A"]
1多选题["A","C"]
2填空题["答案1","答案2"]
3判断题["true"]["false"]
4简答题["参考答案"]
5名词解释["解释内容"]
6论述题["论述内容"]
7计算题["计算过程"]
15阅读理解子题数组

填空题示例

{
  "type": "2",
  "question": "中国的首都是____,最大城市之一是____。",
  "blank_count": 2
}

6. 代码示例

Python

import requests

resp = requests.post(
    "https://你的域名/api/ask",
    headers={"X-Api-Key": "你的密钥"},
    json={
        "type": "0",
        "question": "1+1=?",
        "options": ["1", "2", "3", "4"],
        "provider": "deepseek",
    },
    timeout=60,
)
data = resp.json()
if data["code"] != 200:
    raise RuntimeError(data["message"])
print(data["data"]["answer"])

JavaScript

const resp = await fetch('https://你的域名/api/ask', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-Api-Key': '你的密钥',
  },
  body: JSON.stringify({
    type: '0',
    question: '1+1=?',
    options: ['1', '2', '3', '4'],
  }),
});
const json = await resp.json();
if (json.code !== 200) throw new Error(json.message);
console.log(json.data.answer);

PHP

$ch = curl_init('https://你的域名/api/ask');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'X-Api-Key: 你的密钥',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'type' => '0',
        'question' => '1+1=?',
        'options' => ['1', '2', '3', '4'],
    ], JSON_UNESCAPED_UNICODE),
    CURLOPT_TIMEOUT => 60,
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);

7. 额度与套餐

扣费优先级:生效套餐 → 今日免费次数 → 账户余额。

GET/api/auth/me

返回 user(含 quota_used、daily_quota、balance)及 subscription(当前套餐,无则为 null)。

接口说明
GET /api/user/plans可购套餐(无需登录)
GET /api/user/subscription当前套餐状态
POST /api/user/plans/{id}/purchase购买套餐
GET /api/user/orders我的订单

8. 用户接口一览

方法路径认证说明
POST/api/auth/register注册
POST/api/auth/login登录,返回 token 与 api_key
POST/api/auth/logoutToken退出
GET/api/auth/meKey/Token当前用户
GET/api/user/keyToken查看 API Key
POST/api/user/key/resetToken重置 API Key
GET/api/user/logsKey/Token搜题日志(支持 keyword、status、date_from 等筛选)
GET/api/providersAI 接口列表

登录示例

POST /api/auth/login
{
  "username": "demo_user",
  "password": "123456"
}

9. AI 接口

GET/api/providers

常用 provider ID:

provider名称
deepseekDeepSeek
qwen-dashscope通义千问
zhipu-glm智谱 GLM
kimiKimi
openaiOpenAI
anthropicAnthropic

10. 错误处理

  • 401:检查 API Key 是否正确、用户是否被封禁
  • 429:次数不足或套餐 IP 超限,引导购买套餐
  • 400:检查 question、options 等参数
  • 500:AI 服务异常,可有限重试(建议指数退避)

11. 注意事项

  • API Key 仅用于服务端,切勿暴露在前端或客户端
  • 建议 HTTP 超时 ≥ 60 秒
  • 429 不应自动重试;500 可有限重试
  • 部分套餐限制绑定 IP 数量
  • 完整 Markdown 文档见项目 docs/API.md