From f33b0850fef422799db02e44ae14032f39e89483 Mon Sep 17 00:00:00 2001 From: wangbo Date: Thu, 2 Apr 2026 17:45:29 +0800 Subject: [PATCH] =?UTF-8?q?feat(config):=20=E6=B7=BB=E5=8A=A0=E6=AF=8F?= =?UTF-8?q?=E6=97=A5=E8=AE=B0=E5=BF=86=E6=95=B4=E7=90=86=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=92=8C=E5=9F=9F=E5=90=8D=E9=85=8D=E7=BD=AE=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 .env.AMS.sample 和 .env.sample 中新增记忆整理相关配置项 - 实现了 https.sh 脚本中的域名配置交互与文件生成功能 - 支持配置文件中域名的替换和新增操作 - 在 README.md 中补充了一键启动脚本使用说明和 HTTPS 配置指南 - 添加了 docker-compose.yml 单独更新命令说明 --- .env.AMS.sample | 12 ++++ .env.sample | 1 + README.md | 107 ++++++++++++++++++++++++++++++++- https.sh | 157 +++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 272 insertions(+), 5 deletions(-) diff --git a/.env.AMS.sample b/.env.AMS.sample index b1473c4..79e9736 100644 --- a/.env.AMS.sample +++ b/.env.AMS.sample @@ -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 diff --git a/.env.sample b/.env.sample index 134730f..6c56005 100644 --- a/.env.sample +++ b/.env.sample @@ -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 diff --git a/README.md b/README.md index 57f1c4a..5df2606 100644 --- a/README.md +++ b/README.md @@ -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应用启动成功`表示应用启动成功,打开浏览器输入服务器的公网ip:3010或者局域网IP:3010,即可访问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 更新完成" +``` diff --git a/https.sh b/https.sh index df7d89d..09af646 100755 --- a/https.sh +++ b/https.sh @@ -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" </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