hermes agent带宽限制有五种技术路径:一、linux tc+ebpf限速;二、docker --limit-bps参数;三、iptables+tc端口级限速;四、k8s networkpolicy+cni带宽注解;五、应用层令牌桶中间件。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您在运行Hermes Agent时发现网络带宽被过度占用,导致其他服务响应迟缓或容器间通信质量下降,则可能是由于未对出站流量实施有效带宽节制。以下是实现Hermes Agent带宽限制的多种技术路径:
一、使用Linux tc(Traffic Control)配置eBPF限速规则
该方法通过内核级流量整形工具tc,在容器宿主机网络接口上直接施加出口带宽上限,适用于Docker或Podman部署场景,具备低延迟、高精度特性。
1、确认Hermes Agent容器所绑定的宿主机网卡名称,执行ip link show并识别对应veth设备或桥接接口。
2、加载htb(Hierarchical Token Bucket)队列规则,设定根类最大速率: tc qdisc add dev eth0 root htb default 30。
3、为Hermes Agent分配独立流量类,限制其出口带宽为5Mbps:tc class add dev eth0 parent 1: classid 1:1 htb rate 5mbit ceil 5mbit。
4、将Hermes Agent容器的veth接口流量映射至该类:tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src <container_ip>/32 flowid 1:1</container_ip>。
二、在Docker运行时启用--network和--limit-bps参数组合
该方式依赖Docker 24.0+版本对CNI带宽插件的原生支持,通过容器启动参数声明式限定网络吞吐,无需修改宿主机内核配置,适合CI/CD流水线快速部署。
1、确保宿主机已安装bandwidth CNI插件,并在/etc/cni/net.d/中存在含"type": "bandwidth"的配置文件。
2、启动Hermes Agent容器时显式指定出向限速:docker run --network hermes-net --limit-bps=5000000 -d hermes-agent:latest。
3、验证限速生效:进入容器执行iperf3 -c <test_server> -R</test_server>,观察接收端报告速率是否稳定在5MB/s附近。
三、通过iptables + tc配合实现基于端口的细粒度限速
该方案适用于需按协议类型或目标端口差异化限速的场景,例如限制GitHub API调用(443端口)带宽但放行内部gRPC通信(9000端口),提升策略灵活性。
1、创建新链匹配目标端口443的出站连接:iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 1。
2、配置tc规则仅对标记流量应用限速:tc qdisc add dev eth0 root handle 1: htb default 30。
3、添加匹配标记1的子类,设定带宽上限为2Mbps:tc class add dev eth0 parent 1: classid 1:1 htb rate 2mbit ceil 2mbit。
4、绑定标记与子类:tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 1 fw flowid 1:1。
四、在Kubernetes中通过NetworkPolicy + CNI带宽注解实现命名空间级限速
该方法面向多租户生产环境,利用K8s原生NetworkPolicy抽象与Calico/Cilium等CNI插件的扩展能力,实现按命名空间或Pod标签批量施加带宽约束,保障SLO可审计性。
1、为Hermes Agent所在命名空间添加带宽注解:kubectl annotate namespace hermes-ns kubernetes.io/egress-bandwidth="3mbit"。
2、部署支持带宽策略的CNI插件(如Cilium v1.15+),确保其启用enable-bandwidth-manager=true配置项。
3、创建NetworkPolicy资源,指定eBPF限速规则作用于所有带app=hermes-agent标签的Pod:egressBandwidth: "3mbit"字段写入policy spec。
4、检查Cilium agent日志,确认输出类似Applied egress bandwidth limit 3mbit to pod hermes-agent-7f9b4的日志条目。
五、在Hermes Agent应用层注入速率控制中间件
该方式不依赖底层网络设施,通过在Agent请求调度器中嵌入令牌桶逻辑,对HTTP客户端、gRPC通道及数据库连接池的并发请求数与字节数双重节制,具备跨平台一致性与调试友好性。
1、修改tools/mixture_of_agents_tool.py,在async def make_api_call()函数入口处插入令牌获取逻辑:await self.rate_limiter.acquire(tokens=content_length_bytes)。
2、初始化令牌桶实例,设置每秒填充5MB、桶容量10MB:self.rate_limiter = AsyncTokenBucket(fill_rate=5_000_000, capacity=10_000_000)。
3、在hermes_cli/config.py中新增带宽配置段:network: egress_bandwidth_bps: 5000000,供运行时动态加载。
4、启动时验证配置解析成功,日志中出现Loaded egress bandwidth limit: 5000000 bps提示。











