lacerate551
6d5a4b5b5e
feat: 性能插桩、缓存清除端点、LLM top_p 与 JSON 强制输出
...
- chat_routes.py: 新增 8 阶段性能计时(stages_ms)+ SSE 输出
- sync_routes.py: 新增 POST /cache/clear 缓存清除端点
- engine.py: LLM 调用增加 top_p 参数
- intent_analyzer.py: response_format 加配置开关(INTENT_RESPONSE_FORMAT)
2026-06-21 20:25:12 +08:00
lacerate551
0f339a0998
fix: 缓存系统全面加固 — 版本失效 + 死代码清理 + 防御性改进
...
基于缓存审查报告 + Claude Code 交叉审查的反馈:
P0+ 语义缓存版本失效:
- sync.py: 文档变更后清空语义缓存,防止返回过时的 images/sources
- document_routes.py: 删除文档时同步清理缓存
- kb_routes.py: 删除向量库时同步清理缓存
P1.5 cache_type 包含式校验:
- intent_analyzer.py: != "rag_answer" 改为 == "intent_analysis"
P2+ Rerank Cache 版本失效:
- cache.py: increment_kb_version 时同时清空 rerank_cache
P1+P6 死代码清理:
- agentic.py: 移除未使用的 SemanticCache 实例和相关导入
- agentic_base.py: 移除未使用的语义缓存配置导入
- cache.py: 移除 _compute_doc_hash 和未使用的 doc_ids 参数
- engine.py: 移除 set_query_result 调用中的 doc_ids 参数
P7 缓存质量门槛:
- config.py: CACHE_MIN_SCORE 从 0.0 改为 0.3
2026-06-21 16:08:58 +08:00
lacerate551
21470ed28c
fix: 语义缓存误命中修复 — 二次 Jaccard 验证 + query-only embedding
...
问题: 同会话中语义相近但不同的问题(如"总体要求"vs"工作流程和规范要求")
会错误命中缓存,返回上一个问题的答案。
修复:
- intent_analyzer: 缓存 embedding 改用 query-only(不含历史),避免上下文污染
- intent_analyzer + chat_routes: 缓存读取增加字符级 Jaccard 二次验证(阈值0.5)
- 缓存写入存储 _raw_query 供二次验证比对
- 兼容旧缓存条目(无 _raw_query 时放行)
2026-06-21 15:37:37 +08:00
lacerate551
258be54df7
sync(server-release): 从 main 同步逻辑改动(不含 API 格式变更)
...
同步内容:
- knowledge/manager.py: VLM max_tokens 512→2048 + reasoning_content fallback
- services/feedback.py: FAQ max_tokens 200→512
- services/session.py: 消息排序增加 id DESC 次级排序
- knowledge/image_cleanup.py: 新增图片/VLM缓存孤儿文件清理模块
- knowledge/collection.py: 集合删除时清理孤儿文件 + list_collections 磁盘扫描策略
- knowledge/document.py: 文档删除时清理孤儿文件
- api/chat_routes.py: 新增 _rescue_bm25_divergence 函数(BM25-CE分歧救援)
- core/intent_analyzer.py: 使用 get_intent_client 专用客户端 + 移除短追问缓存跳过逻辑
- cleanup_orphans.py: 独立孤儿文件清理脚本
2026-06-21 14:49:46 +08:00
lacerate551
5bc86a7c1f
fix: skip semantic cache for short follow-up queries to avoid false hits
...
Short follow-ups like "B3类呢?" are too context-dependent for embedding
similarity matching. Only exact-match cache is used when history exists
and query is under 20 chars.
2026-06-20 22:35:29 +08:00
lacerate551
8f72ac5da4
feat: sync core logic from main (cache fix, intent analyzer, engine improvements)
...
- core/cache.py: fix GET/SET key mismatch, use coarse-grained kb_version keys
- core/intent_analyzer.py: add cache_type tagging, enhance history parsing
- core/engine.py: adaptive topk score source fix, BM25 top-3 preservation, section cluster boost
2026-06-20 22:23:27 +08:00
lacerate551
8f75c51c59
feat(server-release): 从 main 同步子章节级图片过滤 + VLM/LLM 推理模型兼容
...
- chat_routes: 子章节级图片过滤(section_path 传递、叶子节点匹配、发散检测)
- chat_routes: _FIGURE_ANSWER_KEYWORDS 移除单字"图""表",正则图号兜底
- lazy_enhance: defer_chromadb 参数避免后台线程 SQLite 写锁竞争
- lazy_enhance: 缓存内容校验(>=5字)和空结果保护
- llm_utils: reasoning_content 兜底(剥离 <think> 标签)+ 流式 reasoning 支持
- intent_analyzer: SYSTEM_PROMPT 增加追问补全逻辑
- manager: VLM 描述/摘要 max_tokens 提升至 2048 + Windows fcntl 兼容
不改变端口、API 接口和响应数据字段。
2026-06-20 20:27:01 +08:00
lacerate551
90b915232a
fix(security): 代码审查安全加固 — 三批次修复(6H/13M/12L)
...
第一批(快速修复):
- H6: main.py --debug 默认值 True→False,防止 Werkzeug RCE
- M2+M3: /search 增加 validate_query + top_k 范围限制(1-50)
- M4: context_count 范围限制(0-10) + 异常捕获
- L3: assert → raise RuntimeError(生产环境 API Key 检查)
- H1: SSE 错误事件移除 traceback 字段
第二批(安全加固):
- H2+H3: 文档接口路径遍历 realpath 校验 + 文件类型/大小限制
- H4+H5: 批量上传文件大小检查
- M6: LIKE 查询通配符转义
- M1: 37 处 str(e) 异常信息统一脱敏(6 文件)
- M5: CORS 生产环境限制来源
- M7: SESSION_MANAGER None 保护(503)
- M11: subprocess 参数注入防护(白名单 + -- 分隔符)
第三批(架构改进):
- M8+M9: 提取 JSON 解析共享工具(extract_json_object/list)
- M10: Prompt 注入检测防御(prompt_guard.py)
- M12: 解析器文件大小限制(Excel 50MB/TXT 20MB/PDF 100MB)
- M13: 全局单例竞态条件双重检查锁定(engine/bm25/intent_analyzer)
2026-06-05 15:26:32 +08:00
lacerate551
100d1a06eb
init: RAG 知识库服务初始提交
...
- 后端 API(Flask + Gunicorn)
- RAG 引擎(混合检索 + 云端 Reranker + 引用溯源)
- 文档解析(MinerU + 多格式支持)
- Docker 生产部署配置
- 排除前端项目、敏感配置、模型文件
2026-06-04 17:35:27 +08:00