发布时间:2026/8/18 9:47:48
阶段 4:事件总线 阶段 4事件总线对应代码stage04_events.py学习目标理解事件既是给消费者的消息也是驱动派生状态的输入并实现terminal_error的单写多读模式。源码锚点概念位置说明EventMsg枚举protocol/src/protocol.rs约 L1900-3700数十种事件11.1 节的五种投影形态三层发送链core/src/session/mod.rs:1828-2077send_event → send_event_raw_with_persistence → deliver_event_rawterminal_error 锁存mod.rs:1828-1841Error事件副作用写入终态读取14.6 节单写多读AgentStatus watchmod.rs:2069-2077事件同时更新进程内派生状态代码走读EventBus.send()的顺序就是真实send_event的骨架ifmsgERRORandaffects_turn_status:self.terminal_errorpayload# 先副作用锁存错误if(s:self.agent_status_from(msg)):# 再更新派生状态self.agent_statuss self._queue.put_nowait(Event(...))# 最后投递两个教学要点锁存的过滤条件是affects_turn_status——真实版里 16 个CodexErrorInfo变体只有 2 个返回 false14.1 节。演示里的stream_error不锁存重试中间态error锁存——这正是willRetry语义的分界11.7 节。队列 unbounded发送方永不阻塞但消费者必须持续 drain3.7 节的警告同样适用。运行与预期输出python stage04_events.py# 打印 7 条事件最后两行# 最终 agent_status AgentStatus.completed - 最后一个生命周期事件决定# 锁存的 terminal_error boom - 终态投影 failed 的依据注意agent_status是 completed 而terminal_error是 boom——两者不冲突因为真实系统的AgentStatus描述 Core 生命周期Turn 失败是 App Server 的投影5.3 节的两层状态。练习给send()加legacy双发某些事件同时投递旧名字对应 11.2 节的四条扇出路径之一。把队列改成maxsize10并一次塞 20 条观察背压——然后回答为什么真实设计选 unbounded 事件通道 有界提交通道实现affects_turn_status(msg)函数表把过滤条件从布尔参数改成查表。与真实实现的差距真实send_event在 raw 层之前还有 trace、父代理转发、realtime 镜像、legacy 双发四条扇出11.2 节四条扇出路径。持久化过滤在 raw 层内send_event_raw_with_persistence阶段 9 会补。代码积木 4事件总线。 真实对应物 - codex-rs/protocol/src/protocol.rs 的 EventMsg 枚举数十种事件 - codex-rs/core/src/session/mod.rs:1828-2077 的三层发送链 send_event - send_event_raw_with_persistence - deliver_event_raw - terminal_error 锁存mod.rs:1828-1841分析文档 14.6 节单写多读 - AgentStatus watchmod.rs:2069-2077 核心认知事件既是给消费者的消息也是驱动派生状态的输入 terminal_error、AgentStatus 都由事件副作用维护。 运行python stage04_events.py from__future__importannotationsimportasynciofromdataclassesimportdataclassfromenumimportEnumclassTurnAbortReason(str,Enum):对应 protocol.rs:4209-4214。interruptedinterruptedreplacedreplacedclassAgentStatus(str,Enum):对应 core/src/agent/status.rs。pending_initpendingInitrunningrunningcompletedcompletedinterruptedinterruptederrorederroreddataclassclassEvent:对应 Event { id: turn 子 id, msg }。payload 是教学版附加的文本。id:strmsg:strpayload:str# —— 教学版认得的全部事件真实版每个都是独立 dataclass——TURN_STARTEDturn_startedITEM_STARTEDitem_startedITEM_COMPLETEDitem_completedAGENT_DELTAagent_message_deltaERRORerrorTURN_COMPLETEturn_completeTURN_ABORTEDturn_abortedclassEventBus:对应 tx_event(unbounded) deliver_event_raw 的 AgentStatus watch。def__init__(self):self._queue:asyncio.Queue[Event]asyncio.Queue()# 真实unboundedself.agent_statusAgentStatus.pending_init# 对应 watch 值self.terminal_error:str|NoneNone# 对应 TurnContext.terminal_errordefagent_status_from(self,msg:str)-AgentStatus|None:对应 agent_status_from_event() 的最小子集。return{TURN_STARTED:AgentStatus.running,TURN_COMPLETE:AgentStatus.completed,TURN_ABORTED:AgentStatus.interrupted,ERROR:AgentStatus.errored,}.get(msg)asyncdefsend(self,turn_id:str,msg:str,affects_turn_status:boolFalse,payload:str,)-None:对应 send_event()先副作用锁存错误再投递再更新派生状态。 真实版在 raw 层之前还有 trace / 父代理转发 / realtime 镜像 / legacy 双发 分析文档 11.2 节的四条扇出路径。 ifmsgERRORandaffects_turn_status:self.terminal_errorpayloadormsg# mod.rs:1828-1841 的锁存语义if(s:self.agent_status_from(msg))isnotNone:self.agent_statuss self._queue.put_nowait(Event(turn_id,msg,payload))asyncdefnext_event(self)-Event:returnawaitself._queue.get()asyncdefdemo()-None:busEventBus()turn_idt1awaitbus.send(turn_id,TURN_STARTED)awaitbus.send(turn_id,ITEM_STARTED,payloadc1)awaitbus.send(turn_id,AGENT_DELTA,payload正在跑命令...)awaitbus.send(turn_id,ITEM_COMPLETED,payloadc1)# 一次不影响 Turn 状态的警告真实版StreamError - willRetry不锁存awaitbus.send(turn_id,stream_error,payloadReconnecting... 1/5)# 一次影响 Turn 状态的错误 - 锁存进 terminal_errorawaitbus.send(turn_id,ERROR,affects_turn_statusTrue,payloadboom)awaitbus.send(turn_id,TURN_COMPLETE)whilenotbus._queue.empty():evawaitbus.next_event()print(f *{ev.id}{ev.msg:18}{ev.payload})print(最终 agent_status ,bus.agent_status)print(锁存的 terminal_error ,bus.terminal_error)# 终态投影 failed 的依据if__name____main__:asyncio.run(demo())

相关新闻

2026/8/18 9:47:48

从Claude Code源码泄露看AI编程工具的代码安全

2026年3月31日,Anthropic因npm打包失误泄露Claude Code 51.2万行核心代码,随后的下架操作又误删约8100个仓库。这件事把AI编程工具的代码安全问题推到台前。Sophnet团队认为,代码安全的根本在于处理方式。SophCode Desktop选择本地化处理&…

2026/8/18 9:42:48

Java开发中的十个常见性能陷阱与优化思路

凌晨一点,报警电话惊醒值班工程师:某核心服务CPU使用率飙到90%,GC暂停长达数秒,请求大面积超时。排查堆栈时发现,罪魁祸首竟是循环里一句看似无害的 log.info("userId" userId ",orderLis…

2026/8/18 9:42:48

零成本搭建AI短剧生产线:从剧本到成片的完整开源工具链实战

如果你最近刷短视频,一定见过那种制作精良、情节紧凑的AI真人短剧。它们看起来像真人出演,但仔细看又带着一丝“数字感”,成本极低,更新极快,而且正在成为新的流量密码和变现渠道。 很多人以为,制作这样的…

2026/8/18 11:53:26

从AI玩具到AI系统:工程化视角下的AI应用开发实战

上周,一个名为“Odyssey”的项目在开发者社区里悄然出现。它没有铺天盖地的新闻稿,也没有炫酷的发布会,只是在GitHub上提交了一个仓库,标题是“my_ai_town”。点进去看,描述很简单,一个关于“AI小镇”的游戏…

2026/8/18 11:53:26

外贸的整体流程 独立站建站的整体强度 优化

链接:4.15 复制打开抖音,看看【Jenny工厂出海(8月14有课的图文作品】一个人也可以做外贸。# 外贸实战经验 # 外贸0基... https://v.douyin.com/_ZLCDCGPmkc/ fb.At 11/14 :7pm PKj:/ 独立站还有2种啊独立站建站的整体强度优化

2026/8/18 11:53:26

C++运算符重载中const的正确使用:从编译错误到健壮代码

1. 项目概述:为什么const在运算符重载里是个“大问题”? 刚接触C运算符重载那会儿,我总觉得const就是个“添头”,可有可无。直到有一次,我写了个矩阵类,重载了 运算符,代码跑起来一切正常。但…

2026/8/17 10:49:52

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 6:58:27

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/18 0:02:05

Qwen3.8-27B本地部署实战:17GB内存运行270亿参数大模型

1. 这篇文章真正要解决的问题 你是否曾对动辄需要上百GB显存才能运行的百亿参数大模型望而却步?是否觉得在个人电脑上部署一个功能强大的语言模型是天方夜谭?最近,通义千问团队发布的 Qwen3.8-27B 模型,宣称仅需 17GB 内存即可在本…

2026/8/18 0:02:05

ME3169 36V,8A,180KHz 恒压Buck DC-DC 转换器

概述ME3169 是一款180KHz,PWM 模式恒压Buck DC-DC 转换器,8V 到36V 宽工作电压范围,低纹波,内置低导通电阻功率MOS。ME3169 内置环路补偿电路,可以减少外围元器件数量。内部设计有恒压环路,可以通过外部电阻…

2026/8/17 15:07:41

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/17 17:27:06

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/18 7:12:40

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…