You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多智能体系统(MAS)基于共享内存的间接通信实现求助

别慌!用共享内存实现多智能体(MAS)的通信其实没那么复杂,我给你梳理几个核心思路和具体实现方案,分分钟上手~

核心设计思路

先搞清楚共享内存通信的本质:就是一块所有智能体都能直接访问的公共内存区域,核心要解决三个问题:

  • 怎么创建可共享的内存空间
  • 怎么保证多智能体读写不冲突
  • 怎么给智能体提供简单安全的操作接口
具体实现方案(分语言举例)

1. Python 快速实现(适合原型验证)

Python的multiprocessing模块已经封装好了共享内存的工具,不用自己处理底层细节,非常适合快速搭原型:

from multiprocessing import Process, Manager

def agent_a(shared_store):
    # 写入共享数据:比如自己的状态
    shared_store["agent_a"] = {"status": "exploring", "position": (10, 20)}
    # 读取其他智能体的数据
    print("Agent A 读取 Agent B 数据:", shared_store.get("agent_b", "暂无数据"))

def agent_b(shared_store):
    # 写入共享数据
    shared_store["agent_b"] = {"status": "patrolling", "position": (30, 40)}
    # 读取其他智能体的数据
    print("Agent B 读取 Agent A 数据:", shared_store.get("agent_a", "暂无数据"))

if __name__ == "__main__":
    # 创建一个由Manager管理的共享字典(自动处理同步)
    with Manager() as manager:
        shared_memory = manager.dict()
        # 启动两个智能体进程
        p_a = Process(target=agent_a, args=(shared_memory,))
        p_b = Process(target=agent_b, args=(shared_memory,))
        p_a.start()
        p_b.start()
        p_a.join()
        p_b.join()

说明:Manager会帮你处理底层的同步锁,共享字典是线程/进程安全的,智能体只要像操作普通字典一样读写就行。如果需要更灵活的结构,还可以用manager.list()或者自定义共享对象。

2. C++ 底层实现(适合高性能场景)

如果你的MAS对性能要求高,用C++直接操作POSIX共享内存(Linux/macOS)或者Windows共享内存更高效:

#include <iostream>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <mutex>
#include <sys/wait.h>

// 定义共享内存里的数据结构(所有智能体要统一这个结构)
struct SharedAgentData {
    std::mutex sync_lock; // 互斥锁,保证读写同步
    int agent1_score;
    int agent2_score;
    char agent1_status[20];
    char agent2_status[20];
};

void agent1() {
    // 打开共享内存对象(不存在则创建)
    int shm_fd = shm_open("/mas_shared_memory", O_CREAT | O_RDWR, 0666);
    // 设置共享内存大小为结构体大小
    ftruncate(shm_fd, sizeof(SharedAgentData));
    // 将共享内存映射到当前进程的地址空间
    SharedAgentData* shared_data = static_cast<SharedAgentData*>(
        mmap(nullptr, sizeof(SharedAgentData), PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0)
    );

    // 加锁写入数据
    std::lock_guard<std::mutex> lock(shared_data->sync_lock);
    shared_data->agent1_score = 85;
    snprintf(shared_data->agent1_status, sizeof(shared_data->agent1_status), "completed");
    std::cout << "Agent1 写入数据: 分数=" << shared_data->agent1_score << ", 状态=" << shared_data->agent1_status << std::endl;

    // 读取Agent2的数据
    std::cout << "Agent1 读取Agent2数据: 分数=" << shared_data->agent2_score << ", 状态=" << shared_data->agent2_status << std::endl;

    // 清理资源:解除映射、关闭文件描述符
    munmap(shared_data, sizeof(SharedAgentData));
    close(shm_fd);
}

void agent2() {
    int shm_fd = shm_open("/mas_shared_memory", O_RDWR, 0666);
    SharedAgentData* shared_data = static_cast<SharedAgentData*>(
        mmap(nullptr, sizeof(SharedAgentData), PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0)
    );

    std::lock_guard<std::mutex> lock(shared_data->sync_lock);
    shared_data->agent2_score = 92;
    snprintf(shared_data->agent2_status, sizeof(shared_data->agent2_status), "running");
    std::cout << "Agent2 写入数据: 分数=" << shared_data->agent2_score << ", 状态=" << shared_data->agent2_status << std::endl;

    std::cout << "Agent2 读取Agent1数据: 分数=" << shared_data->agent1_score << ", 状态=" << shared_data->agent1_status << std::endl;

    munmap(shared_data, sizeof(SharedAgentData));
    close(shm_fd);
    // 最后退出的智能体删除共享内存(避免残留)
    shm_unlink("/mas_shared_memory");
}

int main() {
    // 创建子进程运行Agent1
    pid_t pid = fork();
    if (pid == 0) {
        agent1();
    } else {
        agent2();
        wait(nullptr); // 等待子进程结束
    }
    return 0;
}

说明:这里用POSIX标准的共享内存API,通过shm_open创建共享内存对象,mmap映射到进程空间,然后用std::mutex保证同步。Windows下可以用CreateFileMapping和MapViewOfFile实现类似逻辑。

关键注意事项
  • 同步永远是第一位:多个智能体同时读写必须加锁,不然会出现数据错乱。读多写少的场景可以用读写锁(std::shared_mutex),比互斥锁更高效。
  • 数据结构要统一:如果智能体是不同语言实现的,要保证共享内存里的数据结构字节序、类型大小一致,比如用Protocol Buffers序列化后再存入共享内存,避免跨语言兼容问题。
  • 内存清理要及时:使用完共享内存一定要释放,避免系统残留无效的共享内存对象。
  • 场景匹配结构:如果是需要传递消息,共享内存里可以放一个线程安全的队列;如果是共享状态,用结构体或键值对更合适。

内容的提问来源于stack exchange,提问作者Yassine EL MOUDENE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:22:37