系列Java工程师转AI Agent 3个月学习计划作者宸丶一| 28岁Java程序员规划狂魔周六加班还在学AI今日目标用 FastAPI 把 Agent 包装成 HTTP 服务了解 Docker 部署个人格言代码改不改变世界我不知道但先让我准时下班。前言大家好我是宸一一个28岁的Java程序员。今天是第7天主题是FastAPI Docker 部署入门。先说结论今天是学AI以来最轻松的一天。为啥因为 FastAPI 就是 Python 版的 Spring BootAPI 开发的思路和我日常工作一模一样。除了 Docker 那块稍微新一点其他基本就是换个语法。周六加班日轻量完成不硬卷。一、今日学习路线01_fastapi_basics.pyFastAPI 基础02_fastapi_agent.pyAgent 包装成 APItest_api.py接口测试Dockerfile容器化配置核心转变Day 6脚本 用户 → python xxx.py → input() → print() → 用户 只有你自己能用 Day 7服务 用户A ──→ HTTP 请求 ──→ FastAPI ──→ Agent ──→ 响应 ──→ 用户A 用户B ──→ HTTP 请求 ──→ ↑ ──→ ──→ ──→ 用户B 用户C ──→ HTTP 请求 ──→ │ ──→ ──→ ──→ 用户C 24小时运行从脚本变成服务这是质的飞跃。二、FastAPI Python 的 Spring Boot2.1 用后端思维理解作为Java后端看到 FastAPI 的第一反应是这不就是 Spring Boot 吗功能Spring BootFastAPI创建应用SpringBootApplicationapp FastAPI()定义接口GetMappingapp.get请求参数RequestParam函数参数请求体RequestBodyPydantic Model数据验证Bean ValidationPydantic启动服务java -jaruvicornAPI 文档Swagger要配置自动生成/docs零配置配置文件application.yml.env一模一样就是换了个语法。2.2 核心代码fromfastapiimportFastAPIfrompydanticimportBaseModel# 创建应用 SpringBootApplicationappFastAPI()# 数据模型 DTO/VOclassChatRequest(BaseModel):message:strhistory:list[]# 定义接口 Controller PostMappingapp.post(/chat)asyncdefchat(request:ChatRequest):# 处理逻辑...return{reply:你好}app.get(/health)asyncdefhealth():return{status:healthy}Java 程序员看这段代码零障碍。2.3 最香的一点自动 API 文档启动服务后访问 http://localhost:8000/docs → 自动生成 Swagger UI → 所有接口一目了然 → 可以直接在页面上测试 → 零配置零代码Spring Boot 要集成 Swagger 还得加依赖、写配置。FastAPI 开箱即用这点真的香。三、把 Agent 包装成 API3.1 接口设计POST /chat → 聊天接口核心 GET /health → 健康检查 GET /tools → 查看可用工具 GET / → 服务信息标准的 RESTful 设计和 Java 项目一模一样。3.2 聊天接口实现app.post(/chat)asyncdefchat(request:ChatRequest):# 1. 构建消息messagesbuild_messages(request.message,request.history)# 2. 调用 Agentresponseawaitagent.chat(messages)# 3. 返回结果return{reply:response,timestamp:datetime.now().isoformat()}这不就是 Controller 调 Service 吗换了个语法而已。3.3 测试结果 测试1根路径 → 200 ✅ 测试2健康检查 → 200 ✅ 测试3工具列表 → 200 ✅ 测试4.1打招呼 → 200 ✅ 你好我是小助手 测试4.2查天气 → 200 ✅ 北京今天晴天25°C 测试4.3算数学 → 200 ✅ 1527×3 96 测试4.4查时间 → 200 ✅ 2026年6月6日13点44分 测试4.5搜索知识 → 200 ✅ Python是一种高级编程语言 测试5带历史的聊天 → 200 ✅ 是的你叫老刘我记得 测试6API 文档 → 200 ✅ ✅ 所有测试通过6个测试全部一次通过周六加班日的效率奇迹。四、踩坑记录4.1 GET 访问 POST 接口 → 405在浏览器直接敲 http://localhost:8000/chat 返回405 Method Not Allowed原因/chat是app.post定义的浏览器地址栏默认是 GET 请求。解决去/docs页面用 Swagger UI 测试或者用test_api.py脚本。Java 同学注意这和 Spring Boot 的行为完全一样PostMapping的接口用 GET 访问也是 405。4.2 uvicorn 热重载重复打印INFO: Will watch for changes in these directories: [...] ✅ 1. FastAPI 应用创建成功 ✅ 2. 数据模型定义完成 ✅ 3. 路由定义完成 ✅ 1. FastAPI 应用创建成功 ← 又打印了一遍 ✅ 2. 数据模型定义完成 ← 又打印了一遍原因uvicorn 的StatReload会监听文件变化自动重启服务。启动时会加载两次。影响不影响功能只是日志看着多。生产环境用--reload关掉就行。五、Docker 标准化的部署方式5.1 Dockerfile 长啥样FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY . . CMD [uvicorn, 02_fastapi_agent:app, --host, 0.0.0.0, --port, 8000]就这几行没了。用 Java 思维理解FROM python:3.11-slim→ 选择 JDK 版本COPY requirements.txtRUN pip install→mvn dependency:resolveCOPY . .→ 复制代码CMD [...]→java -jar app.jar5.2 Docker 解决了什么问题没有 Docker 在我电脑上能跑啊 ← 经典问题 Python版本不一致 → 依赖冲突 → 路径不同 → 各种坑 有了 Docker 打包成镜像 → 任何地方都能跑 环境一致 → 依赖固定 → 配置统一 → 省心本质Docker 把我电脑上能跑变成任何电脑上都能跑。5.3 常用命令就这几个dockerbuild-tagent-api.# 构建镜像 mvn packagedockerrun-p8000:8000 agent-api# 运行容器 java -jardockerps# 查看运行中的容器dockerlogscontainer_id# 查看日志dockerstopcontainer_id# 停止容器5个命令覆盖90%的日常使用。不复杂就是得多练。六、用后端思维总结概念Java 对应本例实现FastAPISpring Boot创建 Web 应用app.getGetMapping定义 GET 接口app.postPostMapping定义 POST 接口Pydantic ModelRequestBody Bean Validation请求数据验证uvicornTomcatASGI 服务器/docsSwagger UI自动 API 文档Dockerfilepom.xml 启动脚本容器化配置docker buildmvn package构建镜像docker runjava -jar运行容器七、今日收获7.1 核心公式Day 7 FastAPI Docker FastAPI 应用 FastAPI() 接口 app.get / app.post 数据 Pydantic Model 文档 自动生成 /docs Docker 镜像 docker build 容器 docker run 部署 标准化 可移植7.2 最大的感受今天是回家的一天。Day 1-3Python 基础 → 换语法有点陌生 Day 4函数调用 → 新概念需要理解 Day 5手写 Agent → 踩坑但学到最多 Day 6LangChain → 框架有 Breaking Change Day 7FastAPI Docker → 回到 Web 开发熟悉的感觉作为Java后端API开发是日常。FastAPI 让我感觉回到了舒适区。但舒适不代表没学到东西。今天学到的是Python 的 Web 框架和 Java 思路一样但更简洁Docker 不复杂就是几条命令从脚本到服务是质的飞跃7.3 学习路线的节奏前6天新知识密集每天都有新概念 第7天回到熟悉的领域巩固 部署 这种节奏很好 前面学新东西 → 后面用熟悉的方式落地 不会一直高压也不会一直舒适八、明日计划Day 8主题真实 API 接入 Prompt 工程基础前面7天用的都是假数据硬编码的天气、知识库 是时候接真正的 AI 了 计划 - 把 Agent 接入小米 MiMo API变成真正能对话的 AI - 学 Prompt 工程基础system prompt 怎么写、temperature 参数是什么 - 动手写一个角色扮演Agent - 对比不同 prompt 的效果一句话总结FastAPI 是 Python 的 Spring BootDocker 是标准化的部署方式。Day 7 是回家的一天——Java后端搞API闭着眼都能写。但别因为熟悉就跳过从脚本到服务这个转变值得认真理解。系列进度Day 7 / 90学习节奏周六加班日轻量完成下一阶段接入真实 API告别硬编码假数据
Day 7:FastAPI + Docker——Java后端的“回家“时刻
发布时间:2026/6/7 1:38:29
系列Java工程师转AI Agent 3个月学习计划作者宸丶一| 28岁Java程序员规划狂魔周六加班还在学AI今日目标用 FastAPI 把 Agent 包装成 HTTP 服务了解 Docker 部署个人格言代码改不改变世界我不知道但先让我准时下班。前言大家好我是宸一一个28岁的Java程序员。今天是第7天主题是FastAPI Docker 部署入门。先说结论今天是学AI以来最轻松的一天。为啥因为 FastAPI 就是 Python 版的 Spring BootAPI 开发的思路和我日常工作一模一样。除了 Docker 那块稍微新一点其他基本就是换个语法。周六加班日轻量完成不硬卷。一、今日学习路线01_fastapi_basics.pyFastAPI 基础02_fastapi_agent.pyAgent 包装成 APItest_api.py接口测试Dockerfile容器化配置核心转变Day 6脚本 用户 → python xxx.py → input() → print() → 用户 只有你自己能用 Day 7服务 用户A ──→ HTTP 请求 ──→ FastAPI ──→ Agent ──→ 响应 ──→ 用户A 用户B ──→ HTTP 请求 ──→ ↑ ──→ ──→ ──→ 用户B 用户C ──→ HTTP 请求 ──→ │ ──→ ──→ ──→ 用户C 24小时运行从脚本变成服务这是质的飞跃。二、FastAPI Python 的 Spring Boot2.1 用后端思维理解作为Java后端看到 FastAPI 的第一反应是这不就是 Spring Boot 吗功能Spring BootFastAPI创建应用SpringBootApplicationapp FastAPI()定义接口GetMappingapp.get请求参数RequestParam函数参数请求体RequestBodyPydantic Model数据验证Bean ValidationPydantic启动服务java -jaruvicornAPI 文档Swagger要配置自动生成/docs零配置配置文件application.yml.env一模一样就是换了个语法。2.2 核心代码fromfastapiimportFastAPIfrompydanticimportBaseModel# 创建应用 SpringBootApplicationappFastAPI()# 数据模型 DTO/VOclassChatRequest(BaseModel):message:strhistory:list[]# 定义接口 Controller PostMappingapp.post(/chat)asyncdefchat(request:ChatRequest):# 处理逻辑...return{reply:你好}app.get(/health)asyncdefhealth():return{status:healthy}Java 程序员看这段代码零障碍。2.3 最香的一点自动 API 文档启动服务后访问 http://localhost:8000/docs → 自动生成 Swagger UI → 所有接口一目了然 → 可以直接在页面上测试 → 零配置零代码Spring Boot 要集成 Swagger 还得加依赖、写配置。FastAPI 开箱即用这点真的香。三、把 Agent 包装成 API3.1 接口设计POST /chat → 聊天接口核心 GET /health → 健康检查 GET /tools → 查看可用工具 GET / → 服务信息标准的 RESTful 设计和 Java 项目一模一样。3.2 聊天接口实现app.post(/chat)asyncdefchat(request:ChatRequest):# 1. 构建消息messagesbuild_messages(request.message,request.history)# 2. 调用 Agentresponseawaitagent.chat(messages)# 3. 返回结果return{reply:response,timestamp:datetime.now().isoformat()}这不就是 Controller 调 Service 吗换了个语法而已。3.3 测试结果 测试1根路径 → 200 ✅ 测试2健康检查 → 200 ✅ 测试3工具列表 → 200 ✅ 测试4.1打招呼 → 200 ✅ 你好我是小助手 测试4.2查天气 → 200 ✅ 北京今天晴天25°C 测试4.3算数学 → 200 ✅ 1527×3 96 测试4.4查时间 → 200 ✅ 2026年6月6日13点44分 测试4.5搜索知识 → 200 ✅ Python是一种高级编程语言 测试5带历史的聊天 → 200 ✅ 是的你叫老刘我记得 测试6API 文档 → 200 ✅ ✅ 所有测试通过6个测试全部一次通过周六加班日的效率奇迹。四、踩坑记录4.1 GET 访问 POST 接口 → 405在浏览器直接敲 http://localhost:8000/chat 返回405 Method Not Allowed原因/chat是app.post定义的浏览器地址栏默认是 GET 请求。解决去/docs页面用 Swagger UI 测试或者用test_api.py脚本。Java 同学注意这和 Spring Boot 的行为完全一样PostMapping的接口用 GET 访问也是 405。4.2 uvicorn 热重载重复打印INFO: Will watch for changes in these directories: [...] ✅ 1. FastAPI 应用创建成功 ✅ 2. 数据模型定义完成 ✅ 3. 路由定义完成 ✅ 1. FastAPI 应用创建成功 ← 又打印了一遍 ✅ 2. 数据模型定义完成 ← 又打印了一遍原因uvicorn 的StatReload会监听文件变化自动重启服务。启动时会加载两次。影响不影响功能只是日志看着多。生产环境用--reload关掉就行。五、Docker 标准化的部署方式5.1 Dockerfile 长啥样FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY . . CMD [uvicorn, 02_fastapi_agent:app, --host, 0.0.0.0, --port, 8000]就这几行没了。用 Java 思维理解FROM python:3.11-slim→ 选择 JDK 版本COPY requirements.txtRUN pip install→mvn dependency:resolveCOPY . .→ 复制代码CMD [...]→java -jar app.jar5.2 Docker 解决了什么问题没有 Docker 在我电脑上能跑啊 ← 经典问题 Python版本不一致 → 依赖冲突 → 路径不同 → 各种坑 有了 Docker 打包成镜像 → 任何地方都能跑 环境一致 → 依赖固定 → 配置统一 → 省心本质Docker 把我电脑上能跑变成任何电脑上都能跑。5.3 常用命令就这几个dockerbuild-tagent-api.# 构建镜像 mvn packagedockerrun-p8000:8000 agent-api# 运行容器 java -jardockerps# 查看运行中的容器dockerlogscontainer_id# 查看日志dockerstopcontainer_id# 停止容器5个命令覆盖90%的日常使用。不复杂就是得多练。六、用后端思维总结概念Java 对应本例实现FastAPISpring Boot创建 Web 应用app.getGetMapping定义 GET 接口app.postPostMapping定义 POST 接口Pydantic ModelRequestBody Bean Validation请求数据验证uvicornTomcatASGI 服务器/docsSwagger UI自动 API 文档Dockerfilepom.xml 启动脚本容器化配置docker buildmvn package构建镜像docker runjava -jar运行容器七、今日收获7.1 核心公式Day 7 FastAPI Docker FastAPI 应用 FastAPI() 接口 app.get / app.post 数据 Pydantic Model 文档 自动生成 /docs Docker 镜像 docker build 容器 docker run 部署 标准化 可移植7.2 最大的感受今天是回家的一天。Day 1-3Python 基础 → 换语法有点陌生 Day 4函数调用 → 新概念需要理解 Day 5手写 Agent → 踩坑但学到最多 Day 6LangChain → 框架有 Breaking Change Day 7FastAPI Docker → 回到 Web 开发熟悉的感觉作为Java后端API开发是日常。FastAPI 让我感觉回到了舒适区。但舒适不代表没学到东西。今天学到的是Python 的 Web 框架和 Java 思路一样但更简洁Docker 不复杂就是几条命令从脚本到服务是质的飞跃7.3 学习路线的节奏前6天新知识密集每天都有新概念 第7天回到熟悉的领域巩固 部署 这种节奏很好 前面学新东西 → 后面用熟悉的方式落地 不会一直高压也不会一直舒适八、明日计划Day 8主题真实 API 接入 Prompt 工程基础前面7天用的都是假数据硬编码的天气、知识库 是时候接真正的 AI 了 计划 - 把 Agent 接入小米 MiMo API变成真正能对话的 AI - 学 Prompt 工程基础system prompt 怎么写、temperature 参数是什么 - 动手写一个角色扮演Agent - 对比不同 prompt 的效果一句话总结FastAPI 是 Python 的 Spring BootDocker 是标准化的部署方式。Day 7 是回家的一天——Java后端搞API闭着眼都能写。但别因为熟悉就跳过从脚本到服务这个转变值得认真理解。系列进度Day 7 / 90学习节奏周六加班日轻量完成下一阶段接入真实 API告别硬编码假数据