Files
2026-05-23 22:23:29 +08:00

2.9 KiB

OCS Nuxt AI Answer Service

这是一个基于 Nuxt/Nitro 的 OCS AI 答题服务,迁移自旧版 Python Flask 服务。服务端使用 OpenAI 兼容的 Chat Completions 流式接口生成答案,对 OCS 仍返回普通 JSON。

功能

  • 兼容 OCS AnswererWrapper 题库接口。
  • 支持 GET、JSON POST、表单 POST 调用 /api/search
  • 支持单选、多选、判断、填空题提示词处理。
  • 支持可选访问令牌校验。
  • 支持内存缓存、健康检查、缓存清理和运行统计。
  • OpenAI API Key 只在服务端读取,不返回给前端。

环境变量

复制 .env.example.env,然后填写自己的配置:

cp .env.example .env

必填:

OPENAI_API_KEY=your-api-key-here

常用配置:

OPENAI_API_BASE=https://api.openai.com/v1
OPENAI_MODEL=gpt-5.2
MAX_TOKENS=500
TEMPERATURE=0.7

如需限制访问:

ACCESS_TOKEN=your-access-token

启用后,请求需要带 X-Access-Token 请求头或 ?token=... 查询参数。

启动

pnpm install
pnpm dev

默认 Nuxt dev server 地址为 http://localhost:3000

OCS 配置示例

[
  {
    "name": "AI智能题库",
    "homepage": "http://localhost:3000",
    "url": "http://localhost:3000/api/search",
    "method": "get",
    "type": "GM_xmlhttpRequest",
    "contentType": "json",
    "data": {
      "title": "${title}",
      "type": "${type}",
      "options": "${options}"
    },
    "handler": "return (res)=> res.code === 1 ? [res.question, res.answer] : [res.msg, undefined]"
  }
]

如果使用自定义域名,请按 OCS 文档把 homepageurl 涉及的域名加入脚本 @connect

API

GET|POST /api/search

参数:

参数 必填 说明
title 题目内容
type singlemultiplejudgementcompletion
options 选项文本

成功:

{
  "code": 1,
  "question": "中国的首都是哪个城市?",
  "answer": "北京"
}

失败:

{
  "code": 0,
  "msg": "未提供问题内容"
}

GET /api/health

返回服务状态、版本、缓存开关和模型名。

POST /api/cache/clear

清空内存缓存。若配置了 ACCESS_TOKEN,需要携带访问令牌。

GET /api/stats

返回 uptime、模型、缓存大小和最近问答记录数量。若配置了 ACCESS_TOKEN,需要携带访问令牌。

注意

  • 多选题答案按 OCS 要求返回 # 分隔字符串。
  • OpenAI 调用使用服务端流式请求,但接口对 OCS 返回普通 JSON。
  • 内部或上游异常不会透传给 OCS,只返回本地错误文案。