F002 平台助手 (NestJS + Next.js + Prisma + SQLite)
【问题】
AdminPage / InquiryPage 品类下拉框显示 414 条 AI 推理文本 (例: '**合金铝线采购** - 这是**电线电缆**的一种'),
源头: CategoryInferenceService 把 MiniMax (M2.7) 响应的整段 markdown/think 文本写到了 ProductCategory.name。
【根因】
原代码对 MiniMax 返回值没有任何后处理,直接信任模型输出。
-prompt 只说'只输出品类名', M2.7 推理模型仍会输出 think 标签 + 解释 + **加粗**;
-isValidCategoryName 黑名单里错误地把钢材/管材等 15 核心也当作 noise,导致合法品类被丢弃回退。
【修复】
1. src/product-category/category-inference.service.ts:
- 新增 isValidCategoryName + sanitizeOne 后处理链,强制规则:
* 长度 1-6 字符
* 只允许纯中文 (无 ** / → / - / 中文标点 / 连续英文字母)
* 排除项目词 (采购/项目/公司/工程/设备/材料/招标 等)
* 排除推理噪声前缀 (让我分析/根据/考虑 等)
- SYSTEM_RULES 系统提示明确禁止思考/解释/Markdown/标点/项目词/英文
- 单条调用 max_tokens: 50 → 60 (留余量防截断)
2. scripts/restore_categories.js: 恢复 27 品类(15核心+12扩展),upsert 幂等,关键词来自 scripts/expand_keywords.js
3. scripts/sanitize_smoke.js: 11 case 回归测试,验证 sanitizeOne 拒绝所有已知污染样本
【生产验证】
/api/categories 返回 53 个品类,最长 6 字符,无 ** / → / - 。PM2 已重启加载新版。
|
||
|---|---|---|
| apps | ||
| docs | ||
| packages/shared | ||
| scripts | ||
| .gitignore | ||
| .prettierrc | ||
| AGENTS.md | ||
| docker-compose.yml | ||
| image_001.jpg | ||
| package-lock.json | ||
| package.json | ||
| 线索管理操作白皮书.html | ||