Day 1 学习笔记:搭建第一个 AI 服务雏形
今日目标
完成 AI 学习的第一步,不再停留在“看概念”,而是亲手搭建一个最小可运行的 Python + FastAPI 服务,为后续学习 AI Agent 打基础。
今日完成内容
1. 环境安装
今天完成了基础开发环境准备:
安装 Python 3.12 安装 VS Code 安装 uv创建项目目录 ai-agent-roadmap
项目目录建议结构:
ounter(lineounter(lineounter(lineounter(lineounter(lineai-agent-roadmap/├── apps/├── notes/├── prompts/└── projects/
2. 使用 uv 创建 Python 环境
执行命令:
ounter(lineounter(lineounter(lineounter(lineuv python install 3.12uv venv --python 3.12source .venv/bin/activatepython --version
作用:
安装指定版本 Python 创建虚拟环境 激活虚拟环境 确认 Python 版本是否正确
3. 安装项目依赖
执行命令:
ounter(lineuv pip install fastapi uvicorn pydantic httpx python-dotenv
依赖说明:
fastapi:构建 Web API 服务uvicorn:运行 FastAPI 服务pydantic:定义和校验请求参数httpx:后续调用外部 API 时使用python-dotenv:后续读取.env配置文件
4. 编写第一个 FastAPI 服务
文件路径:
ounter(lineapps/chat_service.py
代码如下:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(linefrom fastapi import FastAPIfrom pydantic import BaseModelapp = FastAPI()class ChatRequest(BaseModel):message: str@app.get("/health")def health():return {"status": "ok"}@app.post("/chat")def chat(req: ChatRequest):return {"user_input": req.message,"reply": f"你刚刚说的是:{req.message}。这是你的第一个 AI 服务雏形。"}
启动服务
在项目根目录执行:
ounter(lineuv run uvicorn apps.chat_service:app --reload --port 8001
启动成功后访问:
ounter(linehttp://127.0.0.1:8001/docs
可以在 Swagger 文档页面直接测试接口。
测试结果
1. 健康检查接口
接口:
ounter(lineGET /health
返回示例:
ounter(lineounter(lineounter(line{"status": "ok"}
2. 聊天接口
接口:
ounter(linePOST /chat
请求体:
ounter(lineounter(lineounter(line{"message": "你好,我在学习 AI Agent"}
返回结果:
ounter(lineounter(lineounter(lineounter(line{"user_input": "你好,我在学习 AI Agent","reply": "你刚刚说的是:你好,我在学习 AI Agent。这是你的第一个 AI 服务雏形。"}
说明:
接口已经可以接收用户输入 接口已经可以返回结构化 JSON 第一个“AI 服务外壳”已经成功运行
今天遇到的问题与解决过程
问题 1:ModuleNotFoundError: No module named 'apps'
原因
启动命令是在 apps 目录下执行的,但使用了:
ounter(lineuv run uvicorn apps.chat_service:app --reload
这会导致 Python 以当前目录为根查找模块,从而找不到顶层 apps 包。
解决方法
回到项目根目录执行:
ounter(lineounter(linecd ..uv run uvicorn apps.chat_service:app --reload --port 8001
问题 2:[Errno 48] Address already in use
原因
之前启动的 Uvicorn 进程没有完全退出,占用了 8000 端口。
解决方法
直接换端口:
ounter(lineuv run uvicorn apps.chat_service:app --reload --port 8001
今天学到的核心知识
1. FastAPI 是什么
FastAPI 是一个 Python Web 框架,用来快速构建接口服务。
后续做 AI Agent、RAG、工作流编排时,通常都需要一个后端服务壳子,FastAPI 很适合做这个入口。
2. Pydantic 是什么
Pydantic 用来定义请求参数结构,并自动做数据校验。
例如:
ounter(lineounter(lineclass ChatRequest(BaseModel):message: str
这表示:
请求体必须有 messagemessage必须是字符串
3. Uvicorn 是什么
Uvicorn 是运行 FastAPI 的服务进程。
没有它,FastAPI 代码只是一个 Python 文件,不能真正启动成 Web 服务。
4. 什么是“服务”
今天第一次真正接触了“服务化”开发:
不是只写一个脚本 而是让程序以接口形式运行 可以通过浏览器、接口文档、curl 请求来调用
这是一切 AI 工程化能力的基础。
今天最重要的认知
今天虽然还没有接入真正的大模型,但已经完成了最重要的一步:
从“学概念”切换到了“做系统”。
真正的 AI Agent 工程师,不只是会调用模型接口,而是要会:
搭服务 设计接口 管理状态 调试问题 逐步扩展功能
今天做的这个最小服务,就是之后所有 Agent 项目的起点。
今日产出
今天的交付物:
成功安装 Python / VS Code / uv 成功创建虚拟环境 成功安装 FastAPI 相关依赖 成功编写并运行第一个 API 服务 成功解决模块路径问题 成功解决端口占用问题 成功返回第一个结构化接口结果
我自己的理解
今天最直观的感受是:
AI 学习不能只看文章和教程 一旦开始真正写代码,很多概念会立刻具体起来 FastAPI 服务是后续 Agent 项目的基础外壳 解决报错的过程本身就是学习的一部分 第一天最重要的不是“懂很多”,而是“跑起来”
明天要做什么
下一步学习方向:
给服务加入 session_id实现多轮对话记忆 加入固定角色设定(system prompt) 逐步升级为本地假数据版 Agent
Day 1 总结
今天完成了从 0 到 1 的第一步:
我已经成功搭建了第一个本地 AI 服务雏形。
虽然它现在只是一个最简单的接口,但它代表着:
我已经进入实际工程学习阶段 我已经开始理解 AI 应用的服务化结构 我已经具备继续做 Agent 项目的基础
这是 AI 学习真正开始的一天。
夜雨聆风