feat: 新增 Agent 记忆服务部署、重命名容器、整理 env 配置

- 新增 agent-memory 服务与 .env.AMS.sample
- easyai-pgvector 共用 PostgreSQL,独立库 easyai_memory
- 新增 docker/postgres/init-pgvector.sql 初始化
- 容器名: comfyAI-web→easyai-web, comfy-server→easyai-server
- easyai-asg-pg→easyai-pgvector
- 记忆服务端口配置移至 .env(comfy-server 调用用)
- 整理 .env.sample 结构,新增 /ams-api/ Nginx 代理

Made-with: Cursor
This commit is contained in:
wangbo 2026-03-20 17:06:39 +08:00
parent e64a90332c
commit ded45063d9
7 changed files with 247 additions and 73 deletions

40
.env.AMS.sample Normal file
View File

@ -0,0 +1,40 @@
# ============================================
# Agent 记忆服务agent-memory环境变量
# 使用前请复制为 .env.AMS 并根据实际情况修改
# ============================================
# ---------- PostgreSQL复用 easyai-pgvector----------
# 使用独立库 easyai_memoryinit 脚本在首次启动时创建)
# agent-memory 启动时执行 prisma migrate deploy 创建 memory_records 等表
MEMORY_DATABASE_URL=postgresql://easyai:easyai2025@easyai-pgvector:5432/easyai_memory?schema=public
# ---------- 主服务连接(用于 Embedding 与对话压缩)----------
# 主服务 API 地址(容器内网地址)
MEMORY_AI_BASE_URL=http://comfy-server:3001
MEMORY_AI_API_KEY=
# ---------- Embeddings ----------
MEMORY_EMBEDDINGS_PATH=/v1/embeddings
MEMORY_EMBEDDING_MODELS_PATH=/v1/embeddings/models
MEMORY_EMBEDDING_DIMENSION=1024
MEMORY_EMBEDDING_MODEL=text-embedding-v4
MEMORY_SCORE_CONFIDENCE_BASE=0.6
MEMORY_SCORE_CONFIDENCE_GAIN=0.4
MEMORY_SCORE_IMPORTANCE_BASE=0.7
MEMORY_SCORE_IMPORTANCE_GAIN=0.3
# ---------- 对话压缩 ----------
MEMORY_CHAT_COMPLETIONS_PATH=/v1/chat/completions
MEMORY_CHAT_MODELS_PATH=/v1/models
MEMORY_CHAT_MODEL=
MEMORY_COMPRESSION_ENABLED=true
MEMORY_COMPRESSION_MIN_LENGTH=80
# ---------- 其他 ----------
# 日志级别
LOG_LEVEL=log,error,warn,debug
# 是否禁用 Swagger 文档true 禁用)
MEMORY_DOCS_DISABLE=false
# 记忆服务镜像版本
AMS_VERSION=latest

View File

@ -5,9 +5,8 @@
# ---------- PostgreSQL ----------
# Prisma 数据库连接字符串(容器内网地址)
ASG_DATABASE_URL=postgresql://easyai:easyai2025@easyai-asg-pg:5432/agent_governance?schema=public
ASG_DATABASE_URL=postgresql://easyai:easyai2025@easyai-pgvector:5432/agent_governance?schema=public
# PostgreSQL 容器初始化配置(与 docker-compose 中 sg-postgres 保持一致)
ASG_POSTGRES_USER=easyai
ASG_POSTGRES_PASSWORD=easyai2025
ASG_POSTGRES_DB=agent_governance

View File

@ -1,70 +1,66 @@
#############################################
#1、如下配置需要根据实际情况进行配置
##############################################
# 默认服务器地址本地不需要更改云服务需要修改为云端IP并放行对应端口 TODO
# EasyAI 环境变量配置
# 复制为 .env 并根据实际情况修改
#############################################
# ========== 1. 访问地址(部署时必改) ==========
# 默认服务器 API 地址,云服务需修改为云端 IP 并放行对应端口
NUXT_PUBLIC_BASE_APIURL=http://127.0.0.1:3001
#域名访问使用如下配置,使用/api进行转发并配置nginx代理/api至3001端口
#NUXT_PUBLIC_BASE_APIURL=/api
# 默认的服务器websocket地址本地不需要更改云服务需要修改为云端IP并放行对应端口 TODO
# 域名访问NUXT_PUBLIC_BASE_APIURL=/api
# 默认 WebSocket 地址
NUXT_PUBLIC_BASE_SOCKETURL=ws://127.0.0.1:3002
#域名访问使用如下配置,配置为/,并代理/socket.io请求到3002端口
#NUXT_PUBLIC_BASE_SOCKETURL=wss://yourwebsite.com/socket.io
# Agent 服务治理 API 地址,前端管理页面需要。IP访问填http://<IP>:3003域名访问填/asg-api
# 域名访问NUXT_PUBLIC_BASE_SOCKETURL=wss://yourwebsite.com/socket.io
# Agent 服务治理 API 地址,前端管理页面需要
NUXT_PUBLIC_SG_APIURL=http://127.0.0.1:3003
#域名访问使用如下配置通过nginx代理转发
#NUXT_PUBLIC_SG_APIURL=/asg-api
# 域名访问NUXT_PUBLIC_SG_APIURL=/asg-api
#############################################
#2、以下部分可保持默认如果没有端口冲突生产环境可修改密码
##############################################
#comfyAI-web 前端应用暴露端口访问地址ip:3010访问初始化管理员账号admin,密码123456
# ========== 2. 服务端口 ==========
WEB_PORT=3010
#支持静态资源CDN将静态资源从服务器分离
NUXT_APP_CDN_URL=
# easyai-web 前端端口,访问地址 ip:3010初始化管理员 admin/123456
SERVER_HTTP_PORT=3001
SERVER_WS_PORT=3002
# easyai-server 后端 HTTP / WebSocket 端口
#视频编辑对外暴露端口
VIDEO_EDIT_PORT=8000
# 视频编辑服务对外端口
#沙箱环境对外端口不建议暴露如果需要暴露取消docker-compose.yml中的对应注释
AMS_PORT=3004
# Agent 记忆服务 HTTP 端口(启用 memory profile 时)
# ========== 3. Agent 记忆服务(启用 memory profile 时) ==========
MEMORY_TCP_HOST=agent-memory
MEMORY_TCP_PORT=4004
# easyai-server 调用 agent-memory 的 TCP 连接
# ========== 4. 沙箱环境 ==========
SANDBOX_PORT=8081
#SANDBOX jupyterlab 端口
# 不建议对外暴露
SANDBOX_JUPYTERLAB_PORT=8888
# 配置Jupter的token安全考虑建议设置
SANDBOX_JUPYTER_TOKEN=easyaiisbest
# 建议设置 token
SANDBOX_SERVICE_BASE_URL=
#REDIS暴露端口默认不暴露
# ========== 5. Redis ==========
REDIS_PORT=
# 默认不对外暴露
CONFIG_COMFYUI_QUENE_REDIS_USERNAME=
CONFIG_COMFYUI_QUENE_REDIS_PASSWORD=
#队列使用的DB
CONFIG_COMFYUI_QUENE_REDIS_DB=6
#普通缓存使用的DB
CONFIG_COMFYUI_CACHE_REDIS_DB=11
#MONGO 暴露端口,默认不暴露。用户名密码初次部署可以修改,更新请勿修改
# ========== 6. MongoDB ==========
MONGO_PORT=27017
MONGO_INITDB_ROOT_USERNAME=username
MONGO_INITDB_ROOT_PASSWORD=password
#comfy-server后端web服务暴露端口。一般情况下无需修改
SERVER_HTTP_PORT=3001
SERVER_WS_PORT=3002
#watchtower 监听端口,自动更新容器和通过浏览器查看容器日志
WATCHTOWER_PORT=8089
PORTAINER_PORT=8090
PORTAINER_HTTPS_PORT=8091
# 初次部署可修改,更新请勿修改
#网络代理链接gpt等需要设置
CONFIG_PROXY_URL=
#实例ID、集群情况下区分不同客户端
CONFIG_INSTANCE_ID=2025
#消息队列
# ========== 7. 消息队列 RabbitMQ ==========
CONFIG_MQ_PROTOCOL=amqp
CONFIG_MQ_USER=admin
CONFIG_MQ_PASSWORD=easyai2025
@ -73,33 +69,35 @@ CONFIG_MQ_PORT=5672
CONFIG_MQ_ADMIN_PORT=15672
CONFIG_MQ_VHOST=/
#版本
VERSION=latest
#日志与调试
LOG_LEVEL=log,error,warn,debug
#Token过期时间单位秒
# ========== 8. 鉴权与安全 ==========
CONFIG_TOKEN_EXPIRE=1800
# token加密密钥可以修改为任意字符串
CONFIG_JWT_SECRET='this is a very secret secret'
CONFIG_TOKEN_SIGN_SK=easyai2025easyai
# ========== 9. 运维与调试 ==========
CONFIG_INSTANCE_ID=2025
# 集群情况下区分不同客户端
#minio
#MINIO_ROOT_USER=minioadmin
#MINIO_ROOT_PASSWORD=minioadmin
CONFIG_PROXY_URL=
# 连接 GPT 等外部服务时设置
# VideoEdit OSS 配置PDF 解析图片上传,填写 .env.tools 或在此覆盖)
LOG_LEVEL=log,error,warn,debug
WATCHTOWER_PORT=8089
PORTAINER_PORT=8090
PORTAINER_HTTPS_PORT=8091
# ========== 10. 静态资源 CDN可选 ==========
NUXT_APP_CDN_URL=
# ========== 11. 版本 ==========
VERSION=latest
# ========== 12. OSS 配置可选PDF 解析图片上传) ==========
# 可填写 .env.tools 或在此覆盖
# OSS_ENDPOINT=
# OSS_ACCESS_KEY_ID=
# OSS_ACCESS_KEY_SECRET=
# OSS_BUCKET=
# OSS_REGION=us-east-1
# OSS_DOMAIN=

View File

@ -21,10 +21,84 @@ git clone https://git.51easyai.com/wangbo/easyai.git; cd easyai; powershell -Exe
## 重要更新记录:
### 2026.3.20
1. **新增 Agent 记忆服务AMS模块**:新增 `agent-memory`Agent 长期记忆)容器,复用 `easyai-pgvector` 数据库(需 pgvector 扩展),用于支持 Agent 对话记忆、向量召回与反馈能力。
2. **新增环境变量文件**:新增 `.env.AMS.sample` 文件,包含记忆服务所需的全部环境变量。
3. 主服务 `comfy-server` 新增 `MEMORY_TCP_HOST``MEMORY_TCP_PORT` 环境变量,用于内部 TCP 微服务通信。
4. **Nginx 代理**`easyai-proxy.conf.sample` 中新增 `/ams-api/` 路径代理(可选)。
#### 升级步骤
**步骤一:更新文件**
将以下文件更新到最新版本:
- `docker-compose.yml`
- `easyai-proxy.conf.sample`
- `docker/postgres/init-pgvector.sql`PostgreSQL 首次启动时创建 vector 扩展)
新增文件复制到部署目录:
- `.env.AMS.sample` → 复制为 `.env.AMS` 并根据实际环境修改
**步骤二:配置 `.env.AMS`**
```bash
cp .env.AMS.sample .env.AMS
```
根据实际环境修改 `.env.AMS` 中的关键配置:
```dotenv
# PostgreSQL 连接(独立库 easyai_memory与 .env.ASG 中账号密码一致)
MEMORY_DATABASE_URL=postgresql://easyai:easyai2025@easyai-pgvector:5432/easyai_memory?schema=public
# 主服务 API 地址(用于 Embedding 与对话压缩)
MEMORY_AI_BASE_URL=http://comfy-server:3001
# Embedding 模型与维度(需与主服务一致)
MEMORY_EMBEDDING_DIMENSION=1024
MEMORY_EMBEDDING_MODEL=text-embedding-v4
```
**步骤三:启动服务**
记忆服务使用 Docker Compose Profile需显式启用
```bash
cd ~/easyai
# 启动全部服务(含记忆服务)
docker compose --profile memory up -d
# 或仅启动基础服务(不含记忆)
docker compose up -d
```
新增容器:`agent-memory`Agent 记忆服务),复用 `easyai-pgvector`,使用独立库 `easyai_memory`。初始化流程与 ASG 一致:
- **PostgreSQL 首次启动**`docker/postgres/init-pgvector.sql` 创建 `vector`、`pgcrypto` 扩展
- **easyai-asg 启动**entrypoint 执行 `prisma migrate deploy`,创建治理相关表
- **agent-memory 启动**entrypoint 执行 `prisma migrate deploy`,创建 `memory_records` 等表
**注意**`easyai-pgvector` 使用 `registry.cn-shanghai.aliyuncs.com/easyaigc/pgvector:0.8.2-pg18-trixie`(含 pgvector 扩展)。若此前使用其他镜像且已有数据,升级前请备份 `asg_postgres_data` 卷。
**步骤四:验证**
```bash
# 检查容器状态
docker compose ps agent-memory
# 检查记忆服务健康状态
curl http://127.0.0.1:3004/health
# 通过 Nginx 代理访问(配置 Nginx 后)
curl https://<你的域名>/ams-api/health
```
> **注意**:记忆服务默认不启动,使用 `docker compose --profile memory up -d` 显式启用。若不需要 Agent 记忆功能,保持 `docker compose up -d` 即可,主服务会正常运行(记忆相关能力不可用)。
---
### 2026.3.2
1. **新增 Agent 服务治理ASG模块**:新增 `easyai-asg`Agent 服务治理)容器和独立的 `easyai-asg-pg`PostgreSQL 18数据库容器用于支持 Agent 自动化治理能力。
1. **新增 Agent 服务治理ASG模块**:新增 `easyai-asg`Agent 服务治理)容器和独立的 `easyai-pgvector`PostgreSQL 18数据库容器用于支持 Agent 自动化治理能力。
2. **新增 Nginx 反向代理**:在 `easyai-proxy.conf.sample` 中新增 `/asg-api/` 路径代理,用于暴露 ASG 服务的 REST API。
3. **新增环境变量文件**:新增 `.env.ASG.sample` 文件,包含 ASG 服务所需的全部环境变量。
4. 主服务 `comfy-server` 新增 `ASG_TCP_HOST``ASG_TCP_PORT` 环境变量,用于内部 TCP 微服务通信。
@ -61,7 +135,7 @@ cp .env.ASG.sample .env.ASG
根据实际环境修改 `.env.ASG` 中的关键配置:
```dotenv
# PostgreSQL 连接(默认使用容器内网地址,一般无需修改)
ASG_DATABASE_URL=postgresql://easyai:easyai2025@easyai-asg-pg:5432/agent_governance?schema=public
ASG_DATABASE_URL=postgresql://easyai:easyai2025@easyai-pgvector:5432/agent_governance?schema=public
ASG_POSTGRES_USER=easyai
ASG_POSTGRES_PASSWORD=easyai2025
@ -105,13 +179,13 @@ cd ~/easyai
docker compose up -d
```
新增容器:`easyai-asg-pg`PostgreSQL`easyai-asg`Agent 服务治理),数据库会在首次启动时自动完成初始化和迁移。
新增容器:`easyai-pgvector`PostgreSQL`easyai-asg`Agent 服务治理),数据库会在首次启动时自动完成初始化和迁移。
**步骤五:验证**
```bash
# 检查容器状态
docker compose ps easyai-asg-pg easyai-asg
docker compose ps easyai-pgvector easyai-asg
# 检查 ASG 服务健康状态
curl http://127.0.0.1:3003/health

View File

@ -3,7 +3,7 @@
#version: '3'
services:
comfyAI-web:
container_name: comfyAI-web
container_name: easyai-web
#更新修改冒号后面的版本号
image: registry.cn-shanghai.aliyuncs.com/comfy-ai/one-ai:${VERSION}
#端口冲突时只需要修改前面的端口比如修改为3011:3010
@ -47,7 +47,7 @@ services:
reservations:
memory: 600MB
comfy-server:
container_name: comfy-server
container_name: easyai-server
# 阿里云镜像地址
image: registry.cn-shanghai.aliyuncs.com/comfy-ai/comfy-server:${VERSION} # 阿里云
labels:
@ -108,6 +108,9 @@ services:
# 服务治理 TCP 连接
- ASG_TCP_HOST=easyai-asg
- ASG_TCP_PORT=4003
# Agent 记忆服务 TCP 连接(来自 .env
- MEMORY_TCP_HOST=${MEMORY_TCP_HOST:-agent-memory}
- MEMORY_TCP_PORT=${MEMORY_TCP_PORT:-4004}
# 日志大小设置,避免日志文件过大
env_file:
- .env
@ -350,17 +353,19 @@ services:
timeout: 10s
retries: 3
start_period: 10s
easyai-asg-pg:
image: registry.cn-shanghai.aliyuncs.com/easyaigc/postgres:18-alpine
container_name: easyai-asg-pg
easyai-pgvector:
# 使用带 pgvector 的镜像,供 ASG 与 Agent 记忆服务共用
image: registry.cn-shanghai.aliyuncs.com/easyaigc/pgvector:0.8.2-pg18-trixie
container_name: easyai-pgvector
restart: unless-stopped
environment:
POSTGRES_USER: ${ASG_POSTGRES_USER:-easyai}
POSTGRES_PASSWORD: ${ASG_POSTGRES_PASSWORD:-easyai2025}
POSTGRES_DB: ${ASG_POSTGRES_DB:-agent_governance}
volumes:
# PG 18+ 数据目录改为 /var/lib/postgresql/18/docker需挂载父目录 /var/lib/postgresql
- asg_postgres_data:/var/lib/postgresql
# 首次启动时执行,创建 pgvector 扩展供记忆服务使用
- ./docker/postgres/init-pgvector.sql:/docker-entrypoint-initdb.d/02-init-pgvector.sql
networks:
comfyai:
ipv4_address: 172.21.0.13
@ -386,7 +391,7 @@ services:
comfyai:
ipv4_address: 172.21.0.14
depends_on:
easyai-asg-pg:
easyai-pgvector:
condition: service_healthy
redis:
condition: service_started
@ -406,6 +411,37 @@ services:
memory: 512MB
reservations:
memory: 128MB
agent-memory:
profiles:
- memory
container_name: agent-memory
image: registry.cn-shanghai.aliyuncs.com/easyaigc/agent-memory:${AMS_VERSION:-latest}
labels:
- "com.centurylinklabs.watchtower.enable=true"
ports:
- "${AMS_PORT:-3004}:3004"
networks:
comfyai:
ipv4_address: 172.21.0.16
depends_on:
easyai-pgvector:
condition: service_healthy
comfy-server:
condition: service_started
restart: unless-stopped
env_file:
- .env.AMS
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "10"
deploy:
resources:
limits:
memory: 512MB
reservations:
memory: 128MB
# portainer:
# image: registry.cn-shanghai.aliyuncs.com/comfy-ai/portainer-ce:2.21.5
# container_name: portainer

View File

@ -0,0 +1,14 @@
-- 首次启动时执行,与 ASG 共用同一 PostgreSQL 实例
-- 1. 为 agent_governance 启用 pgvector兼容共库场景
\c agent_governance
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS pgcrypto;
-- 2. 创建记忆服务独立数据库 easyai_memory
CREATE DATABASE easyai_memory;
GRANT ALL PRIVILEGES ON DATABASE easyai_memory TO easyai;
-- 3. 为 easyai_memory 启用 pgvector
\c easyai_memory
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS pgcrypto;

View File

@ -91,6 +91,19 @@ server {
proxy_set_header Host $host;
}
# Agent 记忆服务 API可选用于健康检查或外部调用
location /ams-api/ {
proxy_pass http://127.0.0.1:3004/;
proxy_read_timeout 300s;
client_max_body_size 20M;
proxy_redirect off;
proxy_set_header X-Original-Prefix '/ams-api';
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
}
location /plugins/ {
proxy_pass http://127.0.0.1:3020/plugins/;
proxy_redirect off;