重构:替换为新架构代码
LatentCollab 是一个多智能体低开销协作实验系统。Planner、Retriever、Executor 和 Summarizer 通过能力路由协作,可比较完整文本、结构化文本与 KV cache 非文本 工作记忆三种通信方式,并提供联网检索、分层记忆、代码沙箱和消息审计功能。
系统只在命令行中保留四种实验模式:
python -m src.main single python -m src.main sequential python -m src.main compare python -m src.main ablation
不填写模式时,读取 config.yaml 中的 common.shared.experiment.mode:
config.yaml
common.shared.experiment.mode
python -m src.main
模型、设备、任务、运行轮数及模块开关都在 config.yaml 中设置。 命令行实验模式具有最高优先级。
读取任务文件中的第一个任务。该模式用于展示完整系统能力,默认启用:
这些功能可在 common.task 中调整。single与sequential除任务数量和记忆复用过程外, 共用同一套执行参数。
common.task
依次执行任务文件中的前两个任务。T1完成后产生的记忆可以被T2检索和复用,适合 观察记忆命中、跳过不必要联网检索以及动态路由变化。整组运行开始前可清空旧记忆, 但T1与T2之间不会清空。
实验臂、路由、联网和记忆配置同样位于 common.task。
动态拓扑具有强制起终点。默认 Planner 是起点,Summarizer 是终点; routing.max_agent_work: [2, 2, 2, 1] 按 agents 列表顺序限制每个节点在单个 任务中的工作次数。每次非终点Agent只生成一次内容,随后由Orchestrator单独进行一次 受限格式路由判断。到达终点立即结束;路由无效、无节点可用或其余额度耗尽时,系统 强制进入保留的一次Summarizer收束机会。自定义Agent列表时必须同步明确填写 routing.start_agent、routing.end_agent 和等长的 routing.max_agent_work。
Planner
Summarizer
routing.max_agent_work: [2, 2, 2, 1]
agents
routing.start_agent
routing.end_agent
routing.max_agent_work
相同任务依次由三个实验臂执行:
text
structured
latent
为了只比较通信方式,系统推荐执行以下控制条件:
对比轮数、路由、联网检索和记忆开关均在 common.compare 中显式配置,正式对比建议 至少10轮。如果用户修改实验臂、动态路由、联网或记忆等关键参数,系统会显示推荐值 和用户值。确认后按用户需求执行;拒绝或未获得输入时采用上述推荐条件。
common.compare
evaluation.memory_policy 决定记忆隔离方式:off 完全关闭, isolated_reset_each_round 为每个臂建立独立库且逐轮清空, isolated_accumulate 允许各臂在自己的库内跨轮积累, shared_readonly_snapshot 允许三个臂读取同一预置库但阻止写入和复用计数变化。 实验臂顺序默认逐轮轮换, 同一任务在各臂开始前恢复相同随机种子;任务分类也只计算一次并由各臂共用。
evaluation.memory_policy
off
isolated_reset_each_round
isolated_accumulate
shared_readonly_snapshot
消融模式默认使用两个连续任务,并按控制变量法执行:
| C | structured | 开启 | 关闭 | 固定 | | D | structured | 开启 | 开启 | 固定 | | E | structured | 开启 | 开启 | 动态 |
全部组关闭联网检索并使用相同模型、任务顺序、采样参数、沙箱设置和代码任务判断。 每组开始前恢复相同随机种子。D和E分别使用物理隔离的空记忆库:各组内部T2可以 复用本组T1记忆,但不同组之间不会共享记忆。E组的Agent执行次数受 defaults.ablation.routing.max_agent_work 列表限制,列表顺序与 agents 一致。 defaults.ablation.evaluation.ablation_groups 调整组定义;该项属于关键默认参数, 启动时必须确认后才会生效。
defaults.ablation.routing.max_agent_work
defaults.ablation.evaluation.ablation_groups
默认读取根目录 tasks.txt:
tasks.txt
#
-
common.shared.experiment.task_template
任务应当是边界清楚、可以验证的具体问题,例如:
欧盟CBAM正式实施后,进口钢铁企业需要按季度提交哪些排放字段,直接排放和间接排放分别如何计算? 上述字段中哪些可以复用企业现有碳核算系统数据,哪些需要新增采集流程?
根配置分为两类:
common
defaults
两类配置均按运行模式分组:
common.shared 所有模式常用参数 common.task 单任务与连续任务共用参数 common.compare 对比实验常用参数 common.ablation 消融实验常用参数 defaults.shared 所有模式底层默认参数 defaults.task 单任务与连续任务共用默认参数 defaults.compare 对比实验默认参数 defaults.ablation 消融实验默认参数
最终优先级为:
命令行实验模式 > common对应组(single和sequential均对应task) > common.shared > defaults对应组 > defaults.shared > 程序兜底值
compare和ablation会在配置合成后给出控制变量推荐值;用户确认关键修改后仍可采用 自己的设置。每次运行都会把真正生效的配置保存为 effective_config.yaml。
effective_config.yaml
系统优先尊重用户明确需求,但会保护实验可比性和底层运行安全。以下修改会在启动 组件前要求确认:
src/config/default.yaml
提示会列出参数名、修改原因、推荐值和用户值:
参数: routing.mode 原因: 改变compare模式的控制变量 推荐值: 'fixed' 用户值: 'dynamic' 确认使用用户值?[y/N]:
输入 y、yes、是 或 确认 采用用户值;其它输入采用推荐值。非交互环境无法 确认时也使用推荐值。确认结果和最终值会写入运行概要及 effective_config.yaml。
y
yes
是
确认
common.shared.experiment.output_dir 是所有运行结果的统一根目录,默认值为 run。每次执行创建独立目录:
common.shared.experiment.output_dir
run
run/ └── compare_20260712_120000/ ├── effective_config.yaml ├── terminal_output.log ├── summary.json ├── reply.md ├── comparison.json ├── audit_graph.json └── memory/
不同模式可能产生:
comparison.json
ablation.json
ablation_comparison.json
web_search_snapshot.json
audit_graph.json
terminal_output.log
summary.json
reply.md
对照模式按“轮次—实验臂—任务”、消融模式按“轮次—消融组—任务”分隔输出。 每个任务结束后立即打印完整 Answer;空答案打印 Answer: [EMPTY] 并将该任务标记失败。
Answer
Answer: [EMPTY]
正式实验默认只从本地读取主模型和Embedding模型,避免运行过程中访问 HuggingFace。部署脚本和依赖位于 deploy/,系统设计说明见 docs/system_design.md。 模型和数据应在部署阶段准备完成,实验运行阶段不执行自动更新。
deploy/
docs/system_design.md
资源管理使用独立入口,不增加实验命令参数:
python -m src.resources status # 只读本地缓存并报告缺失项 python -m src.resources update # 显式联网下载或更新全部模型 python -m src.resources verify # 完全离线加载Tokenizer和Embedding模型
将 defaults.shared.system.process_mode 设为 multiprocess 后,四类Agent分别拥有 独立Worker进程。TASK/ACTION消息必须先进入对应Worker完成协议校验和业务准入,GPU 推理由线程安全的中央单模型服务串行执行,避免四份4B模型同时占用显存。结果中的 worker_trace 和 worker_directory 会记录PID及实际执行次数。Worker异常默认终止 任务;只有明确把 worker_failure_policy 改为 local_fallback 才会回退本地路径。
defaults.shared.system.process_mode
multiprocess
worker_trace
worker_directory
worker_failure_policy
local_fallback
非文本状态引用同时记录原始载荷、序列化字节、生产者、预期消费者、dtype、shape 以及创建/读取/确认/释放事件。SHM和Socket反序列化后会在模型调用前恢复到目标设备 并校验KV层数与形状。latent.trim_prompt: true 会删除每个Agent新增的prompt KV, 而非只处理第一个Agent。
latent.trim_prompt: true
启用记忆时,系统按 plan → evidence → execution → conclusion 写入任务内父子链, 记录来源消息、任务ID、有效状态和内容哈希;相同内容不会在多轮运行中无限重复写入。 联网证据和沙箱执行结果分别保留外部来源及退出状态。
plan → evidence → execution → conclusion
对比结果将“中间文本token减少”与“latent二进制状态字节”分开报告,并补充状态 峰值、序列化体积、put/get耗时、模型调用次数、均值、标准差、中位数、P95、95% 置信区间和配对时延差。中间文本减少100%不等同于总体通信开销减少100%。
测试与功能展示文件位于 validation/,说明见 validation/tips.md。
validation/
validation/tips.md
pytest validation -q python validation/demo_cross_process.py # Linux/openEuler/WSL2
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
LatentCollab 2.1
LatentCollab 是一个多智能体低开销协作实验系统。Planner、Retriever、Executor 和 Summarizer 通过能力路由协作,可比较完整文本、结构化文本与 KV cache 非文本 工作记忆三种通信方式,并提供联网检索、分层记忆、代码沙箱和消息审计功能。
快速开始
系统只在命令行中保留四种实验模式:
不填写模式时,读取
config.yaml中的common.shared.experiment.mode:模型、设备、任务、运行轮数及模块开关都在
config.yaml中设置。 命令行实验模式具有最高优先级。四种运行模式
single:单任务
读取任务文件中的第一个任务。该模式用于展示完整系统能力,默认启用:
这些功能可在
common.task中调整。single与sequential除任务数量和记忆复用过程外, 共用同一套执行参数。sequential:连续任务
依次执行任务文件中的前两个任务。T1完成后产生的记忆可以被T2检索和复用,适合 观察记忆命中、跳过不必要联网检索以及动态路由变化。整组运行开始前可清空旧记忆, 但T1与T2之间不会清空。
实验臂、路由、联网和记忆配置同样位于
common.task。动态拓扑具有强制起终点。默认
Planner是起点,Summarizer是终点;routing.max_agent_work: [2, 2, 2, 1]按agents列表顺序限制每个节点在单个 任务中的工作次数。每次非终点Agent只生成一次内容,随后由Orchestrator单独进行一次 受限格式路由判断。到达终点立即结束;路由无效、无节点可用或其余额度耗尽时,系统 强制进入保留的一次Summarizer收束机会。自定义Agent列表时必须同步明确填写routing.start_agent、routing.end_agent和等长的routing.max_agent_work。compare:通信方式对比
相同任务依次由三个实验臂执行:
textstructuredlatent为了只比较通信方式,系统推荐执行以下控制条件:
对比轮数、路由、联网检索和记忆开关均在
common.compare中显式配置,正式对比建议 至少10轮。如果用户修改实验臂、动态路由、联网或记忆等关键参数,系统会显示推荐值 和用户值。确认后按用户需求执行;拒绝或未获得输入时采用上述推荐条件。evaluation.memory_policy决定记忆隔离方式:off完全关闭,isolated_reset_each_round为每个臂建立独立库且逐轮清空,isolated_accumulate允许各臂在自己的库内跨轮积累,shared_readonly_snapshot允许三个臂读取同一预置库但阻止写入和复用计数变化。 实验臂顺序默认逐轮轮换, 同一任务在各臂开始前恢复相同随机种子;任务分类也只计算一次并由各臂共用。ablation:A—E消融实验
消融模式默认使用两个连续任务,并按控制变量法执行:
| C | structured | 开启 | 关闭 | 固定 | | D | structured | 开启 | 开启 | 固定 | | E | structured | 开启 | 开启 | 动态 |
全部组关闭联网检索并使用相同模型、任务顺序、采样参数、沙箱设置和代码任务判断。 每组开始前恢复相同随机种子。D和E分别使用物理隔离的空记忆库:各组内部T2可以 复用本组T1记忆,但不同组之间不会共享记忆。E组的Agent执行次数受
defaults.ablation.routing.max_agent_work列表限制,列表顺序与agents一致。defaults.ablation.evaluation.ablation_groups调整组定义;该项属于关键默认参数, 启动时必须确认后才会生效。任务文件
默认读取根目录
tasks.txt:#开头的行是注释,不会成为任务;-用于分隔任务组;common.shared.experiment.task_template。任务应当是边界清楚、可以验证的具体问题,例如:
配置结构和优先级
根配置分为两类:
common:常用参数,建议用户按实验需要修改;defaults:模型采样、latent、传输、沙箱和存储等底层参数,原则上不建议修改。两类配置均按运行模式分组:
最终优先级为:
compare和ablation会在配置合成后给出控制变量推荐值;用户确认关键修改后仍可采用 自己的设置。每次运行都会把真正生效的配置保存为
effective_config.yaml。关键参数确认
系统优先尊重用户明确需求,但会保护实验可比性和底层运行安全。以下修改会在启动 组件前要求确认:
defaults下的值与src/config/default.yaml不一致;提示会列出参数名、修改原因、推荐值和用户值:
输入
y、yes、是或确认采用用户值;其它输入采用推荐值。非交互环境无法 确认时也使用推荐值。确认结果和最终值会写入运行概要及effective_config.yaml。结果目录
common.shared.experiment.output_dir是所有运行结果的统一根目录,默认值为run。每次执行创建独立目录:不同模式可能产生:
comparison.json:三臂逐轮明细和聚合指标;ablation.json:A—E各组任务结果;ablation_comparison.json:相邻消融组的逐任务配对差值和组内聚合;web_search_snapshot.json:single或sequential实际联网时的搜索记录;audit_graph.json:Agent消息、来源和信任域审计数据;terminal_output.log:完整终端输出;summary.json:面向程序的配置、指标与统计概要,不重复保存回答正文。reply.md:按执行顺序保存原始问题及完整回答。对照模式按“轮次—实验臂—任务”、消融模式按“轮次—消融组—任务”分隔输出。 每个任务结束后立即打印完整
Answer;空答案打印Answer: [EMPTY]并将该任务标记失败。离线模型准备
正式实验默认只从本地读取主模型和Embedding模型,避免运行过程中访问 HuggingFace。部署脚本和依赖位于
deploy/,系统设计说明见docs/system_design.md。 模型和数据应在部署阶段准备完成,实验运行阶段不执行自动更新。资源管理使用独立入口,不增加实验命令参数:
多进程与状态传输
将
defaults.shared.system.process_mode设为multiprocess后,四类Agent分别拥有 独立Worker进程。TASK/ACTION消息必须先进入对应Worker完成协议校验和业务准入,GPU 推理由线程安全的中央单模型服务串行执行,避免四份4B模型同时占用显存。结果中的worker_trace和worker_directory会记录PID及实际执行次数。Worker异常默认终止 任务;只有明确把worker_failure_policy改为local_fallback才会回退本地路径。非文本状态引用同时记录原始载荷、序列化字节、生产者、预期消费者、dtype、shape 以及创建/读取/确认/释放事件。SHM和Socket反序列化后会在模型调用前恢复到目标设备 并校验KV层数与形状。
latent.trim_prompt: true会删除每个Agent新增的prompt KV, 而非只处理第一个Agent。记忆与评测口径
启用记忆时,系统按
plan → evidence → execution → conclusion写入任务内父子链, 记录来源消息、任务ID、有效状态和内容哈希;相同内容不会在多轮运行中无限重复写入。 联网证据和沙箱执行结果分别保留外部来源及退出状态。对比结果将“中间文本token减少”与“latent二进制状态字节”分开报告,并补充状态 峰值、序列化体积、put/get耗时、模型调用次数、均值、标准差、中位数、P95、95% 置信区间和配对时延差。中间文本减少100%不等同于总体通信开销减少100%。
验证
测试与功能展示文件位于
validation/,说明见validation/tips.md。