diff --git a/README.md b/README.md index 35959acd..83b4ae0c 100644 --- a/README.md +++ b/README.md @@ -181,6 +181,33 @@ PostgreSQL 容器,端口不对外,密码自动生成在数据目录里), 记下,调度循环去抖后发起(每一期各自去抖),下游的输入模板用 `{{ event.* }}` 取事件内容;保存时检查串联不成环、运行时 限 5 层;途经驳回的、应用补算的缺省不认(可以勾选)。跟着 `AGENTLAB_SCHEDULER` 开关:关着时事件留着不派发。 +**从旧版本升级(2026-10 编排完善第 2 波)**: + +- 缺省仍是数据目录里的 SQLite、单进程,不改配置的部署升级后行为不变;启动时自动补上这一波的新列和索引(运行事件的 + `(run_id, seq)` 改成唯一索引,存量库里要是已有重号,记一条日志、这一次不建,不影响启动)。数据目录里会多一个 + `.agentlab-data` 标记文件,`deploy.sh` 靠它(或 `agentlab.db`、`.secret_key`)认数据目录,别删。 +- 应用库可以换成 PostgreSQL:设 `AGENTLAB_DATABASE_URL`,执行断点一起进去;现有数据用 `python -m app.db copy-to-postgres` + 导入(要先停服务,断点一起搬)。Docker 部署可以让 `deploy.sh` 在旁边起一个内置的 PostgreSQL(新部署 `install --postgres`, + 已经在用 SQLite 的 `migrate-to-postgres`,失败就原样退回 SQLite);开发时 `./scripts/dev.sh --postgres`。内置和外接只能选 + 一种。见[用 PostgreSQL](#用-postgresql)。 +- 用 PostgreSQL 时可以起多个工作进程(`AGENTLAB_WORKERS`):运行、问数据一轮、后台任务在库里认领,进程没了别的进程接手或 + 照实标中断,停止跨进程生效,调度只由一个进程当班,实时事件跨进程推送。SQLite 只支持单进程:第二个进程拒绝启动。升级要先 + 停掉全部工作进程(`deploy.sh upgrade` 就是这样做的):库里还有活着的、版本不同的进程时,新版本拒绝启动。见[多进程](#多进程)。 +- 运行按类别排队:交互(问数据、画布试跑)、应用、定时、系统(评测、召回、对账、补算、出具)。全站上限照旧是 + `AGENTLAB_MAX_CONCURRENT_RUNS`,其中缺省留四分之一给交互,别的类别空闲时可以借用其余的,「设置 → 运行并发」可调。满载时 + 评测、召回会比以前慢,换来问数据总有名额;评测每题的时限不算排队的时间。 +- `deploy.sh upgrade` 升级前自动备份:SQLite 拷到数据目录的 `backups/sqlite/`,内置 PostgreSQL 用 `pg_dump` 存到 + `backups/postgres/`,各留最近 5 份(`BACKUP_KEEP`),只有属主能读。`restart` 缺省只重启服务,`restart --postgres` 连库一起。 +- bubblewrap 沙箱不再继承后端的环境变量:代码节点里读不到模型的 API Key、数据库地址这类变量了。代码要用的值请显式传进去。 +- 子工作流放在循环里多次执行时,每次的步骤接着编号,写外部系统的幂等键改用父运行里的全局 id:以前循环第二轮的写入会拿到 + 第一轮的回执、不发送,现在照常发;升级前停在子工作流里的运行恢复时仍认旧的键,已经生效的不重发。 +- 问数据的心跳不再落库,结束超过 14 天的轮次清掉事件日志(那一轮的问答、答案照旧在对话里);服务重启后接手一轮时按账号现在的 + 角色重新核对,停用或没了权限的照实标中断。 +- 多行查询没有 `ORDER BY` 时,引用其中一格不再算「来自口径」,召回、对账里照实标「行序不定」(E1 统计会跟着变);全部指标 + 都行序不定的召回结论写「核对不了」并开待办,不再写「没变」。对账要人选对照指标时,按逐个数核对过的那几列预选。 +- 待办、通知、Webhook 里驳回的去向照实写(「被驳回,转到 X」「这一路到此为止」),子工作流里的写「子工作流 › x」;子工作流 + 里一步失败时自动复核只报一条。用户看得到的列表遇到同名、同时间的并列时按 id 排,两种库顺序一致。 + --- ## 核心能力