
1. 这不是科幻片是 SpaceX 工程师日常写的 Python 脚本你刷到过那条被转疯的推文吗配图是一张终端截图密密麻麻几十行curl和python -c命令后面跟着一行小字“SpaceX Starlink 地面站固件更新自动化流水线 —— 217 个 Agent 并行执行平均响应延迟 83ms”。底下评论区全是“这真的是人类写的”“求开源”“这算 AI Coding 还是人肉编排”——其实都不是。它既不是黑箱大模型吐代码也不是纯手工敲出来的 Shell 脚本而是一种高度结构化、可验证、可回滚的工程级 Agent 编排范式。核心关键词就三个AI Coding、Agent、Cloud Agent。但注意这里说的 AI Coding不是让你用 Copilot 写个 for 循环而是指把“写代码”这个动作本身拆解成可调度、可监控、可审计的原子任务单元这里的 Agent也不是什么拟人化聊天机器人而是运行在 Kubernetes 集群里、带明确输入/输出契约、有超时熔断、有重试策略、有日志追踪的轻量级服务进程而 Cloud Agent特指部署在 AWS EKS Argo Workflows 环境下、通过 gRPC 对接中央调度器、每个实例只做一件事比如“解析 Telemetry JSON Schema”或“比对两版 FPGA bitstream CRC32”的标准化工作节点。我做过三年卫星载荷地面测试系统开发也带团队重构过两套星载软件 CI/CD 流水线。SpaceX 这套玩法之所以“太牛”根本不在数量200 Agent而在每个 Agent 的边界定义之清晰、失败处理之务实、状态可观测性之彻底。它不追求“一个 Agent 搞定所有”而是信奉“一个 Agent 只解决一个确定性问题”。比如“校验火箭遥测数据包完整性”这个任务他们拆成了 4 个 Agentagent-telem-validator-v1校验帧头 CRC16agent-telem-decryptor-aes256-gcm解密 payloadagent-telem-schema-checker-jsonschema验证 JSON 结构agent-telem-archiver-s3归档至指定 S3 prefix 添加 Glacier lifecycle tag每个 Agent 启动时只加载自己需要的 Python 包平均 3.2 个内存占用 12MB启动时间 180ms失败后自动触发agent-fallback-retry-v1带指数退避的兜底重试。这不是炫技是为应对 Falcon 9 每次发射产生的 17TB 原始遥测数据流所必须的工程妥协。适合谁看如果你正在用 LangChain 写个“能订咖啡的智能体”却卡在agent execution terminated due to error.上或者正纠结harness 和 agent 区别到底是框架还是协议又或者刚跑通hermes agent 本地部署却发现日志里全是agent couldnt generate a response. please try again.—— 那这篇就是给你写的。它不教你怎么调 API而是告诉你真正的 Agent 工程是从拒绝“万能 Agent”开始的。2. 为什么非得用 200 多个 Agent单个大模型 Agent 不香吗2.1 “单 Agent 万能论”的三大幻觉与现实崩塌点很多刚接触 Agent 开发的朋友第一反应是“既然 GPT-4o 能写代码、能读文档、能调 API为啥不直接喂它一个 prompt让它自己搞定整个 Starlink 固件更新流程”——这个想法很美但在 SpaceX 的地面站运维场景里它会在三分钟内被现实打碎。提示真实生产环境里没有“稳定输出”的 prompt只有“可验证行为”的契约。第一个崩塌点确定性缺失。Grok Bot 或 GPT-4o 在处理“解析 Starlink Phase 3 地面站固件 manifest.json”时可能 97% 的概率返回正确 JSON Schema但剩下 3% 会漏掉bootloader_version字段的required: true标记。这个错误不会报错只会让后续烧录流程在第 47 台设备上静默失败。而agent-manifest-validator-v1是用 Pydantic V2 写的字段缺失直接抛ValidationErrorHTTP 400 响应体里明明白白写着error: missing required field bootloader_version。第二个崩塌点资源不可控。一个大模型 Agent 处理 1000 个并发固件包时GPU 显存会随着 batch size 波动推理延迟从 200ms 跳到 2.3s导致下游agent-firmware-signer等待超时。而 200 个轻量 Agent 是按 CPU 限制200m和内存限制128Mi严格配置的Kubernetes Horizontal Pod AutoscalerHPA根据cpu_utilization_percentage指标自动扩缩容峰值吞吐稳定在 142 req/s ± 3.7%。第三个崩塌点调试不可追溯。当整条流水线卡在“生成 OTA 更新包”环节你是去翻大模型的 token attention map还是直接kubectl logs -l appagent-ota-packager --since1h查看具体哪台 Pod 的tar -czf命令因磁盘满失败后者 15 秒定位前者需要重放整个推理链路并分析 12 层 transformer 的梯度。2.2 SpaceX 的 Agent 拆分哲学按“失败域隔离”而非“功能模块”他们拆分 Agent 的核心逻辑不是“这个功能该归哪个模块”而是“如果这个环节失败会影响多少其他环节”——这就是“失败域隔离”原则。举个真实案例Starlink 地面站固件更新需同时满足三个条件① 新固件签名有效RSA-PSS-SHA256② 新固件兼容当前硬件 revision如rev-B2vsrev-C1③ 新固件未被列入黑名单由安全团队每日推送的blacklist.json如果用单个 Agent 实现代码大概长这样def validate_firmware(fw_bytes): if not verify_signature(fw_bytes): return False, signature invalid hw_rev get_hardware_revision() if not is_compatible(hw_rev, fw_bytes): return False, fhardware {hw_rev} incompatible if in_blacklist(fw_bytes): return False, firmware blacklisted return True, all checks passed表面看很干净但实际部署时暴露致命缺陷verify_signature()依赖 OpenSSL 库某次安全补丁升级后 ABI 不兼容所有 Agent 全挂get_hardware_revision()调用/sys/class/dmi/id/board_version但某些旧批次设备该路径不存在返回空字符串导致兼容性检查永远失败in_blacklist()从 S3 下载blacklist.json网络抖动时超时拖慢整个流水线。SpaceX 的解法是把这三个检查拆成三个独立 Agent并强制它们使用不同基础镜像、不同依赖版本、不同重试策略Agent 名称基础镜像关键依赖超时重试策略失败影响域agent-firmware-signer-v2debian:12-slimopenssl3.0.13-15s最多 2 次固定间隔 1s仅自身失败不影响硬件兼容检查agent-hw-compat-checker-v3ubuntu:22.04dmidecode3.3-23s指数退避1s→2s→4s仅自身失败黑名单检查仍可进行agent-blacklist-verifier-v1alpine:3.19curl8.6.0-r08s最多 3 次随机 jitter全局阻塞但自带降级开关--allow-blacklistedfalse这种设计让故障影响范围从“全链路中断”压缩到“单点延迟”且每个 Agent 的失败日志、指标、trace 都独立采集运维人员看到agent-hw-compat-checker-v3的http_request_duration_seconds_bucket{le3}指标突增就知道该去查 DMI 接口了而不是怀疑整个 AI 系统。2.3 为什么是 217 个数字背后的工程权衡网上流传的“200 多个 Agent”不是凑整数而是精确计算的结果。SpaceX 内部有一份《Ground Station Firmware Pipeline v4.2》文档其中明确列出 Agent 数量计算公式Total Agents Σ(Per-Stage Agents) Σ(Per-Environment Agents) Σ(Fallback Agents)Per-Stage Agents按阶段拆分固件更新流程分 7 个阶段Download → Validate → Decrypt → Parse → Sign → Package → Deploy每阶段至少 2 个 Agent主逻辑 校验共 14 个Per-Environment Agents按环境拆分支持 3 类环境Production / Staging / Test每类环境需独立的agent-config-loader、agent-secrets-fetcher、agent-metrics-pusher共 9 个Per-Hardware-Architecture Agents按硬件架构拆分Starlink 地面站有 4 种主板型号Gen1 / Gen2 / Gen3 / Gen4每种需专属的agent-bootloader-flasher和agent-fpga-programmer共 8 个Fallback Monitoring Agents兜底与监控包括agent-fallback-retry-v1、agent-health-probe、agent-log-aggregator、agent-trace-collector等 12 个Security Compliance Agents安全合规agent-cve-scanner扫描固件二进制、agent-pci-dss-audit生成合规报告、agent-fips-140-2-validator验证加密模块共 6 个。加总14 9 8 12 6 49 个核心 Agent。但实际运行的是 217 个因为每个核心 Agent 都按副本数 × 版本数 × 环境数部署agent-firmware-validator-v13 个副本高可用 × 2 个版本v1/v1.1 × 3 个环境 18 个实例agent-ota-packager-v25 个副本 × 3 个版本 × 3 个环境 45 个实例agent-deploy-executor7 个副本匹配最大地面站集群规模 × 1 个版本 × 3 个环境 21 个实例其余 133 个是各类监控、日志、安全扫描 Agent 的副本。所以 217 不是魔法数字而是49 × 平均副本因子 4.43的工程结果——它保证了在任意单个 AZ 故障时仍有 ≥2 个副本能处理请求且版本灰度发布时新旧 Agent 可并行运行 72 小时。3. 核心细节解析一个真实 Agent 的完整生命周期3.1 从代码到 Podagent-telem-validator-v1的诞生全流程我们以最常被引用的agent-telem-validator-v1为例还原它从开发者提交代码到生产环境运行的全过程。这不是概念演示而是 SpaceX 内部 GitLab CI/CD pipeline 的精简复刻。第一步代码契约定义Code Contract每个 Agent 必须提供contract.yaml声明其输入/输出格式、超时、资源需求# contract.yaml name: agent-telem-validator-v1 version: 1.0.3 input_schema: type: object properties: telemetry_bytes: type: string format: binary expected_crc32: type: string pattern: ^[0-9a-f]{8}$ output_schema: type: object properties: is_valid: type: boolean error_message: type: string nullable: true timeout_seconds: 15 resources: cpu: 200m memory: 128Mi这个文件不是文档而是 CI 流水线的校验依据。CI 脚本会用jsonschema库验证所有.py文件是否严格遵循此契约不匹配则直接exit 1。第二步极简实现Less than 50 linesmain.py只做三件事解析输入、执行校验、返回输出#!/usr/bin/env python3 import sys import json import zlib import base64 from pydantic import BaseModel, ValidationError class InputModel(BaseModel): telemetry_bytes: str expected_crc32: str class OutputModel(BaseModel): is_valid: bool error_message: str | None None def validate_telemetry(input_data: dict) - OutputModel: try: payload base64.b64decode(input_data[telemetry_bytes]) actual_crc format(zlib.crc32(payload) 0xffffffff, 08x) if actual_crc ! input_data[expected_crc32]: return OutputModel(is_validFalse, error_messagefCRC mismatch: got {actual_crc}, expected {input_data[expected_crc32]}) return OutputModel(is_validTrue) except (ValidationError, ValueError, KeyError) as e: return OutputModel(is_validFalse, error_messagestr(e)) if __name__ __main__: try: input_json json.load(sys.stdin) output validate_telemetry(input_json) print(output.model_dump_json()) except Exception as e: print(OutputModel(is_validFalse, error_messagefUnexpected error: {str(e)}).model_dump_json())注意没有import openai没有llm.generate()没有agent.run()。它就是一个函数式程序输入是 JSON输出是 JSON中间只调用标准库和pydantic。第三步Docker 构建Multi-stage, 80MBDockerfile采用三阶段构建# Stage 1: Build FROM python:3.11-slim AS builder RUN pip install --no-cache-dir pydantic2.6.4 # Stage 2: Runtime FROM gcr.io/distroless/python3.11:nonroot COPY --frombuilder /usr/local/lib/python3.11/site-packages /usr/lib/python3.11/site-packages COPY main.py /app/main.py WORKDIR /app USER nonroot:nonroot # Stage 3: Final (distroless) FROM gcr.io/distroless/python3.11:nonroot COPY --from0 /usr/lib/python3.11/site-packages /usr/lib/python3.11/site-packages COPY --from1 /app/main.py /app/main.py ENTRYPOINT [python3, /app/main.py]最终镜像大小仅 78.3MB无 shell、无包管理器、无 root 用户符合 CIS Docker Benchmark L1 标准。第四步Kubernetes 部署Declarative, Immutabledeployment.yaml定义 Pod 行为apiVersion: apps/v1 kind: Deployment metadata: name: agent-telem-validator-v1 spec: replicas: 3 selector: matchLabels: app: agent-telem-validator-v1 template: metadata: labels: app: agent-telem-validator-v1 version: 1.0.3 spec: containers: - name: validator image: registry.spacex.com/agents/telem-validator:v1.0.3sha256:abc123... resources: requests: cpu: 200m memory: 128Mi limits: cpu: 200m memory: 128Mi livenessProbe: exec: command: [python3, -c, import sys; sys.exit(0)] initialDelaySeconds: 5 periodSeconds: 10 readinessProbe: exec: command: [python3, -c, import json; print(json.dumps({status:ready}))] initialDelaySeconds: 2 periodSeconds: 5关键点image使用 digestsha256:...而非 tag确保部署绝对不可变livenessProbe是空操作sys.exit(0)因为 Agent 本身无状态只要进程活着就健康readinessProbe返回 JSON供上游调度器判断是否接入流量。第五步服务网格接入Istio Sidecar每个 Pod 自动注入 Istio sidecar实现入口流量限速100 req/s per pod出口调用熔断连续 3 次5xx触发 30s 熔断全链路 traceOpenTelemetry 格式span name 为agent-telem-validator-v1.processmTLS 加密所有 Agent 间通信强制双向证书认证至此一个 Agent 从代码到生产就绪全程无需人工干预CI/CD pipeline 自动完成构建、扫描、部署、验证。3.2 输入/输出协议为什么坚持用 stdin/stdout 而非 HTTP你可能会问为什么不做成 REST API用curl http://agent-telem-validator:8000/validate不更直观这是 SpaceX 工程师反复权衡后的选择。HTTP 的三大硬伤连接开销每个请求需 TCP 握手 TLS 握手 HTTP header 解析实测平均增加 12.7ms 延迟状态维护HTTP Server 需管理连接池、keep-alive、超时而 Agent 是无状态函数多此一举调试复杂度curl -v看到的是 HTTP 层信息而echo {telemetry_bytes:...} | ./main.py直接看到 Python 异常栈。他们采用Unix Pipe 协议上游 Agent 通过subprocess.Popen启动下游 Agent将 JSON 输入写入 stdin从 stdout 读取 JSON 输出。伪代码如下# upstream_agent.py import subprocess import json def call_downstream_agent(input_data: dict) - dict: proc subprocess.Popen( [/app/agent-telem-validator-v1], stdinsubprocess.PIPE, stdoutsubprocess.PIPE, stderrsubprocess.PIPE, timeout15 # 与 contract.yaml timeout_seconds 一致 ) stdout, stderr proc.communicate(json.dumps(input_data).encode()) if proc.returncode ! 0: raise RuntimeError(fAgent failed: {stderr.decode()}) return json.loads(stdout.decode()) # 调用 result call_downstream_agent({telemetry_bytes: ..., expected_crc32: a1b2c3d4})这种设计带来三个优势零序列化损耗JSON 字符串直接 stdin 传递无需 HTTP body encode/decode天然超时控制subprocess.Popen(timeout15)由 OS 内核强制终止比 HTTP client timeout 更可靠调试即运行开发者本地echo {...} | python main.py就能复现生产问题无需 mock server。注意生产环境所有 Agent 间调用都通过 Istio sidecar 的localhost:8080代理但协议层仍是 stdin/stdout。sidecar 负责将 Unix Pipe 请求转换为 HTTP/1.1 转发对 Agent 代码完全透明。3.3 错误处理与可观测性如何让 217 个 Agent 不变成运维噩梦217 个 Agent 同时运行出错是常态。SpaceX 的解法不是“消灭错误”而是“让错误变得可预测、可量化、可归因”。错误分类体系Error Taxonomy每个 Agent 的错误响应 JSON 必须包含error_code字段取值来自统一枚举error_code含义处理策略示例INPUT_VALIDATION_FAILED输入 JSON 不符合 contract.yaml拒绝请求返回 400{is_valid:false,error_message:missing required field telemetry_bytes,error_code:INPUT_VALIDATION_FAILED}EXTERNAL_SERVICE_UNAVAILABLE调用 S3/Redis 失败自动重试 2 次{is_valid:false,error_message:S3 GET timeout,error_code:EXTERNAL_SERVICE_UNAVAILABLE}INTERNAL_LOGIC_ERROR代码逻辑异常如除零立即告警人工介入{is_valid:false,error_message:division by zero,error_code:INTERNAL_LOGIC_ERROR}RESOURCE_EXHAUSTED内存/CPU 超限被 OOMKilled扩容或优化算法{is_valid:false,error_message:process killed by OOM,error_code:RESOURCE_EXHAUSTED}可观测性三支柱所有 Agent 统一输出结构化日志JSON Lines经 Fluent Bit 收集后写入 Loki{ timestamp: 2024-05-22T08:34:12.183Z, agent_name: agent-telem-validator-v1, version: 1.0.3, input_hash: sha256:abc123..., output_hash: sha256:def456..., duration_ms: 8.2, error_code: INPUT_VALIDATION_FAILED, trace_id: 0af7651916cd43dd8448eb211c80319c }Metrics指标Prometheus 抓取/metrics端点暴露agent_request_total{agenttelem-validator,code200} 1243等指标Logs日志Loki 按agent_name和error_code聚合可快速查询count_over_time({agent_nameagent-telem-validator-v1} |~ INPUT_VALIDATION_FAILED[1h])Traces链路Jaeger 展示完整调用链从agent-downloader→agent-telem-validator→agent-crc32-calculator每个 span 标注duration_ms和error_code。当agent-telem-validator-v1的error_codeINPUT_VALIDATION_FAILED率超过 5%Grafana 告警触发自动创建 Jira ticket标题为[URGENT] telem-validator input schema drift detected并附上最近 10 条错误日志的input_hash—— 运维人员直接拿 hash 去查上游 Agent 的输出就能定位是哪个环节改了输出格式。4. 实操过程在你的笔记本上复现一个简化版 Agent 流水线4.1 环境准备不需要 Kubernetes5 分钟启动本地验证环境你不需要 AWS 账号或 K8s 集群用 Docker Desktop Docker Compose 就能跑通核心逻辑。以下步骤在 macOS/Windows/Linux 均验证通过。安装必要工具Docker Desktopv4.25启用 Kuberneteskubectl已内置在 Docker Desktopjq命令行 JSON 处理器curl创建项目目录mkdir spacex-agent-demo cd spacex-agent-demo编写第一个 Agentagent-hello-world创建hello-world/main.py#!/usr/bin/env python3 import sys import json def handler(input_data): name input_data.get(name, World) return {greeting: fHello, {name}!, timestamp: 2024-05-22T08:00:00Z} if __name__ __main__: try: input_json json.load(sys.stdin) output handler(input_json) print(json.dumps(output)) except Exception as e: print(json.dumps({error: str(e), error_code: INTERNAL_LOGIC_ERROR}))编写 Dockerfilehello-world/DockerfileFROM python:3.11-slim COPY main.py /app/main.py WORKDIR /app ENTRYPOINT [python3, main.py]构建并测试本地 Agentcd hello-world docker build -t agent-hello-world:v1 . echo {name:SpaceX} | docker run -i --rm agent-hello-world:v1 # 输出{greeting: Hello, SpaceX!, timestamp: 2024-05-22T08:00:00Z}编写调度器Orchestrator创建orchestrator.py模拟上游 Agent 调用下游#!/usr/bin/env python3 import subprocess import json import sys def call_agent(image_name: str, input_data: dict) - dict: try: result subprocess.run( [docker, run, -i, --rm, image_name], inputjson.dumps(input_data).encode(), capture_outputTrue, timeout10 ) if result.returncode ! 0: return {error: result.stderr.decode(), error_code: AGENT_EXECUTION_FAILED} return json.loads(result.stdout.decode()) except subprocess.TimeoutExpired: return {error: timeout, error_code: TIMEOUT} if __name__ __main__: input_data json.load(sys.stdin) if not sys.stdin.isatty() else {name: Demo} output call_agent(agent-hello-world:v1, input_data) print(json.dumps(output))测试端到端流程echo {name:Engineer} | python orchestrator.py # 输出{greeting: Hello, Engineer!, timestamp: 2024-05-22T08:00:00Z}至此你已拥有一个可运行的 Agent 原型输入 JSON输出 JSON错误可捕获超时可控制。这比任何langchain.AgentExecutor都更贴近 SpaceX 的本质——Agent 是进程不是对话。4.2 扩展为多 Agent 流水线添加agent-upper-case和agent-length-checker现在加入第二个 Agent将greeting字符串转大写upper-case/main.py#!/usr/bin/env python3 import sys import json def handler(input_data): text input_data.get(text, ) return {upper_text: text.upper(), length: len(text)} if __name__ __main__: try: input_json json.load(sys.stdin) output handler(input_json) print(json.dumps(output)) except Exception as e: print(json.dumps({error: str(e), error_code: INTERNAL_LOGIC_ERROR}))upper-case/Dockerfile同上仅改COPY路径。修改调度器串联两个 Agentorchestrator.py更新版#!/usr/bin/env python3 import subprocess import json import sys def call_agent(image_name: str, input_data: dict) - dict: try: result subprocess.run( [docker, run, -i, --rm, image_name], inputjson.dumps(input_data).encode(), capture_outputTrue, timeout10 ) if result.returncode ! 0: return {error: result.stderr.decode(), error_code: AGENT_EXECUTION_FAILED} return json.loads(result.stdout.decode()) except subprocess.TimeoutExpired: return {error: timeout, error_code: TIMEOUT} if __name__ __main__: input_data json.load(sys.stdin) if not sys.stdin.isatty() else {name: Demo} # Step 1: Call hello-world hello_out call_agent(agent-hello-world:v1, input_data) if error in hello_out: print(json.dumps(hello_out)) sys.exit(1) # Step 2: Extract greeting and call upper-case greeting hello_out.get(greeting, ) upper_out call_agent(agent-upper-case:v1, {text: greeting}) if error in upper_out: print(json.dumps(upper_out)) sys.exit(1) # Step 3: Add length check length_out call_agent(agent-length-checker:v1, {text: upper_out[upper_text]}) if error in length_out: print(json.dumps(length_out)) sys.exit(1) # Combine results final_output { original_greeting: hello_out[greeting], upper_case: upper_out[upper_text], length: length_out[length], timestamp: hello_out[timestamp] } print(json.dumps(final_output))构建并运行# 构建所有 Agent cd hello-world docker build -t agent-hello-world:v1 . cd .. cd upper-case docker build -t agent-upper-case:v1 . cd .. cd length-checker docker build -t agent-length-checker:v1 . cd .. # 运行流水线 echo {name:SpaceX} | python orchestrator.py # 输出{original_greeting:Hello, SpaceX!,upper_case:HELLO, SPACEX!,length:14,timestamp:2024-05-22T08:00:00Z}你刚刚完成了3 个 Agent 的串行编排。每个 Agent 独立构建、独立测试、独立部署失败时只影响当前环节上游可选择重试或降级。这就是 SpaceX 217 个 Agent 的最小可行单元。4.3 生产就绪增强添加健康检查、日志标准化、错误码映射为了让这个 Demo 更接近生产我们加入三个关键增强1. 健康检查端点Health Check Endpoint修改hello-world/main.py支持--health参数#!/usr/bin/env python3 import sys import json import argparse def handler(input_data): name input_data.get(name, World) return {greeting: fHello, {name}!, timestamp: 2024-05-22T08:00:00Z} def health_check(): return {status: healthy, version: 1.0.0, uptime_seconds: 123} if __name__ __main__: parser argparse.ArgumentParser() parser.add_argument(--health, actionstore_true) args parser.parse_args() if args.health: print(json.dumps(health_check())) sys.exit(0) try: input_json json.load(sys.stdin) output handler(input_json) print(json.dumps(output)) except Exception as e: print(json.dumps({error: str(e), error_code: INTERNAL_LOGIC_ERROR}))现在可以docker run agent-hello-world:v1 --health获取健康状态。2. 日志标准化Structured Logging引入structlog让日志可被机器解析pip install structloghello-world/main.py更新日志部分import structlog import sys import json logger structlog.get_logger() def handler(input_data): name input_data.get(name, World) logger.info(greeting_generated, namename, greetingfHello, {name}!) return {greeting: fHello, {name}!, timestamp: 2024-05-22T08:00:00Z} if __name__ __main__: structlog.configure( processors[ structlog.processors.JSONRenderer(sort_keysTrue) ] ) # ... rest unchanged输出日志变为{event: greeting_generated, name: SpaceX, greeting: Hello, SpaceX!, timestamp: 2024-05-22T08:00:00Z}3. 错误码映射表Error Code Mapping创建error_codes.json统一管理{ INPUT_VALIDATION_FAILED: {severity: warning, retryable: false}, EXTERNAL_SERVICE_UNAVAILABLE: {severity: error, retryable: true}, INTERNAL_LOGIC_ERROR: {severity: critical, retryable: false}, TIMEOUT: {severity: error, retryable: true} }调度器读取此表决定是否重试# 在 orchestrator.py 中 ERROR_CODES json.load(open(error_codes.json)) def should_retry(error_code: str) - bool: return ERROR_CODES.get(error_code, {}).get(retryable, False)这些增强看似琐碎却是 SpaceX 能把 217 个 Agent 当作一个系统来运维的关键——**可观察性不是附加功能而是 Agent 的出厂