Files
OCS_service/README.md
T
2026-05-23 22:23:29 +08:00

125 lines
2.9 KiB
Markdown

# 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,只返回本地错误文案。