Initial MVP for QA asset backend

This commit is contained in:
2026-07-05 17:44:15 +08:00
commit 95b5e09fd4
71 changed files with 6546 additions and 0 deletions

View File

@@ -0,0 +1,172 @@
# 大本营答疑资产后台系统 MVP
这是一个用于沉淀“大本营每周三答疑内容”的后台系统 MVP。第一阶段跑通闭环资料进入、系统发现、AI 清洗、数据库沉淀、人工审核、标准问答入库、人工标记可调用。
## 系统架构
- 前端Next.js + React + TypeScript + TailwindCSS提供独立网页后台。
- 后端FastAPI + SQLAlchemy + Pydantic + APScheduler。
- 数据库:优先 PostgreSQL未配置 `DATABASE_URL` 时自动使用本地 SQLite。
- AI兼容 OpenAI Chat Completions API没有 `OPENAI_API_KEY` 时走 mock AI。
- 飞书:保留真实 API 适配器;没有飞书密钥时走 mock mode。
## 第一阶段功能
- 答疑场次管理,支持手动创建测试场次。
- 手动触发或定时触发黑灯任务。
- mock 飞书扫描与 mock 转写稿读取。
- AI 清洗模块,真实 OpenAI 兼容 API 与 mock 输出双通道。
- 原始问答拆解、标签、课程阶段、风险等级、脱敏状态入库。
- 待审核卡片页,支持通过入库、修改后通过、需修改、不入库、禁止使用、标记高风险、标记需脱敏。
- 标准问答库,审核通过后默认 `not_callable`,必须人工标记后才能进入可调用库。
- 智能体可调用库接口只返回 `approved + callable + low/medium + 已脱敏/无需脱敏` 的标准问答。
- 任务日志和审核日志可追溯。
## 不做什么
- 不做正式“千问千答智能体”。
- 不做学员端问答界面。
- 不绕过人工审核。
- 不让未审核内容进入标准问答库或可调用库。
- 不把 AI 生成内容伪装成院长或辅导老师原话。
- 不做心理诊断、医疗建议、法律判断或课程效果承诺。
## 本地启动
后端:
```bash
cd hy_qa_asset_backend/backend
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
uvicorn app.main:app --reload --host 127.0.0.1 --port 8000
```
前端:
```bash
cd hy_qa_asset_backend/frontend
npm install
npm run dev
```
访问:
- 前端后台http://localhost:3000
- 后端 APIhttp://127.0.0.1:8000/docs
## 环境变量
复制 `.env.example``.env`,按需填写:
- `DATABASE_URL`:为空时使用 SQLitePostgreSQL 示例:`postgresql+psycopg://hyqa:hyqa@localhost:5432/hyqa`
- `OPENAI_API_KEY`:为空时使用 mock AI。
- `OPENAI_BASE_URL`OpenAI 兼容服务地址,可选。
- `MODEL_NAME`:默认 `gpt-4.1-mini`
- `FEISHU_APP_ID``FEISHU_APP_SECRET``FEISHU_APP_TOKEN``FEISHU_TABLE_ID_SESSION``FEISHU_TABLE_ID_RAW_QA``FEISHU_TABLE_ID_STANDARD_QA`:真实飞书接入所需。若多维表格 URL 是 `/wiki/<token>`,可以填写 `FEISHU_WIKI_NODE_TOKEN` 代替 `FEISHU_APP_TOKEN`,后台会自动解析真实 bitable app_token。
- `SCHEDULE_CRON`:默认 `0 1 * * *`
- `SCHEDULE_TIMEZONE`:默认 `Asia/Shanghai`
- `MOCK_MODE`:默认 `true`
敏感密钥只从环境变量读取,不写入数据库,也不会在设置页明文展示。
## Mock 模式测试
没有飞书和 OpenAI 密钥也可以跑通:
1. 启动后端和前端。
2. 打开 `/dashboard`,点击“手动触发处理任务”。
3. 后端会创建 mock 场次,读取 `backend/app/seed/sample_transcript_001.txt`
4. `ai_cleaner` 在没有 `OPENAI_API_KEY` 时返回 mock 拆解结果。
5. 进入 `/review` 查看待审核问答卡片。
也可以在 `/sessions` 手动创建场次,填写转写稿,再点击“处理”或“重跑”。
## 手动触发黑灯任务
前端:在 `/dashboard` 点击“手动触发处理任务”。
API
```bash
curl -X POST http://127.0.0.1:8000/api/tasks/run-now
```
定时任务由 APScheduler 在后端启动时注册,默认每天 `Asia/Shanghai` 凌晨 1 点运行一次。
## 审核流程
1. `/review` 展示 `review_status=pending` 的原始问答。
2. 点击“通过入库”后,原始问答变为 `approved`
3.`suggested_to_standard_qa=true`,且不是高风险/禁止、且无需脱敏或已完成脱敏,系统创建 `standard_qa_items`
4. 标准问答默认 `audit_status=approved``call_status=not_callable`
5. 审核人进入 `/standard-qa`,手动点击“可调用”。
6. `/callable-qa` 只展示满足强制筛选规则的内容。
高风险内容、禁止内容、未脱敏内容不会自动进入可调用库。
## 风险边界
系统逻辑和 Prompt 共同遵守:
1. AI 只能辅助清洗、拆解、打标签、风险初筛,不能替代人工审核。
2. 原始问题和问题整理版分开保存。
3. 原始回答、回答整理版、标准回答分开保存。
4. 未审核内容不能进入标准问答库。
5. 未审核内容不能被未来智能体调用。
6. 高风险内容必须人工复审。
7. 涉及学员隐私必须标记脱敏。
8. 不做心理诊断、医疗建议、法律判断或课程效果承诺。
9. 涉及孩子、婚姻、家庭矛盾、姓名、电话、城市、学校、单位等信息,默认标记风险。
10. 不确定是否有风险时,默认中风险并进入人工审核。
## 飞书接入说明
第一版 `backend/app/services/feishu_client.py` 已预留:
- `scan_unprocessed_sessions`
- `fetch_transcript`
- `update_session_status`
- `write_raw_qa_items`
- `write_standard_qa_items`
真实飞书 API 已接入:后台会获取 `tenant_access_token`,扫描多维表格场次表,读取 `转写稿` 字段或尝试通过 docx 纯文本接口读取 `飞书资料链接`,处理完成后回写场次状态、原始问答表和标准问答表。
建议在飞书多维表格中建立 3 张表:
- `答疑场次``场次编号``标题``日期``答疑老师``飞书资料链接``转写稿``处理状态``问答总数``待审核数``已审核数``已入库数``失败原因`
- `原始问答``问答编号``场次编号``原始问题``问题整理版``原始回答``回答整理版``AI建议标准问题``AI建议标准回答``回答人``一级主题``问题标签``课程阶段``适用人群``情绪强度``风险等级``风险类型``风险说明``是否需脱敏``脱敏状态``审核状态``建议入库``来源时间戳``审核备注`
- `标准问答``标准编号``来源原始问答ID``来源场次ID``标准问题``标准回答``相似问法``一级主题``问题标签``课程阶段``适用人群``回答边界``禁止表达``风险等级``审核状态``调用状态``禁用原因`
可打开 `GET /api/feishu/setup-guide` 查看字段模板,打开 `GET /api/feishu/status` 检查飞书 token 是否可用。应用需要具备多维表格读写、文档读取等权限;如果要读取已有飞书文档,需要将飞书应用/机器人加入该文档协作者。
## AI 接入说明
`backend/app/services/ai_cleaner.py` 会读取 `backend/app/prompts/qa_cleaning_prompt.md`,调用 OpenAI 兼容 `/chat/completions`,解析 JSON 数组并校验字段。
接入真实 OpenAI 兼容 API 时,填写:
- `OPENAI_API_KEY`
- `MODEL_NAME`
- `OPENAI_BASE_URL`,如果使用非官方兼容服务
如果 AI 返回非法 JSON任务会记录失败原因。
## Docker
```bash
cd hy_qa_asset_backend
docker compose up --build
```
包含 PostgreSQL、backend、frontend 三个服务。默认仍使用 mock mode。
## 后续迭代建议
- 接入真实飞书多维表格和文档 API。
- 增加登录鉴权与角色权限。
- 增加更完整的标准问答编辑表单和批量审核。
- 增加脱敏处理工作台。
- 增加 AI 结果二次校验和人工差异对比。
- 增加迁移工具 Alembic、测试用例和生产部署配置。