修复知识库搜索:表格内容不再被切分,表格section优先返回

- knowledge_base.py: _split_body_by_list_items检测表格区域,不切分表格行
- knowledge_base.py: 添加独立表格section,确保表格内容可被搜索匹配
- knowledge_base.py: 表格兜底策略:最佳文档含操作/支持表格时强制加入并置顶
- knowledge_base.py: reranking后无条件优先返回含操作/支持的表格section
- .gitignore: 添加msg_history.db和诊断脚本到忽略列表
This commit is contained in:
youpaishidifu
2026-08-05 13:22:27 +08:00
parent 271ea21489
commit 4d7017be6a
5 changed files with 162 additions and 14 deletions
+22 -7
View File
@@ -104,10 +104,25 @@ try:
import psutil
_mem = psutil.virtual_memory()
_avail_phys_gb = _mem.available / (1024**3)
if _avail_phys_gb < 3.0:
_used_phys_gb = _mem.used / (1024**3)
_total_phys_gb = _mem.total / (1024**3)
# ⭐ 页面文件百分比 + 总提交量检查:防页面文件94%+时仍尝试CUDA导致冻结
_pagefile_pct = _vm.get("commit_pct", 0) if _vm else 0
_pagefile_used_gb = _total_phys_gb + (_vm.get("total_pagefile_gb", 0) - _vm.get("avail_pagefile_gb", 0)) - _avail_phys_gb if _vm else 0
_commit_gb = _used_phys_gb + (_vm.get("total_pagefile_gb", 0) - _vm.get("avail_pagefile_gb", 0)) if _vm else _used_phys_gb
if _pagefile_pct > 85.0 or _commit_gb > _total_phys_gb * 1.5:
_msg = (
f"系统内存压力过高: 物理剩余{_avail_phys_gb:.1f}GB({_mem.percent}%),"
f"页面文件已用{_pagefile_pct}%,总提交{_commit_gb:.1f}GB>{_total_phys_gb*1.5:.1f}GB阈值"
)
_write_crash_log(f"{datetime.now()} [easyocr_worker] 系统内存压力预检失败: {_msg}")
os.environ["EASYOCR_FORCE_CPU"] = "1"
sys.stderr.write(f"[easyocr_worker] ⚠️ {_msg},降级CPU模式\n")
sys.stderr.flush()
elif _avail_phys_gb < 3.0:
_msg = (
f"物理内存不足: 剩余{_avail_phys_gb:.1f}GB"
f"(总计{_mem.total / (1024**3):.1f}GB,使用{_mem.percent}%)"
f"(总计{_total_phys_gb:.1f}GB,使用{_mem.percent}%)"
f",CUDA加载需要≥3GB物理内存"
)
_write_crash_log(f"{datetime.now()} [easyocr_worker] 物理内存预检失败: {_msg}")
@@ -117,12 +132,12 @@ try:
sys.stderr.flush()
except Exception:
pass # psutil不可用时不阻断
# 检查页面文件:虚拟内存不足时直接退出(无法运行)
if _vm and _vm.get("avail_pagefile_gb", 99) < 2.0:
# ⭐ 检查页面文件:百分比>85% 或 剩余<2GB 时退出(防冻结)
if _vm and (_vm.get("commit_pct", 0) > 85.0 or _vm.get("avail_pagefile_gb", 99) < 2.0):
_msg = (
f"页面文件不足: 剩余{_vm.get('avail_pagefile_gb', '?')}GB"
f"(提交{_vm.get('commit_pct', '?')}%)"
f",CUDA库需要≥2GB连续虚拟地址空间"
f"页面文件不足: 已用{_vm.get('commit_pct', '?')}%"
f"(剩余{_vm.get('avail_pagefile_gb', '?')}GB/{_vm.get('total_pagefile_gb', '?')}GB)"
f",CUDA库需要充足的虚拟地址空间"
)
_write_crash_log(f"{datetime.now()} [easyocr_worker] 页面文件预检失败: {_msg}")
_flush_exit(f"页面文件不足: {_msg}", code=2)