Skip to content

Commit 87667b3

Browse files
authored
feat: agent skills (volcengine#66)
2 parents b98214d + b7237ea commit 87667b3

File tree

19 files changed

+483
-61
lines changed

19 files changed

+483
-61
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ __pycache__/
1313
.veadk-ignore
1414
.dockerignore
1515
uv.lock
16+
config.yaml
17+
.agentkit/
1618

1719
# Distribution / packaging
1820
.Python

00-advanced/agent_skills/README.md

Lines changed: 280 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,280 @@
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推理相关工具链路易用性提升)。其他内容,可以酌情组织。| ![](assets/images/internal-comms-skill.jpeg)
264+
| 请运行以下工作流程:1. 使用 canvas-design skill 帮我创作一件基于几何图形的艺术绘图。2. 使用 tos-file-access skill 把产物上传到存储桶 {YOUR_TOS_BUCKET_NAME} 里。| ![](assets/images/cavas-design-skill.jpeg)
265+
| 我需要一个2人份的纯素高蛋白食谱,目标增肌。每周预算350元,喜欢30分钟内的快手菜。不喜欢蘑菇。使用 healthy-meal-planner skill 帮我制订一周的食谱。| ![](assets/images/health-meal-planner-skill.jpeg)
266+
| 请运行以下工作流程:1. 我需要一个2人份的纯素高蛋白食谱,目标增肌。每周预算350元,喜欢30分钟内的快手菜。不喜欢蘑菇。使用 healthy-meal-planner skill 帮我制订一周的食谱。2. 将制订好的食谱写入文件 recipe.md,然后使用 tos-file-access skill 把这个文件上传到存储桶 {YOUR_TOS_BUCKET_NAME},最后把上传后的文件链接发给我。| ![](assets/images/health-meal-planner-skill-tos.png)
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

00-advanced/agent_skills/agent.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Deploy the agent as AgentkitAgentServerApp into the agentkit platform
2+
from agentkit.apps import AgentkitAgentServerApp
3+
from veadk import Agent, Runner
4+
from veadk.memory.short_term_memory import ShortTermMemory
5+
from veadk.tools.builtin_tools.execute_skills import execute_skills
6+
7+
app_name = "agent_skills_app"
8+
user_id = "agent_skills_user"
9+
session_id = "agent_skills_session"
10+
11+
agent = Agent(
12+
name="skill_agent",
13+
instruction="根据用户的需求,调用 execute_skills 工具执行 skills,",
14+
tools=[execute_skills],
15+
)
16+
17+
short_term_memory = ShortTermMemory(backend="local")
18+
19+
runner = Runner(
20+
agent=agent,
21+
short_term_memory=short_term_memory,
22+
app_name=app_name,
23+
user_id=user_id,
24+
)
25+
26+
# using veadk web for debugging
27+
root_agent = agent
28+
29+
agent_server_app = AgentkitAgentServerApp(
30+
agent=agent,
31+
short_term_memory=short_term_memory,
32+
)
33+
34+
if __name__ == "__main__":
35+
agent_server_app.run(host="0.0.0.0", port=8000)
763 KB
Loading
479 KB
Loading
1.23 MB
Loading
2.78 MB
Loading
1.21 MB
Loading
175 KB
Loading
1.19 MB
Loading

0 commit comments

Comments
 (0)