☰
UltraRAG DeepResearch 实战:自动生成调查报告的 RAG 系统
2026/9/28 7:42:52 网站建设 项目流程

UltraRAG DeepResearch 实战:自动生成调查报告的 RAG 系统

【免费下载链接】UltraRAGA Low-Code MCP Framework for Building Complex and Innovative RAG Pipelines项目地址: https://gitcode.com/GitHub_Trending/ul/UltraRAG

写竞品分析的时候,你是不是也开过十几个网页标签页、从搜索结果里东拼西凑,光列提纲就耗掉半天,写到后面还忘了论据出处?RAG 系统 UltraRAG 的 DeepResearch 流水线专门接管这件事:你给出一个调研主题,它先生成研究计划,再逐节检索、填充内容,最后产出一份调查报告。整条流水线用几十行 YAML 就能编排完,配合 AgentCPM-Report 这类模型,单次调研可以产出上万字的报告稿。

🏭 工作原理:调查报告背后的流水线

把 DeepResearch 想成一条装配线:先把题目拆成章节大纲,再对着每一个空着的章节发出"查资料"的请求,把材料搬回来写掉一节,如此往复直到整页写完,最后由"编辑"汇总出终稿。拆开看是三类角色在传递数据。

规划角色:prompt.webnote_gen_plan负责把主题变成大纲。输入是你的调研问题,输出是一份结构化 JSON 计划,包含mainTitle和sections数组,每个 section 带标题、写作重点和可选的细分点。

填充角色:这是流水线的主体,跑在一个循环里。输入是大纲和当前页面内容,router.webnote_check_page先找出第一个未填充的章节;prompt.webnote_gen_subq针对它生成一条可直接用于检索的英文子问题;retriever.retriever_search拿子问题去语料库取回段落;prompt.webnote_fill_page依据检索到的段落加模型自身知识把这一节写完,输出更新后的整页。循环上限 10 轮,每轮填掉一节。

收尾角色:prompt.webnote_gen_answer输入写满的整页,输出最终答案,并约定用\boxed{}格式把结论框出来。

上图是 UltraRAG 的 RAG 系统整体架构,DeepResearch 用到的 Corpus、Retriever、Generator 等模块都以独立 MCP Server 的形式接入,流水线只负责把它们按顺序串起来。

🛠️ 从零跑通:四步搭好 DeepResearch 环境

第 1 步,装好运行环境。本地路线最短,官方推荐用 uv 管依赖:

pip install uv==0.12.0 git clone https://gitcode.com/GitHub_Trending/ul/UltraRAG cd UltraRAG && uv sync --all-extras source .venv/bin/activate ultrarag run examples/experiments/sayhello.yaml

最后一条是官方验证命令,看到Hello, UltraRAG v3!说明环境没问题。不想碰 Python 环境的话,用 Docker 也行:拉取hdxin2002/ultrarag:v0.3.0-base-cpu镜像后起容器,UI 会自动跑在 5050 端口。

第 2 步,准备语料数据。仓库data/目录自带两份文件。data/corpus_example.jsonl是示例语料,data/sample_nq_10.jsonl是 10 条带参考答案的示例问题,命令行模式下benchmark.get_data就从这里读题。检索端默认配置也指向这份示例语料,即servers/retriever/parameter.yaml里的corpus_path。要跑真实调研,换成自己的语料即可。

第 3 步,配置完整流水线。拿examples/demos/LightResearch.yaml做模板。它的servers段挂载了 benchmark、generation、retriever、prompt、router、custom 六个 MCP Server,pipeline段按数据流顺序列出每一步:初始化检索器和生成器,生成计划,初始化页面,进入循环填充,最后收尾作答。循环部分长这样:

- loop: times: 10 steps: - branch: router: - router.webnote_check_page

examples/experiments/webnote.yaml是研究版变体,多接了 evaluation Server,末尾追加custom.output_extract_from_boxed和evaluation.evaluate两步,方便跑分。

第 4 步,启动服务。命令行直接ultrarag run examples/demos/LightResearch.yaml跑一遍流水线;想要网页交互,用 Docker 方式起容器后访问http://localhost:5050即可。

🧪 完整演示:看它写一篇"固态电池"调研报告

拿一个具体主题走一遍:"固态电池技术目前的产业化进展如何?" 建好会话、选好知识库,把主题丢进对话框,接下来你会依次看到四幕。

第一幕是大纲落地。webnote_gen_plan跑完,界面上出现报告骨架:一个主标题加若干章节,每章有标题和写作重点。这时你还没等来任何正文,但报告长什么样心里已经有数了。

第二幕是页面铺开。prompt.webnote_init_page把大纲展开成一页文档,每个待写章节下挂着[To be filled]占位符,你能直观看到哪些地方还是空的。

第三幕是逐节填充。循环每轮只干一件事:router.webnote_check_page定位第一个空章节,webnote_gen_subq产出一条子问题,检索器取回段落,webnote_fill_page写完这一节并整页输出。演示版流水线里还挂了custom.assign_citation_ids_stateful,给每段引用登记编号,所以正文里出现论据时你能看到出处。报告是一节一节长出来的,10 轮上限之内通常能填满整页。

第四幕是汇总作答。全页写完后,webnote_gen_answer通读整页给出框起来的最终结论。

不满意哪一节怎么办?直接在对话里指出来,比如"产业进展那节缺 2025 年的量产数据",系统会带着你的反馈重新走填充流程;想改写作风格就动 Prompt 模板,重跑即可。整个过程你看到的是页面和文档,而不是配置文件。

这是 UltraRAG DeepResearch 的 Web 界面,会话、知识库管理都从这里操作。

🔧 调优与排坑:报告质量不达标时改哪里

定制思路都遵循一个模式:想改什么,就去动对应的模板或参数文件。

想改什么改哪个文件改完的效果
报告整体结构和章节风格prompt/webnote_gen_report.jinja、prompt/webnote_fill_page.jinja报告骨架和各节写法按你的模板走,模板注册在servers/prompt/parameter.yaml
检索不准、召回偏题servers/retriever/parameter.yaml可换backend(bm25、sentence_transformers、infinity、openai、litellm)、改corpus_path和嵌入模型
换个模型来写servers/generation/parameter.yaml生成端切换到你要的 LLM
章节总填不完examples/demos/LightResearch.yaml的loop.times提高轮数上限,给长大纲更多填充机会

排查问题先看这三种常见现象:

现象:报告末尾还留着[To be filled]。原因是循环撞上 10 轮上限,而大纲章节比它多。解决:精简计划里的 sections,或调大loop.times。

现象:检索结果驴唇不对马嘴。原因通常是corpus_path还指着示例文件data/corpus_example.jsonl,里面只有少量示范语料。解决:构建自己的语料并更新servers/retriever/parameter.yaml。

现象:跑流水线报缺模块。原因是当初只装了核心依赖。解决:补跑uv sync --all-extras,再用examples/experiments/sayhello.yaml验证一遍。

收尾

DeepResearch 把"拆题、查证、成稿"这套调研动作固化成了可编排、可调试的 YAML 流水线,你只需要提供语料和判断。想深入排查检索命中不稳或推理链跑偏的问题,接着读docs/debug_rag_workflows_zh.md,它按四层结构讲清了排查路径。

【免费下载链接】UltraRAGA Low-Code MCP Framework for Building Complex and Innovative RAG Pipelines项目地址: https://gitcode.com/GitHub_Trending/ul/UltraRAG

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询