从零搭建 AI Agent 调度中台(前言):给 AI 一个 prompt 能生成多少代码?

第 1 / 14 章
从零搭建 AI Agent 调度中台(前言):给 AI 一个 prompt 能生成多少代码?

一、我给 Cursor 写了一个 4000 字 prompt,拿到了 200+ Java 文件

2026 年春天的一个周六,我在 Cursor 里写了一份 4000 字的系统设计文档:技术栈、模块划分、接口规范、数据库 10 张表 DDL、编码规范——打包成一个完整的 prompt,丢给了 GPT-4o。

系统设计文档

三小时后,AI 吐出了:

  • 一个 Maven 父工程 + 8 个子模块 pom.xml(全部正确解析依赖版本)
  • 200+ Java 文件(controller/service/impl/mapper/entity/dto/vo/feign/config 完整分层)
  • 24 个 Vue 组件(前端 10 个页面 + VueFlow 工作流画布 + SSE 流式封装)
  • 26 个 Python 文件(FastAPI 编排层 + A2A 协议层)
  • 每个模块的 application.yml 配置、SQL 建表脚本、Docker Compose 中间件启动文件

我当时的反应和你一样:卧槽,这就能跑?

答案是:能跑 60%,剩下 40% 是半成品或者根本不能用。

这个系列要讲的,就是那剩下 40% 的故事——AI 生成的骨架到底哪里不行、怎么硬焊、哪些核心逻辑必须自己逐行写、以及最终怎么拼成一个能对外 demo 的企业级 AI Agent 调度中台。

二、AI 生成的骨架,哪些能用,哪些不能

先给你看一张表,这是我跑通整个项目之后的真实评估:

模块AI 生成质量我做了什么
父 pom + 8 个子模块骨架★★★★☆版本号微调(Sentinel 从 1.8.6 升到 1.8.8、Milvus SDK 2.4.11)
统一 Result 返回 + 全局异常 + 分页工具★★★★★几乎没改,直接用
MyBatis-Plus 实体 + Mapper + CRUD Service★★★★☆TenantContext 自动注入逻辑需要自己补(AI 生成的是注释掉的占位)
Feign Client + Fallback★★★★☆Fallback 里返回 Result.fail() 改成抛 BusinessException
WorkflowEngine(DAG 执行器)★★☆☆☆只有类定义和空方法体,Kahn 算法拓扑排序 + 8 种 NodeExecutor 全部自己写
RagRecallService(RAG 多路融合)★★☆☆☆AI 只写了"调用向量库搜索"一行注释,归一化公式 + 加权融合 + chunkId 去重全部自己写
Python orchestrator(Function Calling 深循环)★★★☆☆主框架有了,但 max_delegate_depth 护栏和消息拼装循环逻辑需要补
VueFlow 工作流画布(design.vue)★★★☆☆组件注册和拖拽逻辑有了,执行轮询和状态高亮是我补的
SSE fetch + ReadableStream 封装★★★★☆几乎没改,AI 写的比网上大多数示例都完整
Docker Compose★★★☆☆Nacos 和 Milvus 的端口映射不对,改了两处
Sentinel Gateway Adapter 配置★☆☆☆☆AI 用了 SCA 2022 版本的 starter-gateway 注解,2023 版本已废弃,全部推翻重写

三个核心模块——DAG 引擎、RAG 融合、双栈跨语言编排——是 AI 根本写不出来的。 这不是 AI 能力不够,而是这三个模块需要工程化上下文:Kahn 拓扑排序怎么适配 AI Agent 的条件分支、Milvus 和 ES 的分数怎么归一化到同一个值域、Python 怎么回调 Java 的内部端点而不是走公开 API——这些决策需要知道"这个模块在整个系统里的位置",而 AI 生成的代码是按文档逐条填的,不知道全局。

三、那为什么不直接用 Dify/Coze?

2026 年市面上至少 20 款 AI Agent 低代码平台,社区版免费、SaaS 版月费几十块。拖拖拽拽 5 分钟出效果。

但我在几个真实场景里发现了三个根本问题,这也是自研的唯一合理理由:

问题一:调度引擎是黑盒。 Dify 的 Agent 执行路径是框架内部硬编码的流程,你想在"LLM 回答之前"插一个"强制审核环节"?想在"工具调用失败之后"走"兜底重试+降级"?社区版没有扩展点,要改就得 fork 源码。而我们的自研 DAG 引擎,你看后面的章节会发现——加一个新节点类型,只需要继承 NodeExecutor 接口、在 NodeExecutorRegistry 里注册一行,10 行代码搞定。

问题二:RAG 召回是半成品。 Dify 有 RAG 模块,但只做了"向量召回"单路。生产上的真实问题:用户搜"2025 年房贷利率调整",向量相似度最高的片段可能来自一篇讲"2023 年房贷"的文章(语义相近但年份错了),而关键词"2025"的 BM25 分数高的片段反而排在后面。单路召回覆盖不了这个场景。我们的自研 RAG 做了 Milvus + ES 双路召回、各自归一化、加权融合、chunkId 去重——这一套在 Dify 社区版里是没有的。

问题三:没有 A2A 协议层。 谷歌 2025 年推出的 Agent2Agent 协议(JSON-RPC 2.0 + SSE 事件流),让 Agent 之间可以互相发现和委派。Dify 支持"多 Agent",但那是 Dify 内部的多 Agent,和外部平台(比如公司已有的 Python AI 服务)对接的时候,只能走 HTTP 硬编码调用。我们实现了完整的 A2A 协议层——AgentCard 发现、tasks/create/get/cancel、RedisEventQueue 异步状态存储。

选型决策表:

对比维度Dify/Coze 低代码平台本系列自研平台
调度引擎框架内部硬编码流程自研 Kahn 拓扑排序 DAG 执行器(逐行讲解源码)
RAG 召回单路向量Milvus 向量 + ES BM25 多路加权融合(有数学推导)
Agent 互操作内部多 Agent完整 A2A 协议实现(JSON-RPC 2.0 + SSE)
技术栈单栈(Python/Node.js)Java 业务底座 + Python AI 编排层双栈(跨语言架构设计)
可扩展性插件有限、源码难改8 种 NodeExecutor 策略模式、Feign 远程调用、Sentinel 熔断降级
适用场景快速 demo、轻量业务企业私有化、合规场景、已有微服务体系

一句话总结:如果你的需求是"今天搭个 demo 明天给老板看",用 Dify;如果你的需求是"私有化部署、全链路可控、和已有系统集成",就得自研。

对话旅程流程

四、一条对话的旅程:全系列的骨架

把一次用户提问拆成 10 步,这条链路就是后面十几章的目录:

用户提问
   │
   ▼
┌──────────────┐  ①鉴权+租户隔离  ┌──────────────┐
│  Gateway     │ ─────────────── │  Sys-Auth    │
│  统一入口网关 │                 │  Token校验   │
└──────┬───────┘                 │  Tenant透传   │
       │                         └──────────────┘
       │ ②加载Agent配置
       ▼
┌──────────────┐  ③Redis会话+滑动窗口  ┌──────────────┐
│  Agent-Core  │ ─────────────────── │  Redis       │
│  Agent调度器 │                     │  多轮对话历史 │
└──────┬───────┘                     └──────────────┘
       │ ④RAG前置召回
       ▼
┌──────────────┐          ┌──────────────┐
│  RAG-Knowledge│ ────────▶│  Milvus      │ ← 向量召回
│  多路融合     │          │  Elasticsearch│ ← BM25召回
└──────┬───────┘          └──────────────┘
       │ ⑤拼装Prompt + RAG片段
       ▼
┌──────────────┐  ⑥SSE流式输出  ┌──────────────┐
│  Model-Gateway│ ─────────────▶│  前端浏览器   │
│  多模型路由   │                │  打字机效果   │
└──────┬───────┘                └──────────────┘
       │ ⑦LLM返回Function Calling
       ▼
┌──────────────┐  ⑧工具执行  ┌──────────────┐
│  Tool-Plugin  │ ───────────▶│  HTTP/SQL    │
│  工具插件中心 │             │  外部接口     │
└──────┬───────┘             └──────────────┘
       │ ⑨工具结果回传LLM → 二次总结
       ▼
    ⑩最终回答存入会话 → 返回用户

如果用户用的是 DAG 工作流而不是单 Agent 对话,这条链路会被替换成:

前端 VueFlow 拖拽保存 DAG JSON
   │
   ▼
WorkflowEngine(自研 Kahn 拓扑排序执行器)
   │
   ├─ Start 节点 ──→ LLM 推理节点 ──→ RAG 召回节点 ──→ 条件分支节点
   │                                                    │
   │                                             true ──┴── false
   │                                              │         │
   │                                              ▼         ▼
   │                                        Tool 节点   Agent 节点
   │                                              │         │
   │                                              ▼         ▼
   │                                         End 节点 ◀────┘
   │
   └─ 执行中节点状态实时推送前端高亮(轮询 API)

后面每一章,都是这条链路上的一环。 我们不复制 Dify 的实现,而是从"为什么这个环节要这么设计"出发,逐行拆解核心代码——让你不仅能用,还能在面试中对着代码讲出设计取舍。

五、技术栈全景:每一项都选得有理由

自研平台的技术栈比低代码平台重得多,但每一项都不是"选了就选了"。

后端(Java 业务底座 + Python AI 编排层)

层组件版本选型理由
网关Spring Cloud Gateway4.xNacos 原生发现、Sentinel 熔断、鉴权前置
注册/配置Nacos2.3.x国内 Java 微服务事实标准、支持 namespace 隔离
限流/熔断Sentinel1.8.8比 Resilience4j 对网关更友好、QPS 限流直接配规则
ORMMyBatis-Plus3.5.5多租户拦截器 + 逻辑删除自动注入、比 JPA 灵活
数据库MySQL8.0事务型数据(Agent 配置、会话、工作流定义)
缓存Redis7.x会话存储 + Token 滑动窗口 + 分布式锁
向量库Milvus2.4生产级向量存储、支持 HNSW/IVF_FLAT 多种索引
全文检索Elasticsearch8.xBM25 关键词召回、和 Milvus 做 RAG 多路融合
文件存储MinIOlatest知识库文档(PDF/Word/TXT)私有化对象存储
异步队列RabbitMQ3.13文档向量化异步任务、削峰填谷
定时任务XXL-Job2.4过期会话清理、用量统计、向量重建
Python 编排层FastAPI + LangGraph0.115+/0.2+Function Calling 深循环、多 Agent 图编排、A2A 协议
跨语言调用Feign + HTTP—Java→Python 走 Feign,Python→Java 走 HTTP 回调端点

为什么是 8 个微服务 + 1 个 Python 服务,而不是单体?

两个理由:一是部署隔离的需求——Agent-Core 和 RAG-Knowledge 在某些合规场景下需要分别部署在不同机房;二是AI 层用 Python 的灵活性——Function Calling 深循环、LangGraph 图编排这些 AI 原生能力,Python 比 Java 写起来自然得多。Java 做它擅长的(鉴权、CRUD、事务、微服务治理),Python 做它擅长的(LLM 交互、Agent 编排、A2A 协议),两边通过 Feign + HTTP 回调打通。这不是过度设计——你在 ch05 会看到,双栈之间只有 5 个公开端点和 5 个回调端点,边界清晰到一眼就能画出来。

前端

组件版本选型理由
框架Vue 3 + TypeScript<script setup> 组合式 API、TS 类型安全
构建Vite 5比 Webpack 快 10 倍、HMR 即时刷新
UIElement Plus政企后台风格、与国内企业用户习惯对齐
工作流画布@vue-flow/core + dagre比 AntV G6 更轻、自定义节点组件注册灵活
状态管理PiniaVue 3 官方推荐、比 Vuex 简洁
图表ECharts大盘统计调用量/Token 消耗趋势
SSEfetch + ReadableStream原生实现、支持携带鉴权头(EventSource 不支持自定义头)

中间件依赖全景图

                  ┌─────────────┐
                  │  Nacos 2.3  │  ← 注册中心 + 配置中心
                  └──────┬──────┘
                         │服务发现
          ┌──────────────┼──────────────┐
          ▼              ▼              ▼
┌─────────────┐  ┌─────────────┐  ┌─────────────┐
│   Gateway   │  │  Python     │  │  XXL-Job    │
│   Spring    │  │  FastAPI    │  │  定时调度    │
│   Cloud     │  │  编排层      │  └─────────────┘
└──────┬──────┘  └──────┬──────┘
       │                │
       │Feign/HTTP回调  │
       ▼                │
┌─────────────────────────────────┐
│     Java 业务底座(7 微服务)     │
│                                 │
│  Sys-Auth  Agent-Core  Model-GW │
│  RAG-Knowledge  Tool-Plugin      │
│  Workflow  Task-Job             │
└────┬──────────┬──────────┬──────┘
     │          │          │
     ▼          ▼          ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ MySQL 8 │ │ Redis 7 │ │ RabbitMQ │
└─────────┘ └─────────┘ └────┬────┘
                              │
                     ┌────────┼────────┐
                     ▼        ▼        ▼
                ┌────────┐ ┌────────┐ ┌────────┐
                │ Milvus│ │  ES 8  │ │ MinIO  │
                └────────┘ └────────┘ └────────┘

六、全系列路线图(13 章)

章标题核心看点
00给 AI 一个 prompt 能生成多少代码?(本章)AI 辅助开发的真实评估、自研理由、架构全景、数据流骨架
01底座搭建:SpringCloud Alibaba + 8 个中间件串联Nacos namespace、Sentinel Gateway Adapter(AI 生成的废弃注解怎么改)、Feign 降级、Docker Compose 一键起
02Agent 对话主链路:从用户提问到 LLM 回答Redis 会话 + Token 滑动窗口裁剪 + Agent 配置加载 + Function Calling 闭环
03DAG 工作流引擎源码讲解(核心卖点一)Kahn 算法拓扑排序 + 8 种 NodeExecutor 策略分发 + agent_router 动态路由。AI 只给了空壳,153 行 WorkflowEngine.java 逐行讲解
04RAG 多路召回融合数学推导(核心卖点二)Milvus 向量 + ES BM25 → 归一化 → 加权融合 → chunkId 去重。AI 只给了注释,173 行 RagRecallService.java 逐行讲解
05Java + Python 双栈架构设计(核心卖点三)职责边界表、跨语言 Feign 调用、Python 回调 Java、A2A 协议双端实现。架构图+接口契约
06Function Calling 深循环:Python 编排层的不限轮次实现delegate_agent() 递归委派 + max_delegate_depth 护栏 + 消息拼装循环
07A2A 协议实现:JSON-RPC 2.0 + SSE 事件流AgentCard 发现、tasks/create/get/cancel、RedisEventQueue 异步状态存储
08模型网关:多模型路由 + 限流熔断 + Token 统计OpenAI 兼容接口封装、Sentinel 熔断兜底、用量日志入库
09工具插件:Function Calling 的 HTTP/SQL 执行器ToolMetaDTO + JSON Schema 入参、租户+Agent 白名单校验
10前端 VueFlow 画布:拖拽 + 自动布局 + 执行高亮自定义 FlowNode 注册、dagre 拓扑布局、执行轮询、SSE fetch+ReadableStream
11多租户隔离:TenantContext + 拦截器 + MyBatis-Plus 自动注入ThreadLocal、全局拦截器、SQL 自动拼接 tenant_id
12部署上线:Docker Compose 10 容器一键启动混合镜像、启动顺序、健康检查、常见故障排查
13面试总纲 30 题DAG 引擎 8 题、RAG 融合 5 题、双栈架构 4 题、Function Calling 3 题、A2A 协议 3 题、微服务治理 4 题、模型网关 3 题

七、读者画像与预期收获

这个系列写给谁?

  • Java 后端开发者,想进军 AI 应用开发但不知道从哪里开始
  • 技术负责人,需要判断"AI 平台自研 vs 采购"的决策依据
  • 应届毕业生,想在简历上写一个"不是 2023 年淘汰项目"的简历项目
  • 正在用 AI 辅助编程但发现生成代码"能跑但不好用"的开发者——AI 生成 vs 自己硬焊的边界,这个系列会给你一个清晰的答案

学完能带走什么?

  1. 三个能背三分钟的核心代码:WorkflowEngine.java(DAG 执行器)、RagRecallService.java(RAG 融合)、orchestrator.py(Function Calling 深循环)
  2. 一套能直接复用的微服务骨架:父 pom、统一 Result 返回、Feign 降级模板、TenantContext 自动注入
  3. 一篇面试项目描述:100 字版、300 字版、1000 字 deep-dive 版
  4. 一份技术选型清单:每个中间件的版本、为什么选它、常见坑
  5. 一个 AI 辅助开发的方法论:哪些模块 AI 能写好、哪些必须自己硬焊、怎么组织 prompt 让 AI 输出更像"人写的"

不能承诺什么?

  • 不做 K8s 部署(用 Docker Compose 单机演示)
  • 不做 Embedding 本地训练(调用第三方 API)
  • 不做计费系统(只做 Token 用量记录)
  • 不做前端低代码表单(VueFlow 只做工作流画布)

八、关于"复刻"的诚实说明

你可能已经注意到了——这个项目根目录里有一个文件名很直白的文档:《复刻亚信渊思 AAP 简易智能体调度平台全栈开发交付文档》,内容就是那份给 AI 的 4000 字 prompt。

所以准确的说法是:

这个项目是 AI 辅助生成骨架 + 人工硬焊核心模块的产物。 AI 帮我们跳过了"搭骨架、写 CRUD、配 yml"这些机械劳动(这部分约占总量的 60%),省下来的时间花在了三个 AI 写不出来的核心模块上:DAG 执行器、RAG 融合、双栈跨语言编排(这部分约占总量的 30%),剩下 10% 是各种细节修补(版本号调整、废弃注解替换、端口映射修正)。

市面上有两类技术教程:源码解读类(分析开源项目源码)和从零搭建类(全部自己写)。这个系列是第三类——AI 帮你搭好脚手架,你负责把承重结构焊死。这比"从零写"真实(符合你我今天的开发方式),也比"读源码"实用(你能拿走代码直接改)。

准备好了吗?下一章,我们从底座搭建开始:Nacos、Sentinel、Feign、RabbitMQ、MinIO、Milvus、ES、XXL-Job,8 个中间件 + 7 个微服务,Docker Compose 一键拉起——顺便把 AI 生成的 Sentinel 废弃注解改成 SCA 2023 版本的正确写法。