新增 6 个模块,把好感度变化的全部副作用收敛到一个调用入口:
- counters.py (P2-02):Redis 三类计数器
- affinity💿{device_id}:{rule_key} 冷却
- affinity:daily:{device_id}:{rule_key}:{YYYYMMDD} 单规则日上限
- affinity:daily:{device_id}:_global:{YYYYMMDD} 全局正向日上限
- 自然日按 AffinitySetting.timezone (Asia/Shanghai 默认) 通过 zoneinfo 计算
- cache.add + cache.incr 实现 set-if-not-exists + atomic-incr 语义,TTL 48h
- event_id 60s 去重防客户端重复上报
- levels.py (P2-03):等级映射
- map_value_to_level / update_device_level / progress_to_next_level
- update_device_level 仅 level 变化时 save(update_fields=['affinity_level'])
- ws.py (P2-05):WebSocket 推送 helper
- 3 类事件 affinity_update / level_up / level_down
- asgiref.async_to_sync 包装 channel_layer.group_send
- 推送故障 fire-and-forget 仅日志记录,不阻塞主流程
- rewards.py (P2-04):跨级奖励发放(A3 方案 B)
- grant_levels(user_device, from_level, to_level) 逐级独立事务
- UserLevelRewardGrant 唯一约束保证幂等(决策 11:衰减回升不补发)
- _dispatch_reward_to_external_systems 是 STUB,P3/P4 接虚拟货币/道具 app 时实现
- services.py (P2-01):AffinityService 主入口
- apply(user_id, device_id, rule_key, source, event_id, metadata, operator_admin_id, reason)
- 10 步流水线 [event_id 去重 → 取规则 → 冷却 → 取 UserDevice.active → 计算 + single_cap 钳位 → 规则日上限 → 全局日上限 → 原子写库 → Redis 累加 → 奖励 → WS 推送]
- admin_adjust 绕过 rule 与冷却,但走 [0, max_affinity] 钳位 + log + 等级缓存 + 奖励 + WS
- 返回 ApplyResult dataclass 含 ApplyOutcome 枚举(applied / noop_no_rule / noop_cooldown / noop_*_daily_cap / noop_event_duplicate / noop_value_boundary / error)
- permissions.py:IsAdminUserStaff 复用 IsAuthenticated + is_staff 检查
Smoke test 6 项全 PASS:no_rule / chat applied / event_id 去重 / 冷却拦截 / admin_adjust / max_affinity 钳位。
AffinityLog 写库 / UserLevelRewardGrant 幂等 / level 缓存更新 均经事务原子保证。
设计依据:docs/好感度系统功能与规则设计.md §4.3 触发流程 + §6 等级规则 + §9 数据契约。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
QY LTY Backend
This is the backend service for QY LTY project.
Development Setup
- Install dependencies:
pip install -r requirements.txt
- Copy environment file:
cp .env.bak .env
- Start development server:
daphne -b 0.0.0.0 -p 8000 qy_lty.asgi:application
Docker Deployment
- Build and start the container:
docker-compose up -d --build
- Access the application at: http://localhost:12012
功能特性
-
用户管理系统
- 用户名密码注册登录
- 手机号验证码登录
- 用户信息管理
-
AI 对话系统
- 单轮对话功能
- 多轮上下文对话
- 语音对话支持
-
卡片管理系统
- 卡片类别管理
- 卡片生命周期管理
- 批次生成与导出
- 扫描和使用功能
-
设备交互系统
- WebSocket 实时通信
- 多种消息类型支持
- 天气查询功能
API 文档
项目的 API 文档使用 Swagger UI 生成,按以下模块组织:
用户模块 (/api/user/)
- 用户注册
- 用户登录(用户名密码/手机验证码)
- 用户信息管理
AI 对话模块 (/api/ai/)
- 单轮对话 (/chat/{bot_id}/)
- 多轮对话 (/multichat/)
- 支持文本和语音输入输出
卡片模块 (/api/card/)
- 卡片类别管理
- 卡片批次管理
- 卡片扫描和使用
设备交互模块 (/api/device/)
- 消息发送
- 天气查询
- 实时通信
开发环境配置
- 安装依赖:
pip install -r requirements.txt
- 配置环境变量:
创建
.env文件并设置必要的环境变量:
DEBUG=True
SECRET_KEY=your-secret-key
DATABASE_URL=your-database-url
REDIS_URL=your-redis-url
- 数据库迁移:
python manage.py migrate
- 运行开发服务器:
python manage.py runserver
API 文档访问
- Swagger UI:
/swagger/ - ReDoc:
/redoc/
WebSocket 连接
WebSocket 连接地址:ws://domain/api/device/messages/{user_id}/
消息格式
{
"type": "消息类型",
"message": "消息内容",
"user_id": "用户ID"
}
支持的消息类型
- chat_message: 文本消息
- weather: 天气消息
- sing: 唱歌消息
- dance: 跳舞消息
部署说明
- 设置生产环境变量
- 收集静态文件:
python manage.py collectstatic - 使用 gunicorn 或 uwsgi 作为生产服务器
- 配置 nginx 作为反向代理
安全说明
- API 认证使用 Token 认证
- 文件上传有大小限制
- 敏感操作需要管理员权限
- 用户密码使用 bcrypt 加密存储
贡献指南
- Fork 项目
- 创建特性分支
- 提交更改
- 发起 Pull Request
许可证
本项目采用 MIT 许可证
项目启动(无anaconda)
# python3.9
pip install -r requirements.txt
# 启动ASGI服务器(支持WebSocket)
./run.sh
# 或者直接使用daphne命令
daphne -b 0.0.0.0 -p 8000 fengye_website_backend.asgi:application
项目启动(有anaconda)
conda env create -f environment.yml
conda activate fengye
# 启动ASGI服务器(支持WebSocket)
./run.sh
# 或者直接使用daphne命令
daphne -b 0.0.0.0 -p 8000 fengye_website_backend.asgi:application
注意事项
- 启动前请确保Redis服务已启动,因为WebSocket功能依赖Redis作为后端
- 确保.env文件中的环境变量已正确配置
- 如果使用run.sh脚本,请确保有执行权限:
chmod +x run.sh
项目依赖
django
djangorestframework
mysqlclient
django-redis
django-allauth
django-simpleui
django-phone-verify
requests
cryptography
aliyun-python-sdk-core
aliyun-python-sdk-dysmsapi
dj_rest_auth
python-decouple
openai
drf-yasg
# ali-vi
alibabacloud_facebody20191230
alibabacloud_tea_console
alibabacloud_tea_util
alibabacloud_tea_openapi
# PostgreSQL 适配驱动
psycopg2
django-debug-toolbar
# rosetta po翻译 路径 /rosetta/
django-rosetta
i18n
django-admin makemessages -l en django-admin makemessages -l zh_HAns django-admin compilemessages
apscheduler django-cors-headers
文档
- 项目对接了swagger进行文档管理
- swagger访问地址: http://localhost:8000/swagger/
管理员
admin123 111111
workflow应用设计
- 多租户
- 计费套餐
- 工作流管理
- 放到