Commit d21ebdb3 authored by uuo00_n's avatar uuo00_n

docs: 更新README文档补充重要说明和细节

- 补充init_db.py脚本的重要警告和使用说明
- 明确APP_MODE环境变量的作用和路由限制
- 添加角色权限等级说明和仪表盘接口细节
- 完善敏感词刷新机制和常见问题解答
parent 8ba714bd
...@@ -92,6 +92,10 @@ python init_db.py ...@@ -92,6 +92,10 @@ python init_db.py
- 管理员:admin / admin123 - 管理员:admin / admin123
- 普通用户:user / user123 - 普通用户:user / user123
重要说明:
- 该脚本会清空 DB_NAME 指定库中的“所有集合”(drop collection),随后再写入演示数据,仅用于本地开发与测试,请勿在生产环境运行。
- 版别选择通过环境变量 APP_MODE 控制(可选值:edu 或 biz,默认 edu)。脚本会仅插入当前模式对应的测试用户,路由层也会基于该模式限制可访问的版别。
7) 启动服务 7) 启动服务
```bash ```bash
uvicorn app.main:app --reload uvicorn app.main:app --reload
...@@ -104,6 +108,7 @@ uvicorn app.main:app --reload ...@@ -104,6 +108,7 @@ uvicorn app.main:app --reload
与代码一致,配置由 `app/core/config.py` 读取: 与代码一致,配置由 `app/core/config.py` 读取:
- MONGODB_URL:MongoDB 连接串,默认 `mongodb://localhost:27017` - MONGODB_URL:MongoDB 连接串,默认 `mongodb://localhost:27017`
- DB_NAME:数据库名,默认 `llm_filter_db` - DB_NAME:数据库名,默认 `llm_filter_db`
- APP_MODE:应用运行版别,`edu``biz`,默认 `edu`(路由依赖会限制仅允许该版别访问)
- SECRET_KEY:JWT 签名密钥(必须为强随机) - SECRET_KEY:JWT 签名密钥(必须为强随机)
- ALGORITHM:JWT 算法,默认 `HS256` - ALGORITHM:JWT 算法,默认 `HS256`
- ACCESS_TOKEN_EXPIRE_MINUTES:访问令牌过期时间(分钟),默认 `30` - ACCESS_TOKEN_EXPIRE_MINUTES:访问令牌过期时间(分钟),默认 `30`
...@@ -175,6 +180,8 @@ curl -X POST "http://localhost:8000/api/v1/conversations/<ID>/messages" \ ...@@ -175,6 +180,8 @@ curl -X POST "http://localhost:8000/api/v1/conversations/<ID>/messages" \
- PUT `/api/v1/admin/categories/{category_name}` 更新分类子分类 - PUT `/api/v1/admin/categories/{category_name}` 更新分类子分类
- DELETE `/api/v1/admin/categories/{category_name}` 删除分类 - DELETE `/api/v1/admin/categories/{category_name}` 删除分类
说明:部分路由挂载了基于 APP_MODE 的版别限制依赖(require_edition_for_mode),仅允许与当前 APP_MODE 一致的用户访问。
CSV 导入示例(文件需包含表头:word,category,subcategory,severity): CSV 导入示例(文件需包含表头:word,category,subcategory,severity):
```bash ```bash
curl -X POST "http://localhost:8000/api/v1/admin/sensitive-words/import" \ curl -X POST "http://localhost:8000/api/v1/admin/sensitive-words/import" \
...@@ -189,6 +196,10 @@ curl -X POST "http://localhost:8000/api/v1/admin/sensitive-words/import" \ ...@@ -189,6 +196,10 @@ curl -X POST "http://localhost:8000/api/v1/admin/sensitive-words/import" \
# words.json 示例:[ {"word":"赌博","category":"违法活动","subcategory":"赌博","severity":3} ] # words.json 示例:[ {"word":"赌博","category":"违法活动","subcategory":"赌博","severity":3} ]
``` ```
### 仪表盘(/dashboard)
- GET `/api/v1/dashboard/summary` 根据角色等级与版别返回个性化首页模块,最低 1 级即可访问;随角色等级与版别增加返回更多模块。
- 也挂载了版别限制依赖(require_edition_for_mode),保证仅允许后端设置的版别访问。
--- ---
## 项目结构 ## 项目结构
...@@ -215,6 +226,11 @@ llm-filter/ ...@@ -215,6 +226,11 @@ llm-filter/
- 支持主分类与子分类,并记录严重程度(1-5,5 最严重) - 支持主分类与子分类,并记录严重程度(1-5,5 最严重)
- 管理员可通过导入/批量添加快速构建词库 - 管理员可通过导入/批量添加快速构建词库
敏感词来源与刷新机制:
- 词库存放在 MongoDB 的 `sensitive_words` 集合中。
- 应用启动时会执行 `load_sensitive_words()`,将数据库中的词库加载到内存的 Trie,用于高效匹配。
- 通过管理员接口新增/删除/批量导入敏感词后,服务会自动调用 `load_sensitive_words()` 进行“热更新”,无需重启即可生效。
--- ---
## 开发与部署提示 ## 开发与部署提示
...@@ -222,6 +238,13 @@ llm-filter/ ...@@ -222,6 +238,13 @@ llm-filter/
- 开发模式使用 `--reload`;生产建议使用 `uvicorn`/`gunicorn` + 进程管理(如 `supervisor`/`systemd` - 开发模式使用 `--reload`;生产建议使用 `uvicorn`/`gunicorn` + 进程管理(如 `supervisor`/`systemd`
- 日志与安全:请务必使用强随机 `SECRET_KEY` 并妥善保管 `.env` - 日志与安全:请务必使用强随机 `SECRET_KEY` 并妥善保管 `.env`
角色与权限等级:
- user:1(学生/员工)
- manager:2(班主任/组长/二级部门管理员)
- leader:3(中层干部/部门负责人/一级部门管理员)
- master:4(校长/集团高管/总负责人)
- administrator:5(系统管理员/运维超管;兼容历史名 `admin`
--- ---
## 常见问题(FAQ) ## 常见问题(FAQ)
...@@ -237,6 +260,10 @@ llm-filter/ ...@@ -237,6 +260,10 @@ llm-filter/
- 检查 `OLLAMA_BASE_URL` 是否指向可用服务:`curl http://localhost:11434/api/tags` - 检查 `OLLAMA_BASE_URL` 是否指向可用服务:`curl http://localhost:11434/api/tags`
- 确保已拉取并可用的模型(如 `ollama pull llama2` - 确保已拉取并可用的模型(如 `ollama pull llama2`
4) 运行 `init_db.py` 是否会清空数据库?
- 会清空 `DB_NAME` 指定库内的所有集合(drop collection),随后再写入演示数据。仅用于开发测试,请勿在生产环境运行。
- 如需保留数据,可自行修改脚本,跳过清空步骤或仅清空指定集合;或在 `.env` 中设置不同的 `DB_NAME` 指向测试库。
--- ---
## 许可证 ## 许可证
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment