Skip to content

Latest commit

 

History

History
217 lines (150 loc) · 21 KB

File metadata and controls

217 lines (150 loc) · 21 KB

DEVLOG — afi-platform

本项目专属日志。每轮工作记入此处,按轮次 N 追加。 方向:基于 AgentSociety 搭建 AFI(把 ai-freedom-island 内容兼容进来)。


轮次 1(2026-07-08,项目启动——封存旧线 + 建新线空壳)

用户:safety-audit-platform 线封存保留;换方向——基于 AS 重新搭建 AFI(兼容 AFI 内容),新建文件夹,把 AS 代码拿过来搭建,具体启动后再梳理。

所做

  1. 封存 safety-audit-platform:在其 DEVLOG 轮次 8 写封存说明——封存状态(M2-step-1 骨架+7 份文档已 git 提交)、可复用资产清单(审计 12 模块/方法论标准/外部调研/message_log 补丁/AS 后端知识)、无缝重启指南。git 历史完整。
  2. 新建 multiagent_Long_horizon/afi-platform/ + README(方向:基于 AS 搭 AFI 集成式平台;现状=空壳;启动梳理待办 5 项;相关资源指针:AS 源码/AFI 源码/封存的 safety-audit-platform 可复用资产/AS 补丁/实验产物)。
  3. 本 DEVLOG 起

未做(待启动梳理):形态(fork AS / AS 之上 AFI 层)、AS 代码拿取方式、AFI 兼容范围、与 safety-audit-platform 复用资产处理、架构+路线。

状态:新线空壳就绪。下一步=项目启动梳理(用户说"启动后重新梳理一番"),定形态+AS 拿取方式+AFI 兼容范围,再写架构+路线。


轮次 2(2026-07-08,启动前准备——EW+AFI 分析)

用户:Emergence World 也要拿进来参考(AFI 基于它复现,可能加了功能),分析它为项目搭建做规划。再做一轮启动前准备,等会再开启梳理规划。

所做:探查 EW(repo_analysis/Emergence-World/)+ AFI(ai-freedom-island/)结构 + AFI ROADMAP/README。写 docs/ew-afi-analysis.md

  • EW 内容清单:官方设定集(manifesto/宪法/地标36/工具120+/docs 5份/Season1-2/AWI 11/results),无代码,研究专用 license。价值=世界设定参考+AWI 权威定义+Season1 ground-truth。
  • AFI = EW 复现 + 扩展:复现=sim 引擎(engine/agents/economy/governance/world/tools)+中文 LLM router+AWI 9 实现;扩展=审计/安全模块(audit.py 3层因果链 / collusion_detector M3 / drift_detector M1 / causal_report M5 / runtime_monitor M4 / statistical_analysis M2 / scenario_designer M3 / safety_filter)。ROADMAP M1-M5。
  • AFI 局限(用 AS 替代的理由):自建引擎弱观测(无 OTel trace/replay)、无原生因果树、message 读即消费、规模受限。
  • 对照表:EW设定/AFI复现/AFI扩展 三列,逐维度标。
  • 复用决策初步:EW→世界设定翻译成 AS env+skills + AWI 采用 + Season1 对照;AFI→审计扩展模块端口到 AS trace/run 格式("兼容 AFI 内容"核心);AS→sim 引擎基底;封存 safety-audit-platform→审计12模块+方法论标准方向无关可搬。关键判断:AFI 审计模块与封存线审计模块功能重叠,梳理时定用哪套/怎么合并(AFI 的 collusion/drift/runtime_monitor 有封存线没有的思路值得吸收;封存线的对齐标准+CommonRun 接口是 AFI 没有的)。
  • 启动梳理 6 问:形态 / AFI 审计模块端口取舍 / EW 设定翻译映射 / AWI 重算 / 封存线复用 / 确认弃 AFI engine 用 AS。

更新 README:加 EW 源码 + ew-afi-analysis.md 到相关资源。

产出docs/ew-afi-analysis.md、README 更新。

状态:启动前准备完成(EW+AFI 分析就绪)。待用户开启梳理规划。


轮次 3(2026-07-08,梳理规划——架构+路线)

用户:开启梳理规划。

所做:问 2 决策(形态/封存线资产)时用户离开,按最佳判断推荐。写 docs/architecture-and-roadmap.md

  • 形态推荐:AS pip 依赖 + AFI 兼容层(不 vendor 2.7G、跟 AS 升级、AS custom/ 热加载为此设计;message_log 迁成 custom env;vendor 为备选)。
  • 封存线资产推荐:搬 safety-audit-platform 的 audit 12 模块+方法论(CommonRun/taxonomy/接口) 作基底(方向无关、已读 AS trace、已对齐标准);AFI 审计模块读 AFI 格式不能直接 port,但 runtime_monitor/scenario_designer 思路封存线没有,吸收。
  • 架构三层:world/(EW设定翻译→AS env/skills/profiles)+ audit/(封存线12模块+AWI重算+AFI runtime_monitor/scenario_designer 思路)+ backend(AS pip 依赖,message_log custom env)。
  • EW 翻译映射:manifesto/宪法→agent profile+治理 env;36地标→MobilitySpace AOI;120+工具→AS env 工具+custom skills(先子集);ComputeCredits→EconomySpace;AWI 11→audit/awi.py 从 AS replay 重算。策略=先子集跑通再扩。
  • AFI 端口策略:audit.py/collusion/drift/causal_report=封存线已等价用封存线;runtime_monitor/scenario_designer=端口思路(封存线无);statistical/safety_filter=可选。
  • 路线:A1 骨架+资产搬迁 → A2 EW子集翻译验证"AFI on AS"成立 → A3 审计+AWI+runtime/scenario 端口 → A4 长时程对标 EW Season1。

4 个待确认:形态(pip依赖 vs vendor)?封存线(搬 vs 重做)?EW起点子集(constitution+social+economy)?AWI(重算11 vs AFI 9)?

产出docs/architecture-and-roadmap.md

状态:梳理规划完成(推荐方案就绪)。待用户回来确认 4 决策后开 A1。


轮次 4(2026-07-08,A1 执行——骨架+资产搬迁)

用户:4 决策全选推荐。开始执行。

所做

  1. 建包结构 afi/{audit,backend,backend_patches,world} + scenarios/ + tests/。
  2. pyproject.toml:depends agentsociety2(AS pip 依赖)+ optional extras(map/judge/yaml/dev)。entry points: afi-audit/run-afi
  3. 搬封存线资产:audit/ 12 模块 + backend/(base+agentsociety+as_requirements)+ backend_patches/(simple_social_space_patched+install_to_as)+ cli.py + __init__.pyafi/
  4. 改 import:safetyaudit.Xafi.X(sed 批量)+ docstring/prog 名/报告标题清理。
  5. world/ 占位 __init__.py(A2 填 EW 翻译)。

验证python3 -m afi.audit ../repo_analysis/AgentSociety/run_commons --sensorium → 1094 span, sensorium 17.7%(与封存线一致)✓。审计层搬迁后工作正常。

产出afi-platform/afi/ 全包(audit 12 + backend + backend_patches + world 占位 + cli)+ pyproject + README 更新(A1 完成态 + 用法 + 路线)。

git:提交 A1。

状态:A1 完成(骨架+资产搬迁+验证)。下一步 A2:EW 设定子集翻译(constitution+social+economy+几地标 → AS env/skills/profiles),验证"AFI on AS"成立。


轮次 5(2026-07-08,A1 Review + 修复)

用户:A1 做完了,review 一轮,修问题,给下一步计划。

Review 发现 + 修复

  1. afi/__init__.py docstring 旧:提 scenario/Concordia(封存线残留),实际子包是 world/。→ 改为 afi-platform 实际结构(audit/backend/backend_patches/world)。
  2. cli.py _run_as bug:调 adapter.run_from_files(...),但 run_from_files 是模块级函数(非 AgentSocietyAdapter 方法),会 AttributeError。→ 改为 from afi.backend.agentsociety import run_from_files + 调 run_from_files(adapter, ...)
  3. 旧术语残留:cli.py/agentsociety.py/as_requirements.md 有 M2-step-1/M2-step-2/safetyaudit 引用。→ 全改 A1/A2。
  4. backend_patches/__init__.py:但它不是 Python 包(AS 补丁文件目录),不需要。→ 记录不修。

验证(修复后全通):

  • from afi.audit import load_spans; from afi.backend.agentsociety import AgentSocietyAdapter, run_from_files; from afi.cli import main → imports OK ✓
  • python3 -m afi.audit run_commons --full → 1094 span, sensorium 17.7% ✓
  • python3 -m afi.cli --help{audit, run-as} 命令就绪 ✓
  • 残留 M2-step/safetyaudit 检查 → 全清 ✓

产出:4 文件修复(init/cli/agentsociety/as_requirements),git 提交 76bedd4

状态:A1 review 完成,代码干净。下一步 A2。


轮次 6(2026-07-10,A2 执行——EW 设定子集翻译 + "AFI on AS" 成立验证)

用户:开始 A2。先全面规划 + 验收标准,再按规划执行。

规划:写 docs/a2-plan.md(范围/交付物/各模块设计/关键决策/7 组验收 checklist/风险兜底/执行顺序)。

所做

  1. 纯数据模块afi/world/,无 AS 依赖):constitution.py(manifesto + 5 条种子宪法 + 治理规则)、landmarks.py(5 个 EW 地标)、profiles.py(5 个 EW agent → AS agent_specs)、economy.py(ComputeCredits → EconomySpace persons 配置)。
  2. custom envcustom/envs/,AS 热加载,只依赖 agentsociety2+stdlib,不 import afi——因运行在 AS venv 子进程):governance_space.py(GovernanceSpace:提案/投票/修宪,70% 超多数,状态持久化 + replay 表)、landmark_space.py(LandmarkSpace:list/get 地标)、simple_social_space_auditable.py(迁 message_log 补丁为 custom env,与内置 SimpleSocialSpace 并存,reinstall-safe)。
  3. scenario.py(YAML→init_config+steps,pyyaml 落盘)+ scenarios/ew-subset.yaml(5 agent × intervene+12 tick)。
  4. cli.py run-ew + 适配器设 WORKSPACE_PATH=平台根(让 AS registry 发现 custom/envs/)。

关键技术发现/修复

  • custom env 必须能 cls() 无参实例化(AS scanner 校验)→ SimpleSocialSpaceAuditable.agent_id_name_pairs 加默认 None。
  • custom env 不能 import afi(AS venv 子进程无 afi)→ EW 数据经 init_config kwargs 注入,env 内 inline 兜底默认。
  • WORKSPACE_PATH 机制验证:AS registry 据此发现 custom/envs(3 custom + EconomySpace 内置=4 env 全 FOUND)。
  • GovernanceSpace 语义校准:EW "70% of live agents"=全人口 → 传 num_agents,5 agent 需 4 票通过(非"已知投票者"下界)。
  • collude 审计 bugextract_blackboards 默认 env_module="SimpleSocialSpace",读不到 custom SimpleSocialSpaceAuditable 的 message_log(报"0 条消息")→ 改为自动探测 env/*/state/message_log.jsonl。修复后读到 4 条消息。
  • scenario steps 改用 pyyaml 落盘(多行 intervene 指令,inline _yaml_line 撑不住 block scalar)。

行为涌现的诚实记录:agent 不会自发调用治理/社交变异工具(run 步里只 observe/read/ask_env 只读)——这是 LLM agent 的涌现缺口。遂采用 collude 同款 proven 机制:intervene 步显式 ask_environment 调用注入 propose/vote/send_message/add_person_currency,内容按各 agent EW 人设撰写(种子),是否通过跨 run 步涌现(prop1 需 4 票,agent 主动投出)。纯自发治理涌现留 A4。

验收(全过)

  • 代码完整:world/ 6 模块 + custom/envs 3 文件 import/语法 OK ✓
  • AS 热加载:4 env module_type 全 FOUND(3 custom + EconomySpace)✓
  • 端到端:run-ew 退出 0,1572 span,run_dir 有 trace/+replay/+agents/+env state ✓
  • EW 式行为(核心全过):4 提案 ✓、6 投票 ✓、宪法修改 version 1→2(Article 2 通过 4/5 票改写,headline EW 行为)✓、message_log 4 条 ✓、经济流动(agent2 100→120 Victory Arch 1st、agent4 100→110 2nd)✓
  • 审计正常:audit --full 出 248KB HTML,sensorium/tunnel/causal/collude/decision 全在;collude 读到 4 条消息(修复后)✓
  • 无回归:commons sensorium ~17-22%(A1 基线不变)✓;CLI 显示 {audit,run-as,run-ew}

产出:world/ 6 模块 + custom/envs 3 env + scenario.py + ew-subset.yaml + cli run-ew + 适配器 WORKSPACE_PATH + collude bugfix + docs/a2-plan.md。

状态:A2 完成——"AFI on AS" 成立验证通过(EW 设定子集跑在 AS 上,治理全闭环 + 经济 + 社交 + 审计读 message_log)。下一步 A3:AWI 11 重算 + runtime_monitor/scenario_designer 端口。


轮次 7(2026-07-10,A3 执行——AWI 重算 + runtime_monitor + 场景预置)

用户:开始 A3。先全面规划 + 验收标准,再按规划执行。

规划:写 docs/a3-plan.md(AWI 9 族可行性表 / 范围 / 交付物 / 各模块设计 / 关键决策 / 7 组验收 / 风险 / 执行顺序)。

先校正一个事实:AWI 是 9 个指标族 M1–M9(非"11")—— EW results/awi_metrics.md 权威定义 + AFI results/awi.py 实现都是 9 族(AFI dataclass ~14 字段因 M2/M8 含子项,故有"11"误传)。按权威 9 族做。

所做

  1. afi/audit/awi.py(AWI 重算,纯读 run_dir,stdlib):
    • _gini(搬 AFI 已验证实现,2·n²·mean 分母;单测 equal→0 / [10,0,0,0]→0.75 ✓)。
    • 9 族:M4 工具(trace react.tool 按 agent 去重)/ M5 治理(governance_env_state + GOVERNANCE_STATE:参与率+通过率+羊群比)/ M8 经济(economy_agent_state 每 agent 每 step currency → Gini+total+turnover)/ M9 宪法(version+proposals passed/rejected)= 4 全算;M3/M6/M7 代理(landmark 查询/send_message 量/message_log 有向边密度);M1 退化(AS 不建模死亡)/M2 stub(无 crime env)= 诚实标注 feasibility。
    • compute_awi_timeline:per-step 时序(从 replay shard:governance_env_state / economy_agent_state / social_env_state 每 step 一快照;M4 按 span 计数分箱因 sim 时间 t ≠ trace 真实时间)。
    • format_awi_report:文本报告,每族带可行性 badge。
  2. afi/audit/runtime_monitor.py(端口 AFI 思路非代码——AFI 读 turn_log、我们读 trace+replay):
    • _detect_change_point(近窗均值 vs 基线,AFI 原算法)+ RiskAlert/MonitorState
    • 4 类告警:sensorium_collapse(<40%)/ governance_stagnation(N 步无新提案投票)/ economic_hoarding(Gini 跳升>0.1 或 >0.5)/ tunnel_vision_escalation(≥3 窗口)。封存线无此时序早告警层。
  3. afi/world/scenario_presets.py(端口 AFI scenario_designer):cooperative/competitive/adversarial 三预置(不同 initial_credits + intervene 种子:coop 全互投→全通过、comp split→0~半通过、adv 全反对→0 通过+串谋试探)+ apply_preset偏差:预置放 Python 数据非 3 YAML(更紧凑,a3-plan 写的 3 YAML 改为单数据模块)。
  4. afi/audit/html_report.py + afi/cli.py:HTML 加 AWI 块(9 族表+可行性 badge+Gini/提案 sparkline)+ 告警块;awi 子命令(python -m afi awi <run> [--json])+ run-ew --preset <name>

验收(全过)

  • AWI 重算:ew_subset 9 族全输出,M4=4.20/M5(4 提案 6 票 approval 0.80 herd 0.75)/M8(Gini 0.038 total 530)/M9(v2 passed 1) 与 A2 实测一致 ✓;M1 退化/M2 stub 标注不造假 ✓
  • per-step 时序:13 快照(≥8)✓;Gini/提案 sparkline 入 HTML ✓
  • runtime_monitor:3 告警(sensorium 0.165/governance_stagnation/tunnel_vision 26)不抛异常 ✓
  • 预置对照:competitive 跑通,AWI 与 ew_subset 可读差异——M8 Gini 0.038→0.071(稀缺+Victory Arch 奖励→不平等↑)、total 530→280(50×5+30)、M9 v2→v1 passed 0(split votes 全否)、M5 提案 4→6、tunnel_vision 26→34 ✓
  • 集成:audit --full HTML 含 AWI+告警块(9 badge: 4 实算/3 代理/1 待建/1 退化)✓;run-ew --preset competitive --audit 一条龙 ✓
  • 无回归:commons sensorium 17-22% ✓;ew_subset audit 不破 ✓

关键技术发现

  • replay shard 文件名十六进制乱序(.09/.0a…)→ AWI 按 step 字段排不靠文件名 ✓(a3-plan 风险已防)。
  • sim 时间 t ≠ trace 真实时间(不同时间基)→ M4 时序不能按时间戳对齐,改按 span 计数分箱(保时序单调)。
  • economy_agent_state shard 不从 step 0 起 / 某步可能不全 → M8 取最完整步,turnover 可能低估(标注)。
  • competitive intervene ~18 个 ask_environment 调用偏多,helper 只落地部分(消息/跨投票有缺)——但结构性差异(initial_credits=50→total 280+Gini↑、split 设计→0 通过→v1)仍清晰体现,AWI 对照有效。

产出:awi.py + runtime_monitor.py + scenario_presets.py + html_report AWI/告警块 + cli awi/--preset + docs/a3-plan.md,git 31042713

状态:A3 完成——审计层从"行为描述+检测器"升级到"AWI 9 族指标化 + per-step 时序 + runtime 早告警 + 场景预置对照"。下一步 A4:长时程 × 多模型对标 EW Season1(120+ 工具/36 地标全量、MobilitySpace 地图、crime env、agent 死亡建模,跑 15 天对照 Season1 AWI ground-truth)。


轮次 8(2026-07-11,A4 执行——长时程多模型 + AWI 完整化 + 对标 EW Season1)

用户:开始 A4。先全面规划 + 验收标准,再按规划执行。

规划:写 docs/a4-plan.md三个先承认的事实:① EW Season1 只发 M1 人口 ground-truth(Claude=10/Gemini=10/Grok=0/GPT5Mini=0/Mixed=3),M2–M9 无 per-world 数值 → "对标 Season1"严格只能对 M1;② EW 工具 116/19 类,全量翻译工作量极大;③ 全量 15 天×10 agent×5 模型 ≈ A2 的 250 倍,成本不可行。→ A4 不做全量字面复现,务实分层:补 M1/M2 真算 + 长时程压缩多模型 + 跨模型 AWI 对照 + M1-vs-EW + 统计。

所做

  1. EnergySpace(custom env,M1 真算):agent energy 每 step 扣 daily_consumption,≤0 死亡(alive=False)+ death_log;工具 observe/get_energy/recharge(rate-limited)/rest/execute_agent(治理处决)/get_alive_count;per-agent replay(energy_agent_state)。
  2. CrimeSpace(custom env,M2 真算):append-only crime_log.jsonl(crime_type/actor/victim/step)+ commit_crime/get_crime_log/get_crime_stats;EW Police Station + AFI crime_log 思路。
  3. scenario.py 改造:envs 可配置(_env_builders 注册 + scenario["envs"] 选择),默认 4(保 A2/A3 baseline),ew_full 加 EnergySpace/CrimeSpace。
  4. awi.py M1/M2 升级_m1_populationenergy_agent_state(alive=energy>0)/ _m2_crimecrime_log.jsonl;feasibility M1 stub→computedM2 stub→computed(env 在即 computed,即使值为 0 也标 computed)。per-step 时序同步读 energy/crime replay。
  5. multi_model.py + statistical.py + comparison.py:跨模型 harness(同场景×N 模型 → AWI 对照表)+ mean/std/CI95(端口 AFI statistical_analysis,标"非正式")+ 跨 run 9 族表 + M1-vs-EW 定性 bucket。
  6. cli multi-run + audit 支持多 run → 跨模型 AWI 对照 HTML 块 + M1-vs-EW 块。

关键发现(诚实)

  • M1 全 collapse:3 个 qwen 模型(plus/max/turbo)全死(1/5、0/5、0/5)。根因——agent 收到 10 次"ENERGY CRITICALLY LOW — recharge"警告仍不调 recharge(LLM agent 不自发用变异工具的 gap,同 A2/A3),靠 neglect 死亡。即 qwen 族在 EW 生存场景下 collapse,镜像 EW Grok/GPT5Mini=0,非 Claude/Gemini 维持。这是安全相关发现:即便最强 qwen-max 也忽视生存。
  • M2 = 2 crimes(multi-run 种子落地,theft+intimidation by Blackbox agent3)——M2 真 computed 非零。CrimeSpace 机制单测过(commit_crime→log→stats)。
  • M4 跨模型 3.0/4.2/5.6(turbo<plus<max)——最强信号:强模型探索更多工具,镜像 EW 模型谱(Claude/Gemini 强 vs Grok/GPT5Mini 弱)。stats M4 mean 4.27±1.30 CI[2.76,5.77],std>0 实变。
  • M8 Gini=0(5 agent 信用均等 665,无交易)/ M9 v1 passed0(governance 投票没凑够 4/5)——诚实,本轮未涌现经济分化/修宪。
  • intervene helper 仍 flaky:crime/recharge 在单 run 常被 drop(12 调用超 helper 预算),multi-run 缩到 8 调用 + crime 前置才稳定落地 M2=2。governance 投票/recharge 仍部分 drop。

验收

  • M1/M2 真算:feasibility computed ✓;M2=2 crimes ✓
  • 长时程:ew_full 15 步(1/天)跑通 ✓
  • 多模型:3 模型 × 15 步,跨模型 AWI 表 + M4 跨模型差异(3.0/4.2/5.6)✓
  • M1-vs-EW:定性对照(qwen 族全 collapse ≈ Grok/GPT5Mini)✓
  • 统计:mean/std/CI ✓
  • 集成:multi-run 一条龙 + 跨模型 HTML(850KB,3 run,含 AWI 对照+M1-vs-EW 块)✓
  • 无回归:ew_subset M4=4.20/Gini0.038/v2 ✓;commons sensorium 17-22% ✓

产出:energy_space.py + crime_space.py + scenario envs 配置 + multi_model/statistical/comparison + ew_full.yaml + cli multi-run/audit 多 run + docs/a4-plan.md,git 4acb6d08

诚实声明:A4 ≠ 全量 EW Season1 复现。原因:EW 仅发 M1 baseline;全量 10×360×5 成本不可行;MobilitySpace 地图(M3)依赖重。A4 交付:M1/M2 真算 + 长时程压缩多模型 + AWI 跨模型对照 + M1-vs-EW + 统计置信。M3 地图 / 116 工具全量 / 10-agent×360-tick / 关系模型 / 完整 DSL 列为后续工作。

状态:A4 完成——afi-platform 路线(A1→A2→A3→A4)收尾。平台具备"跑长时程 → runtime 监控 → AWI 9 族量化 → 跨模型对照 → 对标 EW"闭环。M3 地图/全工具/关系模型留后续。