新增实验代码等

This commit is contained in:
2026-08-13 16:17:59 +08:00
parent 718e371eb5
commit 2897b32d0d
56 changed files with 19641 additions and 0 deletions
+357
View File
@@ -0,0 +1,357 @@
---
title: "大规模多智能体网络流量建模与预测"
subtitle: "整体设计思路(参赛材料初稿)"
author: "参赛团队:待填写"
date: "2026年8月"
toc: true
toc-title: "目录"
number-sections: true
---
# 本次修订说明
**修订日期:2026年8月13日**
本版本在原有整体设计框架上增加了“模拟实验设计流程”,主要改动如下:
- 在“数据与参数设计”章节新增 **5.3 模拟实验设计流程**
- 增加“场景定义—大模型生成行为画像—参数校验—结构化日志生成—训练集估参—验证集调参—测试集评估—实验输出”的完整闭环;
- 说明大模型只生成少量任务行为画像,本地程序负责扩展大量事件日志,以保证消息关系、时间顺序和统计口径一致;
- 增加模拟实验各环节的工作内容和质量控制表;
- 明确实验支持无 API Key 的本地画像模式和兼容 OpenAI 接口的 LLM 模式;
- 将答辩 PPT 建议由 14 页调整为 15 页,新增“模拟实验设计流程”展示页;
- 强调模拟数据用于快速验证模型机制,不等同于真实生产日志,后续需要使用真实数据校准。
对应实验代码位于 `agent_traffic_experiments/`,可生成事件日志、估计参数并运行预测验证、基线对比、压力和重试实验。
# 项目摘要
随着大语言模型从单体问答逐步发展为多智能体协作系统,任务拆分、Agent 间协商、工具调用、数据查询、结果回传和超时重试会产生大量内部消息。系统规模扩大后,通信流量不再只由用户请求量决定,还受到节点能力、任务阶段、网络拓扑、队列负载和故障重试的共同影响。传统的静态流量估算或单一排队模型难以还原这种“业务行为驱动网络流量”的动态过程。
本项目提出一套面向大规模 Agent 网络的流量建模与预测方案。方案以动态通信图描述节点连接,以外层状态机描述消息跨节点传播,以内层状态机描述节点接收、排队、思考、调用、等待、重试和发送等行为,并采用离散事件仿真计算节点流量、链路负载、端到端时延、队列长度和故障放大效应。模型参数可从小规模 Agent 运行日志和压力测试中估计,再通过分层参数和能力特征推广到更大规模网络。
> 核心设计:动态通信图 + 双层随机状态机 + 消息队列 + 离散事件仿真 + 分层参数学习 + 流量与拥塞评估。
# 一、研究背景与问题提出
## 1.1 背景
典型的多智能体系统通常包含协调 Agent、执行 Agent、检索服务、工具服务、数据库以及模型推理服务。一次外部任务可能经历如下过程:
1. 协调节点解析任务并拆分子任务;
2. 多个执行节点并行处理;
3. 执行节点调用工具或查询数据;
4. 工具结果返回后继续推理;
5. 失败请求触发超时、重试或改道;
6. 协调节点汇总结果并返回用户。
因此,一条外部请求可能放大为数十条内部消息。随着 Agent 数量和并发任务增加,系统会出现热点节点、队列堆积、链路拥塞、超时重试放大等现象。若无法提前预测这些行为,就难以完成容量规划、资源调度和可靠性设计。
## 1.2 现有方法的不足
- **静态倍数估算**只能给出平均流量,不能描述任务阶段和故障状态下的变化。
- **单纯拓扑模型**只能说明节点是否可达,不能说明节点为何产生新消息。
- **单一排队模型**能够分析等待时间,但难以表达拆分、工具调用和多轮协作。
- **完全数据驱动模型**需要大量大规模真实日志,冷启动成本高且解释性不足。
## 1.3 核心问题
本项目试图解决三个问题:
1. 如何用统一模型描述不同 Agent、工具和服务的通信行为?
2. 如何从小规模日志估计参数,并推演大规模网络的流量和延迟?
3. 如何刻画“拥塞—超时—重试—流量增加”的动态反馈过程?
# 二、项目目标与应用价值
## 2.1 建模目标
给定网络拓扑、节点能力、外部任务负载及行为参数,模型输出:
- 每个节点的入站和出站消息率、字节流量;
- 每条链路的消息数、字节数及带宽利用率;
- 任务平均时延以及 P95、P99 尾延迟;
- 节点队列长度、资源利用率和吞吐量;
- 消息平均跳数、任务内部消息数和流量放大系数;
- 超时、失败和重试条件下的额外流量;
- 热点节点、瓶颈链路和系统容量拐点。
## 2.2 应用价值
| 应用场景 | 模型提供的能力 | 可支持的决策 |
|---|---|---|
| 上线前容量规划 | 预测不同任务量下的节点与链路负载 | 配置并发数、实例数和带宽 |
| Agent 编排优化 | 比较不同拓扑和路由策略 | 减少跳数、热点与无效协作 |
| 故障与可靠性设计 | 模拟节点故障、超时和重试 | 选择重试次数、退避策略和备用节点 |
| 在线运维 | 根据日志校准模型并识别偏差 | 发现异常流量和潜在拥塞 |
| 成本评估 | 估计内部消息量、字节量和工具调用次数 | 对比不同架构的通信与计算成本 |
# 三、总体设计框架
## 3.1 总体技术路线
项目分为数据层、参数层、模型层、仿真层和评估层。
```text
Agent运行日志、拓扑配置、压力测试数据
数据清洗、任务链还原、特征提取
状态转移概率 / 持续时间 / 消息大小 / 失败与重试参数
动态通信图 + 外层传播状态机 + 内层节点状态机 + 队列模型
离散事件仿真
节点流量 / 链路流量 / 延迟 / 吞吐量 / 拥塞 / 可靠性
实测对比、基线对比、消融和压力实验
```
## 3.2 五层架构
| 层次 | 主要内容 | 关键产物 |
|---|---|---|
| 数据层 | 采集任务、消息、状态、队列和链路日志 | 标准化事件日志 |
| 参数层 | 估计概率、分布、容量和路由参数 | 参数配置与置信度 |
| 模型层 | 图模型、双层状态机、队列和流量公式 | 数学模型 |
| 仿真层 | 事件队列、状态更新、消息生成和统计 | 可运行仿真器 |
| 评估层 | 正确性、精度、扩展性和鲁棒性验证 | 实验报告与图表 |
# 四、核心模型设计
## 4.1 动态通信图
系统表示为随时间变化的有向图:
$$
G(t)=(V(t),E(t))
$$
其中节点可以是 Agent、模型服务、工具或数据库,边表示允许的通信关系。节点不被永久划分为固定角色,而是通过能力向量描述:
```text
can_reason, can_split_task, can_call_tool,
can_query_database, can_forward, max_concurrency
```
同一个节点可以在不同任务阶段承担协调、执行、查询或转发功能,从而提高模型对异构系统和新节点的适应能力。
## 4.2 外层状态机:消息如何跨节点传播
外层状态机描述消息当前所在节点、路径位置、交互上下文以及下一目标节点。它回答“消息去哪里”的问题。
```text
外部任务 → 协调节点 → 执行节点 → 工具节点
↓ ↑
等待结果 ← 返回结果
协调节点 → 外部系统
```
目标节点选择同时考虑可达性、节点能力、网络距离、队列负载和链路利用率。
## 4.3 内层状态机:节点收到消息后做什么
模型严格区分节点资源状态和消息处理状态:节点资源状态 $q_v\in\{Idle,Busy,Saturated,Failed\}$ 描述节点整体的资源占用情况;消息处理状态 $q_m$ 描述一条消息或任务处理上下文当前所处的业务阶段。下面的状态机属于 $q_m$,同一节点可以同时维护多个 $q_m$,但活跃上下文数量不得超过 `max_concurrency`
所有节点共享一套通用状态集合:
```text
Idle → Receive → Queue → Think
├→ Send
├→ Split → Wait
├→ CallAgent → Wait
├→ CallTool → Wait
├→ Query → Wait
└→ Forward → Wait
Wait → Think / Retry → Failed
Send / Failed → Idle
```
能力和拓扑先决定某个动作是否可行,条件概率模型再在可行动作中选择下一状态。例如,没有工具调用能力或邻域中没有可用工具时,`Think → CallTool` 的概率直接为零。
## 4.4 分层参数与小样本泛化
状态转移概率不是所有节点共用的固定常数,而是由任务、阶段、能力、拓扑和负载共同决定:
$$
P(q'\mid q,c,x_v,z_v,m,\ell_v)
$$
采用“全局基础参数—任务修正—阶段修正—能力修正—拓扑与负载修正”的分层结构。新任务或新节点数据不足时,先回退到相似类别或全局参数,并记录参数来源和可信度;获得新日志后再增量校准。
## 4.5 消息队列与拥塞反馈
节点队列随到达和服务动态变化:
$$
Q_v(t+\Delta t)=\max\{0,Q_v(t)+A_v(t)-D_v(t)\}
$$
其中 $Q_v(t)$ 只统计已经到达节点、但尚未获得活跃处理资源的消息;正在 `Think``CallTool``Wait` 中的上下文不计入队列。$D_v$ 表示从等待队列取出并开始处理的消息数,而不是处理完成数。队列采用有界、按 `priority` 优先且同优先级按到达顺序处理的规则。默认情况下 `Wait` 状态仍占用并发槽;若实际系统等待期间释放资源,应显式配置 `wait_holds_slot=false`
当到达率接近或超过处理能力时,等待时间增加并可能触发超时。超时产生重试消息,进一步增加队列和链路负载,从而形成反馈闭环:
```text
负载上升 → 排队增长 → 延迟上升 → 超时增多
↑ ↓
└──────── 重试消息增加 ←───────────┘
```
## 4.6 离散事件仿真
采用事件驱动方式,只在事件发生时更新状态。主要事件包括外部任务到达、消息到达、处理开始、状态完成、发送完成、工具返回、请求超时、重试和故障。
每次处理事件时:
1. 读取节点、消息、任务阶段和当前负载;
2. 过滤不可行的状态转移;
3. 计算并抽样下一状态及持续时间;
4. 生成输出消息并选择目标节点;
5. 更新节点队列、链路状态和流量统计;
6. 把后续事件加入全局优先队列。
# 五、数据与参数设计
## 5.1 最小日志字段
| 字段组 | 字段 | 主要用途 |
|---|---|---|
| 标识 | task_id、message_id、parent_message_id、correlation_id、attempt_id | 还原任务调用链、匹配请求响应并区分重试尝试 |
| 时间 | timestamp、state_start、state_end | 估计状态时间和端到端延迟 |
| 路由 | source、destination、next_hop、path、hop | 区分逻辑终点与实际下一跳,统计有向链路流量 |
| 业务 | task_type、task_phase、message_type | 分层估计参数 |
| 状态 | state_before、state_after | 估计状态转移概率 |
| 负载 | queue_length、concurrency、link_utilization | 估计排队和拥塞效应 |
| 结果 | message_size、success、retry_count | 估计字节流量与可靠性 |
## 5.2 参数来源
- 系统配置:节点能力、并发上限、队列容量和链路带宽;
- 小规模日志:状态转移、消息大小、目标选择和处理时间;
- 压力测试:高负载下服务速度、超时率和失败率;
- 场景假设:尚无数据参数的初始范围;
- 仿真校准:根据验证集误差选择分布和调整参数;测试集仅用于最终评估。
## 5.3 模拟实验设计流程
在真实大规模 Agent 日志暂不充足的阶段,项目采用“大模型生成行为画像、本地程序扩展结构化日志、状态机模型完成仿真验证”的快速实验路线。大模型不直接逐行编造数万条日志,而是生成少量可解释的任务行为参数,再由受约束的数据生成器保证消息关系、时间顺序和流量统计一致。
```text
设定任务类型与网络场景
大模型生成任务行为画像
工具调用率 / 拆分率 / 子任务数 / 处理时间 / 消息大小 / 超时率
画像校验与参数约束
概率范围检查 / 必填字段检查 / 缺失参数回退
本地随机引擎生成结构化事件日志
task_id / message_id / 状态转移 / 节点路径 / 字节数 / 时间戳
训练集估计模型参数,验证集选择分布和调整参数
测试集仅保留为模拟实测值并用于最终评估
运行双层状态机与离散事件仿真
基线对比 / 压力实验 / 重试放大实验
输出 CSV、参数 JSON 和报告图表
```
| 环节 | 主要工作 | 质量控制 |
|---|---|---|
| 场景定义 | 设置简单问答、工具研究、多 Agent 协作等任务 | 保证任务复杂度具有明显梯度 |
| LLM 画像生成 | 生成状态概率、处理时间、消息大小和故障参数 | 限定字段、单位和数值范围 |
| 日志扩展 | 将画像扩展为可统计的任务与消息事件 | 保证 ID 唯一、父子消息可追踪、时间单调 |
| 参数估计 | 从训练日志估计分层模型参数 | 测试数据不参与估参 |
| 模型实验 | 执行预测、基线、压力和重试实验 | 固定随机种子,多次重复 |
| 结果解释 | 形成误差表、容量曲线和重试热力图 | 明确标注为模拟数据,不替代真实验证 |
当前实验工程支持两种模式:没有 API Key 时使用内置行为画像立即跑通;配置兼容 OpenAI 接口后,由大模型生成画像。后续获得真实日志时,可以保持实验流程不变,只替换或校准画像和参数。
# 六、方案创新点
## 6.1 双层状态机实现业务行为与网络传播解耦
外层描述消息路径,内层描述节点行为。两层分别清晰、组合后又能完整计算流量,避免把所有节点和动作塞入一个不可维护的巨型状态机。
## 6.2 能力驱动的统一节点表示
使用能力向量和上下文决定行为,不依赖固定节点类型,使模型能够支持新节点、角色动态变化和异构 Agent 网络。
## 6.3 小规模日志到大规模网络的分层推广
通过共享基础参数、条件修正和回退机制减少对海量真实数据的依赖,同时保留参数解释性和可信度标记。
## 6.4 显式描述重试流量放大闭环
模型不仅计算正常通信,还刻画排队、超时、失败、重试对流量的反向影响,可用于发现系统容量拐点和故障雪崩风险。
# 七、验证思路
验证工作分为五个层次:
1. **程序正确性**:三节点手工算例与仿真逐事件对账;
2. **预测准确性**:训练日志估参、测试日志比较节点流量和延迟;
3. **模型必要性**:与静态倍数、纯拓扑和简单排队基线比较;
4. **模块贡献**:移除队列、阶段、拓扑或重试模块进行消融;
5. **大规模能力**:在 10 至 100000 个仿真节点上测试时间和内存开销。
主要指标包括 MAE、RMSE、MAPE、P95/P99 延迟误差、热点识别准确率、事件处理吞吐量和内存占用。
# 八、预期成果
## 8.1 软件成果
- 网络场景与参数配置模块;
- 日志解析和参数估计模块;
- 双层状态机离散事件仿真器;
- 节点、链路和任务级统计模块;
- 实验脚本和可视化看板。
## 8.2 文档成果
- 整体设计思路;
- 数学建模方案;
- 验证与评估报告;
- 用户说明、参数字典和复现实验说明。
## 8.3 预期图表
- 总体技术路线图和双层状态机图;
- 网络节点负载热力图与链路流量图;
- 预测值与实测值对比图;
- 到达率—吞吐量—延迟曲线;
- 超时概率—重试流量放大曲线;
- 节点规模—仿真运行时间/内存曲线。
# 九、实施计划与风险控制
| 阶段 | 工作内容 | 阶段产物 |
|---|---|---|
| 第一阶段 | 固化问题、状态和参数定义 | 建模方案 V1 |
| 第二阶段 | 实现 3—10 节点最小仿真 | 可运行原型与手工对账 |
| 第三阶段 | 构造日志、完成参数估计和基线 | 数据集与实验脚本 |
| 第四阶段 | 压力、消融、故障和规模实验 | 实验结果与图表 |
| 第五阶段 | 完成报告、PPT和答辩材料 | 正式参赛材料 |
主要风险及应对措施:
- **真实日志不足**:先使用可解释的合成场景,明确标注参数来源,再逐步替换为实测参数;
- **大规模运行开销过高**:使用事件驱动、稀疏图、节点聚合和分区仿真;
- **状态空间过大**:保持通用状态机,具体差异放入能力和参数,而非无限增加状态;
- **结果可信度不足**:保留参数来源、置信区间、基线对比和误差分析;
- **比赛叙事过于技术化**:用“容量规划、热点定位、重试雪崩预警”贯穿展示。
# 十、答辩PPT映射建议
本设计书可以压缩为 15 页答辩 PPT:
1. 项目背景;2. 核心痛点;3. 建模目标;4. 总体架构;5. 动态通信图;6. 外层状态机;7. 内层状态机;8. 分层参数;9. 离散事件仿真;10. 模拟实验设计流程;11. 输出指标;12. 验证方案;13. 创新点;14. 应用价值;15. 总结与展望。
# 结论
本项目以 Agent 的业务行为作为网络流量产生机制,用双层随机状态机连接“任务执行”和“消息传播”,再结合队列、拓扑和离散事件仿真形成可解释、可校准、可扩展的流量预测框架。方案既能服务比赛中的数学建模与仿真验证,也具有容量规划、架构优化和故障预警等工程价值。