1. 引言:软件工程的“熵增”危机
在传统的软件架构中,输入与输出之间的关系是确定性的(Deterministic)。然而,LLM 的引入将 概率性(Probabilistic) 注入了系统的核心循环。
- 不可复现性:同样的输入可能导致不同的堆栈路径。
- 不可测试性:单元测试难以覆盖无限的语义空间。
- 高昂的计算成本:每一次逻辑判断都伴随着 Token 的消耗与网络延迟。
目前主流的 Agent 框架(如 LangChain 或 AutoGPT)往往倾向于“将控制权交给模型”,让 LLM 充当 CPU。这在 Demo 阶段令人惊艳,但在企业级生产环境中,这种 “全概率架构” 是一场灾难。
我们需要一种新的范式:将 LLM 从“指挥官”降级为“协处理器”,重建确定性的控制流。
2. 架构哲学:神经符号二元论 (Neuro-Symbolic Dualism)
本项目提出了一种 “身心二元” (Mind-Body Dualism) 的工程架构。这不是哲学隐喻,而是严格的代码实现策略。
2.1 定义边界
- 躯体 (Soma) - 确定性运行时:
- 实现技术:TypeScript, RxJS, Actor Model。
- 职责:负责信号路由、并发控制、状态管理、资源调度、安全熔断。
- 特性:强类型、零延迟、100% 可观测、可测试。
- 心智 (Psyche) - 概率性推理核:
- 实现技术:LLM (Right Brain Service)。
- 职责:负责模糊意图理解、非结构化数据提取、创造性生成。
- 特性:弱类型、高延迟、黑盒。
2.2 神经信号协议 (The Synapse Protocol)
连接两者的不是简单的 API 调用,而是一套严格定义的 NeuralSignal 协议。所有从 LLM 流出的自然语言,必须在毫秒级内被“坍缩”为结构化的信号,才能进入系统总线。
graph TB
User["用户输入"]
Output["结构化响应"]
subgraph Runtime ["确定性运行时 (Deterministic Runtime)"]
Bus["神经系统总线"]
Orchestrator["编排器 (Actor)"]
Guard["类型卫士<br/>(Schema Validator)"]
ErrorHandler["错误处理器"]
end
subgraph Cognitive ["概率性心智 (Probabilistic Psyche)"]
LLM["LLM 推理引擎"]
Context["上下文窗口"]
end
%% 主流程
User -->|"原始请求"| Bus
Bus -->|"结构化上下文"| LLM
LLM -->|"Token 流"| Guard
Guard -->|"验证通过"| Orchestrator
Guard -->|"验证失败"| ErrorHandler
ErrorHandler -->|"重试/降级"| LLM
Orchestrator -->|"状态变更"| Bus
Bus -->|"格式化结果"| Output
style Runtime fill:#f0f4f8,stroke:#334155,stroke-width:2px
style Cognitive fill:#fef3c7,stroke:#d97706,stroke-width:2px
style Guard fill:#fca5a5,stroke:#b91c1c,stroke-width:2px
style User fill:#dbeafe,stroke:#1e40af,stroke-width:2px
style Output fill:#dcfce7,stroke:#166534,stroke-width:2px
3. 边缘计算经济学:分层抑制机制
在分布式系统中,我们讲究“计算向数据移动”。在智能体架构中,我们主张 “决策向边缘移动”。
并不是所有的刺激都需要大脑(LLM)参与。我们的 SmartNeuron 设计引入了计算神经科学中的 “分层抑制” (Hierarchical Inhibition) 概念,旨在解决 计算经济学 问题:如何用最便宜的算力解决 90% 的意图判断?
3.1 漏斗型注意力模型
我们在 SmartNeuron.ts 中实现了一个微秒级的决策漏斗:
- L1 反射层 (Regex/BloomFilter): O(1) 复杂度。利用黑名单和硬规则瞬间拒绝无关信号(如在处理“绘图”请求时,数据库神经元应在 0.1ms 内抑制冲动)。
- L2 联想层 (Hash/Synonym): O(1) 复杂度。基于本地缓存的关键词和同义词表进行匹配。
- L3 语义层 (Embedding): O(N) 复杂度。仅当 L1/L2 无法决策时,才计算向量相似度。
- L4 认知层 (LLM): O(N^2) 复杂度。最终的兜底,请求右脑介入。
flowchart TB
Signal["输入信号"] --> L1{"L1: 黑名单反射<br/>约0.1ms"}
L1 -->|"匹配黑名单"| Drop["抑制/忽略"]
L1 -->|"通过"| L2{"L2: 白名单联想<br/>约1ms"}
L2 -->|"命中关键词"| Activate["激活神经元"]
L2 -->|"未命中"| L3{"L3: 向量相似度<br/>约10ms"}
L3 -->|"相似度 > 0.8"| Activate
L3 -->|"相似度 < 0.8"| L4["L4: LLM 兜底<br/>约200ms"]
L4 --> Activate
L4 -.->|"学习新模式"| L2
style Signal fill:#e2e8f0,stroke:#475569,stroke-width:2px
style Activate fill:#bbf7d0,stroke:#166534,stroke-width:3px
style Drop fill:#fecaca,stroke:#991b1b,stroke-width:2px
style L4 fill:#fef3c7,stroke:#d97706,stroke-width:2px
这种机制不仅降低了 90% 的 Token 消耗,更重要的是极大提升了系统的 响应速度 (TTFB)。
4. 熵减的艺术:状态机编排
LLM 的输出本质上是一个高熵的概率分布。Agent 的核心工程挑战,就是 将高熵的自然语言,逐步“熵减”为零熵的机器指令。
我们摒弃了基于 Prompt 的链式调用(Chain-of-Thought 在工程上往往脆弱),而是采用了 有限状态机 (FSM) 驱动的 编排器模式 (Orchestrator Pattern)。
以 IntentOrchestrator 为例,我们将“理解用户意图”这一模糊任务,拆解为 8 个确定性的工程阶段:
- 预处理:标准化输入,降低噪声。
- 基础分类:快速确定意图的大致域(Domain)。
- 上下文注入:从短时记忆中检索相关变量。
- 知识增强 (RAG):引入外部事实约束幻觉。
- 结构化提取 (并行):
- Entity Neuron:提取实体。
- Slot Neuron:填充槽位。
- 置信度评估:计算当前的确定性得分。
- 聚合与路由:决定下一步动作。
- 异步持久化。
sequenceDiagram
participant User
participant Orch as Orchestrator
participant Mem as Memory
participant KB as KnowledgeBase
participant Entity as EntityNeuron
participant Slot as SlotNeuron
participant Guard as TypeGuard
User->>Orch: 原始请求
rect rgb(240, 248, 255)
Note over Orch: 阶段1: 预处理
Orch->>Orch: 标准化/去噪
end
rect rgb(245, 243, 255)
Note over Orch: 阶段2: 基础分类
Orch->>Orch: 快速域识别
end
rect rgb(255, 251, 235)
Note over Orch, Mem: 阶段3: 上下文注入
Orch->>Mem: 查询短时记忆
Mem-->>Orch: 历史状态
end
rect rgb(254, 242, 242)
Note over Orch, KB: 阶段4: 知识增强(RAG)
Orch->>KB: 检索相关事实
KB-->>Orch: 外部知识
end
rect rgb(255, 245, 238)
Note over Orch, Slot: 阶段5: 并行结构化提取
par 并行处理
Orch->>Entity: 提取实体
Entity-->>Orch: 实体列表
and
Orch->>Slot: 填充槽位
Slot-->>Orch: 槽位字典
end
end
rect rgb(240, 255, 240)
Note over Orch: 阶段6: 置信度评估
Orch->>Orch: 计算确定性得分
alt 置信度 < 阈值
Orch->>User: 澄清追问
User->>Orch: 补充信息
Note over Orch: 回到阶段3
end
end
rect rgb(243, 244, 246)
Note over Orch, Guard: 阶段7: 聚合与验证
Orch->>Guard: 类型检查
Guard-->>Orch: 验证通过
end
rect rgb(224, 242, 254)
Note over Orch, Mem: 阶段8: 异步持久化
Orch->>Mem: 保存状态(非阻塞)
end
Orch->>User: 结构化结果
这种设计使得我们能够精确测量每一个步骤的耗时、准确率和 Token 消耗,实现了真正意义上的 可观测性智能 (Observability AI)。
5. 运行时进化:System 2 到 System 1 的迁移
丹尼尔·卡尼曼在《思考,快与慢》中提出了 System 1(直觉)和 System 2(逻辑)。当前的 Agent 往往只有 System 2(每次都由 LLM 推理),这导致了效率低下。
本架构实现了一个 自学习闭环 (Autopoietic Loop),允许系统在运行时将 System 2 的推理结果,“编译”为 System 1 的规则。
- 机制:当
SmartNeuron被迫调用 LLM (System 2) 解决一个陌生指令后,它会提取该指令的特征(如新的同义词、句式结构)。 - 固化:这些特征被写入本地的
NeuronCapabilities(System 1)。 - 效果:下一次遇到类似指令时,神经元将直接通过 L2 联想层响应,无需再次调用 LLM。
这不仅是缓存,而是 认知的内化。系统运行越久,其依赖外部模型的频率越低,鲁棒性和速度越高。
6. 结论:向确定性回归
InfoQ 的读者们明白,软件工程的本质是控制复杂性。将 LLM 引入生产环境,不应是引入不可控的混沌,而应是将概率性的创造力封装在确定性的容器中。
本文提出的架构,通过 严格的类型契约、边缘计算的抑制机制 以及 状态机编排,试图在不牺牲 LLM 泛化能力的前提下,找回软件工程失去的确定性。
这或许不是 Agent 的最终形态,但在当下,它是通向 Reliable AI 的一条可行路径。