|
| 1 | +# Agent Skills - 使用 VeADK 和 AgentKit 构建具备 skills 能力的 Agent |
| 2 | + |
| 3 | +基于火山引擎 VeADK 和 AgentKit 构建具备 skills 能力的 Agent。 |
| 4 | + |
| 5 | +## 概述 |
| 6 | + |
| 7 | +本示例是 AgentKit 的 "Agent Skills",展示如何创建一个具备 skills 能力的 Agent。 |
| 8 | + |
| 9 | +## 核心功能 |
| 10 | + |
| 11 | +- 本地 Agent 运行,调用 aio (All in one) sandbox,运行 aio 中的 Agent,完成 skills 任务 |
| 12 | +- 支持从 tos 中加载自定义 skills |
| 13 | +- 支持将 skills 任务结果上传到 tos |
| 14 | +- 支持`单线程执行`(agent.py) 和`多线程并发` (parallel.py) 两种模式 |
| 15 | +- 支持本地调试和云端部署 |
| 16 | + |
| 17 | +## Agent 能力 |
| 18 | + |
| 19 | +```text |
| 20 | +用户消息 |
| 21 | + ↓ |
| 22 | +AgentKit 运行时 |
| 23 | + ↓ |
| 24 | +Agent Skills |
| 25 | + ├── VeADK Agent (对话引擎) |
| 26 | + ├── ShortTermMemory (会话记忆) |
| 27 | + └── 火山方舟模型 (LLM) |
| 28 | +``` |
| 29 | + |
| 30 | +### 核心组件 |
| 31 | + |
| 32 | +| 组件 | 描述 | |
| 33 | +| - | - | |
| 34 | +| **Agent 服务** | [agent.py](https://github.com/volcengine/agentkit-samples/blob/main/02-use-cases/beginner/hello_world/agent.py) - 主应用程序,定义 Agent 和记忆组件 | |
| 35 | +| **测试客户端** | [client.py](https://github.com/volcengine/agentkit-samples/blob/main/02-use-cases/beginner/hello_world/client.py) - SSE 流式调用客户端 | |
| 36 | +| **项目配置** | [pyproject.toml](https://github.com/volcengine/agentkit-samples/blob/main/02-use-cases/beginner/hello_world/pyproject.toml) - 依赖管理(uv 工具) | |
| 37 | +| **AgentKit 配置** | agentkit.yaml - 云端部署配置文件 | |
| 38 | +| **短期记忆** | 使用本地后端存储会话上下文 | |
| 39 | + |
| 40 | +### 代码特点 |
| 41 | + |
| 42 | +**Agent 定义**([agent.py](https://github.com/volcengine/agentkit-samples/blob/main/02-use-cases/beginner/hello_world/agent.py#L11-L18)): |
| 43 | + |
| 44 | +```python |
| 45 | +agent = Agent() |
| 46 | +short_term_memory = ShortTermMemory(backend="local") |
| 47 | + |
| 48 | +runner = Runner( |
| 49 | + agent=agent, |
| 50 | + short_term_memory=short_term_memory, |
| 51 | + app_name=app_name, |
| 52 | + user_id=user_id |
| 53 | +) |
| 54 | +``` |
| 55 | + |
| 56 | +## 目录结构说明 |
| 57 | + |
| 58 | +```bash |
| 59 | +agent_skills/ |
| 60 | +├── agent.py # Agent 运行一个 skills 任务 |
| 61 | +├── parallel.py # 并发进行多个 skills 任务 |
| 62 | +├── client.py # 测试客户端(SSE 流式调用) |
| 63 | +├── requirements.txt # Python 依赖列表 (agentkit部署时需要指定依赖文件) |
| 64 | +├── pyproject.toml # 项目配置(uv 依赖管理) |
| 65 | +├── agentkit.yaml # AgentKit 部署配置(运行agentkit config之后会自动生成) |
| 66 | +├── Dockerfile # Docker 镜像构建文件(运行agentkit config之后会自动生成) |
| 67 | +└── README.md # 项目说明文档 |
| 68 | +``` |
| 69 | + |
| 70 | +## 本地运行 |
| 71 | + |
| 72 | +### 前置准备 |
| 73 | + |
| 74 | +**1. 开通火山方舟模型服务:** |
| 75 | + |
| 76 | +- 访问 [火山方舟控制台](https://exp.volcengine.com/ark?mode=chat) |
| 77 | +- 开通模型服务 |
| 78 | + |
| 79 | +**2. 获取火山引擎访问凭证:** |
| 80 | + |
| 81 | +- 参考 [用户指南](https://www.volcengine.com/docs/6291/65568?lang=zh) 获取 AK/SK |
| 82 | + |
| 83 | +### 依赖安装 |
| 84 | + |
| 85 | +#### 1. 安装 uv 包管理器 |
| 86 | + |
| 87 | +```bash |
| 88 | +# macOS / Linux(官方安装脚本) |
| 89 | +curl -LsSf https://astral.sh/uv/install.sh | sh |
| 90 | + |
| 91 | +# 或使用 Homebrew(macOS) |
| 92 | +brew install uv |
| 93 | +``` |
| 94 | + |
| 95 | +#### 2. 初始化项目依赖 |
| 96 | + |
| 97 | +```bash |
| 98 | +# 进入项目目录 |
| 99 | +cd 00-advanced/agent_skills |
| 100 | +``` |
| 101 | + |
| 102 | +您可以通过 `pip` 工具来安装本项目依赖: |
| 103 | + |
| 104 | +```bash |
| 105 | +pip install -r requirements.txt |
| 106 | +``` |
| 107 | + |
| 108 | +或者使用 `uv` 工具来安装本项目依赖: |
| 109 | + |
| 110 | +```bash |
| 111 | +# 如果没有 `uv` 虚拟环境,可以使用命令先创建一个虚拟环境 |
| 112 | +uv venv --python 3.12 |
| 113 | + |
| 114 | +# 使用 `pyproject.toml` 管理依赖 |
| 115 | +uv sync |
| 116 | + |
| 117 | +# 使用 `requirements.txt` 管理依赖 |
| 118 | +uv pip install -r requirements.txt |
| 119 | + |
| 120 | +# 激活虚拟环境 |
| 121 | +source .venv/bin/activate |
| 122 | +``` |
| 123 | + |
| 124 | +### 环境准备 |
| 125 | + |
| 126 | +```bash |
| 127 | +# 火山方舟模型名称 |
| 128 | +export MODEL_AGENT_NAME=doubao-seed-1-6-251015 |
| 129 | + |
| 130 | +# 火山引擎访问凭证(必需) |
| 131 | +export VOLCENGINE_ACCESS_KEY=<Your Access Key> |
| 132 | +export VOLCENGINE_SECRET_KEY=<Your Secret Key> |
| 133 | + |
| 134 | +export AGENTKIT_TOOL_SERVICE_CODE=<Your Tool Service Code> |
| 135 | +export AGENTKIT_TOOL_HOST=<Your Tool Host> |
| 136 | +export AGENTKIT_TOOL_ID=<Your Tool ID> |
| 137 | +``` |
| 138 | + |
| 139 | +### 调试方法 |
| 140 | + |
| 141 | +#### 单线程运行:使用 VeADK Web 调试界面,调试 agent.py |
| 142 | + |
| 143 | +```bash |
| 144 | +# 进入 00-advanced 目录 |
| 145 | +cd agentkit-samples/00-advanced |
| 146 | + |
| 147 | +# 启动 VeADK Web 界面 |
| 148 | +veadk web --port 8080 |
| 149 | + |
| 150 | +# 在浏览器访问:http://127.0.0.1:8080 |
| 151 | +``` |
| 152 | + |
| 153 | +Web 界面提供图形化对话测试环境,支持实时查看消息流和调试信息。 |
| 154 | + |
| 155 | +此外,还可以使用命令行测试,调试 agent.py。 |
| 156 | + |
| 157 | +```bash |
| 158 | +cd agentkit-samples/00-advanced/agent_skills |
| 159 | + |
| 160 | +# 启动 Agent 服务 |
| 161 | +uv run agent.py |
| 162 | +# 服务将监听 http://0.0.0.0:8000 |
| 163 | + |
| 164 | +# 新开终端,运行测试客户端 |
| 165 | +# 需要编辑 client.py,将其中的第 14 行和第 15 行的 base_url 和 api_key 修改为 agentkit.yaml 中生成的 runtime_endpoint 和 runtime_apikey 字段 |
| 166 | +uv run client.py |
| 167 | +``` |
| 168 | + |
| 169 | +#### 多线程并发:使用命令行测试,调试 parallel.py |
| 170 | + |
| 171 | +```bash |
| 172 | +cd agentkit-samples/00-advanced/agent_skills |
| 173 | + |
| 174 | +# 运行多线程并发程序 |
| 175 | +uv run parallel.py |
| 176 | +``` |
| 177 | + |
| 178 | +## AgentKit 部署 |
| 179 | + |
| 180 | +### 前置准备 |
| 181 | + |
| 182 | +**重要提示**:在运行本示例之前,请先访问 [AgentKit 控制台授权页面](https://console.volcengine.com/agentkit/region:agentkit+cn-beijing/auth?projectName=default) 对所有依赖服务进行授权,确保案例能够正常执行。 |
| 183 | + |
| 184 | +**1. 开通火山方舟模型服务:** |
| 185 | + |
| 186 | +- 访问 [火山方舟控制台](https://exp.volcengine.com/ark?mode=chat) |
| 187 | +- 开通模型服务 |
| 188 | + |
| 189 | +**2. 获取火山引擎访问凭证:** |
| 190 | + |
| 191 | +- 参考 [用户指南](https://www.volcengine.com/docs/6291/65568?lang=zh) 获取 AK/SK |
| 192 | + |
| 193 | +**3. 设置环境变量:** |
| 194 | + |
| 195 | +```bash |
| 196 | +# 火山引擎访问凭证(必需) |
| 197 | +export VOLCENGINE_ACCESS_KEY=<Your Access Key> |
| 198 | +export VOLCENGINE_SECRET_KEY=<Your Secret Key> |
| 199 | +``` |
| 200 | + |
| 201 | +### AgentKit 云上部署 |
| 202 | + |
| 203 | +```bash |
| 204 | +cd agentkit-samples/00-advanced/agent_skills |
| 205 | + |
| 206 | +# 配置部署参数 |
| 207 | +agentkit config |
| 208 | + |
| 209 | +# 启动云端服务 |
| 210 | +agentkit launch |
| 211 | + |
| 212 | +# 测试部署的 Agent |
| 213 | +agentkit invoke '使用 internal-comms skill 帮我写一个3p沟通材料,通知3p团队项目进度更新。关于产品团队,主要包括过去一周问题和未来一周计划,具体包括问题:写产品团队遇到的客户问题 (1. GPU+模型推理框架性能低于开源版本,比如时延高、吞吐低;2. GPU推理工具易用性差),以及如何解决的;计划:明年如何规划GPU产品功能和性能优化 (1. 发力GPU基础设施对生图生视频模型的支持;2. GPU推理相关工具链路易用性提升)。其他内容,可以酌情组织。' |
| 214 | + |
| 215 | +# 或使用 client.py 连接云端服务 |
| 216 | +# 需要编辑 client.py,将其中的第 14 行和第 15 行的 base_url 和 api_key 修改为 agentkit.yaml 中生成的 runtime_endpoint 和 runtime_apikey 字段 |
| 217 | +uv run client.py |
| 218 | +``` |
| 219 | + |
| 220 | +## 内置 skills 列表 |
| 221 | + |
| 222 | +- 记得修改一下 {YOUR_TOS_BUCKET_NAME} 为自己的 tos 存储桶名称 |
| 223 | + |
| 224 | +| skills | 描述 | 示例提示词 | |
| 225 | +| --------------------- | -------------- | -------------- | |
| 226 | +| tos-file-access | 将文件或目录上传至火山引擎TOS ,从URL下载文件。在以下情况使用此技能:(1)将智能体生成的文件或目录(如视频、图像、报告、输出文件夹)上传至TOS以便共享;(2)在智能体处理前从URL下载文件。| 请运行以下工作流程:1. 使用 tos-file-access 从 https://agentkit-skills.tos-cn-beijing.volces.com/upload/topk_benchmark.cpp 下载一个 topk_benchmark.cpp 代码文件。2. 使用 code-optimization 完善这个代码,把my_topk_inplace函数写好,要求性能要非常好,要比代码里面的标准库还要好。3. 使用 tos-file-access 将最终输出目录(包括最终代码和报告)上传到存储桶 {YOUR_TOS_BUCKET_NAME}。 |
| 227 | +| code-optimization | 通过迭代改进(最多2轮)优化代码性能。对执行时间和内存使用情况进行基准测试,与基准实现进行比较,并生成详细的优化报告。支持C++、Python、Java、Rust等语言 | 参考上一行 tos-file-access 的提示词。 |
| 228 | +| veadk-python | 基于VeADK框架实现一个可运行Agent | 请运行以下工作流程:1. 使用 veadk-python skill ,写一个 VeADK Agent,能够通过提问 "hello" 来回复。2. 将写好的代码写入本地一个新的代码文件,然后使用 tos-file-access skill 把这个代码文件上传到存储桶 {YOUR_TOS_BUCKET_NAME},最后把上传后的代码文件链接发给我。 |
| 229 | +| algorithmic-art | 详见 https://github.com/anthropics/skills/tree/main/skills/algorithmic-art |
| 230 | +| brand-guidelines | 详见 https://github.com/anthropics/skills/tree/main/skills/brand-guidelines |
| 231 | +| canvas-design | 详见 https://github.com/anthropics/skills/tree/main/skills/canvas-design |
| 232 | +| doc-coauthoring | 详见 https://github.com/anthropics/skills/tree/main/skills/doc-coauthoring |
| 233 | +| docx | 详见 https://github.com/anthropics/skills/tree/main/skills/docx |
| 234 | +| frontend-design | 详见 https://github.com/anthropics/skills/tree/main/skills/frontend-design |
| 235 | +| internal-comms | 详见 https://github.com/anthropics/skills/tree/main/skills/internal-comms |
| 236 | +| mcp-builder | 详见 https://github.com/anthropics/skills/tree/main/skills/mcp-builder |
| 237 | +| pdf | 详见 https://github.com/anthropics/skills/tree/main/skills/pdf |
| 238 | +| pptx | 详见 https://github.com/anthropics/skills/tree/main/skills/pptx |
| 239 | +| skill-creator | 详见 https://github.com/anthropics/skills/tree/main/skills/skill-creator |
| 240 | +| slack-gif-creator | 详见 https://github.com/anthropics/skills/tree/main/skills/slack-gif-creator |
| 241 | +| theme-factory | 详见 https://github.com/anthropics/skills/tree/main/skills/theme-factory |
| 242 | +| web-artifacts-builder | 详见 https://github.com/anthropics/skills/tree/main/skills/web-artifacts-builder |
| 243 | +| webapp-testing | 详见 https://github.com/anthropics/skills/tree/main/skills/webapp-testing |
| 244 | +| xlsx | 详见 https://github.com/anthropics/skills/tree/main/skills/xlsx |
| 245 | + |
| 246 | +## 示例提示词 |
| 247 | + |
| 248 | +- 记得修改一下 {YOUR_TOS_BUCKET_NAME} 为自己的 tos 存储桶名称 |
| 249 | + |
| 250 | +| 是否使用 aio 中的内置 skills | 产物是否上传 tos | 示例提示词 | |
| 251 | +| ------------------------- | -------------- | -------------- | |
| 252 | +| 使用内置 skills | 产物不上传 tos | 使用 internal-comms skill 帮我写一个3p沟通材料,通知3p团队项目进度更新。关于产品团队,主要包括过去一周问题和未来一周计划,具体包括问题:写产品团队遇到的客户问题 (1. GPU+模型推理框架性能低于开源版本,比如时延高、吞吐低;2. GPU推理工具易用性差),以及如何解决的;计划:明年如何规划GPU产品功能和性能优化 (1. 发力GPU基础设施对生图生视频模型的支持;2. GPU推理相关工具链路易用性提升)。其他内容,可以酌情组织。 |
| 253 | +| 使用内置 skills | 产物上传 tos | 请运行以下工作流程:1. 使用 canvas-design skill 帮我创作一件基于几何图形的艺术绘图。2. 使用 tos-file-access skill 把产物上传到存储桶 {YOUR_TOS_BUCKET_NAME} 里。 |
| 254 | +| 下载自己 tos 中的 skills | 产物不上传 tos | 我需要一个2人份的纯素高蛋白食谱,目标增肌。每周预算350元,喜欢30分钟内的快手菜。不喜欢蘑菇。使用 healthy-meal-planner skill 帮我制订一周的食谱。 |
| 255 | +| 下载自己 tos 中的 skills | 产物上传 tos | 请运行以下工作流程:1. 我需要一个2人份的纯素高蛋白食谱,目标增肌。每周预算350元,喜欢30分钟内的快手菜。不喜欢蘑菇。使用 healthy-meal-planner skill 帮我制订一周的食谱。2. 将制订好的食谱写入文件 recipe.md,然后使用 tos-file-access skill 把这个文件上传到存储桶 {YOUR_TOS_BUCKET_NAME},最后把上传后的文件链接发给我。 |
| 256 | +| 下载自己 tos 中一些文件 | 产物不上传 tos | 请运行以下工作流程:1. 使用 tos-file-access 从 https://agentkit-skills.tos-cn-beijing.volces.com/upload/sample3_20251209_192229.xlsx 下载一个 sample3_20251209_192229.xlsx 文件。2. 使用 xlsx 解析文件 sample3_20251209_192229.xlsx 的内容。3. 总结文件内容中的统计信息 |
| 257 | +| 下载自己 tos 中一些文件 | 产物上传 tos | 请运行以下工作流程:1. 使用 tos-file-access 从 https://agentkit-skills.tos-cn-beijing.volces.com/upload/topk_benchmark.cpp 下载一个 topk_benchmark.cpp 代码文件。2. 使用 code-optimization 完善这个代码,把my_topk_inplace函数写好,要求性能要非常好,要比代码里面的标准库还要好。3. 使用 tos-file-access 将最终输出目录(包括最终代码和报告)上传到存储桶 {YOUR_TOS_BUCKET_NAME}。 |
| 258 | + |
| 259 | +## 效果展示 |
| 260 | + |
| 261 | +| 示例提示词 | 效果截图 |
| 262 | +| -------------- | -------------- | |
| 263 | +| 使用 internal-comms skill 帮我写一个3p沟通材料,通知3p团队项目进度更新。关于产品团队,主要包括过去一周问题和未来一周计划,具体包括问题:写产品团队遇到的客户问题 (1. GPU+模型推理框架性能低于开源版本,比如时延高、吞吐低;2. GPU推理工具易用性差),以及如何解决的;计划:明年如何规划GPU产品功能和性能优化 (1. 发力GPU基础设施对生图生视频模型的支持;2. GPU推理相关工具链路易用性提升)。其他内容,可以酌情组织。|  |
| 264 | +| 请运行以下工作流程:1. 使用 canvas-design skill 帮我创作一件基于几何图形的艺术绘图。2. 使用 tos-file-access skill 把产物上传到存储桶 {YOUR_TOS_BUCKET_NAME} 里。|  |
| 265 | +| 我需要一个2人份的纯素高蛋白食谱,目标增肌。每周预算350元,喜欢30分钟内的快手菜。不喜欢蘑菇。使用 healthy-meal-planner skill 帮我制订一周的食谱。|  |
| 266 | +| 请运行以下工作流程:1. 我需要一个2人份的纯素高蛋白食谱,目标增肌。每周预算350元,喜欢30分钟内的快手菜。不喜欢蘑菇。使用 healthy-meal-planner skill 帮我制订一周的食谱。2. 将制订好的食谱写入文件 recipe.md,然后使用 tos-file-access skill 把这个文件上传到存储桶 {YOUR_TOS_BUCKET_NAME},最后把上传后的文件链接发给我。|  |
| 267 | + |
| 268 | +## 常见问题 |
| 269 | + |
| 270 | +无。 |
| 271 | + |
| 272 | +## 参考资料 |
| 273 | + |
| 274 | +- [VeADK 官方文档](https://volcengine.github.io/veadk-python/) |
| 275 | +- [AgentKit 开发指南](https://volcengine.github.io/agentkit-sdk-python/) |
| 276 | +- [火山方舟模型服务](https://console.volcengine.com/ark/region:ark+cn-beijing/overview?briefPage=0&briefType=introduce&type=new&projectName=default) |
| 277 | + |
| 278 | +## 代码许可 |
| 279 | + |
| 280 | +本工程遵循 Apache 2.0 License |
0 commit comments