187 lines
4.2 KiB
Markdown
187 lines
4.2 KiB
Markdown
# ZK Data Agent
|
||
|
||
ZK Data Agent 是面向中控数据开发流程的 Agent 服务。当前仓库包含:
|
||
|
||
- Python 后端:负责 Agent loop、工具调用、会话持久化和数据开发工具。
|
||
- Next.js 前端:提供 Web UI、会话管理、工具调用展示和数据开发交互入口。
|
||
- Skill / Tools:承载产品定义到数据生成、线上数据挖掘等数据开发链路。
|
||
|
||
## 快速部署
|
||
|
||
### 从 Git 一键部署
|
||
|
||
适合首次部署,也适合后续更新:
|
||
|
||
```bash
|
||
APP_DIR="/opt/zk-data-agent" BRANCH="main" REPO="git@git.n.xiaomi.com:wuyang6/zk-data-agent.git" bash -lc '
|
||
set -euo pipefail
|
||
|
||
sudo mkdir -p "$APP_DIR"
|
||
sudo chown "$USER":"$USER" "$APP_DIR"
|
||
|
||
if [ -d "$APP_DIR/.git" ]; then
|
||
cd "$APP_DIR"
|
||
git fetch origin
|
||
git checkout "$BRANCH"
|
||
git pull --ff-only origin "$BRANCH"
|
||
else
|
||
rm -rf "$APP_DIR"
|
||
git clone --branch "$BRANCH" "$REPO" "$APP_DIR"
|
||
cd "$APP_DIR"
|
||
fi
|
||
|
||
bash scripts/deploy-ubuntu.sh "$BRANCH" --skip-git
|
||
'
|
||
```
|
||
|
||
修改部署目录或分支时,只需要调整命令开头的变量:
|
||
|
||
```bash
|
||
APP_DIR="/data/zk-data-agent" BRANCH="main" REPO="git@git.n.xiaomi.com:wuyang6/zk-data-agent.git" bash -lc '...'
|
||
```
|
||
|
||
这个命令会自动完成:
|
||
|
||
- 目标目录不存在时执行 `git clone`
|
||
- 目标目录已存在时执行 `git fetch` / `git pull --ff-only`
|
||
- 进入仓库后执行 `bash scripts/deploy-ubuntu.sh`
|
||
|
||
说明:仓库是私有仓库,`curl | bash` 拉 raw 文件时容易拿到登录页 HTML;因此推荐直接走 SSH git 权限。
|
||
|
||
### 仓库内一键部署/更新
|
||
|
||
如果已经在仓库目录中:
|
||
|
||
```bash
|
||
bash scripts/deploy-ubuntu.sh
|
||
```
|
||
|
||
部署指定分支:
|
||
|
||
```bash
|
||
bash scripts/deploy-ubuntu.sh main
|
||
```
|
||
|
||
强制覆盖服务器工作区:
|
||
|
||
```bash
|
||
bash scripts/deploy-ubuntu.sh main --force
|
||
```
|
||
|
||
## 部署配置
|
||
|
||
首次执行 `scripts/deploy-ubuntu.sh` 时,如果仓库根目录不存在 `.env.deploy`,脚本会交互式提示输入:
|
||
|
||
- `OPENAI_API_KEY`
|
||
- `OPENAI_BASE_URL`
|
||
- `OPENAI_MODEL`
|
||
- 后端监听地址和端口
|
||
- 前端监听地址和端口
|
||
|
||
配置会写入:
|
||
|
||
```text
|
||
.env.deploy
|
||
```
|
||
|
||
该文件包含敏感信息,只保存在部署机器本地,权限会设置为 `600`,并且已被 `.gitignore` 忽略,不会提交到 git。
|
||
|
||
如需修改模型或 key:
|
||
|
||
```bash
|
||
vim .env.deploy
|
||
```
|
||
|
||
可参考示例:
|
||
|
||
```bash
|
||
cp .env.deploy.example .env.deploy
|
||
```
|
||
|
||
## 运行方式
|
||
|
||
部署脚本会安装两个 systemd 服务:
|
||
|
||
```bash
|
||
zk-data-agent-backend
|
||
zk-data-agent-frontend
|
||
```
|
||
|
||
查看状态:
|
||
|
||
```bash
|
||
sudo systemctl status zk-data-agent-backend
|
||
sudo systemctl status zk-data-agent-frontend
|
||
```
|
||
|
||
查看日志:
|
||
|
||
```bash
|
||
sudo journalctl -u zk-data-agent-backend -f
|
||
sudo journalctl -u zk-data-agent-frontend -f
|
||
```
|
||
|
||
重启服务:
|
||
|
||
```bash
|
||
sudo systemctl restart zk-data-agent-backend zk-data-agent-frontend
|
||
```
|
||
|
||
停止服务:
|
||
|
||
```bash
|
||
sudo systemctl stop zk-data-agent-backend zk-data-agent-frontend
|
||
```
|
||
|
||
## 本地开发启动
|
||
|
||
本地调试可以使用:
|
||
|
||
```bash
|
||
bash scripts/start-webui.sh
|
||
```
|
||
|
||
默认端口:
|
||
|
||
- 前端:`http://127.0.0.1:3000`
|
||
- 后端:`http://127.0.0.1:8765`
|
||
|
||
`scripts/start-webui.sh` 会优先读取本机 `.env.deploy`,也可以直接使用当前 shell 中的环境变量。
|
||
|
||
## 环境要求
|
||
|
||
Ubuntu 部署建议准备:
|
||
|
||
- `git`
|
||
- `bash`
|
||
- `curl`
|
||
- `sudo`
|
||
- `systemd`
|
||
- `pyenv`
|
||
- Python `3.10.14`
|
||
- Node.js `20` 或 `22`
|
||
- `npm`
|
||
|
||
Python 后端依赖由部署脚本安装到项目根目录 `.venv`。
|
||
|
||
前端依赖由部署脚本在 `frontend/app` 下执行 `npm ci` 安装,并执行 `npm run build`。
|
||
|
||
## 目录说明
|
||
|
||
```text
|
||
backend/ FastAPI Web 后端
|
||
frontend/app/ Next.js 前端
|
||
src/ Agent runtime、tools、skills
|
||
scripts/ 本地启动、部署、systemd 启动脚本
|
||
deploy/systemd/ systemd service 模板
|
||
.port_sessions/ 本地运行数据,禁止提交
|
||
.env.deploy 本机私有部署配置,禁止提交
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
- 不要把 `OPENAI_API_KEY` 写入可提交文件。
|
||
- `.env.deploy`、`.venv`、`.port_sessions` 都是本机文件,不进入 git。
|
||
- 服务器更新优先使用 `bash scripts/deploy-ubuntu.sh`,不要手工分散执行依赖安装和服务重启。
|
||
- 生产/长期运行使用 systemd 服务;`scripts/start-webui.sh` 只用于本地调试。
|