DyPRAG
DyPRAG:用轻量级参数翻译器将文档知识「长进」LLM权重,测试时即插即用提升问答准确率
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
DyPRAG:用轻量级参数翻译器将文档知识「长进」LLM权重,测试时即插即用提升问答准确率
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你问大模型一个需要专业知识的问题,比如医学诊断、法律咨询,它要么一本正经地「幻觉」,要么需要你额外提供一堆参考文档。而研究者们一直在思考:能不能让模型在回答时「想起来」更多知识,但又不用每次都翻来覆去地检索?
来自学术圈的 Trae1ounG 等研究者提出了一个叫 DyPRAG(Dynamic Parametric Retrieval Augmented Generation) 的框架,相关论文已发表在 arXiv(2503.23895),并在 SIGIR 2025 会议上进行了 Tutorial 分享。它的核心思路是:把文档「翻译」成模型参数的一部分,让知识直接「内化」进模型权重,而不是堆积在 Prompt 里。

图1:DyPRAG 概览 —— 文档通过参数翻译器注入模型参数,测试时直接调用注入的知识
要理解 DyPRAG 为什么值得关注,先来看看现有 RAG 方案的痛点。
传统 RAG(检索增强生成) 的标准流程是:用户提问 → 检索相关文档 → 将文档塞入 Prompt → 模型生成回答。这套方案有效,但有几个绕不开的问题:
而 Parametric RAG(参数化 RAG) 方向的思路更进一步:既然 LLM 有大量的「参数知识」(训练时学到的事实),能不能把外部文档也变成参数?这个方向的核心是训练一个「参数翻译器」,将文档内容映射为模型权重中的增量修改。
但早期参数化 RAG 的问题是:训练成本高、泛化能力差 —— 针对每个文档集单独训练,换一个领域就要重新来过。
DyPRAG 的创新在于,它提出了一个动态的、轻量级的参数翻译器,可以跨领域泛化,真正实现「plug-and-play」。

图2:DyPRAG 方法框架 —— Stage 1 数据增强 → Stage 2 参数翻译器训练 → Stage 3 推理时注入
DyPRAG 的实现分为三个阶段:
这一阶段使用 Elasticsearch + FAISS 构建检索系统,从 Wikipedia 等知识库中检索相关段落作为背景文档。核心脚本是 prep_elastic.py,负责将文档索引到本地 Elasticsearch(默认 http://localhost:9200),支持 Wikipedia、2WikiMultiHopQA、HotpotQA 等多个知识密集型数据集。
这里有个技术细节值得注意:DyPRAG 用的是 Lexical Search(Elasticsearch) 而非向量检索。对于知识密集型问答,精确的词汇匹配往往比语义相似度更可靠。
这是 DyPRAG 的核心创新。研究者设计了一个 Parameter Translator(参数翻译器),本质上是一个 MLP(多层感知机),负责建模「文档到参数」的映射函数。
关键设计点:
训练配置通过 configs/DyPRAG/ 下的 shell 脚本管理,支持多数据集联合训练。代码在 src/train_dyprag.py 中实现了完整的训练循环,包括梯度累积、checkpoint 保存、多数据集采样等。
推理时,DyPRAG 加载预训练好的参数翻译器,对用户输入相关的文档进行即时翻译,直接修改 LLM 的 FFN 权重。这相当于在推理时「临时更新」模型的知识,无需重新训练。
推理脚本 src/inference_dyprag.py 展示了完整的推理流程:加载基础模型 → 加载 LoRA adapter → 加载参数翻译器 → 对每个问题执行文档检索 → 注入参数 → 生成回答。
DyPRAG 的代码库结构清晰,是典型的学术开源风格:
| 模块 | 文件 | 说明 |
|---|---|---|
| 检索 | src/retrieve/retriever.py + beir | 基于 BEIR 框架的检索封装 |
| 训练 | src/train_dyprag.py + projector.py | 参数翻译器训练 |
| 推理 | src/inference_dyprag.py | 三阶段推理入口 |
| 工具 | src/utils.py | 模型加载、数据处理、评估指标 |
| 配置 | configs/DyPRAG/*.sh | 各阶段 shell 脚本入口 |
技术栈方面:PyTorch 2.1 + Transformers 4.49 + PEFT(LoRA)+ Elasticsearch 8.x + FAISS-CPU。代码使用了 safetensors 格式存储模型权重,HuggingFace 生态集成较好。
评分(主观参考):
test.pyDyPRAG 定位为研究工具,不适合普通用户直接部署:
requirement.sh 管理对于 AI 研究者而言,建议的工作流程是:
requirement.sh 安装 Python 依赖对于普通爱好者,可以直接使用项目提供的 预训练参数翻译器权重(Google Drive),或者通过 DeepWiki 在线浏览项目文档。
DyPRAG 目前的局限也值得客观看待:
1. 知识更新有延迟:参数翻译器一旦训练完成,新的知识无法即时注入。每次文档更新都需要重新训练翻译器,这与动态 RAG 的「即时检索」形成对比。
2. 领域泛化仍有挑战:论文中的实验主要在知识问答数据集上(PopQA、2WikiMultiHopQA、HotpotQA),对于更开放式的写作、对话场景效果有待验证。
3. 训练成本不可忽视:虽然参数翻译器比全量微调轻量,但训练仍然需要多卡 GPU 环境,不是普通研究者能轻易复现的。
4. 文档不够完整:README 信息有限,核心实现细节需要阅读论文才能理解。对于想复现的研究者,代码注释不足是一个障碍。
DyPRAG 属于 RAG 演进路径上的一个重要节点。从最早的朴素 RAG → 迭代 RAG → 代理式 RAG,到今天的参数化 RAG,学术界在持续探索「如何让大模型更好地利用外部知识」。
DyPRAG 的意义在于,它证明了文档到参数的映射是可行的,且通过动态翻译器实现了部分泛化能力。这条路线如果与更高效的训练方法结合(如在线学习、增量训练),未来有可能成为 RAG 的有力补充。
另一个值得关注的信号是,DyPRAG 的参数翻译器权重仅约几 MB(相比全量模型几十 GB),这意味着模型知识压缩是可行的方向。如果能将大量垂直领域知识压缩进轻量级翻译器,配合小模型使用,将大幅降低推理成本。
目前,该方向已有学术跟进(SIGIR 2025 开设了「Dynamic and Parametric RAG」Tutorial),预计会成为未来 1-2 年 IR 和 NLP 交叉领域的研究热点。
项目信息:Trae1ounG/DyPRAG · Python · Apache-2.0 License
GitHub:https://github.com/Trae1ounG/DyPRAG
论文:arXiv 2503.23895 · Cited by 27
在线体验:DeepWiki