背景介绍
最近被 2024 年底的大量 RAG 总结的论文列表轰炸了一番,密集阅读大量论文时,真切感受到深入了解一个领域论文对精力的消耗是巨大的。
刚好注意到来自 NVIDIA 的结构化报告生成方案,如果真的可行,是否可以使用大模型一次性阅读大量的论文,并生成脉络清晰的报告,基于报告选择合适的论文进行阅读,是否可以大大减少阅读论文的时间。
因此深入研究了 NVIDIA 的方案,希望后续在此基础上进行二次改良,实现自己的论文阅读助手,真正减少探索单个领域论文消耗的大量精力。
整体方案
整体的技术方案如下所示:
整体的方案主要包含两部分:
- 规划阶段,根据用户的输入,生成整体的报告的骨架,确定报告的结构;
- 调研生成阶段,独立对各个环节进行调研和内容填充,最终生成最终的报告。
整体的方案存在如下所示的基础组件依赖:
- Tavily 进行内容获取,Travily 是一个搜索引擎 API 服务,可以基于用户输入的内容进行检索。
- 基于 NVIDIA NIM 进行大模型调用,实际可以使用其他的 LLM 服务,但是需要有结构化输出的能力;
- 基于 LangChain 进行整体的串联,实际主要基于 Langchain Graph 作为工作流的组织方案;
规划阶段
规划阶段主要目的是生成整体的报告骨架,确定报告的结构。理论上直接基于大模型就可以直接生成,但是考虑到科研环节调研往往需要具备前沿性,而大模型的信息更新往往比较滞后,因此使用 Travily 获取额外信息,作为补充信息提供给大模型,类似 RAG 的做法。
信息检索
原始的用户输入直接进行检索可能会因为输入的模糊性导致检索不充分的问题,因此方案中首先进行了查询的扩充,此方案在之前的 RAG 中也比较常规了,在此方案中使用的扩充查询的 prompt 如下所示:
report_planner_query_writer_instructions = """You are an expert technical writer, helping to plan a report.
The report will be focused on the following topic:
{topic}
The report structure will follow these guidelines:
{report_organization}
Your goal is to generate {number_of_queries} search queries that will help gather comprehensive information for planning the report sections.
The query should:
1. Be related to the topic
2. Help satisfy the requirements specified in the report organization
Make the query specific enough to find high-quality, relevant sources while covering the breadth needed for the report structure.
"""