2026年7月9日 周四晚上19:30,报名腾讯会议了解“如何构建自进化的动态知识库(Brain)”(限30人)
免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

DeepSeek-R1 x Agentic RAG:构建带深度思考开关的知识研究助理|深度长文

发布日期:2025-03-05 10:33:28 浏览次数: 2990
作者:AI大模型应用实践

微信搜一搜,关注“AI大模型应用实践”

推荐语

探索知识研究助理的未来,深度思考与检索结果的完美结合。

核心内容:
1. DeepSeek-R1与Agentic RAG结合的背景与需求
2. 工作流程设计:从构建研究大纲到生成最终结果的详细步骤
3. DeepResearch开关:如何根据需求选择研究深度

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家

RAG是一种基于“检索结果”做推理的应用,这大大限制了类似DeepSeek-R1模型的发挥空间。但又的确存在将RAG的准确性与DeepSeek深度思考能力结合的场景,而不仅仅是回答事实性问题。比如:
  • 基于企业知识库与产品文档,写一份市场分析报告。

  • 根据已有的技术报告创作一篇公众号文章。


你很难用传统的RAG方法去“回答”这样的主题;也无法快速的更换DeepSeek就输出需要的结果。本文将介绍如何结合DeepSeek-R1与Agentic RAG方法以构建带有“深度思考”开关的问答与研究助理。请注意这个开关并不是简单的换模型:

01

工作流程设计

实际应用中的上述场景存在这样的一些典型特点或业务需要:

  • 需要借助RAG以获得参考文档与知识,这本质是提升准确性

  • 必要时使用互联网搜索获得更多外部信息,比如了解竞品

  • 生成的结果不是简单的答案,而需要有良好的内容条理与结构


这样场景中你无法直接让模型”深度思考“出你需要的结果。因为这里的输出并不仅仅依赖于模型的生成能力,更需要参考足够的私域知识,而这些知识则需要借助RAG或搜索引擎来检索。或者说,复杂度更多体现在研究结构的规划与关联知识的检索

因此考虑这样一种方案:

  • 借助DeepSeek思考与规划研究大纲、并提出针对性的问题

  • 借助RAG引擎来回答这些提出的问题,答案作为参考知识

  • 综合这些问题及答案,并根据规划的大纲生成最终研究结果


我们设计如下的Agentic Workflow:

流程详细描述如下:

  1. 为了让这个Agent既能够支持简单的事实性问答,也能切换做深入的研究,设计DeepResearch这样的开关,把选择权交给用户;


  2. 如果无需深度思考,则直接调用Agentic RAG回答问题;


  3. 如果需要深度思考,则进入如下流程:


    1. 生成大纲借助DeepSeek的深度思考能力,根据输入主题先构建一个研究大纲,确保输出的结构化与全面性

    2. 题规划基于大纲生成一份必要的研究问题清单,以有效的检索到研究所需要的知识

    3. 问题回答:获得这些问题的答案,这个步骤借助已构建好的Agentic RAG系统来获得,以确保获得参考信息的准确性。这一步可以并行开展

    4. 起草答案将搜集到的问题与答案,结合规划的提纲,交给LLM进行创作,生成研究结果的草稿

    5. 内容审核:审查草稿的完整性、准确性与连贯性,并确定是否需要修改或增补,并输出新的问题来进一步搜集信息

    6. 最终输出:在经过指定次数的迭代后,输出最终结果


可以看到,RAG系统在这成为了后端的一个“研究工具”。为了更具扩展性,我们借助Agentic RAG方法来实现,并增加了搜索引擎作为补充的知识来源:

这种Agentic RAG可以更灵活的跨越多个数据源(比如不同的知识库/文档)、跨越多种类型RAG管道(比如回答事实性问题与总结性问题)及互联网搜索工具等来回答问题,以提供研究需要的参考信息。

这样的工作流程优势在于:通过先推理大纲与假设性问题来提高信息获取的覆盖面与引用密度,同时又能借助RAG检索私有知识,提高准确性;同时还利用反思模式来提高最终的生成质量当然缺点是流程较长,但对于这样的研究是可以接受的。

02

实现:Agentic RAG应用

现在来实现这个具有“深度思考”能力的Agentic Workflow,我们采用的工具为:

  • Agentic RAG系统使用LlamaIndex+Chroma向量库+gpt-4o-mini

  • Workflow编排使用LlamaIndex Workflows

  • deepseek-r1模型作为大纲生成、研究报告创作

  • gpt-4o-mini用作问题规划、报告审核

首先来实现这里的Agentic RAG应用,对于无需“深度思考”的问题,这个应用就是直接回答问题的主体。构建基本过程如下:

  • 创建一个/多个RAG查询管道(如有需要,可支持多模态)

  • 将这些查询管道“工具化”

  • 创建一个网络搜索工具

  • 将RAG与搜索工具交给一个FunctionCalling的Agent使用即可


核心代码参考(可根据需要调整关键词):

......
#RAG查询引擎
query_engine = vector_index.as_query_engine(similarity_top_k=5,llm=llm_openai)
query_tool = QueryEngineTool.from_defaults(query_engine=query_engine,name=f'query_tool_{name}',
                                               description=f'用来查询DeepSeek-R1的技术细节')

...
#搜索工具
search_tool = FunctionTool.from_defaults(fn=web_search,name = 'search_tool',description='用来搜索网络以获取信息')

#RAG agent
rag_agent = FunctionCallingAgent.from_tools(
[query_tool,search_tool],
llm=llm_openai,
system_prompt="""
你是一个问题回答专家。你必须使用工具查询技术细节或搜索网络信息,并始终用中文回答问题。
* 尽量保留工具返回中的Markdown图片信息。* 如果一个工具无法回答问题,请尝试另一个工具。
不要基于先验知识或编造。"""
)

你可以在构建完这个Agent以后,先测试该Agent的工具推理与回答能力,以确保能够为后面的研究提供准确的信息。比如用如下代码测试:

agent_response = rag_agent.query("How is DeepSeek-R1-Zero AIME accuracy during training")
display(Markdown(str(agent_response)))

我的Agent反馈如下(实现了多模态RAG):


03

实现:编排Workflow

准备好Agentic RAG这个“工具”后,接下来实现深度思考的主流程。

我们基于LlamaIndex的Workflows来构建(当然你完全也可以使用LangGraph),根据上面的设计,这个workflow编排后的可视化如下:

这里的核心步骤(在LlamaIndex中称作step)包括:

  • route_request: 根据是否需要深度思考做路由

  • plan_outline: 思考与规划研究大纲,使用deepseek

  • plan_questions: 根据研究的大纲设计问题,使用gpt-4o

  • answer_question: 并行调用已经创建Agentic RAG获得问题答案

  • general_final_answer: 根据大纲、问题/答案生成结果,deepseek

  • review_final_answer: 检查审核,如果没有问题或达到最大迭代次数,则结束;否则生成新的问题,返回answer_question获取更多信息

整个过程的重点是精心设计每个step的提示词,剩下的工作以调用LLM与RAG为主,并不复杂。以其中的问题设计(plan_questions)这个step为例:

...
    # 根据大纲提出一些问题
    @step()
    async def plan_questions(
        self, ctx: Context, ev: OutlineEvent
    )
 -> QuestionEvent:


        #事件中的大纲信息,并保存到上下文,后面步骤中要用
        outline = ev.outline
        await ctx.set("outline", outline)

        #上下文中获取原始问题
        query = await ctx.get("original_query")

        #Prompt提示
        prompt = f"""你需要根据输入的问题和回答大纲制定一系列问题,这些问题将帮助获得完成大纲所需的事实:
        * 你不能假设任何现有的知识
        * 问题需要涵盖大纲中的所有主要要点
        * 每一个问题必须自洽完整,不能依赖于上下文
        * 你的输出应该是一个问题列表,每个问题在新的一行
        * 问题最多不超过5个
        ----------------
        输入问题:{query}
        ----------------
        回答大纲:{outline}"""


        #生成问题(调用LLM)
        response = await llm_openai.acomplete(prompt)

        #取出<think>部分,如果你使用deepseek-r1才需要
        response = re.sub(r"<think>.*?</think>""", str(response), flags=re.DOTALL)
        questions = response.split("\n")
        questions = [x for x in questions if x]

        #问题数量
        await ctx.set("num_questions", len(questions))

        #触发下一个step,并传递问题
        #这里会触发并行处理
        for question in questions:
           ctx.send_event(QuestionEvent(question=question))

再比如回答问题(answer_question)这一步:

...
    @step()
    async def answer_question(
        self, ctx: Context, ev: QuestionEvent
    )
 -> AnswerEvent:


        #取出问题
        question = ev.question

        #调用上面创建的agentic rag获得答案
        response = await rag_agent.aquery(question)

        #如果打开“深度思考”,则触发下一步;否则就结束!
        if (await ctx.get("deepresearch")):
            return AnswerEvent(question=question, answer=str(response))
        else:
            return StopEvent(result=str(response))
其他步骤可以按照类似方式来编写,最终完成Workflow的定义。

04

测试Workflow

现在可以测试调用这个Workflow,你可以打开或者关闭“深度思考”这个参数,以控制是普通的RAG问答,还是开展深度研究。

首先关闭“深度思考”(deepresearch=False)

async def main():

    #workflow实例
    rsearch_agent = DeepResearchAgent(timeout=600, verbose=True)

    #调用,deepresearch为控制开关
    handler = rsearch_agent.run(
        query ="DeepSeek-R1大模型用了什么技术?国际上评价如何",
        deepresearch = False,
        rag_agent = rag_agent
    )
    final_result = await handler
    print(final_result)

观察输出内容:

然后打开深度思考(deepresearch=True)

通过跟踪信息,你可以看到研究助手生成了如下的大纲与假设提问:

针对这个大纲,LLM设计的问题如下(首次迭代):

最后,你将会看到更详细的、遵循上面研究提纲的输出结果。

05

未来的改进

在测试发现的一些潜在问题及其未来的改进空间:

  • 过于发散思维的研究提纲可能导致无法查询到必要的参考信息(或者会过于依赖网络搜索)。在最终答案可能会有这样的体现(有提纲,但没有答案):


优化方法可以考虑:

    • 在生成大纲时给予更多的提示信息,比如已有知识目录、增加限制条件等

    • 在Review环节多次迭代仍然无法检索到相关知识后,对这部分做删除。


  • 多模态的支持需进一步增强。很多场景需要产出一份图文兼备的研究文档,这可能需要在最后的生成环节做进一步结构化输出的控制与优化。


  • 输出形态多样化。借助于一些开放库,可以将最终的结果根据需要输出成Word、PPT、思维导图等更丰富的格式(相对于生成公式化的通用PPT,基于私有知识与文档生成的PPT是不是更有价值呢)。




53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅