文本框的终结:为 AI 架构通用信号总线
Source: Dev.to
我们现在在 AI 行业面临一个问题:我们过度沉迷于 UI,尤其是聊天窗口。大多数 AI 代理被动地坐在闪烁的光标后面,等待人类输入“Help me”。在企业软件和复杂系统架构中,问题不会在文本框里自行出现——它们会出现在日志流(500 错误)、文件变更(开发者推送了错误代码)或音频流(紧张的 Zoom 通话)中。如果 AI 代理只有在有人输入时才被唤醒,那已经为时已晚。
通用信号总线架构
逻辑流程图
graph LR
subgraph "Wild Inputs (The Messy World)"
A[User Text]:::input
B[IDE File Change]:::input
C[Server Log 500]:::input
D[Meeting Audio]:::input
end
subgraph "Universal Signal Bus"
direction TB
E(Auto-Detector):::core
subgraph "Normalization Layer"
F[Text Normalizer]:::norm
G[File Normalizer]:::norm
H[Log Normalizer]:::norm
I[Audio Normalizer]:::norm
end
end
subgraph "Clean Interface"
J{Context Object}:::obj
end
subgraph "The Brain"
K[AI Agent]:::agent
end
%% Flow Connections
A --> E
B --> E
C --> E
D --> E
E -- "Type: Text" --> F
E -- "Type: File" --> G
E -- "Type: Log" --> H
E -- "Type: Audio" --> I
F --> J
G --> J
H --> J
I --> J
J -- "Standardized Intent" --> K
%% Styling
classDef input fill:#f9f9f9,stroke:#333,stroke-dasharray: 5 5;
classDef core fill:#e1f5fe,stroke:#01579b,stroke-width:2px;
classDef norm fill:#fff9c4,stroke:#fbc02d;
classDef obj fill:#c8e6c9,stroke:#2e7d32,stroke-width:2px;
classDef agent fill:#d1c4e9,stroke:#512da8,stroke-width:2px;
通用语言:ContextObject 数据类
from dataclasses import dataclass
from typing import Dict, Any
@dataclass
class ContextObject:
signal_type: SignalType # TEXT, FILE_CHANGE, LOG_STREAM, AUDIO
timestamp: str
intent: str # High‑level extracted intent
query: str # Normalized query for the LLM
priority: str # critical, high, normal, low
urgency_score: float # 0.0 to 1.0
context: Dict[str, Any] # Payload‑specific data
输入类型与标准化
被动输入(文件监视器)
当开发者在 IDE 中删除安全配置时,他们不会向 AI 请求建议。总线检测到文件更改事件,对其进行标准化,并分配高紧急度:
- Signal: 文件更改
- Derived Intent:
security_risk_detected - Urgency: 0.9(关键)
系统输入(日志流)
服务器产生 500 错误日志。总线提取相关信息并为 LLM 创建查询:
- Signal: 日志流
- Derived Intent:
server_error_500 - Query: “分析 DatabasePool 耗尽的堆栈跟踪。”
音频输入
在现场会议中,参与者的紧急请求被音频流捕获:
- Signal: 音频流
- Derived Intent:
urgent_request
代码实现
class UniversalSignalBus:
def ingest(self, raw_signal: Dict[str, Any]) -> ContextObject:
# Auto‑detect signal type from raw structure
signal_type = self._detect_signal_type(raw_signal)
# Get appropriate normalizer (Strategy Pattern)
normalizer = self.normalizers.get(signal_type)
# Normalize the wild signal into a standard ContextObject
context_obj = normalizer.normalize(raw_signal)
return context_obj
交互范式
- 主动交互 – 用户提出问题(标准聊天机器人)。
- 被动交互 – AI 监视开发者的 IDE,仅在高紧急度的更改时介入(类似 Copilot‑style)。
- 系统交互 – 基础设施报告健康指标;AI 可以自行修复或在没有任何文字提示的情况下提醒人类。
为构建者提供的机会
大多数团队专注于构建“大脑”(LLM)。很少有团队投资于“耳朵”。一个接受 任何 流——WebSocket 日志、gRPC 音频、DOM 点击流——并输出干净、规范化的 JSON “意图对象”的托管服务,将成为将混乱的真实世界连接到整洁的 LLM 接口的关键基础设施层。我们需要停止把 AI 当作文本处理工具,而要把它视为整体系统观察者。入口点不再是 UI 组件,而是 信号标准化器。