自己编写的AI Agent如何调用Skills

封面图

Reading

前言

Openclaw的热度持续上升证明了AI已从简单对话问答的时代进入到了“可以真正干活的时代”。Openclaw真正爆火的原因之一是Openclaw/Claude灵活的skills系统。Skills系统相当于LLM的“外接办事指南”。Skills通过人类语言,将做某件事的步骤清晰描述,AI便能学会做这件事。例如从往上下载并总结资料,基于已知内容自动格式化并生成PDF文档等。Skills的出现极大的方便了人类拓展LLM的能力。

Skills的详细介绍参见:https://agentskills.io/specification

接下来问题来了,Openclaw可以支持调用skills,我们自己编写的agent如何调用Skills?一个简单的方案是使用deepagents。Deepagents是Langchain 2025年开源的企业级高级智能体框架。支持任务分解,多智能体等,开箱即用。当然最重要的是原生支持skills。本篇为大家带来deepagents加载和使用skills的方法。

环境要求

演示环境要求如下:

  • 任意Linux系统
  • uv
  • Python3.12或者以上版本
  • 一个本地的vLLM模型服务(Ollama也可以)

使用uv添加项目依赖(uv add ...)。需要安装的依赖如下所示:

[project]
name = "deep-agent"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.14"
dependencies = [
    "deepagents>=0.4.11",
    "langchain>=1.2.12",
    "langchain-community>=0.4.1",
    "langchain-experimental>=0.4.1",
    "langchain-openai>=1.1.11",
]

项目结构

项目的目录结构如下所示:

├── README.md
├── main.py
├── pyproject.toml
├── skills
│   └── weather
│       └── SKILL.md
└── uv.lock

为了演示方便,skills使用clawhub一个获取天气预报的skill。链接为:https://clawhub.ai/steipete/weather

SKILL.md中给出访问命令在命令行直接试用发现有问题,无法返回天气预报,不确定是网络问题还是服务商的接口规则有变化。经过试验后修改SKILL.md中所有访问wttr.in的URL为:

curl -s "wttr.in/London"

确保其能调用成功。

main.py我们在下一节准备。

编写main.py代码

代码的主要步骤为:

  1. 创建llm对象,连接vLLM模型服务。
  2. 创建deepagent,使用上面给出的llm对象,从指定目录中扫描并加载skills,加载调用shell的工具ShellTool。
  3. 调用deepagent。

按照主要步骤,编写代码如下:

from deepagents import create_deep_agent
from deepagents.backends.filesystem import FilesystemBackend
from langchain_openai import ChatOpenAI
from langchain_community.tools import ShellTool


def init_vllm_model():
    # 配置vLLM参数(需要指定vllm服务地址和api-key)
    llm = ChatOpenAI(
        api_key="sk-1234567",
        base_url="http://192.168.0.1:8091/v1",
        model="Qwen3_32B",  # 模型名
        temperature=0.1,  # 生成温度(越低越稳定)
        top_p=0.95
    )

    return llm


def run_deepagent_vllm_demo():
    llm_chain = init_vllm_model()
    # 初始化ShellTool
    shell_tool = ShellTool(verbose=True)

    # 创建DeepAgent实例
    # Skills放置在本地文件系统,因此使用FilesystemBackend
    agent = create_deep_agent(
        model=llm_chain,
        tools=[shell_tool],
        backend=FilesystemBackend(root_dir="/root/projects/deep_agent/tmp/"),
        skills=["/root/projects/deep_agent/skills/"],
        system_prompt="你是一个个人助手,按照用户提出的问题给出解答,输出结果要清晰易读。"
    )


    # 创建用户请求
    user_request = {
        "messages": [
            {
                "role": "user",
                "content": f"北京天气如何?"
            }
        ]
    }

    # 运行Agent并输出结果
    result = agent.invoke(user_request)
    print("=" * 50)
    print("DeepAgent + vLLM 执行结果:")
    result['messages'][-1].pretty_print()


def main():
    run_deepagent_vllm_demo()


if __name__ == "__main__":
    main()

验证执行

执行方法:

uv run main.py

执行结果(截取关键步骤和结果):

Executing command:
 ['curl -s "wttr.in/Beijing"']

...(中间省略)

DeepAgent + vLLM 执行结果:
================================== Ai Message ==================================



当前北京天气:霾,气温12°C,东北风4公里/小时,能见度5公里。

**今日(17日)预报**:
- 上午:局部多云,6°C
- 中午至傍晚:多云,9°C至11°C
- 夜间:晴,9°C

**明日(18日)**:
- 全天晴,气温5°C至12°C

**后日(19日)**:
- 上午至中午:局部多云,8°C至13°C
- 傍晚:晴,14°C
- 夜间:晴,12°C

数据来源:[wttr.in](https://wttr.in)(无API密钥的免费服务)

我们可以看到deepagent读取了weather skill,并按照SKILL.md文档中说明的方式调用了curl -s "wttr.in/Beijing"获取到了北京的天气。最后将返回结果加工返回给用户。

参考资料

Langchain的内置工具:https://docs.langchain.com/oss/python/integrations/tools

DeepAgents如何使用skills:https://docs.langchain.com/oss/python/deepagents/skills#usage

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容