minimind/THREEGPP_AGENT.md

5.7 KiB
Raw Blame History

3GPP 提案阅读助手

读取本地 TDoc 元数据和 DOCX 原文,再调用 Qwen2.5-3B-Instruct 生成带来源编号的中文回答。MiniMind 的模型实现和训练代码是另一条独立路径。

启动

在项目目录下运行:

.\.venv\Scripts\python.exe -m streamlit run app_web.py

默认选中“只查原文,不调用模型”。点击“比较两篇 XR 提案”,再点击检索按钮,可查看文件、段落位置和原文片段;取消“只查原文”后才加载模型生成回答。

现有虚拟环境已含所需依赖。新环境参考 requirements-3gpp.txt,按硬件安装对应的 PyTorch CUDA 版本。检索不需要下载模型。

默认模型位置是当前用户目录下的 .cache/modelscope/hub/models/Qwen/Qwen2___5-3B-Instruct。也可以在启动前指定:

$env:THREEGPP_MODEL_DIR = 'D:\models\Qwen2.5-3B-Instruct'
$env:THREEGPP_LORA_DIR = 'D:\models\ran2_adapter'

仅从本地加载模型,不自动下载。默认禁用现有 LoRA,网页可勾选以比较。本轮少量实测中,现有适配器出现了引用缺失和无依据的流程描述,不据此判断总体优劣。其训练数据质量和专业效果仍需独立核实。

已改进的行为

  • 按编号检索时保留所有请求的提案,最多 6 篇。比较两篇时不再只保留第一篇。
  • 无编号时按标题、提交单位和会议元数据进行 BM25 词项排序,并支持少量明确列出的中英文查询别名。这不是向量检索,也不是整个原文库的全文检索。
  • 在候选 DOCX 正文中选择相关片段,每篇最多两个片段,每片段最多 900 字符。每个片段有来源编号、文件路径和 XML 段落范围。段落编号含空段和表格内段落,不是 Word 页码。
  • 提取 Word 可见文本,规范化空白。未覆盖图片、公式对象、页眉页脚、脚注和外部附件。所选片段不一定足以概括整篇提案。
  • 不再把训练集的助手回答当作参考原文。元数据、旧版 .doc 或读取失败都不算正文证据。
  • 任何明确询问的提案缺少可读原文时,展示缺失情况并停止生成内容分析;已找到的其他片段仍可查看。补充材料会标为未经核实,目前不能替代缺失的原文。
  • 要求区分提案主张、推断与资料不足,要求标注 [S1] 等来源。程序检测不存在的来源编号和遗漏引用,未判断引用是否真正支持结论。
  • 去掉“协议合规率”和旧综合分的准确率暗示。网页示例改为实际存在且能读取的 XR、NTN 文档,不预先编造提案内容。
  • 首次需要生成时才加载模型;支持 CUDA 4-bit、CPU 全精度回退、串行生成、异常传递和生成超时。CPU 路径未在本轮执行,其内存和耗时可能很大。

生成超时从完成模型加载后开始计算,默认 120 秒。程序能请求停止并结束等待,但不能强制中断卡住的 CUDA 操作;后台未结束时继续拒绝新请求。输入预算最多 4096 token,超过时提示缩短材料,不会静默截去第二篇提案;最多生成 2048 token。

代码入口

文件 作用
agent_core.py 保持已有导入名称的入口
rag_evidence.py 编号识别、BM25、DOCX 提取、来源记录
agent_runtime.py 模型加载、流式生成、证据不足处理、引用格式检查
app_web.py Streamlit 页面及 Markdown/JSON 导出
server_demo.py 本地 FastAPI 接口
tests/test_3gpp_agent.py 行为回归及生成异常测试

验证

.\.venv\Scripts\python.exe -m unittest discover -s tests -v
.\.venv\Scripts\python.exe eval_agent_retrieval.py
.\.venv\Scripts\python.exe scripts/check_agent_interfaces.py
.\.venv\Scripts\python.exe scripts/check_3gpp_generation.py --compare --max-tokens 384

检索检查在 8 个固定本地案例上比较本轮备份的旧检索器与当前代码,检查原文覆盖及资料不足时是否停止生成。它不是独立抽样的质量评测,不能用通过比例宣传专业准确率。报告保存至 output/agent_retrieval_regression.json。

真实生成检查保存至 output/agent_generation_smoke.json,保留问题、来源、输出、引用检查和耗时。生成成功和引用格式通过都不代表事实正确,需要逐条对照原文才能比较原模型和 LoRA 的实际质量。

网页的首段文本时间从收到问题开始,包含检索和可能发生的模型加载,不是纯模型首 token 延迟。冷启动和热启动耗时不能直接混作性能提升。

HTTP 接口

.\.venv\Scripts\python.exe server_demo.py
  • GET /health:服务状态及模型是否已加载。
  • POST /v1/proposals/analyze:SSE 返回提案检索、来源、生成内容、完成或错误事件。请求示例:{"question":"对比 R2-2408133 和 R2-2408134","retrieval_only":true}。
  • POST /v1/chat/completions:基础聊天兼容接口,支持 stream=true/false。此接口不检索原文;文档分析使用上一个接口。未实现完整 OpenAI 功能,如工具调用、usage、鉴权、finish_reason 的精细区分。

默认只监听 127.0.0.1:8000。

评测边界

后续应固定一组具有完整原文的问题,由懂协议的人标注所需段落和可验证结论。在相同来源及生成预算下,比较“原模型+检索”和“LoRA+检索”的事实错误数、原文支持情况、资料不足识别及耗时。现有字符相似度、术语数量和结构词得分不承担这项判断。

本轮修改前的三个入口文件保存在 output/agent_upgrade_backup_20261021/。本轮未修改已有模型权重、训练数据或 MiniMind 代码。