跳到主要内容

系统架构设计

概览​

Ante 采用清晰的职责分离设计,遵循客户端-守护进程(Client-Daemon)架构。展示层与核心执行引擎通过消息传递进行解耦,使得切换终端前端(TUI、无头 CLI)时无需变动底层核心引擎。

Architecture diagram

客户端与守护进程划分​

┌────────────────┐ ┌─────────────────────────────┐
│ Client │ Op │ Daemon │
│ │ ───────▶ │ │
│ TUI / Headless│ │ Session ─▶ Turn ─▶ Step │
│ 或 Serve 服务 │ ◀─────── │ │
│ │ Evt │ Tools Providers Store │
└────────────────┘ └─────────────────────────────┘
  • Client(客户端) — 用户面向层。基于 ratatui 的 TUI 终端界面、无头 CLI 运行器,或通过 ante serve 连接的外部进程。负责发送 Op 操作指令并渲染接收到的 Evt 事件。
  • Daemon(守护进程) — 核心引擎。接收操作指令、管理会话、分发大语言模型请求、调度工具安全执行并分发事件。
  • Transport(传输层) — 进程内客户端(TUI、无头模式)使用 Tokio 有界操作通道与无界事件通道;外部客户端使用基于 stdin/stdout 的 JSONL 协议(ante serve --stdio)、供本地客户端连入共享宿主的 Unix 域套接字(ante serve --sock),或 WebSocket 网络协议(ante serve --ws)。通过消息 ID 实现跨进程边界的链路追踪。

架构演进:从以会话为中心到以智能体为中心​

Ante 最初采用以会话为中心的运行时,其中 Session 是核心执行单元。我们正迈向以智能体为中心(Agent-centric)的现代运行时:长寿命的 Agent 实例作为执行的所有者并通过消息通信。

该架构类似 Actor 模型:

  • Agent 即 Actor — 每个智能体拥有独立隔离的状态、专属邮箱(Mailbox)及单一逻辑执行循环。
  • 消息驱动的协同 — 智能体之间通过类型化消息/事件进行协同,而非共享可变状态。
  • 分层监管 — 父智能体可以派生子智能体、监控执行结果并决定重试或上报策略。

为什么做出这一演进:

  • 并发任务与子智能体之间获得更彻底的隔离
  • 每个智能体拥有清晰明确的记忆、权限与工具预算所有权
  • 在多智能体协同工作流中具备更可预测的横向扩展能力

在此方向下,Session 依然重要,但转变为承载用户交互历史、持久化快照以及协议级协调的容器,而非唯一的执行单元。

大语言模型提供商​

Ante 具备跨提供商无关性。每个提供商均实现了发送提示词与接收响应的通用接口。流式传输过程中的偶发网络闪断会在轮次内自动重连;流式调用在传输层连续 5 分钟没有收到任何数据时超时;任何读取(包括保活事件和部分工具参数)都会重置计时。缓冲调用则必须在超时窗口内完成。该超时窗口支持按提供商配置 —— 可通过 stream_idle_timeout_secs 覆盖。

提供商通信协议格式 (Wire Format)支持模型
AnthropicMessages APIClaude 4.5 与 5 家族
Anthropic SubscriptionMessages APIClaude 家族(OAuth)
OpenAIResponses APIGPT-6 Astra 与 GPT-5 模型
OpenAI CompatibleChat Completions自定义模型
OpenAI SubscriptionResponses APIGPT-6 Astra 与 GPT-5.6(通过 Codex OAuth)
GeminiGemini APIGemini 3.x 家族
Vertex AI GeminiGemini APIGemini 3.x 家族
Grok (xAI)Responses APIGrok 4.6
ZaiOpenAI 兼容格式GLM-5.3
Open RouterOpenAI 兼容格式多厂商聊天模型
Open Router ResponsesResponses API通过 OpenRouter 调用的 GPT 模型
Open Router AnthropicMessages API通过 OpenRouter 调用的 Claude 模型
DeepSeekOpenAI 兼容格式DeepSeek V4 家族
AntixAnthropic Messages通过 Antigma 调用的 Claude、GPT、Gemini、Qwen、DeepSeek
Antix (API key)Anthropic Messages相同 Antix 目录,通过 API Key 认证
LocalOpenAI 兼容格式通过 llama.cpp 运行的 GGUF 模型

提供商在会话初始化时从目录中解析。用户可以通过 CLI 参数(--provider、--model)或配置文件进行覆盖。

身份认证​

  • API 密钥 — 通过环境变量配置(ANTHROPIC_API_KEY、OPENAI_API_KEY、GEMINI_API_KEY、XAI_API_KEY、OPENROUTER_API_KEY、OPENAI_COMPATIBLE_API_KEY、ZAI_API_KEY、DEEPSEEK_API_KEY、VERTEX_GEMINI_API_KEY、ANTIX_API_KEY)
  • OAuth — 支持 Anthropic、OpenAI、Antix 以及任意 oauth_profiles 条目的浏览器登录,可在 TUI 的 /providers 中或通过 ante auth login 完成
  • 已存储的密钥与 helper — ante auth add 存储密钥;也可由 helpers 命令提供密钥。参见凭据

工具系统​

工具是智能体的双手。每个工具均实现 Tool trait:

#[async_trait]
pub trait Tool: Send + Sync {
fn metadata(&self) -> &ToolMetadata;
async fn call(&self, input: ToolCallInput) -> Result<ToolCallOutput>;
}

内置工具清单​

工具分类默认需审批说明
Read文件 I/O否读取文本、图片或 PDF 文件内容
Write文件 I/O是创建或覆盖文件
Edit文件 I/O是在文件中执行精确字符串替换
Glob文件 I/O否按模式查找文件列表
Grep文件 I/O否使用正则表达式搜索文件内容
BashShell是执行 Shell 命令;当命令超出 max_wait_ms 窗口时返回持久句柄
Agent内置核心否派生子智能体处理复杂任务
AskUser内置核心否提出结构化问题;有人值守时暂停会话以等待回答
TodoWrite内置核心否维护任务进度清单(可选工具)
WebFetch内置核心是获取并处理网页内容
WebSearch内置核心是检索互联网(在支持网络搜索的提供商上自动启用)
ViewImage内置核心否读取并分析图片(可选工具)

工具过滤机制​

工具可在会话级别进行过滤控制:

  • 基础工具列表 (--tools) — 将默认工具集精确替换为指定列表
  • 包含列表 (--include-tools) — 在默认或基础工具集之上额外引入工具
  • 排除列表 (--exclude-tools) — 在基础与包含列表应用后剔除指定工具
  • 支持 ToolMatcher 匹配器语法:Bash(ls -la)、Agent(explore)
  • 工具名称匹配不区分大小写
  • 动态注册的工具(MCP 服务器)同样受此约束,无法绕过过滤机制

会话生命周期​

  1. 客户端发送 Op::StartSession(包含模型、提供商与策略配置)
  2. 守护进程解析提供商、验证认证状态,并发现技能与子智能体
  3. 守护进程创建 Session 并发出 Evt::SessionStart
  4. 用户发送 Op::UserInput 提交任务提示词
  5. 会话拉起 Turn 轮次与大语言模型通信
  6. 轮次执行工具调用、请求用户审批并最终完成输出
  7. 当对话接近上下文上限时,Ante 会总结较早的上下文,并保留近期对话与用户消息