DeepSeek-R1与Agentic RAG构建带深度思考开关的知识研究助理
先介绍背景知识。RAG(检索增强生成)本质上依赖检索结果进行推理,这在一定程度上限制了DeepSeek-R1这类深度思考模型的发挥空间。然而在实际业务中,确实存在将RAG的精准性与DeepSeek的深度推理能力结合起来的场景——不仅仅是回答事实性问题,例如:基于企业知识库和产品文档撰写市场分析报告,
先介绍背景知识。RAG(检索增强生成)本质上依赖检索结果进行推理,这在一定程度上限制了DeepSeek-R1这类深度思考模型的发挥空间。然而在实际业务中,确实存在将RAG的精准性与DeepSeek的深度推理能力结合起来的场景——不仅仅是回答事实性问题,例如:基于企业知识库和产品文档撰写市场分析报告,或根据现有技术报告创作公众号文章。这类任务,传统RAG无法直接“输出”答案,也不是简单替换一个DeepSeek模型就能解决。因此,本文将探讨如何融合DeepSeek-R1与Agentic RAG方法,构建一个带有“深度思考”开关的问答与研究助理。请留意,这个开关并非只是更换一个模型那么简单。
01 工作流程设计
实际应用中的上述场景,具备以下几个典型特征或业务需求:
- 需要借助RAG获取参考文档与知识,本质是提升准确性
- 必要时还需通过互联网搜索获取更多外部信息,例如了解竞品动态
- 生成成果不是简单答案,而是要求内容条理清晰、结构完整
在这种场景下,你不能直接让模型“深度思考”出想要的答案。因为输出不仅依赖模型的生成能力,更需要参考足够的私域知识——这些知识必须靠RAG或搜索引擎来检索。换句话说,复杂度更多体现在研究结构的规划与关联知识的检索上。
因此,考虑如下方案:
- 借助DeepSeek思考与规划研究大纲,并提出针对性问题
- 借助RAG引擎来回答这些问题,答案作为参考知识
- 综合这些问题与答案,根据规划的大纲生成最终研究成果
我们设计了如下的Agentic Workflow:

流程详细描述如下:
- 为了让该Agent既能支持简单的事实性问答,又能切换至深入研究模式,我们设计了DeepResearch开关,将选择权交给用户。
- 如果不需要深度思考,则直接调用Agentic RAG回答问题。
- 如果需要深度思考,则进入以下流程:
- 生成大纲:借助DeepSeek的深度思考能力,根据输入主题先构建一个研究大纲,确保输出的结构化与全面性。
- 问题规划:基于大纲生成一份必要的研究问题清单,以有效检索到研究所需要的知识。
- 问题回答:获得这些问题的答案——这一步借助已构建好的Agentic RAG系统完成,以确保参考信息的准确性。此步骤可并行开展。
- 起草答案:将搜集到的问题与答案,结合规划的提纲,交给LLM进行创作,生成研究结果的草稿。
- 内容审核:审查草稿的完整性、准确性与连贯性,并确定是否需要修改或增补,输出新的问题来进一步搜集信息。
- 最终输出:在经过指定次数的迭代后,输出最终结果。
可以看到,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与搜索工具交给一个Function Calling的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_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)
#取出 thinking部分,如果你使用deepseek-r1才需要
response = re.sub(r" thinking.*? response", "", 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更有价值?
你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:DeepSeek-R1与Agentic RAG构建带深度思考开关的知识研究助理要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
相关热点当谈到AI语音转文字工具时,浏览器扩展往往是最轻量且实用的选择。Transkriptor 就是这样一款基于AI技术的Chrome扩展,其主打优势明确:高效、安全,并且兼容几乎所有常见的音频格式。无论是会议录音、采访片段,还是课后讲座,它都能快速转化为文字——同时还能生成字幕、自动汇总会议纪要,甚至支
AnyToSpeech是一款在线文字转语音工具,支持将文本、PDF、DOCX及网页链接转换为自然听感的音频,提供多种声音和风格选项,可在浏览器在线播放或下载为MP3文件,操作简便无需安装软件。
免费在线文本转语音工具,无需注册登录即可直接使用。支持多种语言和男女声选择,语速可自由调节,操作界面简洁直观。兼容电脑与手机浏览器,能将文字实时转换为自然流畅的语音,满足朗读、学习等需求。
KokoroWeb是一款免费开源的在线AI语音生成器,支持自托管部署并兼容OpenAIAPI。能将文字转为自然语音,支持多种语言、口音和声音,可调节语速、插入停顿,使用简单且扩展性强,适合开发者和普通用户。
- 日榜
- 周榜
- 月榜
热点快看
