Files

173 lines
7.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 大本营答疑资产后台系统 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、测试用例和生产部署配置。