6a768ef146d5b8716eefeb0acab9852be311d911
小财记账 (XiaoCai Accounting)
AI 驱动的内部群聊记账系统,通过自然语言对话自动记录采购信息。
功能特性
- AI 自然语言记账 — 聊天中输入"打印纸一包,30元,已付"即可自动创建采购记录
- 采购清单管理 — 按月汇总,支持编辑、删除、附件管理,状态追踪(待付款→已付款→已收货→已完成)
- 多群聊支持 — 每个项目独立群聊,支持白名单权限控制
- 实时推送 — WebSocket 实时同步消息和采购变更
- 移动端适配 — 响应式设计,支持滑动手势、图片双指缩放拖拽
- 管理员功能 — 群聊管理、采购导出 CSV、全局汇总
技术栈
| 层 | 技术 |
|---|---|
| 后端 | Node.js + Express + WebSocket (ws) |
| 数据库 | SQLite (better-sqlite3) |
| AI | DeepSeek API |
| 前端 | 原生 HTML/CSS/JS,无框架 |
| 部署 | Docker + Docker Compose |
| 认证 | JWT |
项目结构
xiaocai-ai-server/
├── docker-compose.yml # Docker 编排
├── build.sh # 构建脚本
├── server/
│ ├── server.js # 入口
│ ├── db.js # 数据库初始化 + 迁移
│ ├── utils.js # 时间工具函数
│ ├── handlers.js # AI 结果处理 + 对话状态
│ ├── package.json
│ ├── Dockerfile
│ ├── ai/
│ │ ├── prompt.js # Prompt 模板
│ │ ├── validator.js # JSON Schema 校验
│ │ └── client.js # DeepSeek API 客户端
│ ├── middleware/
│ │ └── auth.js # JWT 认证 + 管理员中间件
│ ├── routes/
│ │ ├── auth.js # 登录 / 用户信息
│ │ ├── rooms.js # 群聊 CRUD
│ │ ├── messages.js # 消息 + AI 分析
│ │ └── purchases.js # 采购 CRUD / 汇总 / 导出
│ ├── ws/
│ │ └── index.js # WebSocket 连接管理 + 广播
│ └── public/
│ ├── index.html # 单页应用
│ ├── css/style.css # 样式
│ └── js/
│ ├── store.js # 全局状态管理
│ ├── chat.js # 消息渲染 + 图片处理
│ ├── ws.js # WebSocket + 聊天列表
│ ├── purchases.js # 采购清单 + 编辑 + 手势
│ └── auth.js # 登录 / 初始化
└── docs/
└── v2.md # 重构设计文档
快速开始
环境变量
创建 .env 文件:
# 用户账号(username:password 逗号分隔)
USERS=admin:admin123,user1:pass1
# 管理员列表(逗号分隔)
ADMINS=admin
# DeepSeek API Key
DEEPSEEK_API_KEY=sk-xxx
Docker 部署
# 构建并启动
./build.sh
# 或手动
docker compose up -d
服务默认监听 3000 端口。
API 概览
认证
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/login |
登录获取 JWT |
群聊
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/rooms |
群聊列表(按活跃时间排序) |
| POST | /api/rooms |
新建群聊 |
| PUT | /api/rooms/:id |
编辑群聊 |
| DELETE | /api/rooms/:id |
删除群聊(管理员) |
消息
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/rooms/:id/messages |
获取消息历史 |
| POST | /api/rooms/:id/messages |
发送消息(触发 AI 分析) |
| POST | /api/upload |
上传图片 |
采购
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/rooms/:id/purchases |
群聊采购清单 |
| GET | /api/purchases/:id |
采购详情(含历史 + 附件) |
| PUT | /api/purchases/:id |
更新采购记录 |
| DELETE | /api/purchases/:id |
删除采购记录 |
| POST | /api/purchases/:id/attachments |
添加附件 |
| DELETE | /api/purchases/:id/attachments |
删除附件 |
| GET | /api/summary |
全局采购汇总 |
| GET | /api/rooms/:id/purchases/export |
导出 CSV |
采购状态流转
待付款 → 已付款 → 已收货 → 已完成
- 聊天 AI — 仅负责新建记录,修改操作引导用户去采购清单手动完成
- 采购清单 — 点击条目进入详情,可编辑所有字段、管理附件、查看操作历史
设计原则
- AI 不负责更新已有记录,所有修改由用户手动完成
- 新建记录通过聊天自然语言输入
- 移动端优先:滑动手势、数字键盘、双指缩放
- 操作历史自动记录所有变更,可追溯
License
MIT
Description
Languages
JavaScript
74.2%
HTML
13.7%
CSS
11.9%
Dockerfile
0.1%