feat(config): 添加每日记忆整理配置和域名配置交互功能
Some checks failed
Test start.ps1 (Windows) / test-windows (push) Has been cancelled

- 在 .env.AMS.sample 和 .env.sample 中新增记忆整理相关配置项
- 实现了 https.sh 脚本中的域名配置交互与文件生成功能
- 支持配置文件中域名的替换和新增操作
- 在 README.md 中补充了一键启动脚本使用说明和 HTTPS 配置指南
- 添加了 docker-compose.yml 单独更新命令说明
This commit is contained in:
wangbo 2026-04-02 17:45:29 +08:00
parent c0ee3bee52
commit f33b0850fe
4 changed files with 272 additions and 5 deletions

View File

@ -30,6 +30,18 @@ MEMORY_CHAT_MODEL=qwen-plus
MEMORY_COMPRESSION_ENABLED=true
MEMORY_COMPRESSION_MIN_LENGTH=80
# ---------- 每日记忆整理 ----------
# 是否启用每天凌晨 2 点记忆整理(去重、冲突处理)
MEMORY_MAINTENANCE_ENABLED=true
# dry-run: true=仅分析不落库;建议升级首日先开 true 观察
MEMORY_MAINTENANCE_DRY_RUN=false
# 每个租户单轮扫描上限
MEMORY_MAINTENANCE_BATCH_SIZE=200
# 是否启用 LLM 语义冲突裁决(复用会话总结模型,无需单独模型配置)
MEMORY_MAINTENANCE_LLM_ENABLED=true
# 单轮最多调用 LLM 裁决的冲突对数量(用于控成本)
MEMORY_MAINTENANCE_LLM_MAX_PAIRS=20
# ---------- 其他 ----------
# 日志级别
LOG_LEVEL=log,error,warn,debug

View File

@ -40,6 +40,7 @@ AMS_PORT=3004
MEMORY_TCP_HOST=agent-memory
MEMORY_TCP_PORT=4004
# easyai-server 调用 agent-memory 的 TCP 连接
# 记忆整理相关参数在 .env.AMS 中配置MEMORY_MAINTENANCE_*
# ========== 4. 沙箱环境 ==========
SANDBOX_PORT=8081

107
README.md
View File

@ -20,7 +20,7 @@ git clone https://git.51easyai.com/wangbo/easyai.git; cd easyai; powershell -Exe
---
## 更新升级
### 老户(旧版本部署包)升级教程
### 老户(旧版本部署包)升级教程
如果你当前使用的是较早版本的部署包,**无法在旧包目录里直接执行 `git pull`** 来获取配置文件,建议按下面流程升级:
@ -128,8 +128,24 @@ MEMORY_AI_BASE_URL=http://comfy-server:3001
# Embedding 模型与维度(需与主服务一致)
MEMORY_EMBEDDING_DIMENSION=1024
MEMORY_EMBEDDING_MODEL=text-embedding-v4
# 每日记忆整理(默认每天凌晨 2 点执行)
MEMORY_MAINTENANCE_ENABLED=true
# 升级首日建议 true确认无误后再改为 false
MEMORY_MAINTENANCE_DRY_RUN=false
# 单轮每租户处理上限
MEMORY_MAINTENANCE_BATCH_SIZE=200
# 启用语义冲突裁决(复用会话总结模型,无需单独配置模型)
MEMORY_MAINTENANCE_LLM_ENABLED=true
MEMORY_MAINTENANCE_LLM_MAX_PAIRS=20
```
说明:
- `MEMORY_MAINTENANCE_ENABLED`:总开关,`false` 时不执行每日整理。
- `MEMORY_MAINTENANCE_DRY_RUN``true` 仅记录分析和审计,不执行软删除。
- `MEMORY_MAINTENANCE_LLM_ENABLED`:开启后冲突处理优先使用会话总结模型做语义裁决,失败会回退规则处理。
- `MEMORY_MAINTENANCE_LLM_MAX_PAIRS`:单轮最多调用模型裁决的冲突对数,用于控制成本。
**步骤三:启动服务**
记忆服务使用 Docker Compose Profile需显式启用
@ -384,9 +400,89 @@ docker run -it --rm registry.cn-shanghai.aliyuncs.com/easyaigc/dozzle:latest gen
1. 升级了mongoDB的数据挂载方式使用volume挂载避免跨平台的一些数据挂载问题
2. .env增加了版本、日志和token参数的配置
## 其他功能配置
其他各项需要的功能配置可以自行查阅环境变量中的配置说明,下面是一些比较常用的功能配置
## Linux/Ubuntu 一键启动
start.sh 脚本用于服务器一键安装启动EasyAI应用
### 首次安装部署步骤并使用服务器公网IP进行访问
1. 克隆脚本和相关文件到服务器
```bash
git clone https://git.51easyai.com/wangbo/easyai.git
# 进入easyai目录
cd easyai
```
2. 去掉所有文件后缀的.sample后缀修改env中环境变量将下面两个环境变量修改为你的服务器的公网ip本地局域网方式使用局域网IP
```bash
NUXT_PUBLIC_BASE_APIURL=http://<你的服务器公网IP或者局域网地址>:3001
NUXT_PUBLIC_BASE_SOCKETURL=ws://<你的服务器公网IP或者局域网地址>:3002
```
3. 开放服务器的3001、3002和3010端口
4. [首次执行,后续无需重复执行]添加脚本的执行权限,命令:
```bash
chmod +x start.sh
```
5. 执行start.sh脚本即可自动安装依赖和启动EasyAI应用
```bash
./start.sh
```
6. 脚本运行完成无错误,并且提示`EasyAI应用启动成功`表示应用启动成功打开浏览器输入服务器的公网ip3010或者局域网IP3010即可访问EasyAI应用
## Windows 一键启动
start.ps1 脚本用于 Windows 本机/局域网一键部署 EasyAI 应用。**不要直接双击运行**(会闪退),请按以下方式执行:
### 权限配置(首次执行必做)
PowerShell 默认可能禁止运行脚本,需先执行以下任一方式:
**方式一:临时允许本次运行(推荐)**
```powershell
powershell -ExecutionPolicy Bypass -File .\start.ps1
```
**方式二:为当前用户永久放开脚本执行权限**
```powershell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
```
执行后再运行 `.\start.ps1` 即可。
### 启动步骤
1. 克隆并进入目录
```powershell
git clone https://git.51easyai.com/wangbo/easyai.git
cd easyai
```
2. 在 PowerShell 或 CMD 中运行(二选一)
```powershell
# 若已设置 ExecutionPolicy可直接执行
.\start.ps1
# 未设置时使用 Bypass 方式
powershell -ExecutionPolicy Bypass -File .\start.ps1
```
3. 按提示选择 [1] 本地访问 或 [2] 局域网访问,脚本将自动配置并启动 Docker 服务。
4. 若窗口闪退,可查看日志 `start.ps1.log`(与 start.ps1 同目录,或 `%TEMP%\start.ps1.log`)获取退出原因。
### 启用HTTPS
1. [更改为你的域名]修改`easyai-proxy.conf`中域名`51easyai.com`为你的域名[可以使用Ctrl+F批量替换51easyai.com为你的域名]
2. [修改.env文件]修改如下两个环境变量为如下的对应的值
```bash
NUXT_PUBLIC_BASE_APIURL=/api
NUXT_PUBLIC_BASE_SOCKETURL=wss://<你的域名>/socket.io
```
3. [首次执行,后续无需重复执行]添加执行权限,命令:
```bash
chmod +x https.sh
```
4. 启用HTTPS
```bash
./https.sh
```
### 配置PDF图文解析Markdown功能
如果需要启用PDF图文解析Markdown功能需要`env.tools`中的OSS环境变量具体参考文件中的配置说明自动解析PDF图文将图片文件上传到OSS并解析成Markdown格式并返回
@ -415,3 +511,8 @@ apt remove docker-compose
#重新安装
./start.sh
```
4. 单独更新docker-compose.yml文件并更新
```bash
cd ~/easyai && cp docker-compose.yml docker-compose.yml.backup && wget -q https://git.51easyai.com/wangbo/easyai/raw/main/docker-compose.yml -O docker-compose.yml && echo "✅ docker-compose.yml 更新完成"
```

157
https.sh
View File

@ -103,14 +103,167 @@ else
exit 1
fi
# ===== 域名配置交互与文件生成 =====
prompt_domain() {
local domain
while true; do
read -r -p "🌐 请输入域名(例如 demo.example.com: " domain
domain=$(echo "$domain" | xargs)
if [ -n "$domain" ] && [[ "$domain" =~ ^[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)+$ ]]; then
echo "$domain"
return 0
fi
echo "❌ 域名格式不正确,请重新输入。"
done
}
escape_sed() {
echo "$1" | sed 's/[.[\*^$()+?{}|/]/\\&/g'
}
get_primary_domain_from_conf() {
local conf_file=$1
awk '
/server_name/ {
for (i = 2; i <= NF; i++) {
gsub(";", "", $i)
if ($i !~ /^www\./ && $i !~ /^\*/ && $i != "localhost") {
print $i
exit
}
}
}
' "$conf_file"
}
create_conf_by_template() {
local domain=$1
local target_file=$2
if [ -f "./demo.51easyai.com.conf" ]; then
cp "./demo.51easyai.com.conf" "./$target_file"
sed -i.bak "s/www\.demo\.51easyai\.com/www.$domain/g; s/demo\.51easyai\.com/$domain/g" "./$target_file"
rm -f "./$target_file.bak"
return 0
fi
if [ -f "./2.conf" ]; then
cp "./2.conf" "./$target_file"
sed -i.bak "s/www\.2/www.$domain/g; s/\b2\b/$domain/g" "./$target_file"
rm -f "./$target_file.bak"
return 0
fi
cat > "./$target_file" <<EOF
map \$http_upgrade \$connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
listen [::]:80;
server_name www.$domain;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
try_files \$uri =404;
}
location / {
return 301 https://$domain\$request_uri;
}
}
server {
listen 80;
listen [::]:80;
server_name $domain;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
try_files \$uri =404;
}
location / {
proxy_pass http://127.0.0.1:3010/;
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;
}
}
EOF
}
upsert_domain_for_conf() {
local conf_file=$1
local mode
local new_domain
echo " 检测到当前目录已有配置文件: $conf_file"
while true; do
echo "请选择域名处理方式:"
echo " 1) 替换当前域名"
echo " 2) 新增一个域名"
read -r -p "请输入选项 (1/2): " mode
case "$mode" in
1|2) break ;;
*) echo "❌ 无效选项,请输入 1 或 2" ;;
esac
done
new_domain=$(prompt_domain)
if [ "$mode" = "1" ]; then
local old_domain
old_domain=$(get_primary_domain_from_conf "./$conf_file")
if [ -z "$old_domain" ]; then
echo "⚠️ 未能自动识别旧域名,将直接尝试新增域名。"
mode="2"
else
local old_domain_escaped
local new_domain_escaped
old_domain_escaped=$(escape_sed "$old_domain")
new_domain_escaped=$(escape_sed "$new_domain")
sed -i.bak "s/www\\.$old_domain_escaped/www.$new_domain_escaped/g; s/$old_domain_escaped/$new_domain_escaped/g" "./$conf_file"
rm -f "./$conf_file.bak"
echo "✅ 已将域名从 $old_domain 替换为 $new_domain"
fi
fi
if [ "$mode" = "2" ]; then
local changed=0
if ! grep -Eq "server_name[^;]*[[:space:]]$new_domain([[:space:];]|$)" "./$conf_file"; then
sed -i.bak "/server_name/s/;/ $new_domain;/g" "./$conf_file"
changed=1
fi
if ! grep -Eq "server_name[^;]*[[:space:]]www\\.$new_domain([[:space:];]|$)" "./$conf_file"; then
sed -i.bak "/server_name/s/;/ www.$new_domain;/g" "./$conf_file"
changed=1
fi
rm -f "./$conf_file.bak"
if [ "$changed" -eq 1 ]; then
echo "✅ 已新增域名:$new_domain(含 www.$new_domain"
else
echo " 配置文件已包含该域名,无需新增。"
fi
fi
}
echo "🚀 复制当前目录的配置文件到nginx配置文件目录"
# 支持 EASYAI_PROXY_CONF 指定配置文件(如 51easyai.com.conf
CONF_FILE="${EASYAI_PROXY_CONF:-easyai-proxy.conf}"
if [ -f "./$CONF_FILE" ]; then
cp "./$CONF_FILE" "/etc/nginx/conf.d/$CONF_FILE"
upsert_domain_for_conf "$CONF_FILE"
else
cp -r ./easyai-proxy.conf /etc/nginx/conf.d/ 2>/dev/null || { echo "❌ 未找到 nginx 配置文件"; exit 1; }
echo " 当前目录未找到配置文件 ./$CONF_FILE"
input_domain=$(prompt_domain)
create_conf_by_template "$input_domain" "$CONF_FILE"
echo "✅ 已根据域名 $input_domain 创建配置文件: ./$CONF_FILE"
fi
cp "./$CONF_FILE" "/etc/nginx/conf.d/$CONF_FILE"
echo "🚀 重载nginx"
sudo nginx -s reload