Files
2026-07-06 22:03:22 +08:00

11 KiB
Raw Permalink Blame History

财务 AI 助手运行手册(第一模块:薪财通 AI)

项目: 财务 AI 助手(项目编号:S2F,第一模块:薪财通 AI)
产品定位: 面向金蝶中小企业客户的财务 AI 助手
当前运行模块: 第一阶段薪酬财务对账 MVP
范围说明: 本运行手册对应第一模块 Excel 闭环;发票报销、预算执行、现金流异常、往来对账、经营分析属于后续模块
更新日期: 2026-07-06

技术栈

前端

  • 框架: Next.js 14+ (React 18+)
  • 语言: TypeScript 5+
  • 样式: Tailwind CSS 3+
  • UI 组件: Shadcn/ui (基于 Radix UI)
  • 状态管理: React Context + Zustand
  • HTTP 客户端: Axios
  • 表单: React Hook Form + Zod
  • 图表: Recharts
  • 图标: Lucide Icons
  • 文件上传: React Dropzone
  • Excel 处理: SheetJS (xlsx)

后端

  • 框架: FastAPI 0.110+
  • 语言: Python 3.11+
  • 验证: Pydantic 2+
  • ORM: SQLAlchemy 2+ with asyncio
  • 数据库驱动: asyncpg (PostgreSQL)
  • 认证: JWT (python-jose)
  • 密码: bcrypt
  • 文件处理: openpyxl, pandas
  • AI: OpenAI SDK / 国产大模型 SDK
  • 任务队列: Celery + Redis (第二阶段)
  • 日志: structlog

数据库

  • 主库: PostgreSQL 15+
  • 缓存: Redis 7+ (第二阶段)

部署

  • 容器: Docker + Docker Compose
  • Web 服务器: Nginx (反向代理)
  • 进程管理: Uvicorn (FastAPI ASGI)

本地环境要求

必需

  • Node.js 20+ 和 npm 10+
  • Python 3.11+
  • PostgreSQL 15+
  • Docker 和 Docker Compose (推荐)

可选

  • Redis 7+ (第二阶段)

环境变量

前端 .env.local

# API 地址
NEXT_PUBLIC_API_URL=http://localhost:8000

# 应用配置
NEXT_PUBLIC_APP_NAME="财务 AI 助手(薪财通 AI"
NEXT_PUBLIC_APP_VERSION=1.0.0

后端 .env

# 应用配置
APP_NAME="财务 AI 助手 API"
APP_VERSION=1.0.0
DEBUG=true
SECRET_KEY=your-secret-key-change-in-production
ALLOWED_ORIGINS=http://localhost:3000

# 数据库
DATABASE_URL=postgresql+asyncpg://s2f_user:s2f_password@localhost:5432/s2f_db

# JWT
JWT_SECRET_KEY=your-jwt-secret-key-change-in-production
JWT_ALGORITHM=HS256
JWT_ACCESS_TOKEN_EXPIRE_MINUTES=60

# AI 模型
OPENAI_API_KEY=your-openai-api-key
OPENAI_MODEL=gpt-4-turbo-preview
# 默认使用智谱,也可切换 openai / qwen / baidu
AI_PROVIDER=zhipu
ZHIPU_API_KEY=your-zhipu-api-key
AI_API_KEY=your-ai-api-key

# 文件存储
UPLOAD_DIR=./uploads
MAX_UPLOAD_SIZE=10485760  # 10MB

# 日志
LOG_LEVEL=INFO

项目结构

s2f/
├── frontend/                # Next.js 前端
│   ├── src/
│   │   ├── app/            # App Router 页面
│   │   ├── components/     # React 组件
│   │   ├── lib/            # 工具函数、API 客户端
│   │   ├── hooks/          # 自定义 Hooks
│   │   ├── types/          # TypeScript 类型
│   │   └── styles/         # 全局样式
│   ├── public/             # 静态资源
│   ├── package.json
│   └── tsconfig.json
├── backend/                 # FastAPI 后端
│   ├── app/
│   │   ├── api/            # API 路由
│   │   ├── core/           # 核心配置
│   │   ├── models/         # SQLAlchemy 模型
│   │   ├── schemas/        # Pydantic 模式
│   │   ├── services/       # 业务逻辑
│   │   ├── utils/          # 工具函数
│   │   └── main.py         # 应用入口
│   ├── migrations/         # Alembic 迁移
│   ├── tests/              # 测试
│   ├── requirements.txt
│   └── pyproject.toml
├── pmdocs/                  # 项目管理文档
│   ├── 0-req-S2F.md
│   ├── 1-prd-S2F.md
│   └── 2-task-S2F.md
├── docker-compose.yml       # Docker Compose 配置
├── .gitignore
├── README.md
└── run.md                   # 本文件

安装与初始化

方式 1:使用 Docker Compose(推荐)

# 克隆项目
cd /Users/freedak/Documents/AIDashboard/s2f

# 启动所有服务
docker-compose up -d

# 查看日志
docker-compose logs -f

# 前端: http://localhost:3000
# 后端 API: http://localhost:8000
# API 文档: http://localhost:8000/docs

方式 2:本地开发

1. 数据库初始化

# 安装 PostgreSQL (macOS)
brew install postgresql@15
brew services start postgresql@15

# 创建数据库和用户
psql postgres
CREATE DATABASE s2f_db;
CREATE USER s2f_user WITH PASSWORD 's2f_password';
GRANT ALL PRIVILEGES ON DATABASE s2f_db TO s2f_user;
\q

2. 后端初始化

cd backend

# 创建虚拟环境
python3.11 -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# 安装依赖
pip install -r requirements.txt

# 配置环境变量
cp .env.example .env
# 编辑 .env 填入真实配置

# 数据库迁移
alembic upgrade head

# 创建初始管理员账号
python scripts/create_admin.py

3. 前端初始化

cd frontend

# 安装依赖
npm install

# 配置环境变量
cp .env.example .env.local
# 编辑 .env.local 填入 API 地址

开发命令

前端开发

cd frontend

# 启动开发服务器 (http://localhost:3000)
npm run dev

# 类型检查
npm run type-check

# Lint 检查
npm run lint

# 代码格式化
npm run format

后端开发

cd backend
source venv/bin/activate

# 启动开发服务器 (http://localhost:8000)
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

# 或使用 FastAPI CLI
fastapi dev app/main.py

# 查看 API 文档
# http://localhost:8000/docs (Swagger UI)
# http://localhost:8000/redoc (ReDoc)

构建命令

前端构建

cd frontend

# 生产构建
npm run build

# 启动生产服务器
npm run start

后端构建

cd backend

# FastAPI 不需要构建,直接运行
uvicorn app.main:app --host 0.0.0.0 --port 8000

测试命令

前端测试

cd frontend

# 运行所有测试
npm run test

# 监听模式
npm run test:watch

# 覆盖率报告
npm run test:coverage

后端测试

cd backend
source venv/bin/activate

# 运行所有测试
pytest

# 监听模式
pytest-watch

# 覆盖率报告
pytest --cov=app --cov-report=html

端到端测试

cd frontend

# 运行 E2E 测试 (Playwright)
npm run test:e2e

# 打开 Playwright UI
npm run test:e2e:ui

数据库命令

Alembic 迁移

cd backend
source venv/bin/activate

# 创建迁移
alembic revision --autogenerate -m "描述变更"

# 执行迁移
alembic upgrade head

# 回滚迁移
alembic downgrade -1

# 查看迁移历史
alembic history

# 查看当前版本
alembic current

数据库管理

# 连接数据库
psql -U s2f_user -d s2f_db

# 备份数据库
pg_dump -U s2f_user s2f_db > backup.sql

# 恢复数据库
psql -U s2f_user s2f_db < backup.sql

# 重置数据库(危险!)
psql -U s2f_user
DROP DATABASE s2f_db;
CREATE DATABASE s2f_db;
\q
cd backend && alembic upgrade head

代码质量

前端

cd frontend

# ESLint 检查
npm run lint

# 自动修复
npm run lint:fix

# Prettier 格式化
npm run format

# TypeScript 类型检查
npm run type-check

后端

cd backend
source venv/bin/activate

# Ruff Lint 检查
ruff check app/

# 自动修复
ruff check --fix app/

# Black 格式化
black app/

# MyPy 类型检查
mypy app/

Docker 命令

# 构建镜像
docker-compose build

# 启动服务
docker-compose up -d

# 停止服务
docker-compose down

# 查看日志
docker-compose logs -f [service_name]

# 进入容器
docker-compose exec backend bash
docker-compose exec frontend sh

# 重建并重启
docker-compose up -d --build

# 清理所有数据(危险!)
docker-compose down -v

常见问题

1. 前端无法连接后端

问题:前端显示网络错误

解决

# 确认后端正在运行
curl http://localhost:8000/api/health

# 检查 CORS 配置
# backend/app/core/config.py 中 ALLOWED_ORIGINS 需包含前端地址

2. 数据库连接失败

问题sqlalchemy.exc.OperationalError: could not connect to server

解决

# 确认 PostgreSQL 正在运行
pg_isready -h localhost -p 5432

# 确认数据库存在
psql -U s2f_user -l | grep s2f_db

# 检查 DATABASE_URL 配置
echo $DATABASE_URL

3. AI 字段识别失败

问题:上传文件后识别超时或失败

解决

# 检查 AI API Key
echo $OPENAI_API_KEY

# 测试 API 连接
curl https://api.openai.com/v1/models \
  -H "Authorization: Bearer $OPENAI_API_KEY"

# 查看后端日志
docker-compose logs backend | grep -i "openai\|error"

4. 文件上传失败

问题:上传文件时显示 413 或 500 错误

解决

# 检查文件大小限制
# backend/.env 中 MAX_UPLOAD_SIZE=10485760 (10MB)

# 确认上传目录权限
ls -la backend/uploads/
chmod 755 backend/uploads/

# 检查磁盘空间
df -h

5. 前端构建失败

问题npm run build 报错

解决

# 清理缓存
rm -rf frontend/.next frontend/node_modules
cd frontend && npm install

# 检查 TypeScript 错误
npm run type-check

# 检查环境变量
cat frontend/.env.local

部署检查清单

部署前确认:

  • 环境变量已配置(生产环境不使用默认密钥)
  • 数据库迁移已执行
  • 前端已构建 (npm run build)
  • HTTPS 已配置
  • CORS 已正确配置生产域名
  • 文件上传目录有正确权限
  • 日志目录可写
  • 备份策略已配置
  • 监控和告警已配置

性能优化建议

前端

  • 使用 Next.js 的 Image 组件优化图片
  • 启用 React Server Components 减少客户端 JS
  • 使用动态导入按需加载组件
  • 配置合理的缓存策略

后端

  • 为频繁查询添加数据库索引
  • 使用连接池优化数据库连接
  • 对 AI 请求添加缓存(第二阶段)
  • 启用 Gzip 压缩

数据库

  • 定期 VACUUM 和 ANALYZE
  • 监控慢查询日志
  • 合理设置连接池大小

安全建议

  • 生产环境必须更改所有默认密钥
  • 使用 HTTPS
  • 启用 CSRF 保护
  • 限制文件上传类型和大小
  • 定期更新依赖
  • 启用日志审计
  • 配置防火墙规则
  • 数据库使用强密码并限制访问

监控与日志

日志位置

# 前端日志
frontend/.next/

# 后端日志
backend/logs/

# Docker 日志
docker-compose logs

推荐监控指标

  • API 响应时间
  • 数据库查询时间
  • AI 识别准确率
  • 文件上传成功率
  • 错误率和异常日志
  • 磁盘使用率
  • 内存使用率

更新记录

日期 版本 变更内容
2026-07-06 v1.0 初始版本,MVP 技术栈和运行命令

下一步: 参考 pmdocs/2-task-S2F.md 开始开发任务