Commit Graph

9 Commits

Author SHA1 Message Date
lacerate551
184511f4ec fix(server-release): 从 main 同步表格图片修复
纯逻辑同步,不涉及 API 格式变更:

1. chat_routes.py:
   - 新增 _replace_table_image_placeholders(): 将答案中 [图片]
     和 [N张图片] 占位符替换为 ![id](url) markdown 图片语法
   - _filter_images_by_answer: 补充 [图片]/![ 图片意图检测
   - import re 提升到模块级

2. manager.py:
   - 跨页表格 HTML 合并修复: BS 解析后追加 <tr> 行(原来直接
     拼接两个 <table> 导致第二表行被 html_table_to_markdown 丢弃)
   - 表头跳过逻辑改为对比第一行
   - 新增 text_level/bbox/table_type/table_nest_level/sub_type 元数据
2026-06-21 00:54:19 +08:00
lacerate551
b5bcb3c941 fix: detect table-embedded images as figure intent in post-filter 2026-06-20 22:57:43 +08:00
lacerate551
3a3627f73c fix(server-release): 修复 select_images P1.5 表格关联图片 UnboundLocalError
P1.5 处理表格 images_json 时引用了 P1 块内的变量 s,
但两者在独立的 if 分支中,s 未定义导致 UnboundLocalError。
改用 ctx.get("score", 0) 获取当前切片分数。
2026-06-20 22:10:33 +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
87f3fae1aa feat(server-release): 从 main 迁移检索增强(章节聚类提升 + BM25 追加修复)
从 main 分支选择性提取检索质量增强代码,不含端口/API 配置变更:

- knowledge/base.py: BM25Index.add_documents 改为追加+去重模式,
  修复多文件上传后仅保留最后文件切片的覆盖 bug
- core/engine.py: 章节聚类提升(_section_cluster_boost)、词法匹配
  辅助种子资格(_chunk_lexical_score)、扩展参数优化
  (CONTEXT_EXPANSION_AFTER 5→8, MAX_EXPANDED_NEIGHBORS 4→8)
- api/chat_routes.py: 路由层词法匹配救援(_rescue_lexical_match)、
  章节聚类救援安全网(_rescue_section_cluster)

部署后需重建 BM25 索引:KnowledgeBaseManager().rebuild_bm25_index('public_kb')
2026-06-17 17:49:36 +08:00
lacerate551
99f5cf519e feat(server-release): 从 main 迁移 RAG 检索质量增强
- 新增 5 个辅助函数:_strip_semantic_prefix(语义前缀清理)、
  _process_table_doc(表格文档处理)、_section_similarity(章节相似度)、
  _rescue_table_chunks(表格救援)、_filter_images_by_answer(图片后置过滤)
- 替换 _order_text_contexts_for_prompt(添加表格保护逻辑:passing_sections + table_floor)
- 替换 _build_context_with_budget(集成 _process_table_doc + section headers)
- rag() 函数添加 5 个调用点:语义缓存检查/写入、strip_semantic_prefix、
  rescue_table_chunks、filter_images_by_answer
- 新增 retrieval_query 变量(使用改写后的查询替代原始 message)
- 不涉及任何 API 端点变更
2026-06-10 13:54:38 +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
cb75b9b274 fix(boundary): 修复多库边界问题、版本管理及删除清理
多库检索与存储修复:
- RRF 融合去重改用 (collection, chunk_id) 复合键,修复同名文件结果被吞
- DocStore 存储路径加 collection 前缀,修复跨库同名切片数据覆盖
- search_multiple 去重改用复合键
- chunk_id 解析改用 rsplit 兼容下划线文件名

上传与版本管理修复:
- 同名文件上传改为覆盖模式,自动清理旧切片
- 修复首次上传不创建版本记录
- 修复覆盖上传版本号回退到 v1
- sync ADDED 分支改用动态版本号生成
- _generate_version_id 改为基于全部版本递增
- 废止/恢复操作同步 SQLite 版本记录
- mark_document_as_superseded 改为仅更新 SQLite

删除清理修复:
- 删除文档时同步清理 SQLite 版本记录和变更日志
- 删除向量库时同步清理该库所有版本记录
- cleanup 改为清理 SQLite 记录而非 ChromaDB

测试:
- test_version_management.py: 27 条版本管理单元测试
- test_edge_cases.py: 28 条边界用例测试
- test_upload_dedup.py: 5 条上传去重测试
- e2e_risk_test.py: 27 条端到端风险测试

文档:
- 新增风险边界问题修复注意事项.md(面向后端的对接文档)
- 新增向量库边界风险分析.md
- 更新多篇现有文档
2026-06-04 23:58:44 +08:00
lacerate551
100d1a06eb init: RAG 知识库服务初始提交
- 后端 API(Flask + Gunicorn)
- RAG 引擎(混合检索 + 云端 Reranker + 引用溯源)
- 文档解析(MinerU + 多格式支持)
- Docker 生产部署配置
- 排除前端项目、敏感配置、模型文件
2026-06-04 17:35:27 +08:00