Skip to content

Commit 1294b0f

Browse files
chore(deploy): update deploy templates (#76)
* update deploy templates * remove studio in veadk init * remove studio-related code * use cookiecutter for template * update deploy function * update docs and prompts * update deploy doc * remove requirements * fix deploy module load bug * auto copy requirements * add logging for copy requirements
1 parent f153365 commit 1294b0f

File tree

361 files changed

+760
-1665
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

361 files changed

+760
-1665
lines changed

docs/docs/.vuepress/config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export default defineUserConfig({
1313

1414
navbar: ['/', '/introduction'],
1515

16-
sidebar: ['introduction', 'installation', 'get-started', 'agent', 'memory', 'tool', 'knowledgebase', 'tracing', 'evaluation', 'deploy', 'cli', 'veadk-studio']
16+
sidebar: ['introduction', 'installation', 'get-started', 'agent', 'memory', 'tool', 'knowledgebase', 'tracing', 'evaluation', 'deploy', 'cli']
1717
}),
1818

1919
bundler: viteBundler(),

docs/docs/deploy.md

Lines changed: 115 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,128 @@
11
# 部署上云
22

3-
VeADK提供了一个云引擎,配合命令行脚手架,你可以方便地:
3+
## 命令行部署
44

5-
- 将你的本地Agent项目上传到云端([火山引擎函数服务平台](https://www.volcengine.com/product/vefaas)
6-
- 启动一个新的样例模板项目进行开发
5+
VeADK提供了一个云引擎,配合命令行脚手架,你可以:
76

8-
你可以指定部署到云端的项目以三种模式进行对外服务:
7+
- **快速开始** 启动一个新的样例模板项目进行开发
8+
- **从已有项目** 将你本地的 Agent 项目上传至[火山引擎函数服务平台](https://www.volcengine.com/product/vefaas)
99

10-
- VeADK Studio
11-
- VeADK Web(兼容Google ADK Web)
12-
- A2A Server
10+
部署时,你可以指定两种部署模式来对外提供服务:
1311

14-
前两种将会为你提供一个Web界面,方便你在浏览器中进行测试与可观测实践。
12+
- **A2A与MCP Server**
13+
- A2A Server 提供遵循 A2A 标准的 `message_send` 等接口
14+
- MCP Server 提供一个 `run_agent` 工具方法
15+
- **VeADK Web**
16+
- 提供Web界面,方便你在浏览器中进行体验
1517

16-
## 脚手架
18+
### 快速开始
1719

18-
你可以运行`init`命令来初始化一个新的Agent项目:
20+
#### 初始化
21+
22+
你可以运行`veadk init`命令来初始化一个新的Agent项目:
1923

2024
```bash
21-
veadk init
25+
$ veadk init
26+
Welcome use VeADK to create your project. We will generate a `weather-reporter` application for you.
27+
Local directory name [veadk-cloud-proj]:
28+
Volcengine FaaS application name [veadk-cloud-agent]:
29+
Volcengine API Gateway instance name []:
30+
Volcengine API Gateway service name []:
31+
Volcengine API Gateway upstream name []:
32+
Choose a deploy mode:
33+
1. A2A/MCP Server
34+
2. VeADK Web / Google ADK Web
35+
Enter your choice (1, 2): 1
36+
Template project has been generated at .../veadk-cloud-proj
37+
Edit .../veadk-cloud-proj/src to define your agents
38+
Edit .../veadk-cloud-proj/deploy.py to define your deployment attributes
39+
Run python `deploy.py` for deployment on Volcengine FaaS platform.
2240
```
2341

2442
它会提示你输入如下几个参数:
2543

2644
- 本地项目名称(即项目的本地目录名称)
27-
- VeFaaS应用名称
28-
- 火山引擎网关实例名称
29-
- 火山引擎网关服务名称
30-
- 火山引擎网关Upstream名称
45+
- VeFaaS应用名称(不可带下划线)
46+
- 火山引擎网关实例名称(可选)
47+
- 火山引擎网关服务名称(可选)
48+
- 火山引擎网关Upstream名称(可选)
3149
- 部署模式
32-
1. A2A Server
33-
2. VeADK Studio
34-
3. VeADK Web / Google ADK Web
50+
1. A2A / MCP Server
51+
2. VeADK Web
3552

3653
生成后的项目结构如下:
3754

3855
```bash
3956
└── veadk-cloud-proj
40-
├── __init__.py
41-
├── config.yaml.example # 需要修改为config.yaml并设置
42-
├── deploy.py # 部署脚本文件
43-
├── README.md
57+
├── config.yaml.example # 定义环境变量
58+
├── deploy.py # 部署脚本
4459
└── src
45-
├── __init__.py
46-
├── agent.py # 在其中定义你的Agent和短期记忆
47-
├── app.py # FastAPI应用,用于处理HTTP请求
48-
├── requirements.txt # 依赖
49-
├── run.sh # VeFaaS服务启动脚本
50-
└── studio_app.py # 用于VeADK Studio/Web的应用
60+
├── agent.py # agent 运行时数据导出
61+
├── app.py # Server 定义
62+
├── requirements.txt # 依赖
63+
├── run.sh # 启动脚本
64+
└── weather_report # agent module
65+
├── __init__.py # 必须包含`from . import agent`
66+
└── agent.py # agent 定义
5167
```
5268

53-
别担心,你所创建的`config.yaml`不会被上传到云端,其中的属性值将会以环境变量的形式上传至VeFaaS平台。
69+
你所创建的 `config.yaml` 不会被上传到云端,其中的属性值将会以环境变量的形式上传至VeFaaS平台。
70+
71+
只有 `src/` 路径下的文件才会被上传到云端。
72+
73+
#### 自定义项目
74+
75+
在使用脚手架生成模板项目后,你可以做如下操作:
76+
77+
1.`src` 目录中直接导入一个能够被 ADK Web 识别的目录(例如 `weather_agent` 目录),主要包括:
78+
- 包含 `root_agent` 这个全局变量的 `agent.py` 文件
79+
- 包含 `from . import agent``__init__.py` 文件
80+
2.`src/agent.py` 中实例化 `AgentRunConfig` 类,主要属性包括:
81+
- `app_name`:部署在云上的 Agent 应用名称(与VeFaaS应用名称不一定对应,此处为服务级别)
82+
- `agent`:你提供服务的 Agent 实例
83+
- `short_term_memory`:短期记忆,为空则默认初始化in-memory短期记忆,重启后即消失
84+
3. 使用`python deploy.py`进行云端部署
85+
86+
如果你想在部署到云端前进行本地运行来测试代码问题,可以在 `deploy.py` 中的 `engine.deploy` 调用处,添加参数:`local_test=True`。添加后,在部署前将会启动相关服务,测试启动是否正常。
87+
88+
#### 云端环境变量
89+
90+
| 环境变量名称 | 说明 || 备注 |
91+
| - | - | - | - |
92+
| VEADK_TRACER_APMPLUS | 是否使用火山 APMPlus Tracing | `true` \| `false` | 默认为 `false`|
93+
| VEADK_TRACER_COZELOOP | 是否使用火山 CozeLoop Tracing | `true` \| `false` | 默认为 `false` |
94+
| VEADK_TRACER_TLS | 是否使用 TLS Tracing | `true` \| `false` | 默认为 `false` |
95+
| SHORT_TERM_MEMORY_BACKEND | 启动 ADK Web 时的短期记忆后端 | `local` \| `mysql` | 优先级低于在 `agent.py` 中定义的短期记忆 |
96+
| LONG_TERM_MEMORY_BACKEND | 启动 ADK Web 时的长期记忆后端 | `opensearch` \| `viking` | 优先级低于在 `agent.py` 中定义的长期记忆 |
97+
98+
### 从已有项目
5499

55-
只有`src/`路径下的文件才会被上传到云端
100+
如果你已经在本地有一个 agent 项目,你可以使用`veadk deploy`命令将你当前的项目上传至云端
56101

57-
## Cloud Agent Engine
102+
使用命令前,请先确保你的本地 agent 项目中包括:
58103

59-
如果你已经有一个较为成熟的Agent项目,你可以通过VeADK中提供的云引擎来部署你的项目。VeFaaS平台所需的部署文件我们将会为你自动生成到你的项目路径中。
104+
1. 一个含有全局变量 `root_agent``agent.py` 文件
105+
2. 一个含有 `from . import agent` 语句的 `__init__.py` 文件
106+
107+
`veadk deploy`接收的参数如下:
108+
109+
| 名称 | 类型 | 释义 |
110+
| - | - | - |
111+
| `--access-key` | 字符串 | 火山引擎AK |
112+
| `--secret-key` | 字符串 | 火山引擎SK |
113+
| `--vefaas-app-name` | 字符串 | 火山引擎 VeFaaS 平台应用名称 |
114+
| `--veapig-instance-name` | 字符串 | 火山引擎 APIG 实例名称 |
115+
| `--veapig-service-name` | 字符串 | 火山引擎 APIG 服务名称 |
116+
| `--veapig-upstream-name` | 字符串 | 火山引擎 APIG Upstream 名称 |
117+
| `--short-term-memory-backend` | `local` \| `mysql` | 短期记忆后端 |
118+
| `--use-adk-web` | FLAG | 设置后将会在云端启动 web,否则为 A2A / MCP 模式 |
119+
| `--path` | 字符串 | 本地项目路径,默认为当前目录 |
120+
121+
## 代码部署
122+
123+
### Cloud Agent Engine
124+
125+
如果你已经有一个较为成熟的Agent项目,你可以通过VeADK中提供的云引擎来部署你的项目。项目结构的最佳实践可参考[这里](#项目结构)
60126

61127
```python
62128
from veadk.cloud.cloud_agent_engine import CloudAgentEngine
@@ -78,12 +144,9 @@ cloud_app = engine.deploy(...)
78144
| gateway_name | str | 火山引擎网关实例名称 |
79145
| gateway_service_name | str | 火山引擎网关服务名称 |
80146
| gateway_upstream_name | str | 火山引擎网关Upstream名称 |
81-
| use_studio | bool | 是否在云端使用VeADK Studio |
82147
| use_adk_web | bool | 是否在云端使用VeADK Web / Google Web |
83148

84-
注意:`use_studio``use_adk_web`不可同时为`True`
85-
86-
## Cloud App
149+
### Cloud App
87150

88151
当你使用`CloudAgentEngine`部署完成后,将返回一个`CloudApp`实例,代表云应用,主要功能包括:
89152

@@ -117,9 +180,9 @@ app = CloudApp(name="veadk-agent", endpoint=ENDPOINT)
117180
cloud_app.invoke(user_id=USER_ID, session_id=SESSION_ID, message=...)
118181
```
119182

120-
## 更新云应用
183+
### 更新云应用
121184

122-
### 通过 CloudAgentEngine 更新
185+
#### 通过 CloudAgentEngine 更新
123186

124187
当您需要更新已部署的Agent代码时,可以使用`update_function_code`方法:
125188

@@ -142,9 +205,9 @@ updated_cloud_app = engine.update_function_code(
142205
- 更新操作会保持相同的访问端点URL
143206
- 确保项目路径包含`agent.py`文件
144207

145-
## 删除云应用
208+
### 删除云应用
146209

147-
### 通过 CloudAgentEngine 删除
210+
#### 通过 CloudAgentEngine 删除
148211

149212
```python
150213
from veadk.cloud.cloud_agent_engine import CloudAgentEngine
@@ -162,3 +225,15 @@ Confirm delete cloud app my-agent-app? (y/N): y
162225
```
163226

164227
输入`y`确认删除,输入其他任何字符或直接回车则取消删除。
228+
229+
## 项目结构
230+
231+
一个能在云上运行的 agent 项目结构主要包括如下几个文件:
232+
233+
- `run.sh` 启动脚本
234+
- `requirements.txt` 依赖列表
235+
- `app.py` 定义 FastAPI Server 的 python 文件
236+
- `agent.py` 导出 agent 以及短期记忆、依赖路径等信息
237+
- `agent_module` 自定义的 agent 模块
238+
- `__init__.py` 必须包含 `from . import agent` 语句
239+
- `agent.py` 定义 agent 实例,必须包含 `root_agent=...` 全局变量导出

pyproject.toml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ dependencies = [
2121
"opentelemetry-exporter-otlp>=1.35.0",
2222
"opentelemetry-instrumentation-logging>=0.56b0",
2323
"wrapt>=1.17.2", # For patching built-in functions
24+
"openai==1.99.9" # For fix https://github.com/BerriAI/litellm/issues/13710
2425
]
2526

2627
[project.scripts]
@@ -43,6 +44,7 @@ cli = [
4344
"volcengine-python-sdk==4.0.3", # For Volcengine API
4445
"agent-pilot-sdk>=0.0.9", # Prompt optimization by Volcengine AgentPilot/PromptPilot toolkits
4546
"fastmcp>=2.11.3", # For running MCP
47+
"cookiecutter>=2.6.0", # For cloud deploy
4648
]
4749
dev = [
4850
"pre-commit>=4.2.0", # Format checking
@@ -69,4 +71,9 @@ exclude = ["assets*", "ide*", "tests*"]
6971
include-package-data = true
7072

7173
[tool.setuptools.package-data]
72-
"veadk" = ["**/*"]
74+
"veadk" = ["**/*"]
75+
76+
[tool.ruff]
77+
exclude = [
78+
"veadk/integrations/ve_faas/template/*"
79+
]

veadk/cli/cli.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15+
1516
import click
1617

1718
from veadk.cli.cli_deploy import deploy
1819
from veadk.cli.cli_init import init
1920
from veadk.cli.cli_prompt import prompt
20-
from veadk.cli.cli_studio import studio
2121
from veadk.cli.cli_web import web
2222
from veadk.version import VERSION
2323

@@ -34,7 +34,6 @@ def veadk():
3434
veadk.add_command(deploy)
3535
veadk.add_command(init)
3636
veadk.add_command(prompt)
37-
veadk.add_command(studio)
3837
veadk.add_command(web)
3938

4039
if __name__ == "__main__":

0 commit comments

Comments
 (0)