美的AIRC研究院出手:把AI编程助手从“黑盒应用”变成可随意嵌入的“编程引擎”

这项由美的人工智能研究中心(Midea AIRC)完成的研究,以技术报告形式发布于2026年4月10日,论文编号为arXiv:2604.11045,有兴趣深入了解的读者可以通过该编号在arXiv平台查询完整原文。

**一个让开发者头疼的老问题**

你有没有遇到过这样的困境:公司买了一套很好用的工具,但这套工具偏偏只能在特定的地方用——比如只能在某个编辑器里用,换个地方就完全用不了了,甚至连核心功能都没办法单独拿出来复用。这就是当今AI编程助手领域几乎所有产品共同面临的"痼疾"。

以目前最流行的几款AI编程工具为例。Claude Code的核心智能引擎和它的命令行界面是焊死在一起的,你没法把引擎单独抠出来用在别的地方。Cursor把自己的AI能力深度绑定在一个定制版的VSCode编辑器里,你要用它的智能就必须用它的编辑器。GitHub Copilot的功能边界则完全被编辑器插件的形态所限制,企业想自己部署、想替换底层模型,都是非常困难的事。

换句话说,这些产品本质上是"必须整体使用的应用",而不是"可以自由组合的引擎"。这就好比汽车发动机和车身被永久焊死,你没办法把发动机取出来装进一艘船里——哪怕发动机本身非常优秀。

对于企业来说,这个问题尤其麻烦。他们可能希望把AI编程能力嵌入自己的后端服务,或者希望同时支持IDE、网页应用和内部聊天机器人这几种不同的交互方式,但现有工具根本做不到这些,因为"聪明的大脑"始终被锁在特定的"身体"里出不来。

美的AIRC的研究团队正是看到了这个问题,决定做一件在AI编程领域还没人系统性完成过的事:把AI编程助手的核心引擎彻底抽离出来,让它成为一个任何系统都可以随意调用的"积木块"。他们把这个框架命名为**Sema Code**。

**一、从"应用"到"引擎":一个关键的设计哲学转变**

要理解Sema Code的核心思路,可以借用两个大家都熟悉的例子。SQLite是一个小巧的数据库引擎,它被嵌入在数十亿台设备里,从智能手机到汽车,从浏览器到各种APP,任何系统都可以直接调用它。Chromium是Chrome浏览器的内核,但它同时也驱动着Electron应用框架,让无数桌面软件得以运行。这两样东西成功的原因是一样的:它们从一开始就被设计成"引擎",而不是"应用"。

Sema Code想做的,就是让AI编程能力走同样的路。研究团队的核心洞察是:把智能引擎和所有客户端层彻底分离,把它打包成一个独立的npm库(一种JavaScript生态系统中的标准软件包形式),然后让"驱动一个AI编程助手"变得像"连接一个数据库"一样简单。

为了实现这个目标,Sema Code采用了一个**三层分离架构**,分别是客户端层、核心引擎层和服务层。

核心引擎层叫做**Sema Core**,这是整个框架的灵魂。它封装了所有的推理逻辑、工具调用和状态管理,但里面完全没有任何界面代码,也没有任何对特定运行环境的假设。无论是VSCode插件、命令行工具、网页应用还是聊天机器人,都可以调用同一个Sema Core,区别仅仅在于各自处理展示和交互的方式不同。

客户端层负责具体的界面渲染或消息转发。客户端和引擎之间的通信方式也很有讲究——研究团队选择了**事件驱动架构**,而不是传统的"请求-响应"模式。这是因为AI编程任务会产生各种各样、交错出现的输出,包括文字片段、工具执行结果、权限请求和进度更新,这些内容天然适合用"事件流"来表达。如果用传统的请求-响应模式,调用方就必须反复轮询或协调多个接口,非常麻烦。

服务层则负责连接外部能力,比如各种AI模型、工具市场、插件系统等。

由于Sema Core是用JavaScript生态实现的,为了让Python、Java、C#等其他语言编写的系统也能调用它,框架额外提供了WebSocket和gRPC两种跨语言接口。调用方先建立一个会话并拿到一个会话令牌,然后通过流式接口接收各类事件,完全不需要修改自己的现有架构。

这个设计思路让研究团队把"添加一种新的使用场景"的工作量,从"重建整个应用"压缩到了"订阅事件流并实现展示逻辑"。

**二、让多个用户共用一个引擎不打架:多租户隔离机制**

当一个引擎要同时服务多个用户时,立刻就会出现一个棘手的问题。考虑这样一个场景:一个Sema Core进程同时为一个独立开发者的VSCode插件和一个50人团队的聊天机器人提供服务。几十个并发会话在同一个进程里跑,如果某个用户的对话历史、工具权限或者"停止运行"的指令不小心影响到了另一个用户,那后果会非常混乱。

传统的做法是给每个用户单独开一个操作系统进程,彻底隔离,但这样开销太大。Sema Code采用了一种更优雅的方案:利用Node.js原生提供的**AsyncLocalStorage(ALS)**机制来实现按实例隔离。

ALS是一种"异步上下文本地存储",它能在跨越异步调用边界时自动维持一段数据的局部性。简单来说,就是给每个引擎实例绑定一个专属的"资源包",包含它自己的事件总线、状态管理器、工具调度器和租户配置。这个实例下发生的所有异步操作,都会自动和这个专属资源包关联,完全不需要手动传递参数,也不会影响到其他实例。

为了增强健壮性,框架还设计了一个两级查找策略:先从当前活跃的ALS上下文中获取资源,如果没有找到才退回到全局单例。这样既保证了新版本的隔离性,也兼容了旧有的使用方式。

完成了不同用户之间的隔离之后,研究团队发现在同一个用户的会话内部,也需要细致的状态管理——因为一个会话里可能同时运行着主智能体和多个子智能体,它们之间也不能互相干扰。

为此,框架设计了一个**双层状态层次结构**。每个会话的完整状态被严格划分为两个层次。第一层是**智能体本地状态**,每个智能体(无论是主智能体还是子智能体)都拥有自己独立的执行状态、对话历史、任务列表和文件读取时间戳。这一层确保子智能体处理中间步骤时产生的大量中间信息,绝对不会污染主智能体的上下文。第二层是**会话全局状态**,这里存放的是协调整个智能体树所必需的共享控制元素,主要包括全局文件修改权限标志和一个集中式的"中止控制器"。把中止控制器放在全局层意味着,当用户发出"停止运行"的指令时,这个信号会同时可靠地传播给所有正在运行的子智能体,无一遗漏。

**三、消息来得太快怎么办:FIFO队列与安全的会话重建**

在多渠道部署场景下——比如一个接入了Telegram和飞书的聊天机器人——用户的输入天然是异步且不可预测的。用户可能在引擎还在处理上一个问题时,就连续发来几条追加消息;或者突然决定完全切换到另一个新项目,中途打断正在进行的任务。

为了处理这些情况而不丢失消息、不破坏状态,Sema Core实现了一个**统一的FIFO(先进先出)分发机制**。所有进来的查询请求都会经过一个状态感知的分发函数处理:如果引擎当前处于"处理中"状态,新消息就进入队列等待;如果引擎处于"空闲"状态,就立即开始处理。

光有队列还不够,还需要聪明地处理队列中的消息。逐条出队会导致上下文碎片化和大量重复的API调用。因此,框架引入了一个**语义批处理策略**:出队时,如果队首是一条普通文本消息,引擎会主动把队列中后续所有的非命令消息都提取出来,合并成一个统一的提示词一起处理。但对于系统命令(比如以斜杠"/"开头的指令),则必须单条处理,绝对不合并,以保证命令的精确执行。

更棘手的是任务切换的场景。如果用户在AI正在生成代码时突然创建了一个新会话,强行杀死当前进程会留下残余文件或损坏的内存状态。Sema Core为此设计了一个**暂存机制**:新会话的ID先被暂时保存为"待处理会话",同时向当前运行的中止控制器发送中止信号。被中止的任务在其清理阶段检测到这个待处理标志后,会完整清除当前的本地状态,然后无缝初始化新会话。这保证了无论中断发生在任何时刻,新会话都能在一个干净、安全的环境里启动,没有任何状态残留。

**四、对话历史太长撑爆了怎么办:自适应上下文压缩**

AI大语言模型有一个硬限制:它的"工作记忆"(上下文窗口)是有上限的。随着对话越来越长,工具调用结果越来越多,历史消息不断积累,迟早会触碰这个天花板。一旦超出,要么报错,要么必须丢弃一些历史,这两种情况都会让AI"失忆",忘记之前改过哪些文件,或者重复之前已经做过的步骤。

有些做法试图让AI自己像管理内存一样主动"换页",但这样会带来大量额外的工具调用开销和延迟。简单粗暴地截断一半历史则会造成灾难性的"遗忘"。Sema Core选择了一条更聪明的路。

首先,框架通过一个**零额外成本的追踪机制**持续监测上下文使用量。它直接从AI最近一次回复的元数据里提取累计的token数量,而不是每次都重新计算整个消息数组的长度,把监测操作的复杂度从O(k)压缩到了O(1)。同时,框架还在这个累计数字上加上一个8000 token的前瞻缓冲区,来吸收即将到来的那轮交互(包括系统提示、用户问题和工具调用结果)可能带来的额外消耗。

当有效上下文大小超过模型最大上下文限制的75%时,压缩就会被触发。保留25%的安全余量,是为了确保AI还有足够的空间生成多步骤计划和执行工具调用,不会刚开始干活就又撞墙。

触发压缩后,算法首先找到最近一条用户发起的消息作为"分界点",把历史分成两段:可以压缩的旧历史段,以及必须完整保留的当前轮次。这样做是为了严格保护最近一轮工具调用和结果的配对关系,不能把它们拆散。

对于可压缩的旧历史,框架优先走**语义摘要路径**:让AI自己对这段历史生成一份结构化摘要,重点保留关键实体(如文件路径、函数签名、修改记录),同时大胆丢弃冗长的工具输出和中间推理过程。压缩完成后,框架还会做三项配套的状态修正:清除内部"思考块"、重新校准累计token计数、重新注入核心规则和任务提醒,以维持后续推理的完整性。

如果摘要过程失败或超时,框架会优雅地切换到**安全截断降级路径**:不是简单地砍掉一半,而是扫描使用量元数据,找到最早的那条能让剩余上下文恰好缩减到最大窗口一半的助手消息,然后从那里截断。之所以只在助手消息处截断,是为了遵守API对消息角色交替顺序的要求,确保截断后的消息序列在格式上依然合法。

至于子智能体,它们完全绕过这套压缩机制,其局部上下文的生命周期完全由主智能体来统一编排,以避免多个压缩操作相互级联冲突。

**五、让多个智能体协同工作而不乱套:多智能体调度框架**

复杂的编程任务往往需要拆分成多个子任务来分别处理。但如果把所有子任务都在同一个智能体的上下文里串行处理,会带来两个具体问题:一是为某个子任务设计的特殊指令(比如代码审查清单)会污染处理其他子任务的系统提示;二是每个子任务的对话历史都会堆积在主上下文里,加速触发压缩,拉低推理质量。

MetaGPT等现有多智能体框架的做法是把角色固定下来——产品经理、架构师、工程师各司其职,按预设流程走。这种方式适合从头生成一个完整软件项目,但对于开发者日常随机提出的各种编程任务,这种刚性的协作结构并不合适。

Sema Code选择了另一种思路:**隔离状态空间加共享中止控制**。子智能体和主智能体之间不共享任何对话历史或工具结果,唯一共享的只有那个集中式的中止控制器。这让主智能体可以自由地把任务委托给子智能体,而不需要预定义任何角色模式,同时依然能用一个信号中止整个智能体树。

在具体实现上,Sema Code支持**一级任务委托**:主智能体可以创建子智能体,但子智能体不能再创建下一级子智能体,把调用深度限制在两层以内,避免无限递归消耗资源。

每个子智能体拥有一套完全隔离的状态空间,包含自己的对话历史、任务列表、文件读取时间戳和执行状态;和主智能体唯一共享的资源就是前面提到的中止控制器。子智能体的生命周期遵循严格的三阶段协议:创建阶段,引擎分配唯一会话标识,构建包含环境规则和代码仓库状态的专属系统提示,并提供一个明确排除了"创建子智能体"能力的受限工具集;执行阶段,子智能体完全在自己的私有状态边界内运行推理循环,详细的中间工具输出和消息历史不会流入主智能体的上下文;清理阶段,系统原子性地清除子智能体的所有局部状态,汇总token消耗和执行时间等遥测数据,只把最终合成的结果返回给委托它的主智能体。

**六、"停止"信号如何可靠地传到每一个角落:中断传播与工具调度**

当用户在任意时刻按下"停止"按钮时,这个信号需要可靠地终止所有正在进行的操作。Sema Core把查询的完整生命周期划分为四个不同阶段,并在每个阶段都设置了对应的中断处理逻辑。

在AI刚生成完计划、尚未开始执行的阶段,如果收到中断信号,系统会为所有待执行的操作生成取消占位符,防止下游产生级联错误。在即将调用某个具体工具前的一刻,如果收到中断,引擎直接跳过这个操作,返回一个取消上下文。在工具已经开始执行的过程中,引擎会区分两种情况:用户主动拒绝某个操作(这条拒绝记录会作为有意义的历史保留下来),和标准的中止信号(直接停止当前操作)。在所有工具调用完成、即将进入下一轮推理循环之前,运行时会清空未完成的结果,安全地折叠递归边界。

除了中断处理,工具执行的顺序也由一套**读写调度策略**来管理。当一批工具调用全是只读操作(比如文件搜索、内容查找)时,引擎并行执行它们,充分利用I/O并发性。但只要批次中包含任何一个写操作(比如文件编辑或Shell命令执行),整批操作就会被严格串行化,以防止竞态条件。这种调度方式在传承ReAct框架中"推理-行动交替"核心思想的同时,在调度层引入了读写感知的并发控制。

**七、让用户随时知道AI在干什么:基于Todo的进度管理**

当一个复杂任务跨越几十次工具调用时,用户如果只是盯着滚动的输出,很快就会失去对整体进度的感知。而且AI生成的文字是非确定性的,同一件事在不同时刻可能会被说成"重构认证模块",也可能被说成"重写auth module",措辞略有不同。如果在界面上直接显示AI每次的最新表述,就会产生明显的界面抖动,让人感觉任务项在不断变化,即使实际上只是状态从"进行中"变成了"已完成"。

Sema Core为此实现了一套**确定性的任务追踪状态机**。每个任务条目通过唯一标识符、描述文本和离散的生命周期状态(待处理/进行中/已完成)来追踪。在输入验证层,引擎强制执行一个互斥约束:在任何给定时刻,至多只有一个子任务可以处于"进行中"状态,确保用户始终清楚AI当前的焦点在哪里。

状态更新算法会动态区分两种情况:如果新发出的任务列表中包含的全都是已知的任务标识符,就只执行一次局部状态更新,仅修改生命周期状态,刻意保留原始的描述文字。这彻底消除了因AI措辞变化引起的界面抖动。反之,如果出现了未知的新标识符,就触发完整替换,注册新的子任务。此外,子智能体的任务更新被严格限制在其自身的局部生命周期内,不会污染主智能体呈现给用户的进度面板。

**八、长时间运行的任务不再卡死对话:后台任务执行引擎**

编译一个大型项目、跑完一套完整的测试套件,这类操作可能需要几分钟甚至更长时间。如果AI必须等待这些操作完成才能继续对话,用户体验会非常差。而简单粗暴地设置超时时间然后强制杀死进程,又会丢失部分输出结果,甚至锁死共享的Shell资源,让后续操作全部无法执行。

Sema Core通过**执行与观察的架构分离**来解决这个问题。长时间运行的任务被卸载给一个专用的后台管理器,主对话循环立即恢复,可以继续和用户交互。每个后台任务都遵循严格的确定性生命周期,从"运行中"转变为"成功完成"、"失败"(基于进程退出码判断)或"强制停止"三种终态之一。为防止内存泄漏,运行时会严格限制最大并发后台任务数量和历史任务状态的保留池大小。

后台执行有两种触发方式。主动路由:智能体主动将某个操作标记为异步处理,引擎立即生成一个隔离的系统进程并返回一个追踪标识符。更关键的是**响应式接管路由**:它优雅地处理那些意外超时的操作。引擎不是杀死超时进程,而是动态地把活跃的Shell会话及其关联的临时文件描述符整体移交给后台管理器,然后干净地重置主Shell单例。这样既保住了重任务的连续性,又不会阻塞对话接口。

在输出管理方面,系统采用内存和磁盘双写策略,兼顾低延迟流式传输和持久化快照。输出观察器使用自适应轮询机制,在任务执行时间越来越长时逐步降低采样频率,节省CPU消耗。后台任务完成后,引擎会把一个结构化的完成通知直接注入主智能体的上下文,作为一个"唤醒信号",提示AI分析最终结果,从而把后台执行和主动推理的循环完整地闭合起来。

**九、安全边界:四层权限系统**

AI编程助手天然面临一个严峻的安全威胁:提示注入攻击。一个恶意的代码仓库的README可能会指示AI执行删除所有文件的命令,或者通过伪装成构建脚本的内容偷偷上传环境变量。由于AI会自主组合工具调用,没有人类在实时审查每一步操作,风险被放大了。但另一方面,如果把权限设得太严,用户执行每一个读文件操作都要弹窗确认,AI助手就变成了效率杀手。

Sema Code通过一套**四层权限决策系统**来平衡这两端的张力。整个系统在形式上被定义为一个决策函数:给定一个操作和当前的会话上下文,输出允许、拒绝或请求确认三种结果之一。

这四个层次分别对应四种不同类型的操作,每种操作有完全不同的风险特征,因此需要不同的权限语义。

文件编辑层(L1)在用户开启编辑标志后进入快速通道,只在会话内第一次编辑请求时要求确认,之后的同会话编辑自动放行,粒度是会话级别。Shell命令层(L2)是安全挑战最严峻的一层:对于命令头部出现在白名单里的简单命令或管道命令,直接放行;对于任何不在白名单里的命令,或者被检测到含有注入风险的命令,就触发请求确认。在显示确认提示之前,系统还会触发一次LLM辅助的静态分析,把命令字符串分解成子命令前缀,逐一对照已知的注入模式(比如反引号替换、$(...)进程替换、链式破坏性操作等)进行检查。如果发现注入风险,要么附带严重安全警告升级请求,要么直接降级为拒绝。这比单纯的正则表达式匹配能抓到更多经过混淆的恶意载荷。Skill调用层(L3)和MCP服务层(L4)都是在首次调用时要求确认,之后在项目级别记住授权。

当某个操作需要用户确认时,引擎会向事件总线发出一个授权请求,并暂停当前的执行上下文,等待用户决策。这套**异步审批协议**有四种结算路径:临时批准(只允许这一次操作)、持久授权(更新项目级安全策略)、明确拒绝(触发立即中止)、用户引导修正(把自然语言反馈直接注入工具结果,让AI重新考虑)。子智能体会自动继承其父智能体的权限边界,避免复杂委托场景下用户反复被提示确认带来的"确认疲劳"。

**十、三层生态市场:MCP、Skill与Plugin**

Sema Code的生态策略建立在一个判断之上:把能力扩展接口设计成统一的单一层次是错误的,因为不同类型的扩展运作在完全不同的粒度上。

MCP服务运作在基础设施粒度,每个MCP服务把一个外部系统(数据库、浏览器、API网关)包装在标准化协议后面,对外暴露AI可以黑盒调用的粗粒度工具。Skill则运作在行为粒度,一个Skill本质上是一份带有结构化元数据的Markdown文档,它改变的是AI推理的方式——包括提示策略、约束条件、模型偏好——而不引入新的工具端点。Plugin运作在工作流粒度,它挂载在引擎的命令系统和生命周期系统上,编排跨越多次工具调用的复杂流程,比如代码审查流水线或部署门控。如果把这三层合并成一个,要么让轻量级的行为修改器拥有了不该有的工具级访问权限,要么让需要持久连接和认证管理的基础设施集成变得捉襟见肘。

在实际用户体验上,框架构建了一个名为ClaWHub的在线扩展注册表,用户可以浏览数百个预集成的MCP服务,一键安装到全局或项目配置,已安装的服务在会话启动时自动加载,动态地把新能力注入AI的可用工具集。Skill市场提供了专为代码审查、测试生成、文档编写和安全分析等场景定制的能力包集合,通过CLI或VSCode一键安装,AI按照项目级优先于用户级优先于内置的顺序加载可用Skill并按需调用。Plugin分为命令插件(扩展斜杠命令系统,如/review、/deploy)和钩子插件(在操作前后注册生命周期回调,用于日志记录、合规审计和自定义验证),全部通过ClaWHub分发,支持不重启会话直接启用、禁用或更新。

**十一、多模型适配层:让不同AI引擎都能驾驭**

Sema Core内置了两个适配器——Anthropic原生适配器和OpenAI兼容适配器——对外暴露一个统一的流式接口,把各家提供商的特有功能(扩展思考、提示词缓存、工具调用格式)都规范化成一套通用的事件协议。

这种规范化并不是简单的格式转换。Anthropic的流式API会把"思考块"作为一类独立事件发出,而OpenAI兼容端点则把推理token不透明地编码在内部。Sema Core的适配器层负责调和这些差异,使得上层逻辑(权限检查、上下文压缩、子智能体委托)不论底层用的是哪家模型都能以完全相同的方式运行。

通过customBaseUrl配置,框架可以无缝接入Code Llama、DeepSeek-Coder等开源模型,也可以接入DeepSeek V3/R1、GLM-5、Qwen3-235B、Gemini 2.5 Pro等商业模型。上层应用完全感知不到底层模型的差异,相同的智能体能力在不同模型下统一运行。

**十二、同一个引擎,两种完全不同的产品形态**

为了验证"同一个解耦引擎可以驱动根本上不同的产品形态"这一核心主张,研究团队基于同一个Sema Core部署了两个完全不同的产品。

第一个是**VSCode扩展**,面向个人开发者。它通过npm直接把Sema Core引入VSCode扩展宿主进程,完全省去了CLI子进程的开销。扩展订阅Sema Core的事件流来渲染界面,提供实时的代码差异预览和一键回滚、Todo任务面板、后台任务监控面板、会话历史管理,以及运行时热切换底层模型等功能。已发布到Open VSX市场,支持Windows、macOS和Linux。在这个部署中,引擎以单用户、进程内模式运行,主要压力测试了自适应上下文压缩(在长时间重构会话中)、四层权限系统(通过VSCode原生对话框呈现)、后台任务执行(用于长时间构建和测试),以及MCP/Skill/Plugin生态系统。

第二个是**SemaClaw多渠道智能体平台**,面向团队协作。它同样导入相同版本的Sema Core npm包来驱动核心能力,额外添加了Telegram、飞书等消息渠道接入和Web管理界面。SemaClaw作为服务端Node.js进程运行,同时服务多个并发用户。它主要压力测试了多租户隔离(多个用户共享单一进程)、FIFO输入队列(吸收来自消息渠道的消息爆发)、异步审批协议(把权限确认UI适配成消息内联按钮而非弹出对话框)。

这两个产品合起来覆盖了框架全部八个核心机制,而且在整个部署和运营过程中,Sema Core的代码库本身**没有经过任何修改**。所有行为上的差异——界面渲染、渠道路由、权限对话框样式、部署拓扑——全部在客户端层实现。这直接证明了三层分离架构实现了它的设计目标:引擎是真正交付形态无关的。

构建VSCode扩展所需要的工作是实现事件流渲染和VSCode特定的UI组件;构建SemaClaw所需要的工作是实现渠道适配器(Telegram Bot API、飞书Webhook)和多会话管理器。在两种情况下,客户端开发者都只需要和Sema Core的公共API及类型化事件流打交道,完全不需要理解引擎内部的状态管理逻辑、压缩机制或权限机制。

研究团队也坦诚地指出了几个已知局限:目前的部署验证只覆盖了两种产品形态,架构对CI/CD流水线集成或Jupyter笔记本嵌入等场景的适应性还有待验证;当前部署没有经过数百并发用户规模的压力测试,生产级工作负载可能暴露新的性能瓶颈;上下文压缩的质量依赖底层模型的摘要能力,包含大量代码片段的高度技术性对话在压缩时可能丢失关键细节;跨语言集成接口(WebSocket、gRPC)虽然功能完整,但在对抗性网络条件下的吞吐量和错误恢复尚未基准测试;当前所有部署都使用单一Sema Core进程,跨多个引擎实例的水平扩展引入了当前架构尚未解决的状态同步挑战。

**归根结底,这项工作说明了什么**

说到底,Sema Code做的事情在思路上并不复杂:它把"AI编程能力"从必须整体使用的应用,变成了可以自由嵌入的基础设施组件,就像数据库引擎或浏览器内核一样。这件事之所以有意义,是因为它打破了长期以来AI编程工具领域里的一种默认假设——AI的"大脑"必须和它的"身体"绑在一起。

当AI编程能力可以像npm依赖一样被任何工程系统引入时,企业不再需要在"用现成产品"和"自己从头造"之间二选一,而是可以把经过工程验证的智能引擎直接嵌入自己的工作流,在此之上构建完全符合自己需求的产品界面。

研究团队也指出了下一步要走的方向:基于向量检索的上下文管理(让AI对历史信息的召回比压缩摘要更精准)、支持智能体之间直接共享状态和消息传递的扩展多智能体协调(从当前的委托模式进化到真正的协作模式)、以及跨引擎实例的分布式任务调度(让系统能够弹性扩展以支持生产规模的并发)。

对于普通开发者来说,Sema Code意味着未来接入AI编程能力可能和接入一个数据库连接池一样自然——配置几行代码,剩下的逻辑由引擎自己处理。有兴趣深入了解技术细节的读者可以通过论文编号arXiv:2604.11045查阅完整原文,或者访问项目的GitHub主页(midea-ai/sema-code-core)直接查看代码实现。

---

Q&A

Q1:Sema Code和Claude Code、Cursor这些AI编程工具有什么本质区别?

A:Claude Code和Cursor的核心智能是和它们各自的界面(命令行或编辑器)绑死在一起的,你只能整体使用,没法把里面的推理引擎单独取出来用到别的地方。Sema Code的做法是把核心引擎Sema Core完全剥离出来打包成npm库,任何系统都可以直接导入调用,界面是什么形态完全由调用方自己决定,同一个引擎可以同时驱动VSCode插件和Telegram机器人。

Q2:Sema Code的多租户隔离是怎么做到不开多个进程却能隔离不同用户状态的?

A:Sema Code利用了Node.js原生的AsyncLocalStorage机制,给每个引擎实例绑定一个专属资源包(包含各自的事件总线、状态管理器和工具调度器)。所有在某个实例生命周期内发生的异步操作,都会自动和这个专属包关联,不需要手动传参,也不会影响其他实例,从而在单进程内实现了严格的跨用户状态隔离。

Q3:Sema Code的上下文压缩在什么情况下会触发,压缩后会不会让AI忘掉重要信息?

A:当有效上下文使用量超过模型最大上下文窗口的75%时自动触发。压缩优先走语义摘要路径,让AI自己总结旧历史,保留文件路径、函数签名等关键实体,丢弃冗长的中间过程。如果摘要失败则退化为安全截断。高度技术性的代码对话确实有可能在压缩中丢失细节,这是研究团队明确承认的局限之一。

---