125 lines
2.9 KiB
Markdown
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,只返回本地错误文案。
|