feat: 添加公司AI管理平台基础架构

添加了完整的FastAPI后端项目结构,包括:
- 环境配置文件(.env.example)和项目说明文档(README.md、AGENTS.md)
- Dockerfile用于容器化部署
- 核心基础设施:配置管理、数据库连接、调度器、安全认证
- 模块化设计:AI代理、审批流程、审计日志、业务台账等功能模块
- 支持多数据库连接(主库和遗留系统只读库)
- AI适配器支持OpenClaw、Hermes、OpenAI兼容接口
- 飞书集成、报表生成、风险监控等企业级功能
- 完整的依赖管理和测试指南
```
This commit is contained in:
2026-06-21 21:57:28 +08:00
commit 71ca804764
68 changed files with 3662 additions and 0 deletions

311
README.md Normal file
View File

@@ -0,0 +1,311 @@
# Company AI Management Platform
这是一个公司全生命周期 AI 管理系统的后端工程,定位是:
```text
现有项目管理系统 / MySQL
+
FastAPI AI 集成层
+
飞书推送与审批入口
+
OpenClaw / Hermes / 模型适配接口
```
第一版已经实现:
- FastAPI 后端工程
- Conda 独立环境配置
- MySQL 主库连接
- 现有项目管理系统 MySQL 只读接入
- 业务台账 CRUD项目、任务、采购、费用、资金、制度、规范、绩效、供应商
- 飞书文本和卡片推送接口
- 飞书 Webhook 入口
- 飞书消息命令路由日报、周报、风险、AI 问答
- AI 适配器OpenClaw、Hermes、OpenAI-compatible、noop
- 经营晨报、项目周报
- 风险检测:逾期任务、延期项目、超预算项目、资金低于安全线
- 审批单:高风险资金/绩效更新必须通过审批 ticket
- 现有 MySQL 项目数据同步到内部台账,支持 dry-run 和字段映射
- AI 操作审计日志
- Docker Compose 本地运行模板
## 1. 技术栈
```text
Python 3.11
FastAPI
SQLAlchemy 2
MySQL / PyMySQL
Redis
APScheduler / Celery 预留
httpx
Pydantic Settings
```
## 2. Conda 环境
重新创建专用环境:
```powershell
cd C:\Users\20143\Documents\Codex\2026-06-21\new-chat\outputs\company-ai-platform
conda env remove -n company-ai-platform
conda env create -f environment.yml
conda activate company-ai-platform
```
更新已有环境:
```powershell
conda env update -f environment.yml --prune
```
也可以直接运行:
```powershell
.\scripts\recreate_conda_env.ps1
```
## 3. 配置
复制配置文件:
```powershell
Copy-Item .env.example .env
```
至少配置:
```text
DATABASE_URL=你的新业务库
LEGACY_DATABASE_URL=现有项目管理系统的只读 MySQL 账号
LEGACY_PROJECT_QUERY=从现有系统读取项目的 SELECT 查询
API_KEY=你的内部 API Key
```
飞书和模型可以后续再配置。未配置模型时,`MODEL_PROVIDER=noop` 会返回可预测占位结果,确保项目先能启动。
## 4. 初始化数据库
```powershell
python -m app.tools.init_db
```
## 5. 启动服务
```powershell
uvicorn app.main:app --reload --host 0.0.0.0 --port 8010
```
访问:
```text
http://127.0.0.1:8010/docs
```
带 API Key 请求时加 header
```text
X-API-Key: 你的 API_KEY
```
## 6. 关键接口
### 系统健康
```text
GET /api/v1/health
```
### 业务台账
```text
GET /api/v1/business/domains
GET /api/v1/business/projects
POST /api/v1/business/projects
PATCH /api/v1/business/projects/{id}
```
支持的 domain
```text
projects
tasks
procurements
expenses
fund-accounts
policies
standards
performance-metrics
suppliers
```
### 现有 MySQL
```text
GET /api/v1/integrations/mysql/health
GET /api/v1/integrations/mysql/tables
GET /api/v1/integrations/mysql/tables/{table_name}
POST /api/v1/integrations/mysql/query
GET /api/v1/integrations/mysql/projects
POST /api/v1/integrations/mysql/projects/sync
```
只允许 `SELECT`,默认第一阶段不写回原系统。
项目同步默认 `dry_run=true`,确认映射无误后再设置为 `false`
### 飞书
```text
POST /api/v1/integrations/feishu/send-text
POST /api/v1/integrations/feishu/send-card
POST /api/v1/integrations/feishu/webhook
POST /api/v1/integrations/feishu/commands/preview
```
飞书命令支持:
```text
日报 / 晨报 / 经营日报
周报 / 项目周报
风险 / 预警
问 xxx / AI xxx / 普通问题
```
### AI
```text
POST /api/v1/ai/ask
POST /api/v1/ai/draft-policy
POST /api/v1/ai/investment-research
```
### 审批
```text
POST /api/v1/approvals
GET /api/v1/approvals
GET /api/v1/approvals/{ticket_id}
POST /api/v1/approvals/{ticket_id}/approve
POST /api/v1/approvals/{ticket_id}/reject
```
`fund-accounts``performance-metrics` 更新需要已批准的 `approval_ticket_id`
### 报表
```text
GET /api/v1/reports/daily-brief
GET /api/v1/reports/project-weekly
POST /api/v1/reports/daily-brief/push
POST /api/v1/reports/project-weekly/push
```
### 风险
```text
GET /api/v1/risks/summary
GET /api/v1/risks/overdue-tasks
GET /api/v1/risks/delayed-projects
GET /api/v1/risks/over-budget-projects
GET /api/v1/risks/funds
```
## 7. 接入现有项目管理系统
第一阶段建议只读接入:
```text
现有项目系统 MySQL -> FastAPI 只读查询 -> 报表/风险 -> 飞书推送
```
不要一开始让 AI 直接改原系统数据库。
配置示例:
```text
LEGACY_DATABASE_URL=mysql+pymysql://readonly_user:password@10.0.0.10:3306/project_system?charset=utf8mb4
LEGACY_PROJECT_QUERY=SELECT id, name, owner, status, progress, start_date, due_date, budget, actual_cost FROM project ORDER BY id DESC LIMIT :limit
```
## 8. 接入 OpenClaw / Hermes / 模型
OpenClaw
```text
MODEL_PROVIDER=openclaw
OPENCLAW_BASE_URL=http://127.0.0.1:18789
OPENCLAW_API_KEY=
```
Hermes
```text
MODEL_PROVIDER=hermes
HERMES_BASE_URL=http://127.0.0.1:8080
HERMES_API_KEY=
```
OpenAI-compatible
```text
MODEL_PROVIDER=direct_llm
DIRECT_LLM_BASE_URL=https://api.openai.com/v1
DIRECT_LLM_API_KEY=你的Key
DIRECT_LLM_MODEL=gpt-4.1-mini
```
## 9. 安全边界
已经内置的边界:
- 现有 MySQL 只允许 SELECT
- 高风险模块更新需要 `approval_ticket_id`
- 飞书和 AI 动作写入审计日志
- API 支持 `X-API-Key`
- AI 不直接审批付款、绩效、投资交易
后续建议补:
- 用户登录
- RBAC 角色权限
- 字段级脱敏
- 飞书审批回调
- 数据库迁移 Alembic
- 对接真实财务/采购系统 API
## 10. 下一步实施顺序
```text
1. 配置现有 MySQL 只读账号
2. 调通 /integrations/mysql/health
3. 调通 /integrations/mysql/projects
4. 初始化新业务库
5. 导入或同步项目数据
6. 配置飞书应用
7. 调通飞书 send-text/send-card
8. 配置 MODEL_PROVIDER
9. 开启日报、周报、风险推送
10. 再逐步做写回和审批闭环
```
## 11. 验证
编译:
```powershell
conda run -n company-ai-platform python -m compileall app tests scripts
```
Smoke 验证:
```powershell
conda run -n company-ai-platform python scripts\verify_smoke.py
```
测试:
```powershell
conda run -n company-ai-platform pytest -q
```