Doc-to-LoRA(D2L)
用超网络把文档即时压入 LLM 权重,让模型直接记住上下文事实,而不是靠长提示词。
- Star 数
- ★ 839
- 最近更新
- 5 个月前
- License
- MIT
- 主语言
- Python
- FA 评分
- 32/100 · 缺口较多
30 秒速览
- 运行形态
- 可在哪里用
- 兼容但需适配
- 费用
- 免费,无需付费服务
- 上手难度
- 高 · 需要较重的基础设施
- 开始前需要
- 典型场景
- 研究人员复现论文中 Doc-to-LoRA 的上下文内化效果,并按 scripts/main_exp 的流程跑训练与评估。
- 不适合
- 只想调用现成 API、不愿管理本地模型权重的团队
- 需要生产级稳定接口(当前 Python API 仅支持非批处理输入)的用户
- 期望开箱即用、无 GPU 或显存预算有限的个人开发者
这个 Agent 能做什么,适合哪些场景?
Doc-to-LoRA 是 Sakana AI 发布的参考实现,研究如何用超网络(hypernetwork)让 LLM 在推理时“即时内化”一段上下文。它的核心不是检索或提示拼接,而是根据文档动态生成 LoRA 权重并注入基础模型,使后续对话受该文档影响。仓库提供安装脚本(基于 uv)、可直接从 Hugging Face 下载的预训练检查点、Python 推理接口、交互式演示,以及主实验与 NIAH(大海捞针)实验的数据准备、训练和评估脚本。代码以 PyTorch 与 Hugging Face 模型加载为基础,入口包括 ModulatedPretrainedModel 和 get_tokenizer。适合研究者复现论文或基于该方法做二次开发,而不是即插即用的生产服务。
仓库实现了 ModulatedPretrainedModel:从检查点(如 trained_d2l/gemma_demo/checkpoint-80000/pytorch_model.bin)加载状态字典并构建模型;调用 model.internalize(doc) 时,模型读取纯文本文档并据此更新自身的 LoRA 参数;随后 model.generate(input_ids=..., max_new_tokens=512) 生成的回答会带上文档中的信息,model.reset() 则清除已内化的内容。分词由 get_tokenizer 依据基础模型名称获取,对话输入通过 tokenizer.apply_chat_template 构造。README 还提供 demo/app.py 交互演示、webui/self_gen_viewer.py 数据查看器,以及 scripts/main_exp 和 scripts/niah 两套实验脚本(数据下载/生成、训练、评估)。
- 研究人员复现论文中 Doc-to-LoRA 的上下文内化效果,并按 scripts/main_exp 的流程跑训练与评估。
- 想验证长文本记忆方案的团队,用演示应用对比“内化文档”与“未内化时模型幻觉”的输出差异。
- 做 NIAH(大海捞针)检索/记忆评测的工程师,使用 scripts/niah 的顺序脚本生成数据、训练和评估。
- 需要让固定基础模型快速吸收少量专有文档、又不愿改动原始权重的开发者,通过 internalize/reset 动态注入与回退。
- 构建合成训练数据的团队,用 webui/self_gen_viewer.py 检查自生成样本质量。
如何安装或部署这个 Agent?
先安装 uv,再运行仓库自带的安装脚本:
curl -LsSf https://astral.sh/uv/install.sh | sh
./install.sh然后登录 Hugging Face 并下载预训练模型到本地 trained_d2l 目录:
uv run huggingface-cli login
uv run huggingface-cli download SakanaAI/doc-to-lora --local-dir trained_d2l --include "*/"如何使用这个 Agent?
在项目根目录下用 Python 调用已下载的检查点:
import torch
from ctx_to_lora.model_loading import get_tokenizer
from ctx_to_lora.modeling.hypernet import ModulatedPretrainedModel
checkpoint_path = "trained_d2l/gemma_demo/checkpoint-80000/pytorch_model.bin"
state_dict = torch.load(checkpoint_path, weights_only=False)
model = ModulatedPretrainedModel.from_state_dict(
state_dict, train=False, use_sequence_packing=False
)
model.reset()
tokenizer = get_tokenizer(model.base_model.name_or_path)
doc = open("data/sakana_wiki.txt", "r").read()
chat = [{"role": "user", "content": "Tell me about Sakana AI."}]
chat_ids = tokenizer.apply_chat_template(
chat,
add_special_tokens=False,
return_attention_mask=False,
add_generation_prompt=True,
return_tensors="pt",
).to(model.device)
model.internalize(doc)
outputs = model.generate(input_ids=chat_ids, max_new_tokens=512)
print(tokenizer.decode(outputs[0]))启动交互式演示:
uv run demo/app.py实验脚本同样用 uv 从仓库根目录运行,例如:
uv run scripts/main_exp/0-download_data.sh
uv run scripts/main_exp/1-train.sh这个 Agent 有哪些优点和局限?
- 以超网络生成 LoRA 的方式内化上下文,绕开长上下文提示,并提供 internalize/reset 的成对接口便于对比与回退。
- 官方提供托管的预训练检查点(SakanaAI/doc-to-lora),无需从头训练即可跑通推理。
- 仓库同时给出主实验与 NIAH 两条完整流水线(数据准备、训练、评估脚本),便于复现论文指标。
- MIT 许可,可自由修改与商用集成;附带交互演示与自生成数据查看器,便于快速观察行为。
- README 明确说明 Python 接口只支持非批处理输入,批量推理需直接改 src/ctx_to_lora/modeling/hypernet.py。
- 当前仅提供 Gemma 演示检查点等预训练模型,换用其他基础模型需要自行训练超网络。
- 本地推理依赖 PyTorch 与模型权重下载,对显存和运行环境有实际要求,安装步骤含多个环节。
- 仓库定位为参考实现,缺少生产部署、服务化与稳定性保证的说明;批量/并发路径文档不足。
这个 Agent 与同类方案有什么区别?
与相关度最高的同类 agent 并排比较关键指标。
| Agent | 源码审查 | 形态 / 费用 | Star | 最近更新 | 主语言 | 完整支持的平台 |
|---|---|---|---|---|---|---|
| Doc-to-LoRA(D2L) 当前 | 32 · 缺口较多 | 代码库 / SDK免费 | ★ 839 | 5 个月前 | Python | — |
| AgileRL 强化学习库 | 71 · 存在缺口 | 代码库 / SDK免费版 + 付费版 | ★ 964 | 今天 | Python | — |
| Deep Researcher Agent | 52 · 缺口较多 | Agent 插件 / 技能免费 + 模型费 | ★ 1.1k | 5 个月前 | Python | Claude Code · OpenAI API · Claude API |
| ChatTTS 对话语音模型 | 66 · 存在缺口 | 网页应用免费 | ★ 40k | 6 个月前 | Python | — |
FollowAgents 如何评估这个 Agent?
查看各维度的扣分理由
证据仅含 README、LICENSE、pyproject.toml。README 的安装步骤通过 curl 管道执行远程脚本(astral.sh/uv/install.sh)并运行本地 install.sh,属于外部副作用但为常见工具链做法,未提供校验或确认环节,故 least_privilege 与 user_confirmation 低分。数据流方面仅说明下载 Hugging Face 模型与读取本地文档,未说明文档内容如何被处理或存储,data_flow_transparency 与 sensitive_data_handling 仅得 1。依赖清单包含大量未固定版本的包(peft、vllm 固定但其余浮动),无锁文件或安全审计说明,dependency_security 得 1。external_effects 与 rollback 仅见 model.reset() 可清除内部化信息,属有限回滚能力,得 1。source_attribution 有论文引用与作者列表,得 2。
README 示例与 pyproject 名称(ctx-to-lora)与仓库名(doc-to-lora)存在不一致,且示例中 torch.load(weights_only=False) 存在加载风险,self_consistency 得 1。依赖可用性仅靠版本约束,无锁文件或环境验证,得 1。失败信息方面源码未提供,README 未描述错误处理,failure_messages 得 0。
README 面向研究者,给出 Python API、交互 demo、实验脚本,但未说明适用场景边界、触发条件或环境要求(GPU、显存),audience_and_scenarios、capability_boundaries、trigger_precision、environment_fit 均仅得 1。
README 结构清晰但信息架构单薄,安装说明依赖外部脚本且未解释 install.sh 内容,install_notes 得 1。命名在仓库名与包名间不一致,naming_stability 得 1。示例有但无 FAQ,examples_and_faq 得 1。known_limitations 仅提及非批处理接口与幻觉提示,得 1。LICENSE 为完整 MIT,得 2。无版本变更记录,versioning_changelog 得 0。维护责任仅见作者与机构,未声明维护承诺,得 1。
输出可用性依赖模型权重与 GPU,README 示例可运行但未验证,output_usability 得 1。边际价值在于超网络内部化事实,但未与基线对比,marginal_value 得 1。成本效益涉及大模型训练与推理,未提供资源估算,cost_benefit 得 1。
有论文链接与引用,claim_traceability 得 1;但无测试或独立复现证据,cross_source_corroboration 得 1;README 中事实与推断(如“without internalized info, the model will halucinate”)未区分,fact_inference_separation 得 1。
- 源码中未见:执行前用户确认开启或自行加上执行前确认;先在沙箱或测试环境跑通,确认行为后再接入真实数据。
- 安装步骤通过 curl 管道执行远程脚本,建议先审查 install.sh 与远程脚本内容。
- 示例使用 torch.load(weights_only=False),加载不可信权重存在代码执行风险。
- 依赖版本大量未固定,缺少锁文件,环境可复现性存疑。
- 仓库名与包名不一致,可能造成导入混淆。
- 未提供资源需求(GPU/显存)与失败处理说明。