【粉丝福利-文末送书】不用框架也能做:手搓一个属于自己的DeepResearch
仅用于站内搜索,没有排版格式,具体信息请跳转上方微信公众号内链接
修改之后的代码放在这里:https ://github. com/yanqiangmiffy/Agent-Tutorials-ZH/tree/main/deep_research_agent
咱们不用任何现成的LLM编排框架,纯手工打造,让大家彻底搞懂这些系统背后的运作原理。这个可以根据自己框架基础来自行选择,DeepResearch关键在于怎么设计深度研究流程。
简单来说,这些DeepResearch就像一个超级勤奋的研究助理,能针对指定主题进行深入研究。它的工作流程一般是这样的:
研究规划:为最终的研究报告创建大纲
任务分解:把大纲拆解成一个个可管理的小任务
深度研究执行:针对报告的每个部分进行深入研究,包括推理需要什么数据、利用搜索工具获取信息
结果回顾:回过头看看研究过程中生成的数据,看有没有遗漏的地方
数据总结:把所有检索到的数据整理成最终的研究报告
听起来很复杂?其实不然,咱们一步步来实现。
先来看看咱们要构建的系统长什么样:
整个系统的运行流程是这样的:
用户输入:提供研究的查询或主题
生成大纲:LLM根据目标生成最终报告的大纲,限定在一定数量的段落内
段落研究:每个段落的描述单独输入研究过程,生成全面的信息
信息汇总:所有信息汇总,进行总结,构建包含结论的最终报告
格式输出:最终报告以MarkDown格式交付
重点来了,咱们再仔细看看每个段落的研究步骤:
构建搜索查询:拿到段落大纲后,让LLM构建网络搜索查询
输出查询和推理:LLM输出搜索查询及其推理过程
执行网络搜索:根据查询执行网络搜索,检索最相关的结果
回顾反思:分析可能遗漏的细节,尝试生成新的搜索查询补充初始结果
循环优化:这个过程重复n次,直到获得最佳信息集
首先得安装必要的依赖:
咱们用的是DeepSeek-R1(6710亿参数)的非蒸馏版。如果访问不了这个版本,可以先加入等候列表,或者切换到更小的蒸馏版。
设置好环境变量SAMBANOVA_API_KEY,然后试试能不能正常调用:
运行后会看到类似的输出:
注意到那个标签了吗?这是推理模型的思考过程,很有趣,但咱们的系统只需要最终结果。来写个简单的函数把它去掉:
Agent在运行过程中需要维护一个状态,这个状态会随着系统的运行不断演变。咱们先来定义一下:
用Python的dataclass来实现会很清晰:
这个状态结构包含了:
search_history:存储所有搜索结果,包含url和content
latest_summary:结合所有搜索历史的段落总结
reflection_iteration:跟踪当前的回顾迭代次数
经过大量实验,笔者发现下面这个Prompt能让DeepSeek-R1持续生成格式良好的输出:
测试一下:
会得到类似这样的输出:
输出周围那些json标签对咱们来说有点碍事,写个函数清理一下:
然后就可以把结果转换成Python字典,填充到全局状态里:
咱们用Tavily来做网络搜索。先去这里申请个APItoken。
应该是每个月有1000次免费搜索,用来我们实验足够了
搜索工具函数很简单:
每次调用会返回最多max_results个搜索结果,包括:
搜索结果的标题
搜索结果的URL
内容的摘要
如果可能的话,页面的完整内容
拿到搜索结果后,咱们需要更新全局状态。写个便捷函数:
为了规划第一次搜索,这个Prompt效果不错:
测试一下:
会得到类似这样的搜索查询:
直接拿这个查询去搜索:
第一次总结跟后面的回顾步骤不太一样,因为这时候还没有任何内容可以回顾。这个Prompt比较好用:
构建输入数据:
运行总结:
会得到一个详细的段落总结,这就是咱们要用来更新STATE. paragraphs[ 0].research. latest_summary字段的内容。
现在有了段落内容的最新状态,咱们可以利用它来改进内容。让LLM回顾一下文本,看看有没有遗漏的地方:
构建输入并运行:
会得到新的搜索查询,比如:
拿到回顾步骤的搜索查询后:
更新段落的搜索状态:
然后把步骤6和7在循环中运行指定次数,完成回顾步骤。
对每个段落都重复步骤4-7。所有段落的最终状态都准备好后,就可以把它们整合在一起了。用LLM生成一份格式优美的MarkDown文档:
运行最终的报告生成:
大功告成!现在就有了一份针对指定主题的深度研究报告。
恭喜!咱们成功地从零开始实现了一个深度研究Agent。不过,还有很多地方可以优化:
JSON输出稳定性:让系统稳定生成格式良好的JSON输出并不容易,推理模型在结构化输出方面通常表现不太稳定
模型选择策略:考虑到上述情况,在系统流程中为不同任务使用不同的模型可能更合理
搜索优化:搜索网页和对检索结果进行排序的方式还有很大改进空间
动态回顾次数:让LLM自己决定是否还需要更多次回顾,而不是固定次数
参考文献系统:返回搜索时使用的链接,在报告的每个段落中提供参考文献
多模态支持:加入图片、表格等多媒体内容的处理能力
实时更新:支持对已生成报告的实时更新和修正
通过这个项目,咱们不仅搞懂了深度研究Agent的底层原理,还亲手实现了一个完整的系统。虽然和大厂的产品相比还有差距,但这个基础框架已经很不错了。
接下来可以根据自己的需求继续优化,比如加入更多的搜索源、优化Prompt策略、或者集成到自己的应用中。AI时代,动手能力永远是最宝贵的技能!
下面给大家送上福利,抽奖送三本书《人工智能大模型动手训练大模型基础》
编辑推荐(1)理论×实践双驱动:从Transformer架构解析到PyTorch实战,系统掌握大模型开发全流程。(2)硬核技术全景图:涵盖GPU加速、分布式训练、模型量化、DeepSeek等核心技术,深入解析大模型训练优化的技术细节。(3)行业应用指南:覆盖NLP、CV、多模态三大前沿领域,通过金融、医疗等真实案例掌握产业级解决方案。(4)开发者成长体系:Python环境搭建→模型微调→架构创新,构建从入门到精通的完整学习路径
添加微信,备注”LLM“进入大模型技术交流群
如果你觉得这篇文章对你有帮助,别忘了点个赞、送个喜欢
/作者:致Great
/作者:欢迎转载,标注来源即可