MiniCPM4-Survey 综述论文自动生成实战:Plan-Retrieve-Write 多智能体框架的部署、推理与源码解析
MiniCPM4-Survey 综述论文自动生成实战Plan-Retrieve-Write 多智能体框架的部署、推理与源码解析【免费下载链接】MiniCPMMiniCPM5: SOTA on-device LLMs, small yet powerful.项目地址: https://gitcode.com/GitHub_Trending/mi/MiniCPM本篇技术指南以开源仓库中的 demo/minicpm4/SurveyGeneration/README-en.md 为骨架围绕 MiniCPM4-Survey——一个基于 MiniCPM4-8B 构建的、能够自主生成可信长篇综述论文Survey的智能体模型——系统讲解其「规划—检索—写作」三阶段生成框架的完整落地路径从模型与数据集下载、检索库构建到 vLLM 推理、FAISS 检索服务与前端交互的启动流程并深入源码解析多轮 Agent 对话的提示词协议、结构化输出解析与引用管理实现。读完本文你将能够在本地完整运行一套「输入一个研究主题 → 自动输出带引用的 Markdown 综述论文」的端到端管线并理解其训练阶段的数据构造与奖励设计原理。一、MiniCPM4-Survey 是什么MiniCPM4-Survey 是由 THUNLP、中国人民大学与 ModelBest 联合开发并开源的综述论文生成智能体构建于 80 亿参数的 MiniCPM4 基座之上。它接收用户的查询Query作为输入通过多轮 Agent 交互自主完成一篇带引用、结构完整、内容可信的长篇综述论文。其核心技术特色集中在四个方面与 demo/minicpm4/SurveyGeneration 目录中的实现一一对应Plan-Retrieve-Write 综述生成框架多智能体生成框架包含三个核心阶段——规划定义综述整体结构、检索生成合适的检索关键词、写作综合检索到的信息生成章节级连贯内容高质量数据集构建收集并处理大量专家撰写的综述论文以构造高质量训练集同时收集海量研究论文构建检索数据库多方面奖励设计从结构structure、内容content、引用citations三个维度设计奖励函数用于强化学习训练阶段评估综述质量多步强化学习训练策略提出 Context Manager 在促进高效推理的同时保留关键信息并构造并行环境Parallel Environment维持高效的强化学习训练循环。从仓库目录结构看demo/minicpm4/SurveyGeneration/src 下包含三组核心代码preprocess/数据预处理与检索库构建、retriever/FAISS 检索服务、generation/vLLM 推理与多轮状态管理scripts/提供无前端与带前端两种启动方式frontend/则是一个基于 Vite React 的演示界面。二、准备工作模型下载与运行环境2.1 下载模型权重需要准备两个模型MiniCPM4-Survey生成模型本体放置在model/MiniCPM4-Survey目录MiniCPM-Embedding-Light官方推荐的 Embedding 模型用于将查询与论文文本编码为向量放置在model/MiniCPM-Embedding-Light目录。需要注意的是从 src/retriever/retriever.py 与 src/preprocess/build_index.py 的源码可见Embedding 模型默认以openbmb/MiniCPM-Embedding-Light的远程标识加载并以flash_attention_2注意力实现、torch.float16精度部署在 CUDA 上因此需要具备 NVIDIA GPU 环境。2.2 安装依赖项目依赖清单见 demo/minicpm4/SurveyGeneration/requirements.txt核心组件包括依赖用途openaiOpenAI 风格 API 调用vllm高吞吐 LLM 推理引擎生成模型jsonlines逐行读写论文 JSONL 数据faiss-cpu向量索引注释中提示可替换为faiss-gpufastapi/uvicorn检索服务与推理服务 API 框架yarlaiohttp 依赖的 URL 解析库三、检索库构建从 ArXiv 原始数据到 FAISS 索引综述生成依赖一个本地论文检索库。官方流程是从 Kaggle 下载 Cornell University 的 ArXiv 论文数据集然后依次执行数据清洗与索引构建两步。3.1 下载并解压论文数据curl -L -o ~/Downloads/arxiv.zip\ https://www.kaggle.com/api/v1/datasets/download/Cornell-University/arxiv unzip ~/Downloads/arxiv.zip -d . mkdir data解压后会得到arxiv-metadata-oai-snapshot.json这类原始元数据快照文件。3.2 数据预处理data_process.py执行python ./src/preprocess/data_process.py查看 src/preprocess/data_process.py 的实现它逐行读取./data/arxiv-metadata-oai-snapshot.json将每篇论文转换为统一结构并写入./data/arxiv.jsonlnew_item { bibkey: farxivid{item[id]}, text: fTitle: {item[title]}\nAbstract: {item[abstract]}\nAuthors: {item[authors]}, }这里的关键设计是bibkey每篇论文以arxivid ArXiv ID 作为全局唯一标识例如arxivid1234.5678。后续生成的综述正文中模型以\cite{arxivid...}的形式引用文献检索服务也以 bibkey 作为论文主键返回文本因此 bibkey 是贯穿「检索 → 写作 → 引用渲染」全链路的核心键。3.3 构建 FAISS 索引build_index.py执行mkdir index python ./src/preprocess/build_index.pysrc/preprocess/build_index.py 完成以下工作读取./data/arxiv.jsonl取出全部bibkey与text用 MiniCPM-Embedding-Light 的encode_corpus接口对每篇论文文本编码得到稠密向量max_length1024创建内积索引faiss.IndexFlatIP通过IndexIDMap将整型 ID 与向量绑定将str_int_ids映射字符串 bibkey ↔ 整型 ID写入./index/str_int_ids_abstract.csv将索引写入./index/index_abstract.faiss。索引构建全程在 GPU 上完成faiss.index_cpu_to_all_gpus最终落盘为 CPU 索引文件供检索服务加载。四、启动检索服务与模型推理4.1 启动检索服务retriever.pypython ./src/retriever.pysrc/retriever/retriever.py 是一个 FastAPI 服务默认端口 8400其启动时完成加载 MiniCPM-Embedding-Light 到 GPU读取./index/index_abstract.faiss并分片复制到全部 GPUfaiss.index_cpu_to_all_gpus开启shard与useFloat16加载./data/arxiv.jsonl构建paper_dictbibkey → 文本以及index_dict整型 ID → 字符串 bibkey。它对外暴露两个核心接口POST /search_text_batch接收模型输出的tool_calls列表与topk根据工具名分发——search_engine调用检索finalize直接标记任务结束POST /queries批量查询接口QueryRequest。检索路径call_search_engine的实现要点将工具参数中的 query 列表经model.encode_querymax_length512编码对每个 query 在 FAISS 中取 topk 候选随后使用RRFReciprocal Rank Fusion融合多路结果——对每个候选按1/(rank1)累加得分并排序最终返回前topk篇论文的 bibkey 与完整文本截断到 8192 token。返回的每篇论文文本格式为bibkey: arxividXXXX.XXXXX Title: ... Abstract: ... Authors: ...4.2 无前端推理run.shpython ./src/retriever.py # 终端 1检索服务 bash ./scripts/run.sh # 终端 2生成服务查看 scripts/run.sh 的内容它实际调用python ./src/generation/run.py \ --model_path openbmb/MiniCPM4-Survey \ --query Enter your instruction here, example: Please design a survey that assesses the performance of language processing systems on unseen data to measure their robustness in natural language processing tasks. \ --output_file test.md即调用 src/generation/run.py其命令行参数包括参数默认值说明--model_path必填生成模型路径或 Hugging Face 模型标识--query必填综述主题指令--output_file必填输出 Markdown 文件路径--retriver_urlhttp://localhost:8400检索服务地址--portNone若指定则以 Web 服务模式启动供前端调用4.3 带前端推理run_with_frontend.sh若希望获得可视化交互界面执行python ./src/retriever.py bash ./scripts/run_with_frontend.sh cd frontend/minicpm4-survey npm install npm run dev其中 scripts/run_with_frontend.sh 在run.py基础上追加了--port 8001使生成服务以 FastAPI 模式启动。随后在浏览器访问http://localhost:5173即可使用前端界面前端为 Vite React 应用源码位于 demo/minicpm4/SurveyGeneration/frontend/minicpm4-survey/src。前端模式下的实时推送机制从 run.py 可见生成服务暴露WebSocket /ws端点维护active_connections集合在多轮生成过程中每完成一步章节更新就将当前综述的 Markdown、本轮搜索关键词、当前/下一步思考、以及检索论文摘要通过post_to_frontend推送到前端实现「边生成边展示」的流式体验。前端还可通过POST /generate_survey接口提交查询并触发完整生成流程。五、Plan-Retrieve-Write 框架源码剖析5.1 多轮 Agent 循环rollout_with_env生成的核心逻辑在 run.py 的rollout_with_env中其流程为vLLM 引擎初始化OriginalvLLMRollout加载模型采样参数为temperature0.7, top_p0.8, repetition_penalty1.05, top_k20, max_tokens2748gpu_memory_utilization0.95状态管理BufferManager_V2为每个查询维护state.current_survey结构化综述、trajectory多轮轨迹与history_messages循环直至 max_turnsbuild_prompt_for_generator构造提示词 → vLLM 生成响应 →parse_generator_response解析结构化输出 → 将 tool_call 发送给检索服务获取反馈 →update_trajectory更新综述状态与轨迹前两步step 2检索时topk设为 20之后使用默认值结束汇总将轨迹中的current_survey转换为 Markdown 文本并写入--output_file指定的文件。5.2 Agent 对话协议提示词与输出格式系统提示词定义在 src/generation/prompts.py 中。模型每一轮需要按固定格式输出两部分(1) Current Update更新当前综述think 思考如何根据检索信息完成当前计划 /think answer {update: section-1/subsction-1, content: 段落内容用\cite{}标注引用} /answerupdate字段支持title、abstract、introduction、section-1、section-1/subsection-1可到 subsubsection 三级、conclusion等位置若认为信息不足可输出{}跳过本轮更新。(2) Next Plan下一步行动通过search_engine与finalize两个工具驱动检索循环think 下一步需要更新哪部分、需要查询什么信息 /think tool_call {name: search_engine, arguments: {query: [keyword-1, keyword-2]}} /tool_call首轮用户提示词USER_PROMPT_v0_0424_BUFFER强制模型先检索后续轮次USER_PROMPT_0415_BUFFER则注入当前综述摘要、上一轮思考与工具调用、以及检索到的论文摘要驱动模型迭代写作。5.3 结构化解析与格式校验src/generation/buffer.py 中的parse_generator_response负责从原始响应中正则提取think、answer、tool_call三块内容并做严格的 JSON 与语义校验answer中的update位置须合法parse_update_pos解析三级章节路径若update plan则content必须是结构化的规划字典必须包含abstract、introduction、conclusion、sections、title五个键每个 section 须含plan与title并明确禁止章节名为 Methodology处于开发中状态tool_call的工具名只能是search_engine或finalize且search_engine的query必须是字符串数组响应中不允许出现中文字符通过正则[\u4e00-\u9fa5]检测否则判定解析失败。只有同时包含合法answer与tool_call且无中文时true才为真解析失败会在下一轮通过_build_user_prompt_force_correct强制模型修正到第一个未完成章节。5.4 综述状态更新与规划校验SurveyManager.update_current_surveybuffer.py根据update路径将内容写入对应章节plan仅在current_survey为空时初始化整个结构abstract/conclusion直接写入字符串introduction包装为{content: ...}section-i/section-i/subsection-j/ 三级路径逐级定位并更新目标章节的content索引越界返回False。当模型调用finalize时_check_finalize会逐章节检查是否所有部分都已写入内容若有未完成章节则强制继续buffer.py避免模型过早收尾。5.5 引用管理与参考文献渲染模型写作时以\cite{arxivid...}输出引用run.py 中的json_to_markdown在最终输出阶段完成从轨迹中收集所有论文摘要提取 bibkey 与标题构造arxivid → arXiv 链接的映射用正则\\cite\{(.?)\}扫描全文将\cite{bibkey1,bibkey2}替换为[1,2]形式的顺序编号在文末追加## References章节按编号列出每篇引用论文的标题与链接且自动剔除#1这类占位引用。match_referencebuffer.py则负责在轨迹层面统计模型实际引用过的 bibkey 集合并支持\nocite反向剔除这是训练阶段计算引用相关奖励Citation Reward与 Fact Score 的数据基础。六、性能评测可信度与内容质量原文档给出的综述生成系统对比评测如下依据 README-en.md 中的性能表其中 G2FT 指 Gemini-2.0-Flash-ThinkingWTR1-7B 指 Webthinker-R1-7BMethodRelevanceCoverageDepthNoveltyAvg.Fact ScoreNaive RAG (driven by G2FT)3.252.953.352.603.0443.68AutoSurvey (driven by G2FT)3.103.253.153.153.1646.56Webthinker (driven by WTR1-7B)3.303.002.752.502.89--Webthinker (driven by QwQ-32B)3.403.303.302.503.13--OpenAI Deep Research (driven by GPT-4o)3.503.953.553.003.50--MiniCPM4-Survey3.453.703.853.003.5068.73w/oRL3.553.353.302.253.1150.24注由于 Webthinker 不具备引用功能、OpenAI Deep Research 导出结果时不提供引用故省略二者的 Fact Score 评估详细评测信息见官方技术报告。值得关注的解读维度在Depth深度上 MiniCPM4-Survey 得分最高3.85Avg 与 OpenAI Deep ResearchGPT-4o 驱动并列 3.50Fact Score事实性达到 68.73显著高于 Naive RAG 与 AutoSurvey印证了「规划—检索—写作」框架与引用强化对事实可信度的贡献对比w/o RL去掉强化学习的一行可以看到加入多步 RL 后 Coverage、Depth、Novelty、Avg 与 Fact Score 全面上升直接验证了文档所述「多方面奖励 多步 RL 训练策略」的有效性。七、训练视角数据集、奖励与多步 RL虽然仓库未附带训练脚本但架构图assets/main.png与 README 说明了训练阶段的三个关键设计可在本地复现推理之前先理解其来龙去脉监督微调数据收集以专家撰写的综述论文与论文库为基础通过 Citation Match引文匹配与 Rule Filter规则过滤对齐引用与段落再由 LLM Rewrite Synthesize 生成用于 SFT 的「指令—段落」对多方面奖励奖励函数由结构structure、内容content、引用citations三个维度的子奖励构成训练阶段的update_all_scores/update_all_format_scoresbuffer.py正是为这种奖励回传预留的接口——前者写最终质量得分后者写格式得分两阶段强化学习先做章节级 RLSection-level RL对单个章节内容打分再做综述级 RLSurvey-level RL对整体结构与质量打分推理代码中的BufferManager的轨迹数据结构含score、done、current_survey、trajectory等字段见 buffer.py即为强化学习 rollout 数据的标准格式Context Manager 与并行环境则是保证长程推理信息不丢失与训练吞吐的关键组件。八、常见问题与调优建议端口冲突检索服务默认监听 8400retriever.py的--port参数生成服务默认以--retriver_url http://localhost:8400连接改端口时二者需同步修改GPU 显存检索服务将 FAISS 索引分片到所有 GPU生成服务设置gpu_memory_utilization0.95二者同时运行时注意显存分配FAISS 依赖可选用faiss-gpu以获得更好性能生成效果调参采样参数集中在OriginalvLLMRollout.__init__run.py可调整max_tokens默认 2748控制单轮生成长度、temperature与top_p控制探索程度以及repetition_penalty控制重复检索质量topk默认 10前两步为 20检索结果由 RRF 融合多关键词命中若综述覆盖度不足可增大 topk 或让模型输出更多关键词引用完整性问题输出时若出现 Warning: bibkey not found说明模型中引用了未检索到摘要的文献可在json_to_markdown前的轨迹中核对检索日志。九、小结MiniCPM4-Survey 将「规划—检索—写作」的智能体范式与 8B 量级的端侧模型结合配合结构化的 Agent 输出协议、严格的解析与校验、以及基于 FAISS Embedding 的本地检索库在推理侧只需两个 Python 服务即可端到端产出带引用的长综述。其仓库实现同时保留了完整的 rollout 数据结构与奖励回传接口使得同一套代码既能驱动推理演示也能服务于后续的强化学习训练研究。读者可按本文步骤从 Kaggle 数据出发依次构建索引、启动检索服务、运行生成脚本最终在http://localhost:5173前端模式或test.md命令行模式中获得自己的第一篇自动生成综述。【免费下载链接】MiniCPMMiniCPM5: SOTA on-device LLMs, small yet powerful.项目地址: https://gitcode.com/GitHub_Trending/mi/MiniCPM创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Current demo choices

Current demo choices

Current demo choices 【免费下载链接】opensre Build your own AI SRE agents. The open source toolkit for the AI era. 项目地址: https://gitcode.com/GitHub_Trending/op/opensre "Explore a repo and analyze its CI/CD performance (recommended)": c…

2026/11/6 6:19:46 阅读更多 →
memvid 如何用 Memvid::verify 检查 .mv2 文件完整性并解读校验报告?

memvid 如何用 Memvid::verify 检查 .mv2 文件完整性并解读校验报告?

memvid 如何用 Memvid::verify 检查 .mv2 文件完整性并解读校验报告? 【免费下载链接】memvid Memory layer for AI Agents. Replace complex RAG pipelines with a serverless, single-file memory layer. Give your agents instant retrieval and long-term memor…

2026/11/7 20:48:51 阅读更多 →
JavaScript 前端框架入门指南:从模板引擎到 SPA 的架构演进(curriculum 课程详解)

JavaScript 前端框架入门指南:从模板引擎到 SPA 的架构演进(curriculum 课程详解)

JavaScript 前端框架入门指南:从模板引擎到 SPA 的架构演进(curriculum 课程详解) 【免费下载链接】curriculum The open curriculum for learning web development 项目地址: https://gitcode.com/GitHub_Trending/cu/curriculum 本篇…

2026/10/30 0:09:55 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/12 5:00:00 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/12 5:13:20 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/12 5:13:20 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/12 18:22:26 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/12 18:22:25 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/12 5:13:20 阅读更多 →

日新闻

周新闻

月新闻