9.2 KiB
9.2 KiB
Architecture
Overview
Atlas Zero Agent 采用“单 chatbox 入口 + 多 agent 内部协作”的架构。
对外,系统暴露为一个统一的聊天服务;对内,系统通过 Stella orchestrator 把请求分发给不同职责的 agent 节点,结合 LangGraph 管理状态流转,结合 LangChain 管理模型、工具、检索器和提示词。
工程目标有三点:
- 让 chat 成为统一入口
- 让 agent runtime 成为核心执行层
- 让 memory、tools、observability 从一开始就是一等公民
Design Goals
- 支持通用聊天与多轮对话
- 支持工具调用与多步任务执行
- 支持短期记忆、长期记忆与知识检索
- 支持流式输出和可恢复执行
- 支持成本、权限、审计和 trace 管理
- 支持后续扩展到多租户和插件体系
High-Level Architecture
Client / UI
-> FastAPI API Layer
-> Application Services
-> Stella Orchestrator
-> LangGraph Runtime
-> Shaka Guard
-> Edison Planner
-> Pythagoras Memory / RAG
-> Atlas Executor
-> Lilith Explorer
-> York Resource Manager
-> Tool Layer / Memory Layer / Model Layer
-> Persistence + Observability
Layered Architecture
1. Interface Layer
职责:
- 对外暴露 HTTP API
- 提供同步与流式聊天接口
- 提供会话查询与管理接口
- 提供健康检查、调试和管理接口
建议技术:
FastAPIPydanticSSE,后续可选WebSocket
建议目录:
app/api/routes/app/api/schemas/
这一层只处理:
- 请求解析
- 参数校验
- 响应序列化
- 状态码和错误格式
这一层不应该直接写复杂 agent 逻辑。
2. Application Layer
职责:
- 接收 API 请求并转成应用层命令
- 维护 session、user、tenant 上下文
- 管理鉴权、限流、权限边界
- 调用 orchestrator 与服务层
建议目录:
app/services/app/core/
应用层负责解决“系统怎么接住一个请求”,而不是“模型怎么思考”。
3. Agent Runtime Layer
职责:
- 管理多 agent 状态流转
- 管理节点输入输出和共享状态
- 管理 checkpoint、中断、恢复和回放
- 统一 tool call、fallback 和 error routing
建议技术:
LangGraphLangChain
建议目录:
app/runtime/app/agents/
核心设计原则:
- 每个 agent 有清晰职责
- 节点之间通过统一
state共享信息 - 最终只允许少数节点产生对用户可见的最终输出
- 失败路径必须可观测、可恢复、可降级
4. Knowledge and Memory Layer
职责:
- 保存当前会话消息
- 保存长期用户偏好与任务历史
- 提供知识库检索与重排
- 提供对话摘要和记忆压缩
建议拆成三类存储:
Session StoreMemory StoreVector Store
建议目录:
app/memory/
建议原则:
- 短期记忆和长期记忆分开建模
- 检索上下文和用户消息分开处理
- 避免把所有历史直接塞进 prompt
- 优先通过摘要、选择性检索和结构化 memory 控制上下文长度
5. Tool and Integration Layer
职责:
- 封装内部工具
- 封装第三方 API
- 控制工具权限与调用边界
- 统一工具描述、输入和输出格式
建议目录:
app/tools/
工具层应该满足:
- 可测试
- 可复用
- 可审计
- 可在 runtime 中统一注册
后续可预留:
MCP接入- browser / search 工具
- filesystem 工具
- knowledge connectors
6. Observability and Governance Layer
职责:
- 跟踪每次请求的执行链路
- 记录 tool call、模型调用与成本
- 记录安全拦截与人工审批事件
- 输出 metrics、audit log 和 trace
建议目录:
app/observability/
建议技术:
LangSmithOpenTelemetryPrometheusGrafana
这个层不是后补件,而是 agent 系统能否产品化的关键部分。
Agent Topology
External Identity
Atlas Zero: 对外统一产品身份
Internal Roles
Stella: orchestrator / routerShaka: safety and policy guardEdison: planner and workflow builderPythagoras: memory and retrieval managerAtlas: executor and tool runnerLilith: exploration and fallback agentYork: resource and budget manager
Minimum Execution Flow
第一阶段建议实现如下链路:
User Message
-> API Layer
-> Session Service
-> Stella
-> Shaka
-> Edison
-> Pythagoras
-> Atlas
-> Stella Response Composer
-> Streaming / Final Response
各节点职责:
Stella: 创建运行上下文,决定是否直接回答还是进入执行链路Shaka: 校验风险、权限和策略边界Edison: 生成任务计划、决定工具和步骤Pythagoras: 读取 session memory、long-term memory 和知识库Atlas: 执行工具调用、收集结果、产出 observationStella Response Composer: 汇总结果并形成最终回答
Optional Extended Flow
在第二阶段可扩展:
Stella
-> Shaka
-> Edison
-> Pythagoras
-> Lilith
-> Atlas
-> York
-> Stella
扩展后的作用:
Lilith: 做多路探索、候选方案试探、失败路径补救York: 做模型选择、预算控制、异步任务排队和优先级管理
Runtime State Model
建议定义统一运行时状态对象,例如:
RunState
- run_id
- session_id
- user_id
- tenant_id
- input_message
- messages
- memory_context
- retrieved_documents
- plan
- tool_calls
- tool_results
- safety_decision
- final_response
- status
- started_at
- finished_at
- usage
- errors
建议原则:
- 所有节点都读写同一个共享状态模型
- 用户可见输出和内部推理中间态要分开存储
- 工具结果、检索结果、摘要结果要有明确字段
- 状态对象需要可序列化,方便 checkpoint 和回放
API Design
Core Endpoints
POST /api/chatPOST /api/chat/streamGET /api/sessions/{session_id}GET /api/sessions/{session_id}/messagesPOST /api/sessions/{session_id}/messagesGET /api/agentsPOST /api/agents/runGET /api/runs/{run_id}GET /api/health
Example POST /api/chat
Request:
{
"session_id": "sess_123",
"message": "帮我总结这个项目的架构",
"agent": "atlas-zero",
"stream": false,
"metadata": {
"user_id": "user_001"
}
}
Response:
{
"run_id": "run_123",
"session_id": "sess_123",
"message": {
"role": "assistant",
"content": "..."
},
"usage": {
"input_tokens": 0,
"output_tokens": 0
},
"trace_id": "trace_123"
}
Example POST /api/chat/stream
建议返回 SSE 事件流,事件类型可包括:
run.startedmessage.deltatool.startedtool.finishedretrieval.finishedrun.completedrun.failed
这样前端不仅能展示文字流,还能展示 agent 执行过程。
Suggested Project Structure
app/
api/
routes/
chat.py
sessions.py
agents.py
runs.py
schemas/
chat.py
session.py
run.py
core/
config.py
logging.py
security.py
runtime/
graph.py
orchestrator.py
state.py
checkpoints.py
agents/
stella.py
shaka.py
edison.py
pythagoras.py
atlas.py
lilith.py
york.py
memory/
session_store.py
memory_store.py
vector_store.py
summarizer.py
tools/
registry.py
search.py
browser.py
knowledge.py
filesystem.py
services/
chat_service.py
session_service.py
run_service.py
observability/
tracing.py
metrics.py
audit.py
main.py
Persistence Design
Recommended Storage
PostgreSQL: sessions、messages、runs、audit logsRedis: cache、rate limit、ephemeral state、queue metadatapgvectoror vector DB: embeddings、document chunks、memory retrieval
Minimum Tables
userssessionsmessagesrunstool_callsdocumentsdocument_chunksmemoriesaudit_logs
Security and Governance
Shaka Responsibilities
- 敏感请求识别
- 工具权限控制
- 高风险动作审批
- 输出降级和拒答
Governance Rules
- 所有工具调用都必须可审计
- 高风险工具必须支持 allowlist 或人工确认
- 模型输出不直接代表工具执行成功
- 用户输入、检索上下文、工具 observation 要分开处理
Observability
每个 run 至少应采集:
run_idtrace_idsession_idagent pathmodel usagetool usagelatencycostfailure reason
建议从第一版就支持:
- request tracing
- prompt versioning
- run replay
- structured logs
Delivery Plan
Phase 1
FastAPI基础骨架POST /api/chat与POST /api/chat/streamStella -> Shaka -> Edison -> Pythagoras -> Atlas最小链路- session 持久化
- 基础 RAG
Phase 2
Lilith扩展探索路径York模型路由和预算控制- 文件上传、文档切分与知识入库
- 更完整的 trace 和 metrics
Phase 3
- checkpoint 和 resume
- async job queue
- approval workflow
MCPcompatibility- multi-tenant support
Non-Goals for Early Version
第一阶段不建议过早投入:
- 复杂可视化工作流编辑器
- 过多 agent 角色同时上线
- 过重的插件市场系统
- 过早拆成微服务
建议先把最小闭环跑通,再逐步扩展。