我惊了!Deep Agent + 60行代码 = 一个能上网的AI?保姆级教程,手把手教你复现!

今天,我来给大家介绍一下LangChain在本次版本更新后新出的一个新玩意:Deep Agent。先给大家看看效果:

视频中,我向搭建好的Deep Agent提了一个问题:今天上证指数的收盘价是多少?经过了一段反复的搜索与确认,Deep Agent最终给出了准确的答案。(注意我是11月26日,即昨天,测试的)

从输出结果中可以看出,Deep Agent调用了搜索工具,对我的问题进行了多次搜索,直到它认为自己已经收集到了足够的信息才输出它的回应。而这一切,也就不过60行代码。

一、什么是Deep Agent

Deep Agent 是LangChain版本更新后推出的一个独立python库,它主要用来搭建能够解决复杂、多步骤任务的Agent。

简单地来说,Deep Agent就是一个官方模板,它已经帮我们用LangChain、LangGraph的相关基础组件实现了必要的Graph workflow设定和State管理,省去了我们自己去定义State、Node、Edges来搭建Graph的过程。

有经验的朋友可能会问,那它跟LangChain里面已有的creat_agent()有啥区别呢?creat_agent其实也是一个官方Agent模板,但它只是实现了一个具有Tools Calling能力的基本ReAct Agent,这个我们前面文章已经教过大家用LangGraph手搓的原理了。

而Deep Agent呢,主要是更进一步的,参考了比如Claude Code,Deep Research以及Manus等产品在Agent开发方面的经验,通过内置一系列Tools的方式预设了多项实现Agent必需的核心能力。包括:

任务规划与分解:内置write_todos工具,使Agent能够做到将复杂任务分解为离散的步骤,跟踪进度,并在新信息出现时调整计划。
上下文管理:内置的一系列文件系统工具(lsread_filewrite_fileedit_file),允许Agent将大量上下文卸载到Agent记忆中,防止上下文窗口溢出,并能够处理可变长度的工具结果。
子Agent生成:内置task工具,允许Agent生成专门的子Agent以实现上下文隔离。这一设计既能保持主Agent的上下文清洁,又能深入处理特定的子任务。
长期记忆:通过使用LangGraph的Store,Agent可以在不同线程间扩展持久化记忆。Agent可以保存和检索之前对话中的信息。

因此,Deep Agent的定位是一个开箱即用的,能够处理复杂、多步骤的Agent模板,creat_agent(),是一个现成易用的ReAct Agent模板。如果两个模板大家都用的不爽,我们就可以选择自己用LangGraph手搓。

二、如何使用Deep Agent

官方文档的Quickstart中给我们展示了如何迅速搭建一个具有网络搜索能力的Deep Agent,接下来我参照示例代码,结合我们的实践经验带着大家过一遍整个搭建过程。

First of all,安装相关依赖:

pip install deepagents tavily-python

1.自定义工具:搜索

(1)初始化Tavily搜索服务

首先,我们通过使用Tavily的服务来做一个搜索工具(为了逻辑清晰,我把所有的import拆到了对应的位置):

import osfrom tavily import TavilyClienttavily_client = TavilyClient(api_key=os.getenv("TAVILY_API_KEY"))

这段代码,主要通过os.getenv("TAVILY_API_KEY")从环境变量中读取Tavily的API密钥,用于初始化Tavily搜索服务的客户端。

Tavily的API Key可以通过访问官网(https://tavily.com/)注册账号并登录获得,每个月有一定的免费搜索额度,一般情况下很够用了。

获取了API Key之后,你可以把它保存到你的.env文件中(在项目根目录下创建),写入的格式为:TAVILY_API_KEY=你的API密钥。这样就可以使用load_dotenv()加载环境变量了(这一步我们会在后面初始化模型时完成)。不熟悉.env文件使用的同学可以参考我们前期文章中关于环境变量配置的内容。

(2)定义搜索工具本体
from typing import Literaldef internet_search(    query: str,    max_results: int = 5,    topic: Literal["general", "news", "finance"] = "general",    include_raw_content: bool = False,):    """Run a web search"""    return tavily_client.search(        query,        max_results=max_results,        include_raw_content=include_raw_content,        topic=topic,    )

这段代码定义了一个网络搜索工具函数,主要包含以下几个部分:

(1)函数签名和参数

def internet_search(    query: str,    max_results: int = 5,    topic: Literal["general", "news", "finance"] = "general",    include_raw_content: bool = False,):
  • query:搜索查询字符串,必填参数,类型为str。这是用户想要搜索的关键词或问题。
  • max_results:返回的最大结果数量,可选参数,默认值为5,类型为int。你可以根据需求调整返回结果的数量,比如设置为10来获取更多搜索结果。
  • topic:搜索主题类型,可选参数,默认值为"general",类型为Literal["general", "news", "finance"]。这里使用了Literal类型注解,限制了topic只能取"general"(通用搜索)、“news”(新闻搜索)或"finance"(金融搜索)这三个值之一。这种限制有助于Agent更准确地调用工具。
  • include_raw_content:是否包含原始内容,可选参数,默认值为False,类型为bool。如果设置为True,搜索结果会包含更详细的原始网页内容,但会增加返回数据的大小。

注意,这里定义工具时没有用@tool修饰符,具体原因我也不太确定。

(2)函数文档字符串

"""Run a web search"""

这是函数的文档字符串(docstring),用于描述函数的功能。虽然这里只有简短的一句话,但Deep Agent会读取这个文档字符串来理解工具的作用,所以建议写得清晰明确。

(3) 函数体

return tavily_client.search(    query,    max_results=max_results,    include_raw_content=include_raw_content,    topic=topic,)

函数体非常简单,直接调用我们之前初始化的tavily_clientsearch方法,将所有参数原样传递过去,并返回搜索结果。

2.初始化自定义模型

Deep Agent默认使用的是Claude模型,鉴于不是所有的朋友都有Anthropic的API Key,这里我改用自定义模型。我们先来初始化模型:

from dotenv import load_dotenvfrom langchain.chat_models import init_chat_modelload_dotenv()llm = init_chat_model("deepseek-reasoner", model_provider="deepseek")

这里有个小点,大家做Agent,选模型时一定要选对Tools Calling支持效果好的模型。我在最早文章中图方便用的deepseek-chat,就时不时会出现跑不动的情况,后来换了deepseek-reasoner就要好很多。

3.创建Deep Agent

from deepagents import create_deep_agent# System prompt to steer the agent to be an expert researcherresearch_instructions = """You are an expert researcher. Your job is to conduct thorough research and then write a polished report.You have access to an internet search tool as your primary means of gathering information.## `internet_search`Use this to run an internet search for a given query. You can specify the max number of results to return, the topic, and whether raw content should be included."""agent = create_deep_agent(    model=llm,    tools=[internet_search],    system_prompt=research_instructions)

这段代码展示了如何创建一个Deep Agent实例,主要包含两个部分:

(1)定义System Prompt

research_instructions = """You are an expert researcher..."""

System Prompt用于指导Agent的行为和角色定位。这里我们将Agent定义为"专家研究员",要求它进行深入研究并撰写报告。同时,我们在Prompt中明确说明了可用的工具(internet_search)及其使用方法,这样Agent就能更好地理解何时以及如何使用这个工具。

在实际应用中,你可以根据不同的任务场景定制不同的System Prompt。

(2) 创建Deep Agent

agent = create_deep_agent(    model=llm,    tools=[internet_search],    system_prompt=research_instructions)

create_deep_agent是Deep Agent的核心函数,它接收三个主要参数:

  • model:我们之前初始化的LLM模型实例
  • tools:工具列表,这里我们传入[internet_search]。你可以传入多个工具,比如[internet_search, calculator, file_reader]
  • system_prompt:系统提示词,用于指导Agent的行为

至此,我们的Agent就搭建完成了,这就是Deep Agent"开箱即用"的体现:我们不需要手动构建Graph、定义State、编写节点函数和条件边,所有这些都已经封装好了。我们只需要提供模型、工具和提示词,就能得到一个功能完整的Agent。

4.使用Deep Agent

result = agent.invoke({"messages": [{"role": "user", "content": "What is langgraph?"}]})print(result["messages"][-1].content)

使用Deep Agent非常简单,只需要调用invoke方法即可。从示例代码可以看出,Deep Agent内部应该是设定了一个名为messages的消息list作为State key,通过它来实现对话信息的管理,这个我们已经很熟悉了。(这里示例代码用的是OpenAI的message格式。)

同样的,Deep Agent在invoke后的result,也是messages这个State,它作为消息列表,包含了整个对话过程中的所有消息(用户输入、工具调用、工具结果、Agent回复等)。[-1]表示获取最后一条消息,也就是Agent的最终回复,而.content用于提取消息的文本内容。

视频中我对这条代码做了修改,引入了用户输入和pretty_print,这样方便展示我们的输入,以及Agent的内部思考过程:

user_input = input("输入: ")result = agent.invoke({"messages": [{"role": "user", "content": user_input}]})for message in result["messages"]: message.pretty_print()

综上可以看到,就算加上初始化自定义模型,我们搭建Deep Agent也只有3步,真正的开箱即用。相比我们前期文章中需要手动构建Graph、定义State、编写节点函数和条件边的复杂流程,Deep Agent大大简化了Agent的搭建过程,让我们能够快速上手并专注于业务逻辑的实现。

总结

本期我们介绍了LangChain新推出的Deep Agent,它本质上是一个基于LangGraph和LangChain构建的开箱即用的Agent模板。Deep Agent的核心优势包括:

1、简化开发流程:无需手动构建Graph、定义State、编写节点函数,只需提供模型、工具和提示词即可
2、内置核心能力:预设了任务分解、内容管理、子Agent生成等能力
3、灵活可扩展:可以自定义工具、模型和提示词,满足不同场景的需求

通过今天的学习,我们掌握了Deep Agent的基本使用方法。在实际应用中,你可以:

  • 根据具体需求自定义不同的工具
  • 选择合适的模型(建议使用对Tools Calling支持好的模型)
  • 定制System Prompt以适应不同的任务场景

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套 AI 大模型突围资料包

  • ✅ 从零到一的 AI 学习路径图
  • ✅ 大模型调优实战手册(附医疗/金融等大厂真实案例)
  • ✅ 百度/阿里专家闭门录播课
  • ✅ 大模型当下最新行业报告
  • ✅ 真实大厂面试真题
  • ✅ 2025 最新岗位需求图谱

所有资料 ⚡️ ,朋友们如果有需要 《AI大模型入门+进阶学习资源包》下方扫码获取~
在这里插入图片描述

① 全套AI大模型应用开发视频教程

(包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点)
在这里插入图片描述

② 大模型系统化学习路线

作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!
在这里插入图片描述

③ 大模型学习书籍&文档

学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。
在这里插入图片描述

④ AI大模型最新行业报告

2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
在这里插入图片描述

⑤ 大模型项目实战&配套源码

学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。
在这里插入图片描述

⑥ 大模型大厂面试真题

面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余

图片

以上资料如何领取?

在这里插入图片描述

为什么大家都在学大模型?

最近科技巨头英特尔宣布裁员2万人,传统岗位不断缩减,但AI相关技术岗疯狂扩招,有3-5年经验,大厂薪资就能给到50K*20薪!

图片

不出1年,“有AI项目经验”将成为投递简历的门槛。

风口之下,与其像“温水煮青蛙”一样坐等被行业淘汰,不如先人一步,掌握AI大模型原理+应用技术+项目实操经验,“顺风”翻盘!
在这里插入图片描述
在这里插入图片描述

这些资料真的有用吗?

这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
在这里插入图片描述
在这里插入图片描述

以上全套大模型资料如何领取?

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值