回归问题:P1.3 重构时 gate_classify 的 off_topic 门用了 scene_registry 的 35 个 signal_keywords,丢掉了 legacy 的 73 个关键词(城市名/时间词/金额词/ 交通词等),导致'下周去上海''昨天打车30块'等正常业务输入被误判 off_topic, 根本进不了 LLM。 修复:gate_classify 的 off_topic 门改用成熟的 _classify_irrelevant_input (94 词 + registry 信号词 + greeting/meaningless 细分),scene_registry 的 signal_keywords 只用于规则匹配门(CHOICE 路由)。删除残缺的 _matches_any_signal。 验证:76 passed;实测'下周去上海'→llm_function_call、'昨天打车30块'→ llm_function_call、'你好'→off_topic(正确拦截)。
Server
后端已按 FastAPI + PostgreSQL + SQLAlchemy + Alembic 起好基础工程。
为什么先选 PostgreSQL
这个项目是报销、审批、员工、流程、审计记录为主,核心特点是:
- 强事务
- 多表关联明显
- 审批流和审计日志需要一致性
- 后续大概率要做复杂查询、统计和条件筛选
这类系统优先选关系型数据库更合适,PostgreSQL 是当前默认推荐。
Redis 要不要现在上
现在 不是必须。
先不把 Redis 作为启动前置,原因很直接:
- 当前第一阶段先把核心业务表、接口、权限、审批流跑通
- 如果一开始就把 Redis 绑死,会增加部署和排障复杂度
Redis 更适合后面这些场景:
- 登录态 / token 黑名单
- 热点数据缓存
- 限流
- 分布式锁
- 消息队列 / 后台任务
所以现在的策略是:
- 主数据库:
PostgreSQL - Redis:
可选能力,配置已预留,但不是必需依赖
目录
src/app/:应用代码alembic/:数据库迁移tests/:测试
启动
- 创建虚拟环境并安装依赖
cd server
python -m venv .venv
.venv\\Scripts\\activate
pip install -e .[dev]
- 在项目根目录准备环境变量
copy ..\\.env.example ..\\.env
- 启动服务
uvicorn app.main:app --reload --app-dir src
迁移
alembic upgrade head