feat(config): 添加每日记忆整理配置和域名配置交互功能
Some checks failed
Test start.ps1 (Windows) / test-windows (push) Has been cancelled
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:
parent
c0ee3bee52
commit
f33b0850fe
@ -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
|
||||
|
||||
@ -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
107
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 更新完成"
|
||||
```
|
||||
|
||||
157
https.sh
157
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" <<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
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user