45 lines
2.7 KiB
Markdown
45 lines
2.7 KiB
Markdown
# Dieya Risk Prediction Backend
|
||
|
||
本项目参考 `dy_finance_agent_backend` 的分层方式,使用 Python 3.11、FastAPI、Pydantic v2、SQLAlchemy 2.x Async、PostgreSQL 和 Alembic。
|
||
|
||
## 本地启动
|
||
|
||
```powershell
|
||
.\.venv\Scripts\Activate.ps1
|
||
python -m pip install -e ".[dev]"
|
||
python -m uvicorn app.main:app --host 127.0.0.1 --port 18474
|
||
```
|
||
|
||
创建本地密码账号(密码只保存哈希):
|
||
|
||
```powershell
|
||
python scripts/create_user.py --emp-no admin001 --name 管理员 --role admin --password "请替换为强密码" --email admin@dieya.com
|
||
```
|
||
|
||
钉钉免登需要额外配置 `RISK_DINGTALK_APP_KEY`、`RISK_DINGTALK_APP_SECRET`、`RISK_DINGTALK_CORP_ID` 和 `RISK_DINGTALK_AGENT_ID`;前端在钉钉容器中调用 `requestAuthCode()`,后端换码后签发本系统 JWT。
|
||
|
||
认证接口:`POST /api/v1/auth/login`、`GET /api/v1/auth/me`、`GET /api/v1/auth/dingtalk/config`、`POST /api/v1/auth/dingtalk/login`。
|
||
|
||
审核接口:`POST /api/v1/risk-items`、`GET /api/v1/risk-items/pending`、`POST /api/v1/risk-items/{id}/review`。
|
||
|
||
健康检查:`GET http://127.0.0.1:18474/api/v1/health`
|
||
|
||
数据库表结构和字段释义通过 Alembic 管理。执行 `python -m alembic upgrade head` 会创建或更新表、索引、外键及 PostgreSQL 表/字段注释。
|
||
|
||
导入 PRD 数据:
|
||
|
||
```powershell
|
||
python -m alembic upgrade head
|
||
python scripts/import_excel_data.py `
|
||
--anomaly-file "C:\Users\Administrator\Desktop\异常数据汇总表.xlsx" `
|
||
--standard-file "C:\Users\Administrator\Desktop\标准文件.xlsx"
|
||
```
|
||
|
||
脚本只导入异常明细 Sheet 的 2,448 条记录,以及标准文件中的“包装/包材/法规/内料”四个分类 Sheet 共 219 条记录;“总表”不重复导入。脚本可重复执行,已导入行会按源文件、Sheet 和 Excel 行号自动跳过。原始异常文本和标准附件链接会完整保留,不做截断。
|
||
|
||
风险评估预览:`POST http://127.0.0.1:18474/api/v1/risk-predictions/preview`。指标值表示风险程度(0-100),接口返回的综合分按 PRD 转换为安全得分,分数越高风险越低;等级阈值为 80/60/40/20。
|
||
|
||
对话页真实 AI:配置 `RISK_LLM_API_KEY`、`RISK_LLM_BASE_URL` 和 `RISK_LLM_MODEL` 后,调用 `POST /api/v1/conversations/{id}/stream`。接口使用 OpenAI 兼容 Chat Completions 协议,先提取 `intent/category/specification/packaging/supplier/factory/stage/confidence` 语义 JSON,再通过 SSE 返回增量文本;最近 20 条消息作为上下文,完整助手消息、语义结果和风险评分会在流结束后持久化。也兼容参考项目的 `OPENAI_API_KEY`、`LLM_BASE_URL`、`LLM_MODEL` 配置名。未配置密钥时返回明确的 503,不生成模拟回复。
|
||
|
||
架构说明见 [docs/architecture.md](docs/architecture.md)。
|