返回全部文章

技术说明

从聊天补全到结构化上下文求值

当智能体开始跨会话、跨任务并发工作,线性消息历史不再足以承载它的认知。Morphz 提出一种新的计算模型,让结构化上下文本身成为大语言模型的求值对象。

大语言模型智能体已经能够工作数小时、跨越多次会话,并发推进多个目标。但在多数智能体系统中,每一次模型请求仍然需要把智能体的当前状态重新描述成一段聊天记录。

本文定义结构化上下文求值的计算模型,并说明它如何承载长期认知、并发工作与确定性状态提交。

聊天补全让大语言模型第一次成为可用的通用界面。它简洁、自然,而且足够开放。用户说一句话,模型生成下一句话;工具调用只是这段对话中一种特殊的回复。这个计算模型并没有错,但今天的智能体系统已经让它承担了远超聊天本身的责任。

今天的智能体拥有工具、记忆、工作流、子智能体、定时任务、权限和持久状态。它们的运行时早已不再是一个聊天窗口,可模型每次看到的,通常仍是一条不断增长、压缩和重写的线性消息序列。

智能体已经离开了聊天。它的计算模型还没有。

聊天历史不是认知状态

在线性智能体中,一次求值大致可以写成:

next_message = model(instructions, message_history, tool_results)

系统提示词描述规则,消息历史保存过去,工具结果把现实带回模型。运行时可以在外围增加摘要、检索和状态机,但模型面对的基本对象依然是“此前说过什么”。

这在短任务中非常有效。任务一旦变长,历史就同时承担事实、目标、工作进度、因果关系、用户偏好、工具状态和智能体的自我认识。不同生命周期的信息被挤进同一种容器,只能依靠自然语言位置和模型注意力区分。

于是,压缩变成遗忘风险,并发变成消息交错,恢复变成重新讲述过去。所谓记忆,常常只是从旧文本中找出一段,再把它放回新的文本。

Morphz 要改变的不是提示词写法,而是模型面对的计算对象。

上下文不是提示词

在 Morphz 中,上下文不是即将发送给模型的一串字符。它是智能体拥有的、带有身份和版本的认知状态。提示词只是运行时针对一次求值编译出的视图。

一个概念化的 Morphz 上下文可以写成:

(context
  (protocol ...)
  (evaluation-profile none)
  (inbox ...)
  (observation-state ...)
  (mind ...)
  (session-directory ...)
  (kernel ...)
  (evaluation-environment ...)
  (evaluate ...))

观察、认知、会话、运行时事实与本轮求值入口按照固定顺序共同构成上下文,各部分拥有不同的权责。mind 由智能体维护,kernel 由运行时掌握,evaluate 指定本轮求值。

模型可以理解运行时事实,却不能伪造它们;模型决定什么具有认知意义,却必须通过带版本的事务修改认知状态。运行时不作这种语义判断,但会保存来源、顺序、权限和提交边界。

这使“上下文”从一次请求的输入,变成了可以持续存在、被投影、被修改、被恢复的第一等对象。

结构不是一种序列化格式

仅仅把消息装进 JSON,或者给文本增加若干 XML 标签,并不会自然得到结构化认知。

结构化数据只有在拥有稳定身份、权责、生命周期、关系和变更语义时,才成为结构化上下文。模型也不能只把它当成需要阅读的背景材料;它必须理解自己正在求值其中哪一部分,以及可以提出什么状态变化。

因此,真正的变化不是:

text message -> structured message

而是:

generate the next message -> evaluate the current context

在这个计算模型中,智能体的一次运行更接近:

context[t+1] = evaluate(context[t], event, capabilities)

这里的 evaluate 不是传统程序中的确定性函数。大语言模型在其中充当非确定性的语义求值器:它理解新的观察,判断什么值得进入长期认知,决定下一步行动,并提出结构化变更。相同输入可能产生不同但合理的方案。

确定性属于另一侧。运行时验证结构、版本、因果范围、权限和资源边界,然后提交或拒绝模型提出的变化。非确定性的认识与确定性的事实,因此可以同时存在。

持久化和并发不再是外围功能

当认知状态独立于消息历史,很多看似彼此无关的能力会从同一个抽象中自然出现。

会话是上下文中的一等交互与执行对象,而不是位于上下文外部的记忆容器。运行时为每次求值编译有界的会话工作集:当前会话使用完整投影,其他会话可以完整投影、仅保留元数据,或从本轮上下文编码中换出。换出不会删除会话与事件历史。

线程是一次工作的因果路径,不等于整段对话。一个旧任务等待工具时,新的对话仍然可以继续;工具结果只恢复属于自己的路径,而不会倒灌进另一轮求值。

目标是跨越多次求值、等待和执行线程的持久控制结构,不必被压缩成一句仍然藏在历史里的提醒。

并发也不再只是“同时运行多个聊天副本”。不同求值可以针对同一个上下文工作,并通过版本化事务修改不同的认知帧。运行时可以安全重放彼此独立的变更,并拒绝真正冲突的修改。

上下文容量也不依赖运行时自动生成摘要。运行时测量物理容量压力,智能体通过 derivereviseretirerestoreprotect 显式维护认知;会话工作集则控制本轮编码中哪些会话完整可见。语义维护、物理投影与历史保存因此各有清晰边界。

这些能力仍然需要大量工程工作。但它们不再分别依赖一套临时补丁,而是建立在同一个状态模型之上。

为什么是 S 表达式

括号本身没有魔法。选择 S 表达式,不是因为 JSON 无法表达树,也不是为了让系统显得像一门语言。

它的价值在于,数据、协议和可求值程序可以共享一种最小而统一的表示。嵌套关系是显式的,组合不需要不断发明新的消息信封;同一棵树既可以描述认知状态,也可以承载当前求值入口和候选求值程序。Morphz 把这种程序语言称为 Yao。

更重要的是,S 表达式清楚呈现了模型的计算对象:一个智能体的当前认知状态和待求值表达式,而不是一份格式化文档。

结构化上下文并不依赖某一种括号语法。它真正依赖的是稳定语义。如果未来另一种编码能够保留相同的身份、权责、事务和求值契约,它仍然可以实现这一范式。Morphz 选择 S 表达式,是为了让这套语义从一开始就拥有可以继续生长的语言基础。

面向结构化上下文的模型训练

今天的智能体训练通常仍然以回答、推理轨迹和工具调用为目标。即使运行时变得更强,训练带来的改善也多半是间接的:模型更会聊天、更会调用工具,然后由外围系统把这些能力组织成智能体。

当结构化上下文成为原生求值对象,后训练可以直接面向以下能力:

  • 如何从新证据修订而不是简单追加认知;
  • 如何区分短期观察、长期认识和运行时事实;
  • 如何在多个并发工作之间维护共享认知;
  • 如何提出可验证、可回滚、具有来源的状态变更;
  • 如何在有限预算下主动整理自己的上下文。

这一训练方向与 Morphz 当前的运行时实现相互独立:现有模型已经可以通过结构化输入与输出契约使用 Morphz,面向结构化上下文的专门训练则可进一步优化求值质量与效率。

适用边界与工程成本

结构化上下文有明确成本。动态认知状态可能降低前缀缓存命中率;现有模型主要为自然语言对话训练;协议、事务和调度器需要独立的工程实现与验证。

结构化上下文的有效性应当在相同模型、相同任务和相近预算下评估,包括长期任务的信息保持、并发工作的相互干扰、跨会话认知迁移,以及维护这些能力的资源成本。Morphz 已按这一原则开展分层评估;具体协议、结果与限制见研究论文

Morphz 以源码、产品文档、测试和实验材料公开当前实现。

结论

本文并不主张消灭聊天。聊天仍然是人类与智能体交流时最自然的界面之一。需要改变的,是继续把聊天记录当作智能体全部认知的本体。

如果智能体将成为长期存在的行动者,它就需要可以持续拥有的认知状态;如果它将同时面对多个人和多个目标,它就需要比消息顺序更明确的因果和并发语义;如果它将不断学习,它就需要能够修订、关联和保护认知,也能让认知帧退出当前窗口并在需要时恢复,而不是无限积累过去说过的话。

在这一计算模型中,聊天是一种输入输出;认知不是聊天的副产品,而是一种可以被持有、求值、提交并继续的结构。Morphz 是这套模型的开源实现。

阅读 Morphz 的核心概念,或者在 GitHub 上审视它的实现。