尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

MiroFish 是怎么让上万智能体“听指挥“的?一篇讲透它的智能体通信机制

MiroFish 是怎么让上万智能体“听指挥“的?一篇讲透它的智能体通信机制 MiroFish 是怎么让上万智能体听指挥的一篇讲透它的智能体通信机制【免费下载链接】MiroFishA Simple and Universal Swarm Intelligence Engine, Predicting Anything. 简洁通用的群体智能引擎预测万物项目地址: https://gitcode.com/GitHub_Trending/mi/MiroFish在 MiroFish 里一场由上万智能体构成的模拟落幕之后你大概率想逐个采访场上的智能体你看到了什么、谁影响了你、舆论为什么转向。这不是一个进程内的函数调用——Web 后端与模拟脚本是两个独立进程智能体通信必须跨进程送达。一旦投递不可靠上帝视角的交互体验就全盘落空。常规解法是开端口做 RPC或者引入消息队列。但对一个模拟系统来说这些往往偏重端口冲突、防火墙、多一套常驻服务要运维进程崩溃后连接状态还得重建。MiroFish 选了最轻的一条路用本地文件系统当通信通道对话就是读写 JSON 文件。 一句话定位MiroFish 通信机制扮演什么角色MiroFish 是一个简洁通用的群体智能引擎上传种子材料突发新闻、政策草案、小说片段它自动构建出包含上万智能体的平行数字世界。世界的运转发生在独立的 Python 模拟进程里Web 后端则负责用户操作、进度展示与报告生成。通信机制就是两者之间的交接区后端投递命令模拟进程接单执行再把结果回执写回。整套核心实现只在一个文件里backend/app/services/simulation_ipc.py。一句话小结MiroFish 的智能体通信本质是Flask 后端 ⇄ 模拟脚本之间基于两个目录的低频高价值对话通道。 一条命令的完整旅程从发出到回执下面跟着一条采访命令走完全程。发出后端写入一份带编号的工单前端点击采访某智能体后后端通过SimulationIPCClient发起请求。send_command会生成一个 uuid4 作为全局唯一command_id把IPCCommand含command_id、command_type、args、timestamp四个字段序列化后写入ipc_commands/uuid.json。命令只有三种interview单个采访、batch_interview批量采访、close_env关闭环境。def send_command(self, command_type, args, timeout60.0, poll_interval0.5): command_id str(uuid.uuid4()) # 全程唯一的编号 command IPCCommand(command_id, command_type, args) # 1) 投递工单: ipc_commands/uuid.json with open(f{self.commands_dir}/{command_id}.json, w) as f: json.dump(command.to_dict(), f) # 2) 轮询回执: ipc_responses/uuid.json response_file f{self.responses_dir}/{command_id}.json start time.time() while time.time() - start timeout: if os.path.exists(response_file): data json.load(open(response_file)) # 3) 收到回执后删除双方文件闭环 os.remove(f{self.commands_dir}/{command_id}.json) os.remove(response_file) return IPCResponse.from_dict(data) time.sleep(poll_interval) raise TimeoutError(f等待命令响应超时 ({timeout}秒))写入完成后客户端并不阻塞在网络上而是每 0.5 秒看一眼ipc_responses/目录里有没有出现同名回执文件直到拿到结果或超时。接单模拟脚本的 0.5 秒巡检模拟跑完后脚本并不退出而是进入等待模式主循环每 0.5 秒调用一次process_commands()。脚本端的IPCHandler.poll_command扫描ipc_commands/按文件修改时间取最老的命令解析后分发interview会为指定智能体注入一个ManualAction(INTERVIEW)调用env.step(actions)推进一步再从 SQLite 里查出该智能体的回复。双平台并行Twitter Reddit场景由ParallelIPCHandler处理命令集完全一致。回执状态流转与文件清理CommandStatus定义了四种状态pending → processing → completed / failed。执行成功时脚本把IPCResponsecommand_id、status、result、error、timestamp写入ipc_responses/uuid.json并删掉对应命令文件失败时写入error信息。客户端取走回执后把两个文件都删掉——一条命令对应一对方文件闭环后目录自然干净不会累积垃圾。侧门env_status.json 存活判断目录里还有第三个文件env_status.json记录statusalive/stopped与时间戳。客户端的check_env_alive()读它判断对端是否活着API 层在执行采访、关闭环境等动作前都会先检查环境已死就直接返回明确错误而不是干等 60 秒超时。一句话小结一条命令 一份 uuid 工单 一份回执靠写文件、巡检、回执、清理四步在两个进程间闭环。 基于文件系统的 IPC 选型对比为什么不用 RPC 或消息队列维度文件 IPCMiroFish 采用RPCHTTP/gRPC消息队列Kafka 等依赖无两个目录即可需开放端口、管理连接需部署并维护 broker典型延迟约 0.5s轮询粒度决定毫秒级几十毫秒崩溃恢复文件仍在进程重启可继续连接状态需重建消息保留但消费者要重连吞吐上限低频高价值命令个位数/秒高很高语言耦合任意语言可读 JSON通常需对应 SDK需队列客户端排查方式打开文件即所见抓包 日志需额外监控工具收益是零依赖 抗崩溃 排查即 cat 文件代价是延迟下限约 0.5 秒、单目录单消费者、不适合高频洪峰。这个取舍与模拟系统的负载画像恰好吻合采访和关环境都是低频、高价值、允许秒级延迟的命令。一句话小结MiroFish 用吞吐换运维成本——它不需要扛洪峰只需要必达、可恢复、好排查。 如何上手发出第一条智能体通信命令克隆仓库并跑通一次模拟git clone https://gitcode.com/GitHub_Trending/mi/MiroFish模拟结束后脚本会停留在等待模式模拟目录uploads/simulations/sim_id/下出现ipc_commands/、ipc_responses/、env_status.json。在任意 Python 进程中复用客户端发出采访命令from app.services import SimulationIPCClient client SimulationIPCClient(uploads/simulations/sim_id) if client.check_env_alive(): resp client.send_interview(agent_id7, prompt你为什么会发那条帖子) print(resp.status, resp.result)想看全貌按这条链路读源码客户端/服务端 backend/app/services/simulation_ipc.py → 脚本端处理循环 backend/scripts/run_twitter_simulation.py → API 封装 backend/app/services/simulation_runner.py 与 HTTP 入口 backend/app/api/simulation.py。一句话小结读懂一个文件、调一次send_interview你就走通了 MiroFish 的智能体通信全链路。⚖️ 边界与取舍这套机制适合什么、不适合什么适合的场景低频、高价值、跨进程的请求——单个/批量采访、远程关闭环境量级是个位数命令每秒一条命令一个文件审计天然留痕。不适合的场景毫秒级高频消息交换、一对多的发布订阅广播。轮询间隔约 0.5 秒是延迟下限单个目录只有单消费者多个进程同时轮询会抢文件性能瓶颈在磁盘 IO 与轮询节奏不在网络。默认超时设为 60s单采访、120s批量、30s关环境本身就说明设计预期是秒级到分钟级完成的命令而非实时控制流。延伸阅读README-ZH.md 项目全貌与快速上手 · backend/scripts/run_parallel_simulation.py 双平台 IPC 处理器 · backend/tests/ 相关测试用例。一句话小结它不是通用消息总线而是一把为导演喊话打磨的螺丝刀——用对场景轻、稳、够用。【免费下载链接】MiroFishA Simple and Universal Swarm Intelligence Engine, Predicting Anything. 简洁通用的群体智能引擎预测万物项目地址: https://gitcode.com/GitHub_Trending/mi/MiroFish创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表