# 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`,然后填写自己的配置: ```bash cp .env.example .env ``` 必填: ```env OPENAI_API_KEY=your-api-key-here ``` 常用配置: ```env OPENAI_API_BASE=https://api.openai.com/v1 OPENAI_MODEL=gpt-5.2 MAX_TOKENS=500 TEMPERATURE=0.7 ``` 如需限制访问: ```env ACCESS_TOKEN=your-access-token ``` 启用后,请求需要带 `X-Access-Token` 请求头或 `?token=...` 查询参数。 ## 启动 ```bash pnpm install pnpm dev ``` 默认 Nuxt dev server 地址为 `http://localhost:3000`。 ## OCS 配置示例 ```json [ { "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 文档把 `homepage` 和 `url` 涉及的域名加入脚本 `@connect`。 ## API ### `GET|POST /api/search` 参数: | 参数 | 必填 | 说明 | | ----------- | ---- | ------------------------------------------------------- | | `title` | 是 | 题目内容 | | `type` | 否 | `single`、`multiple`、`judgement`、`completion` | | `options` | 否 | 选项文本 | 成功: ```json { "code": 1, "question": "中国的首都是哪个城市?", "answer": "北京" } ``` 失败: ```json { "code": 0, "msg": "未提供问题内容" } ``` ### `GET /api/health` 返回服务状态、版本、缓存开关和模型名。 ### `POST /api/cache/clear` 清空内存缓存。若配置了 `ACCESS_TOKEN`,需要携带访问令牌。 ### `GET /api/stats` 返回 uptime、模型、缓存大小和最近问答记录数量。若配置了 `ACCESS_TOKEN`,需要携带访问令牌。 ## 注意 - 多选题答案按 OCS 要求返回 `#` 分隔字符串。 - OpenAI 调用使用服务端流式请求,但接口对 OCS 返回普通 JSON。 - 内部或上游异常不会透传给 OCS,只返回本地错误文案。