芥末
发布于 2026-06-15 / 1 阅读
0
0

面向 AI Agent 的后端架构改造:从系统事实到无人值守开发

过去的后端架构主要围绕“人类工程师可维护”来设计:代码分层清晰、接口稳定、日志可查、监控完整、发布可回滚、故障可定位。这些原则仍然重要,但 AI Coding、Agentic Coding 进入工程现场后,后端系统还需要满足一个新的要求:它能不能被 AI Agent 正确理解、修改、验证和运维。

AI Friendly 不是多写几份 README,也不是单纯统一代码风格。它真正要解决的问题是:AI Agent 在上下文有限、权限有限、试错成本有限的条件下,能不能知道系统边界在哪里,能不能判断哪些代码能改、哪些不能改,能不能完成验证,能不能给出风险和回滚方案。

换句话说,过去建设的是“可维护系统”,以后还要建设“可被智能体维护的系统”。

大型后端系统尤其需要这层能力。一个互联网后端通常包含几十个甚至上百个微服务,还会连接关系型数据库(RDB)、Redis、消息队列、对象存储、搜索引擎、任务调度、配置中心、注册中心、网关、风控、权限、审计、灰度、监控、告警和数据仓库。经验丰富的工程师知道哪些接口有历史包袱,哪些字段不能改,哪个 Topic 还被老链路消费,哪个服务已经不适合承载新能力;AI Agent 不知道,它只能从代码、文档、日志、测试、运行环境和历史变更里推断。

所以,后端架构 AI Friendly 的核心,不是“让 AI 更聪明”,而是把藏在人脑、群聊、会议纪要和事故复盘里的系统知识,变成显式、结构化、可检索、可执行、可验证的工程资产。

flowchart TD
    A[隐性系统知识] --> B[结构化系统事实]
    B --> C[AI 可检索上下文]
    C --> D[受控 Harness 执行]
    D --> E[测试与策略校验]
    E --> F[生成 PR / 灰度 / 回滚方案]
    F --> G[审计与持续沉淀]

一、先建立 AI 能读懂的系统事实层

AI Agent 不能只靠搜索代码来理解系统。代码只能告诉它“现在怎么写”,却很难解释“为什么必须这么写”。大型后端系统要支持 AI 参与开发,需要先建立一层机器可读的系统事实。

这层事实至少包括六类内容。

事实类型 解决的问题 典型内容
架构事实 让 AI 获得全局方向感 业务域、服务分层、核心链路、服务拓扑、消息拓扑、发布边界
服务事实 让 AI 知道每个服务的身份 职责、上游、下游、接口、表、缓存、消息、负责人、测试入口
领域事实 让 AI 理解业务规则 实体、状态机、不变量、幂等规则、补偿机制、风险等级
接口事实 让 AI 遵守协作契约 调用方、参数、返回值、错误码、幂等性、超时、限流、兼容性
数据事实 让 AI 不乱改状态基础 表结构、字段含义、索引、枚举、唯一约束、敏感字段、归档规则
运行事实 让 AI 看见真实系统 QPS、TP99、错误率、热点 Key、Consumer Lag、事故记录、降级状态

这些事实合在一起,构成后端系统的 AI 理解底座。没有这层底座,AI Agent 只能做局部补代码;有了它,AI 才能参与跨服务开发、架构治理、排障修复和无人值守运维。

架构事实:给 AI 一张全局地图

架构事实负责描述系统为什么这样组织。它应该覆盖业务域划分、服务分层、核心链路、同步与异步边界、强弱依赖、数据所有权、灰度发布边界、故障隔离边界、历史遗留模块和目标架构方向。

如果没有架构事实,AI 很容易把局部修复做成全局破坏。例如:

  • 把应该放在 BFF(Backend For Frontend,面向前端的后端服务)层的兼容逻辑写进核心领域服务;
  • 把原本异步解耦的流程改成同步远程调用;
  • 把只读依赖误判成可写依赖;
  • 在核心交易链路里增加额外 RPC(Remote Procedure Call,远程过程调用);
  • 继续在已经标记为遗留的服务里增加新能力。

架构事实不是一张给人看的 PPT,而是要能被 AI 检索、被 CI(Continuous Integration,持续集成)校验、被 Harness 执行。

一个最小可用的 architecture.yaml 可以这样组织:

domains:
  order:
    owner: order-platform
    services:
      - order-service
      - order-query-service
    riskLevel: high

layers:
  gateway:
    allowDependsOn:
      - bff
  bff:
    allowDependsOn:
      - application
      - domain
  domain:
    allowDependsOn:
      - infrastructure

criticalPaths:
  createOrder:
    services:
      - api-gateway
      - order-bff
      - order-service
      - inventory-service
      - payment-service
    latencyBudgetMs: 800
    allowNewSyncDependency: false

dataOwnership:
  order_db.orders:
    ownerService: order-service
    writableBy:
      - order-service
    readableBy:
      - order-query-service

这类结构化文件的价值在于:AI 修改代码前,可以先判断需求属于哪个业务域、是否影响核心链路、是否违反分层规则、是否越权访问数据。

服务事实:每个微服务都需要 Service Card

在几十个微服务组成的系统里,AI 最怕的不是代码多,而是服务边界不清。边界不清会导致它改错服务、调用错接口、重复造轮子,甚至在错误层级解决问题。

每个微服务都应该有一张 Service Card,也可以叫 System Card。它不是普通 README,而是服务身份证。

service:
  name: order-service
  domain: order
  layer: domain
  riskLevel: high
  owner: order-platform

responsibilities:
  - 创建订单
  - 管理订单状态流转
  - 维护订单主表和订单明细
  - 发布订单领域事件

notResponsibilities:
  - 不直接处理支付渠道回调
  - 不直接扣减库存
  - 不对客户端暴露聚合接口

entities:
  - Order
  - OrderItem
  - OrderStatus

ownedTables:
  - order_db.orders
  - order_db.order_items

apis:
  - name: CreateOrder
    protocol: RPC
    idempotent: true
    callers:
      - order-bff
    compatibility: backward-compatible

messages:
  produces:
    - topic: order.created
      idempotencyKey: orderId
  consumes:
    - topic: payment.succeeded
      idempotencyKey: paymentId

dependencies:
  strong:
    - inventory-service
  weak:
    - coupon-service
    - notification-service

tests:
  unit: mvn test -pl order-service
  contract: mvn test -Pcontract
  integration: mvn verify -Pintegration

release:
  canary: true
  rollback: "通过发布平台回滚镜像;数据库变更需执行 rollback.sql"

Service Card 应该放在服务仓库根目录,并由 CI 检查必填字段是否完整。更好的做法是部分自动生成:接口从 IDL(Interface Definition Language,接口定义语言)或 OpenAPI 生成,依赖从调用链和配置生成,表结构从 Schema 生成,监控链接从服务注册信息生成。人工主要维护业务解释、边界约束和历史注意事项。

二、Architecture Map:让 AI 先看懂系统,而不是某个仓库

小系统只有几个服务时,AI 通过代码搜索和 README 也许能推断结构。大型分布式系统不行,因为复杂性主要不在单个服务内部,而在服务之间的关系。

AI 需要知道:

  • 哪些服务属于核心交易链路,哪些只是后台运营系统;
  • 哪些调用是强依赖,哪些可以降级;
  • 哪些流程是同步链路,哪些流程靠异步事件推进;
  • 哪些数据库属于服务私有,哪些数据通过事件同步;
  • 哪些系统是目标架构方向,哪些系统只是历史遗留;
  • 哪些服务可以承载新需求,哪些服务只能维护不再扩展。

Architecture Map 的目标不是画得漂亮,而是让 AI 在进入任何一个服务、修改任何一段代码之前,先建立系统级方向感。

flowchart LR
    Client[客户端] --> Gateway[网关层]
    Gateway --> BFF[BFF 层]
    BFF --> Order[订单领域服务]
    BFF --> User[用户领域服务]
    Order --> Inventory[库存服务]
    Order --> Payment[支付服务]
    Order --> MQ[(消息队列)]
    Payment --> MQ
    MQ --> Fulfillment[履约服务]
    MQ --> Notify[通知服务]
    Order --> OrderDB[(订单库)]
    Inventory --> InventoryDB[(库存库)]
    Payment --> PaymentDB[(支付库)]

这张图表达了几个关键边界:

  • 客户端不直接调用领域服务,而是通过网关和 BFF 进入系统;
  • 订单、库存、支付各自拥有自己的数据库,其他服务不能随意跨库写入;
  • 履约和通知通过消息队列消费事件,不应该被强行塞进下单同步链路;
  • 订单链路里的同步依赖会影响用户实时体验,新增依赖必须受限;
  • 异步消息承担削峰、解耦和补偿作用,不能因为局部修改被随意改成同步调用。

一份合格的 Architecture Map 至少要回答九个问题。

问题 AI 需要获得的判断能力
系统有哪些业务域 判断需求应该落在哪个边界
服务如何分层 判断逻辑应该放在接入层、应用层还是领域层
核心链路如何流转 判断修改是否影响实时体验和一致性
服务调用拓扑是什么 判断新增依赖是否会放大风险
消息拓扑是什么 判断异步事件如何推动业务状态
数据所有权如何划分 判断哪个服务能写、能读、不能碰
强弱依赖如何定义 判断失败时应该阻断、降级还是跳过
发布和故障边界在哪里 判断是否需要联动发布、灰度和回滚
哪些模块属于历史遗留 判断新能力是否应该继续放进去

README 解决的是“这个仓库如何启动”,Architecture Map 解决的是“整个系统为什么这样组织,以及哪些边界不能破坏”。

三、领域模型:让 AI 知道哪些规则不能破坏

后端系统最重要的资产不是代码,而是业务不变量。

订单、支付、账户、会员、库存、风控、营销、履约、结算这些领域都有自己的实体、状态机、生命周期和约束。AI 如果只看代码,很容易写出“语法正确、业务错误”的实现。

例如订单系统常见的不变量包括:

  • 已支付订单不能随意回到未支付;
  • 退款金额不能超过支付金额;
  • 库存扣减必须和订单状态保持一致;
  • 优惠券不能重复核销;
  • 账户余额不能变成负数;
  • 同一请求不能重复入账;
  • 风控拒绝后的交易不能绕过审批。

这些规则要写成可读、可测试、可断言的形式,而不是散落在代码分支里等待 AI 自己猜。

状态机要显式化

很多业务 bug 来自状态流转错误。订单状态、退款状态、审核状态、配送状态、账号状态,都应该有明确的状态枚举、允许路径、禁止路径、触发事件和补偿动作。

stateDiagram-v2
    [*] --> Created: 创建订单
    Created --> PendingPayment: 等待支付
    PendingPayment --> Paid: 支付成功
    PendingPayment --> Closed: 超时关闭
    Paid --> Fulfilled: 履约完成
    Paid --> Refunding: 发起退款
    Refunding --> Refunded: 退款成功
    Refunding --> Paid: 退款失败
    Closed --> [*]
    Fulfilled --> [*]
    Refunded --> [*]

状态机不仅要给人看,最好还能转成机器可读定义,用来生成校验逻辑和测试用例。

entity: Order
states:
  - Created
  - PendingPayment
  - Paid
  - Fulfilled
  - Refunding
  - Refunded
  - Closed

transitions:
  - from: Created
    to: PendingPayment
    event: ORDER_CONFIRMED
  - from: PendingPayment
    to: Paid
    event: PAYMENT_SUCCEEDED
  - from: PendingPayment
    to: Closed
    event: PAYMENT_TIMEOUT
  - from: Paid
    to: Refunding
    event: REFUND_REQUESTED

forbidden:
  - from: Paid
    to: Created
  - from: Closed
    to: Paid

invariants:
  - "refundAmount <= paidAmount"
  - "paid order must have exactly one successful payment record"
  - "closed order cannot be paid again"

这类定义可以直接变成 AI 的约束上下文。AI 在新增订单状态、修改退款逻辑、重构支付回调时,需要先通过状态机和不变量校验。

跨域链路模型要保护系统级一致性

单个服务内部正确,不代表整条业务链路正确。下单可能涉及用户、营销、订单、库存、支付、风控、履约和通知;退款可能涉及订单、支付、资金、库存、优惠券、结算和用户通知。局部修改一旦不了解跨域协作,就可能制造全局不一致。

sequenceDiagram
    participant U as 用户
    participant B as 订单 BFF
    participant R as 风控服务
    participant O as 订单服务
    participant I as 库存服务
    participant P as 支付服务
    participant M as 消息队列
    participant F as 履约服务

    U->>B: 提交订单
    B->>R: 风控校验
    R-->>B: 通过
    B->>O: 创建订单
    O->>I: 预占库存
    I-->>O: 预占成功
    O-->>B: 返回待支付订单
    U->>P: 支付
    P->>M: 发布 payment.succeeded
    M-->>O: 更新订单为已支付
    M-->>F: 触发履约

跨域链路模型要描述每一步是同步调用还是异步事件,失败后如何补偿,哪些步骤允许最终一致,哪些步骤必须强一致,哪些消息可以重复消费,哪些状态不能逆转,哪些异常需要人工介入。

领域模型回答“业务对象内部如何流转”,跨域链路模型回答“多个业务域之间如何协作”。前者保护实体不变量,后者保护系统级一致性。

四、把团队经验封装成 AI 可调用的 Skill

AI Coding 的效率不只取决于模型能力,还取决于模型外部的工具、上下文、流程和约束。团队应该把高频工程任务沉淀成 Skill。

Skill 可以理解为可复用任务包,包含任务说明、上下文入口、操作步骤、工具命令、校验方式、风险提示和输出格式。它不是普通文档,而是 AI Agent 执行任务时调用的操作手册。

常见后端 Skill 包括:

Skill 适合场景 必要校验
新增内部查询接口 查询类需求、无状态修改 接口契约、权限、限流、单测
新增消息 Consumer 异步处理、事件驱动扩展 幂等、重试、死信、重复消费
新增数据库字段 渐进式 Schema 变更 兼容读写、回填、回滚、锁表风险
新增领域状态 状态机扩展 禁止路径、不变量、跨服务依赖
排查 TP99 升高 性能劣化定位 Trace、慢 SQL、缓存命中率、依赖耗时
修复线上异常 明确错误日志和复现路径 回归测试、影响面、灰度、回滚

一个 Skill 可以这样写:

skill: add-database-field
appliesTo:
  - "需要给已有实体新增字段"
  - "字段需要兼容老版本读写"
notAppliesTo:
  - "需要拆表或迁移核心主键"
inputs:
  - serviceName
  - tableName
  - fieldName
  - fieldType
  - defaultValue
steps:
  - "检查 dataOwnership,确认当前服务拥有表写权限"
  - "新增 migration,字段必须允许默认兼容"
  - "更新 Entity、DTO、Mapper 和字段说明"
  - "先兼容写入,再兼容读取"
  - "补充单元测试和 Schema 检查"
  - "如果需要历史回填,生成独立回填脚本"
riskChecks:
  - "是否锁表"
  - "是否影响老版本客户端"
  - "是否涉及敏感字段"
  - "是否需要灰度开关"
validation:
  - "mvn test -pl ${serviceName}"
  - "mvn verify -Pschema-check"
output:
  - "变更点"
  - "兼容性说明"
  - "测试结果"
  - "回滚方案"

Skill 的价值是减少 AI 的猜测空间。资深工程师知道“加字段要先兼容写、再兼容读、再回填、再切流量、最后清理旧字段”,新人和 AI 未必知道。把这些经验沉淀成 Skill,本质上是在把组织经验变成可执行资产。

五、Harness:给 AI Agent 建立安全执行轨道

Skill 是能力包,Harness 是执行框架。它决定 AI 如何获得上下文、如何选择工具、如何执行命令、如何处理权限、如何验证结果、如何停止和上报。

后端无人值守开发不能让 AI 直接拥有无限权限。AI 必须运行在受控 Harness 中。

flowchart TD
    T[任务输入] --> C[上下文装载层]
    C --> P[计划层]
    P --> A{风险判断}
    A -->|低风险| E[执行层]
    A -->|高风险| H[人工审批]
    H --> E
    E --> V[验证层]
    V --> R{是否通过}
    R -->|通过| PR[创建 PR / 灰度方案]
    R -->|失败| F[停止并生成报告]
    PR --> O[审计与回滚记录]

一个面向后端的 Harness 至少需要七层能力。

层级 作用
上下文装载层 按任务加载 Service Card、领域模型、接口文档、Schema、近期 PR、事故记录、监控指标
工具层 提供代码搜索、文件编辑、测试执行、依赖分析、日志查询、Trace 查询、只读数据库查询
计划层 要求 AI 修改前说明文件范围、修改原因、影响面和验证方式
执行层 在独立分支、独立 Worktree、独立 Sandbox 中修改,避免污染主干环境
验证层 执行单测、集成测试、契约测试、静态检查、安全扫描、Schema 检查
审计层 记录 AI 读过什么、改过什么、执行过什么命令、为什么这样决策
回滚层 要求每个变更附带代码、配置、数据库、消息和缓存层面的回滚方式

Harness 的目标不是让 AI 更自由,而是让 AI 在正确轨道上更高效。越是大型后端系统,越不能依赖模型自觉,越要依赖工程化约束。

架构策略也要让 Harness 执行

Harness 不应该只是执行环境,还应该成为架构规则执行器。

架构师可以把服务分层、依赖方向、数据所有权、消息规范、核心链路约束、强依赖准入规则写成 Architecture Policy。AI 提交计划或修改代码时,Harness 自动检查是否违反边界。

典型检查包括:

  • BFF 层是否直接写入核心业务库;
  • 非 Owner 服务是否访问了其他服务私有表;
  • 核心交易链路是否新增未登记的同步 RPC;
  • 基础服务是否反向依赖业务服务;
  • 原本异步解耦的链路是否被改成强同步调用;
  • 消息 Schema 是否破坏兼容性。

过去这些问题依赖架构评审和 Code Review 发现,以后应该尽量通过策略和 CI 自动发现。

六、测试体系要成为 AI 的交通信号灯

AI Friendly 的后端系统里,测试不是“防人出错”的附属设施,而是约束 AI 行为的关键边界。测试不只回答“代码有没有错”,还要回答“AI 有没有资格继续往下走”。

测试类型 约束内容 重点场景
单元测试 函数和领域规则是否正确 不变量、状态机、金额计算、权限判断、风控规则
契约测试 跨服务接口是否兼容 字段新增、字段删除、枚举修改、错误码调整
集成测试 业务链路是否完整可用 下单、支付、库存、退款、消息消费
回归测试 历史问题是否复发 线上事故、重要 Bug、兼容性问题
数据迁移测试 Schema 变更是否安全 加字段、改索引、拆表、回填、回滚
性能测试 核心链路是否劣化 N+1 查询、额外 RPC、缓存击穿、锁竞争
架构测试 系统边界是否被破坏 分层违规、跨库写入、未登记强依赖、消息不兼容

架构级测试尤其重要。它不是验证某个函数返回值,而是验证系统结构没有被侵蚀。例如:

rules:
  - name: bff-cannot-write-domain-db
    match:
      layer: bff
      operation: write_database
    deny:
      databaseTags:
        - domain-owned

  - name: critical-path-no-new-sync-rpc
    match:
      path: createOrder
      dependencyType: sync-rpc
    requireApproval: architecture-owner

  - name: non-owner-cannot-access-private-table
    match:
      operation: read_or_write_table
    require:
      tableOwnerEqualsCurrentService: true

AI 每完成一个阶段,都应该经过对应 Checkpoint:

flowchart LR
    Plan[生成修改计划] --> Policy[架构策略检查]
    Policy --> Code[修改代码]
    Code --> Unit[单元测试]
    Unit --> Contract[契约测试]
    Contract --> Integration[集成测试]
    Integration --> Security[安全扫描]
    Security --> PR[创建 PR]

如果某个 Checkpoint 未通过,AI 应该停止并报告原因,而不是继续扩大修改范围。

七、可观测性要变成 AI 的眼睛

无人值守开发不只包括写代码,还包括排障、修复、优化和自愈。AI 要参与这些工作,必须能看见系统运行状态。

传统可观测性主要面向人:Dashboard 给人看,日志给人查,告警发到群里。AI Friendly 的可观测性要进一步结构化。

日志必须结构化

自然语言日志可以保留,但关键字段必须结构化。否则 AI 很难稳定检索和关联。

{
  "timestamp": "2026-06-07T10:00:00+08:00",
  "level": "ERROR",
  "service": "order-service",
  "traceId": "9f1c2a",
  "spanId": "3b8e",
  "bizId": "order_123",
  "userIdHash": "u_7d91",
  "errorCode": "INVENTORY_RESERVE_TIMEOUT",
  "latencyMs": 1200,
  "orderStatus": "PendingPayment",
  "dependency": "inventory-service"
}

错误码要有明确语义

不能所有异常都叫 SYSTEM_ERROR。AI 需要通过错误码判断问题类型:参数错误、依赖超时、库存不足、权限失败、幂等冲突、数据不一致,处理路径完全不同。

错误码 含义 常见处理
INVALID_ARGUMENT 参数不合法 检查调用方和输入校验
DEPENDENCY_TIMEOUT 下游依赖超时 查看 Trace、降级策略、重试配置
IDEMPOTENCY_CONFLICT 幂等冲突 检查 requestId 或 businessKey
INSUFFICIENT_STOCK 库存不足 不应重试,返回业务失败
DATA_INCONSISTENT 数据状态不一致 进入补偿或人工处理流程

Trace 要能关联业务实体

AI 排查订单问题时,应该能从 orderId 找到完整调用链、消息链、数据库变更和状态流转,而不是只能看到某一次 HTTP 请求。

flowchart TD
    A[告警: 支付成功但订单未更新] --> B[读取 Runbook]
    B --> C[查询最近发布]
    C --> D[按 orderId 查询 Trace]
    D --> E[检查 payment.succeeded 消息]
    E --> F[检查 Consumer Lag]
    F --> G[定位失败原因]
    G --> H[生成修复或补偿方案]
    H --> I[执行测试并提交 PR]

告警必须关联 Runbook

没有 Runbook 的告警,对 AI 来说只是噪音。每个告警都应该关联:

  • 可能原因;
  • 排查步骤;
  • 常用查询;
  • 风险等级;
  • 临时止血方式;
  • 长期修复建议;
  • 是否允许 AI 自动处理。

如果 AI 接到告警后可以读取上下文、查看最近发布、分析日志、查询 Trace、定位异常 Commit、生成修复 PR、跑测试并提交灰度方案,后端系统才接近无人值守工程闭环。

八、权限分级:AI Friendly 不能牺牲安全

AI Agent 可能需要读代码、查日志、跑测试、访问测试数据库、查询监控、读配置、操作分支和创建 PR。权限如果不分层,很容易制造事故。

合理的方式是建立分级权限模型。

等级 权限范围 适合任务
L0 只读代码和文档 问答、解释代码、影响面分析
L1 本地 Sandbox 修改代码和运行测试 补测试、低风险重构
L2 查询脱敏日志、测试库、监控指标 排障分析、性能定位
L3 创建 PR、触发 CI、生成灰度配置 中低风险开发任务
L4 在低风险服务上自动合并和发布 强测试覆盖、可快速回滚的服务
L5 执行生产修复动作 回滚、降级、扩容、切配置,必须预授权和强审计

AI Friendly 不是把权限全部交给 AI,而是在不同风险场景下给它刚好够用的权限。

数据安全也要单独设计:

  • 日志中的手机号、身份证、邮箱、地址、支付信息、Token、Cookie、密钥必须脱敏;
  • AI 不应该直接接触明文敏感数据;
  • 生产数据库查询默认只读,并限制行数、字段和时间窗口;
  • 所有生产查询都要审计;
  • 密钥、证书、生产配置必须通过 Secret Manager 管理,不能进入 Prompt、日志或代码生成上下文。

能力越强的 AI,越需要严格边界。能力弱的 AI 最多写错代码,能力强但权限失控的 AI 可能直接造成生产事故。

九、代码结构要可导航,让 AI 少猜路径

AI 修改代码的效率,很大程度取决于代码库是否可导航。一个 AI Friendly 的后端仓库,应该有稳定的目录约定、命名约定和分层约定。

典型结构可以这样组织:

order-service/
  src/main/java/
    controller/
    application/
    domain/
      model/
      service/
      state/
      event/
    infrastructure/
      repository/
      client/
      messaging/
      cache/
    config/
  src/test/
  docs/
    service-card.yaml
    domain-model.yaml
    runbook/

几个原则非常重要:

  • controller 只负责协议适配,不承载核心业务规则;
  • application 编排用例流程,不直接写复杂领域逻辑;
  • domain 放实体、状态机、不变量和领域服务;
  • infrastructure 封装数据库、缓存、消息和外部服务;
  • 外部依赖必须通过 client 封装,不能散落在业务代码里;
  • 每个消息 Topic 有明确 Producer 和 Consumer;
  • 每个配置项有说明、默认值和作用域;
  • 每张表有对应 Repository,避免 SQL 到处散落。

还要减少隐式魔法。复杂反射、动态代理、运行时拼接、隐式扫描、约定大于配置并不是不能用,但必须可解释、可追踪、可测试。AI 越容易找到正确入口,越不容易在错误层级乱改。

十、Docs as Code 与 Architecture as Code

文档如果不进入工程流程,迟早会腐化。AI Friendly 的文档应该遵循 Docs as Code:文档放在仓库里,和代码一起 Review、一起版本管理、一起参与 CI 检查。

常见约束包括:

代码变更 必须同步更新
新增接口 OpenAPI、IDL、接口说明、契约测试
新增数据库字段 Schema 文档、字段含义、迁移和回滚脚本
新增消息 Topic 消息契约、幂等 Key、重试和死信策略
新增配置项 默认值、作用域、是否支持热更新
新增领域状态 状态机、禁止路径、不变量测试
修改核心逻辑 Skill、Runbook、回归用例

CI 可以自动检查:新增 Controller 但没有更新接口文档,新增 Migration 但没有字段说明,新增 Consumer 但没有 Topic 文档,都应该阻止合并。

大型后端系统还需要 Architecture as Code。也就是把架构分层、服务归属、依赖方向、数据所有权、消息契约、核心链路、风险等级、发布边界等信息,用结构化文件维护,并让它们参与 CI/CD(Continuous Integration / Continuous Delivery,持续集成与持续交付)。

可以用这些文件承载规则:

  • architecture.yaml:业务域、服务分层、允许依赖方向;
  • ownership.yaml:每张表、每个 Topic、每个 API 的 Owner;
  • critical-path.yaml:核心链路、延迟预算、强依赖准入规则;
  • risk-policy.yaml:不同风险等级下 AI 能自动执行到哪一步;
  • release-policy.yaml:灰度、发布、回滚和审批规则。

这样,架构就不再只是 Wiki 或 PPT,而是 AI 能读取、CI 能校验、Harness 能执行的工程资产。

十一、从 Copilot 到 Coworker,再到 Operator

后端系统 AI Friendly 的建设,可以分成三个阶段。

阶段 AI 的角色 系统需要具备的能力
Copilot 辅助写代码、解释代码、补测试、生成文档 基本文档、代码规范、测试入口
Coworker 独立完成中低风险任务,生成 PR Service Card、Skill、领域模型、契约测试、CI 约束
Operator 参与线上值守、排障、回滚、复盘和 Runbook 沉淀 可观测性、权限分级、审计、自动灰度、回滚、安全策略

所谓无人值守开发,不是一步到位让 AI 接管生产,而是逐步扩大 AI 的可信半径。先让它在低风险、强验证的区域自动化,再逐步进入复杂系统和生产运维。

flowchart LR
    A[Copilot<br/>辅助编码] --> B[Coworker<br/>独立 PR]
    B --> C[Operator<br/>参与值守]
    A --> A1[代码规范<br/>测试入口]
    B --> B1[Service Card<br/>Skill<br/>领域模型]
    C --> C1[可观测性<br/>权限分级<br/>审计回滚]

十二、一条可落地的改造路线

团队不需要一开始就搭建宏大的 AI 平台。更现实的做法是选择一个中等复杂度、风险可控的业务域做试点,先把系统事实和验证机制补起来。

阶段 目标 产出
1 选择试点业务域 一个真实但可灰度、可回滚的服务群
2 建立最小 Architecture Map 业务域、核心链路、服务分层、依赖、数据 Owner
3 补齐 Service Card 服务职责、接口、数据、消息、测试、发布、回滚
4 梳理领域模型 核心实体、状态机、不变量、幂等规则
5 沉淀 5 到 10 个 Skill 新增接口、修 Bug、加字段、消费消息、排查告警
6 补测试和契约 覆盖核心链路和高频变更点
7 建立 AI PR 模板 变更说明、影响面、测试结果、风险点、回滚方案
8 把 CI 变成硬门槛 测试、文档检查、安全扫描、架构策略校验
9 接入只读可观测工具 日志、Trace、指标,必须脱敏、限权、审计
10 允许低风险自动 PR 先人工 Review,不自动合并
11 扩大范围 更多服务、更复杂任务、更高自动化级别

这条路线的关键不是追求“无人化”,而是追求“可验证”。只有每一步都能验证,自动化才有扩大范围的基础。

十三、AI Friendly 最终改变的是软件组织方式

AI Friendly 后端架构不是为了迎合 AI,而是为了让系统知识更清晰、工程流程更规范、风险控制更自动化。

一个真正适合 AI Agent 参与工程活动的后端系统,应该具备这些特征:

  • AI 能快速知道每个服务负责什么;
  • AI 能理解核心实体、状态机和业务不变量;
  • AI 能找到正确代码位置,而不是全局乱搜;
  • AI 能按照团队沉淀的 Skill 完成任务;
  • AI 能在受控 Harness 中修改、测试、提交;
  • AI 能通过自动化测试验证自己的改动;
  • AI 能读取脱敏后的运行态信息进行排障;
  • AI 的每一步操作都有权限边界和审计记录;
  • AI 生成的变更包含影响面分析、测试结果和回滚方案;
  • AI 在低风险场景中可以自动推进,在高风险场景中知道停止并请求人工决策。

即使暂时不引入 AI,这些改造也能提升团队效率:架构边界更清楚,文档更可信,测试更完整,排障更快,发布更安全。一旦 AI Agent 能力成熟,这些工程资产会决定团队能否把 AI Coding 从“代码生成工具”升级成真正的工程生产力系统。

未来的后端架构师不只要设计高并发、高可用、高扩展的系统,还要设计可被 AI 理解、可被 AI 修改、可被 AI 验证、可被 AI 运维的系统。


评论