LangChain使用deep agent并且加载SKILL

LangChain使用deep agent并且加载SKILL去年在字节 TRAE 线下活动的一句提问 让我捕捉到 SKILLS 这个大模型新范式的苗头 它不是简单的工具调用 而是能让 AI 实现 按需加载能力 的渐进式革命 从 CLAUDE 率先提出 到字节 TRAE 的快速跟进 再到 LangChain 从 曲线适配 到 Deep Agent 原生支持 这半年 我完整见证了一个 AI 技术概念从圈内热议到全面落地的全过程 也读懂了技能模块化背后的行业趋势

大家好,我是讯享网,很高兴认识大家。这里提供最前沿的Ai技术和互联网信息。



去年在字节TRAE线下活动的一句提问,让我捕捉到SKILLS这个大模型新范式的苗头——它不是简单的工具调用,而是能让AI实现“按需加载能力”的渐进式革命。从CLAUDE率先提出,到字节TRAE的快速跟进,再到LangChain从“曲线适配”到Deep Agent原生支持,这半年,我完整见证了一个AI技术概念从圈内热议到全面落地的全过程,也读懂了技能模块化背后的行业趋势。

最早接触SKILLS这个概念,是在2025年去字节参加TRAE线下活动的时候。活动现场有观众提问,说CLAUDE新推出的SKILLS机制特别实用,想问字节的TRAE什么时候会跟进这项功能。听到这个问题的瞬间,我心里就有了明确的预感:字节作为AI领域的风向标,大概率会快速布局跟进,而在智能体框架领域深耕的LangChain,必然也不会缺席这场技术浪潮。

今年早些时候,SKILLS在大模型圈彻底火了起来,成为大家热议的核心话题,但LangChain圈子里却依旧相对平静,没有掀起太多波澜。出于好奇,我特意去搜索“LangChain skills”,发现在B站上已经有了相关的教学视频,其核心思路是借助中间件(middleware)的拦截机制,来实现SKILLS的渐进式披露——这种方式更像是一种“曲线适配”,能勉强达成效果,却能明显感觉到,当时LangChain还未实现对SKILLS的原生完美支持。即便去LangChain官方网站搜索相关话题,得到的指引也依然是将SKILL拆分为Agent Tools来调用,与CLAUDE原生SKILLS的模块化、可复用特性相去甚远。

这种“慢半拍”的状态并没有持续太久,大概在今年春节前后,我身边突然涌现出大量跟进SKILLS的产品落地案例,其中就包括字节的TRAE,还有各种主打智能体功能的“龙虾”类产品,肉眼可见地感受到这项技术正在加速渗透。而就在我以为LangChain还会再酝酿一段时间时,惊喜地发现,LangChain Deep Agent已经悄悄上线了SKILLS原生支持功能,至此,从概念提出到主流平台全面落地,SKILLS终于完成了它的阶段性普及。

可以看到在早先create agent的基础之上,可以指定skills的目录了:

import os from dotenv import load_dotenv from deepagents import create_deep_agent from deepagents.backends import LocalShellBackend from langchain_openai import ChatOpenAI from langgraph.checkpoint.memory import InMemorySaver load_dotenv() model = ChatOpenAI( api_key=os.getenv("OPENAI_API_KEY"), model_name="Doubao-Seed-2.0-pro", base_url="https://ark.cn-beijing.volces.com/api/coding/v3", temperature=0 ) agent = create_deep_agent( model=model, backend=LocalShellBackend( root_dir=".", virtual_mode=True ), skills=["./skills"], checkpointer=InMemorySaver(), system_prompt="你是一个智能助手,如果查询的结果是ID,那么就根据ID查询对应的名称。" ) while True: input_text=input("User message: ") if input_text.lower() in ("exit"): break results=agent.invoke( {"messages":[{"role": "user", "content": input_text}]}, config={"configurable": {"thread_id": "1"}} ) for message in results["messages"]: print(message.pretty_print()) 

在实际实操过程中,我也积累了一些细节心得,在这里和大家分享一下。

还有一个必看要点:Deep Agent中的LocalShellBackend是加载本地SKILL的核心,没有它就无法正常调用本地的各类技能,这和Deep Agents依赖后端实现本地文件访问、技能加载的底层逻辑密切相关。另外,我通过checkpointer为智能体添加了记忆功能,Deep Agents本身封装了多种记忆保存方式,这次为了演示便捷,我选用了最基础的内存记忆。在智能体invoke调用时,需要指定config参数来标识不同的会话,我这里为了简化演示,直接设置为“1”,实际应用中可根据会话需求灵活调整。

环境配置方面也有一些差异需要注意:我使用的是MacOS系统,因此没有在Agent中额外指定Python环境变量;但如果是Windows系统,就必须手动配置,否则会影响技能的正常运行。关于Windows系统的具体配置方法,大家可以参考B站上的相关教学视频:【19-能执行 python 代码的技能-哔哩哔哩】https://b23.tv/aDDuAz7,这个视频属于“强哥学编程”的Deep Agents零基础教程合集,内容细致,小白也能轻松看懂。

很多朋友可能会好奇,Deep Agent和OpenClaw这类“龙虾”产品到底有什么区别?结合我的实操体验,我用一个形象的比喻和大家说明:它们本质上都是Agent智能体,但OpenClaw就像一只成熟的龙虾,而Deep Agent则更像是一个虾卵——前者是开箱即用的成品,后者则需要我们自己打磨、配置,才能发挥出相应的功能,这也契合了Deep Agents作为“智能体脚手架”、需要开发者自行配置优化的定位。

我用QClaw(一款“龙虾”类产品)做了个直观测试:将本地系统接入QClaw后,我询问它“今天我系统里都有哪些课程”,QClaw会自动调用已配置的SKILL,通过接口获取学生ID和教练ID,之后还会自动关联人员表,将ID转换成对应的人名,整个过程无需手动干预。但同样的SKILL放到Deep Agent中,它只会直接返回原始的学生ID和教练ID,不会进行后续的转换操作。后来我在创建Deep Agent时添加了专属系统提示词,才实现了和QClaw类似的效果。这也恰恰体现了OpenClaw、Claude这类产品的优势——它们在基础Agent框架之上,额外做了大量的优化和封装工作,让用户无需关注底层细节,就能实现更便捷的操作,这也是它们能被更多小白用户接受的核心原因。

小讯
上一篇 2026-04-19 17:52
下一篇 2026-04-19 17:50

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/271776.html