从TRAE线下到LangChain落地,我见证SKILLS从概念到普及的半年

发布时间:2026/6/25 23:02:59
从TRAE线下到LangChain落地,我见证SKILLS从概念到普及的半年 最早接触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_keyos.getenv(OPENAI_API_KEY), model_nameDoubao-Seed-2.0-pro, base_urlhttps://ark.cn-beijing.volces.com/api/coding/v3, temperature0 ) agent create_deep_agent( modelmodel, backendLocalShellBackend( root_dir., virtual_modeTrue ), skills[./skills], checkpointerInMemorySaver(), system_prompt你是一个智能助手如果查询的结果是ID那么就根据ID查询对应的名称。 ) while True: input_textinput(User message: ) if input_text.lower() in (exit): break resultsagent.invoke( {messages:[{role: user, content: input_text}]}, config{configurable: {thread_id: 1}} ) for message in results[messages]: print(message.pretty_print())细节和心得在实际实操过程中我也积累了一些细节心得在这里和大家分享一下。LLM层我选用的是豆包大模型得益于它兼容OpenAI协议的特性我直接采用了ChatOpenAI的调用方法省去了额外适配的麻烦。不过这里有个小坑需要提醒大家如果在TRAE或者豆包平台内直接生成代码系统大概率会提示导入豆包专属库但后续让TRAE自主运行时常会出现库找不到的问题。有意思的是TRAE会自动检索豆包的官方文档自行调整代码最终切换到ChatOpenAI的调用方式算是一个比较智能的适配小细节。另外需要特别留意由于我使用的是火山引擎的Coding Plan火山引擎作为字节跳动旗下的云和AI服务平台能提供稳定的大模型服务支持因此调用时的base_url和默认配置会有所不同具体可参考火山引擎的官方配置指引。再说说Deep Agent的实操细节它的写法和之前Create Agent的方式大同小异上手难度不高最实用的一点是创建Deep Agent时可以直接指定SKILLS所在的目录。按照Deep Agents的设计逻辑SKILL本质上就是包含SKILL.md文件的文件夹及相关脚本只要将各类SKILL包括从OpenClaw获取的SKILL放入指定目录就能被系统自动识别。但有一个关键细节需要重点注意SKILL的文件夹名称必须是小写目前Deep Agent暂不支持大写命名否则会无法识别这也是我实操中踩过的一个小坑。还有一个必看要点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框架之上额外做了大量的优化和封装工作让用户无需关注底层细节就能实现更便捷的操作这也是它们能被更多小白用户接受的核心原因。