LangChain DeepAgents 速通指南(七)—— DeepAgents使用Agent Skill

深入理解 DeepAgents 中的 Skill 机制

DeepAgents 是 LangChain 团队开发的一个强大框架,旨在为 AI Agent 提供灵活且易于扩展的功能模块,其中 Skill 功能是其核心特性之一。本文将详细介绍如何在 DeepAgents 中使用和实现 Skills,并通过实战示例帮助读者掌握其应用方法。

概述

Skill 机制允许开发者定义一组独立的操作或功能集合,这些操作可以通过 AI Agent 在对话过程中按需加载并执行。DeepAgents 提供了完善的中间件支持来管理和激活这些 Skill,使得开发人员可以专注于业务逻辑的实现而不是框架层面的技术细节。

深入解析 DeepAgents Skills 实现机制

1. 发现与识别 Skills

通过 FileSystemMiddleware 中间件,DeepAgents 能够扫描指定目录中的所有子文件夹,并提取每个 Skill 文件夹内的 SKILL.md 文件头部的 YAML 元数据(如名称和描述),进而生成一个 SkillMetadata 列表。

2. 系统提示词注入

在 before_agent 钩子函数中,通过 SkillsMiddleware 中间件将所有 Skill 的元信息组合成一段文本,并将其附加到系统提示中。该过程确保了模型每次调用时都能看到可用的 Skills 和如何使用它们的信息。

3. 渐进式加载

当 AI Agent 需要执行某个具体的 Skill 时,DeepAgents 会读取对应的 SKILL.md 文件以获取更详细的操作说明,并按需加载相关脚本、资源等附加文件来完成任务。

4. 任务执行与完成

AI Agent 根据 Skill 的描述和提供的工具进行必要的操作(如调用外部程序或访问数据),最终实现指定的任务目标。

DeepAgents Skills 实战

下面将通过一个简单的例子向大家展示如何在实际项目中使用 DeepAgent 来集成并运行 Skill 功能:

准备示例 Skill

首先从官方 GitHub 仓库下载一个示范的 Skill,将其放置于项目的 skills 目录下。

git clone https://github.com/langchain-ai/deepagents.git
cd deepagents/libs/cli/examples/skills/langgraph-docs
cp -r langgraph-docs /path/to/your-project/skills/

编写 Python 脚本

接下来创建一个新脚本来定义模型和持久化存储。

from dotenv import load_dotenv
from langchain_deepseek import ChatDeepSeek
from deepagents import create_deep_agent
from langgraph.checkpoint.memory import MemorySaver
from deepagents.backends.filesystem import FilesystemBackend

load_dotenv()

model = ChatDeepSeek(
    model="deepseek-chat",
)

checkpointer = MemorySaver()

创建 Deep Agent 并指定 Skills 目录

接下来利用 create_deep_agent 函数创建一个 AI Agents 实例,并通过设置参数来激活 Skill 功能。

agent = create_deep_agent(
    model=model,
    backend=FilesystemBackend(root_dir="./", virtual_mode=True),
    skills=["./skills/"],
    checkpointer=checkpointer,  # Required!
)

运行测试

最后,向 AI Agent 提问以验证 Skill 是否已经正确加载及执行:

response = agent.invoke("What is langgraph?")
print(response)

通过以上步骤,我们可以看到 DeepAgents 如何简化了 Skills 的集成过程,并提供了强大的功能扩展能力。这使得开发者能够更加专注于业务逻辑的实现而非底层框架的细节。

总结来说,DeepAgents 为 AI Agent 提供了一个强大且易于使用的 Skill 管理机制,极大地方便了开发人员在复杂场景中的应用需求。相信通过本文的学习与实践,读者们已经掌握了如何在自己的项目中利用 DeepAgents 实现灵活高效的 Skills 功能了。

3.2 处理复杂技能

为了展示如何使用更复杂的 Skill,下面会介绍一个日常办公中常用的 Skill —— 文档处理 Skill。

获取和配置文档处理 Skill

首先,我们需要从官方 SkillHub 下载所需 Skill 的 ZIP 文件,并将其解压到项目目录下的 skills 文件夹中。这个过程包括访问 SkillHub 网站、搜索相关 Skill 并下载文件,然后将内容放置在指定位置以便于后续使用。

为了确保这些操作顺利进行,请参考以下步骤:

  • 登录 SkillHub 官网
  • 查找并下载名为 docx 的文档处理 Skill
  • 解压下载的 ZIP 文件,并将其内容移动到项目中的 skills 目录,以便于后续技能加载。

编写代码

接下来我们需要编写代码来配置和使用这个新的 Skill。在开始编码之前,请确保你已经安装了所有必要的依赖项并设置了正确的环境变量。

导入依赖

你需要导入一些关键库以支持命令执行和其他功能:

from pathlib import Path
from dotenv import load_dotenv
from langgraph.checkpoint.memory import MemorySaver
from langchain_deepseek import ChatDeepSeek
from deepagents.backends import LocalShellBackend
from deepagents import create_deep_agent

load_dotenv()
配置后端支持

配置 LocalShellBackend 以执行命令行脚本,同时设置模型和记忆模块:

root_dir = Path.cwd().as_posix() # 确保路径使用 POSIX 格式而不是 Windows 的 \ 字符
print(root_dir) 

backend = LocalShellBackend(
    root_dir=root_dir,
    inherit_env=True,      
    timeout=120,           # 设置命令执行的超时时间 
    max_output_bytes=100000  
)
定义系统提示和创建智能体

通过 create_deep_agent 函数来定义一个新智能体,并传入所需的参数:

system_prompt = '''
## 角色设定
你是一位专业、高效、多领域的超级智能助手,具备强大的知识整合与问题解决能力。你善于理解用户意图,提供准确、清晰、有温度的回答。

...

read_file工具使用注意点: 不支持Windows绝对地址, 如: 错误写法 D:\xxx\xxx\SKILL.md, 正确写法为 /xxx/xxx/SKILL.md
'''

agent = create_deep_agent(
    model=model,
    backend=backend,
    skills=[root_dir + r'/skills'],
    system_prompt=system_prompt,
    checkpointer = checkpointer,  
)
编写流式输出并测试

编写一个简单的交互界面来测试智能体是否成功调用了文档处理 Skill:

while True:
    question = input('请输入:')
    if not question:
        continue
    if question == 'q':
        break
    for type, chunk in agent.stream({
        ...
            stream_mode=["updates"]
    ):
        ...

运行结果

测试结果显示,智能体成功调用文档处理 Skill 并完成任务。它能够创建指定长度的笑话并保存到 .docx 文件中。

通过上述步骤,我们展示了如何利用 DeepAgents 的灵活性来扩展其功能以应对更复杂的应用场景,例如生成和编辑办公文件。这为进一步探索和应用提供了坚实的基础。

四、总结

在这一篇文章中,我们深入解析了 DeepAgents 中的 Skill 机制,并通过具体案例详细介绍了使用流程。DeepAgents 使用 SkillsMiddleware 和 FileSystemMiddleware 的协同工作来发现并激活 Skills。此外,文章还展示了如何处理更复杂的场景,例如办公文档生成。

合理利用这些技能可以显著增强智能体的功能范围。但是,在部署和使用过程中需要注意路径配置的准确性以及系统提示语句的一致性问题。下一期我们将继续探讨 DeepAgents 的流式输出机制及其应用场景。


> 🔗 相关阅读LangChain.js 架构设计深度剖析