airsmodel / 课件_v0.0.1.md
tanbushi's picture
update
f036bb3

PPT 课件:用 Transformers 部署 Gemma 小模型

版本: v0.0.1
用途: 视频录制
时长: 约 30 分钟
难度: 小白友好


幻灯片 1:封面

标题:手把手教程:用 Transformers 部署 Gemma 小模型

副标题:从本地到云端,打造你的 AI 函数调用服务

内容

  • 讲师:[你的名字]
  • 日期:2026-01-01
  • 版本:v0.0.1

视觉建议

  • 背景:简洁的技术风
  • 配图:Gemma 模型图标 + FastAPI logo
  • 配色:蓝色系(科技感)

幻灯片 2:课程目标(1分钟)

学习目标

  1. ✅ 理解 Transformers 部署原理
  2. ✅ 掌握 FastAPI 项目结构
  3. ✅ 学会 Prompt 调试技巧
  4. ✅ 完成从 0 到部署的全流程

学完能做什么

  • 部署自己的 AI 模型服务
  • 测试 HuggingFace 海量模型
  • 快速验证 AI 想法

视觉建议

  • 3 个图标:代码、部署、测试
  • 每个目标配一个小图标

幻灯片 3:为什么选择这个方案?(2分钟)

问题场景

想用 AI 做函数调用,但:
- Ollama 模型太少 ❌
- 付费 API 太贵 ❌
- 部署太复杂 ❌

我们的方案

Transformers + FastAPI + HuggingFace Space
✅ 支持海量模型
✅ 本地免费测试
✅ 云端免费部署
✅ OpenAI 兼容

视觉建议

  • 左边:问题(红色 ❌)
  • 右边:解决方案(绿色 ✅)
  • 中间:箭头连接

幻灯片 4:技术栈介绍(2分钟)

核心组件

  1. Transformers - 模型加载和推理
  2. FastAPI - Web 服务框架
  3. Gemma-270M - 轻量级函数调用模型
  4. HuggingFace Space - 免费云部署

为什么选 Gemma-270M

  • 够小:1GB,免费资源跑得动
  • 够用:专门训练做函数调用
  • 够快:响应时间可接受

视觉建议

  • 4 个卡片,每个组件一个
  • 配对应 logo

幻灯片 5:项目结构概览(1分钟)

my_gemma_service/
├── .env                    # 配置文件
├── app.py                  # 主程序(50行)
├── utils/
│   ├── chat_request.py     # 请求验证(10行)
│   ├── chat_response.py    # 响应生成(50行)
│   └── model.py            # 模型管理(60行)
├── requirements.txt        # 依赖
├── Dockerfile             # 部署用
└── my_model_cache/        # 模型缓存

总代码量:约 170 行

视觉建议

  • 树状结构图
  • 用不同颜色区分文件类型

幻灯片 6:环境准备(2分钟)

安装命令

# 1. 检查 Python
python --version  # 需要 3.9+

# 2. 安装依赖
pip install fastapi uvicorn[standard] \
    transformers torch accelerate \
    python-dotenv python-multipart \
    huggingface_hub

创建项目

mkdir my_gemma_service
cd my_gemma_service
mkdir utils
touch .env app.py utils/__init__.py

视觉建议

  • 分步演示终端操作
  • 每步配截图

幻灯片 7:配置文件(1分钟)

.env 文件

# 模型名称,可以修改为其他模型
DEFAULT_MODEL_NAME="unsloth/functiongemma-270m-it"

为什么用 .env

  • 集中管理配置
  • 方便切换模型
  • 避免硬编码

视觉建议

  • 代码高亮显示
  • 旁边配解释

幻灯片 8:模型管理模块(3分钟)

功能

  • 检查模型是否存在
  • 下载模型
  • 初始化 pipeline

代码演示

# utils/model.py
from pathlib import Path
from transformers import pipeline, AutoTokenizer

def check_model(model_name):
    cache_dir = "./my_model_cache"
    model_path = Path(cache_dir) / f"models--{model_name.replace('/', '--')}"
    snapshot_path = model_path / "snapshots"
    
    if snapshot_path.exists() and any(snapshot_path.iterdir()):
        return model_name, cache_dir, True
    return model_name, cache_dir, False

视觉建议

  • 代码分块显示
  • 用箭头标注数据流

幻灯片 9:Prompt 调试技巧(3分钟)

我的 Prompt

写一个 Python 模块,检查 HuggingFace 模型是否已下载。
如果不存在,提示用户下载。
使用 transformers 库。

AI 第一次回复的问题

  • ❌ 没有错误处理
  • ❌ 没有详细日志
  • ❌ 返回值太简单

优化后的 Prompt

改进 check_model 函数:
1. 返回 (model_name, cache_dir, success) 三元组
2. 打印详细的检查过程
3. 如果模型不存在,提示用户如何下载
4. 添加 try-catch 处理异常

视觉建议

  • 左右对比:Prompt 优化前后
  • 用红色标注问题,绿色标注改进

幻灯片 10:真实调试过程(4分钟)

测试命令

python -c "from utils.model import check_model; print(check_model('unsloth/functiongemma-270m-it'))"

第一次报错

ImportError: No module named 'transformers'

解决

pip install transformers

第二次报错

FileNotFoundError: 模型不存在

解决

# 先下载模型
curl -X POST "http://localhost:7860/download" \
  -d '{"model": "unsloth/functiongemma-270m-it"}'

视觉建议

  • 终端截图展示报错
  • 用红色标注错误信息
  • 用绿色标注解决方案

幻灯片 11:聊天请求模块(2分钟)

功能:验证和解析请求参数

代码

# utils/chat_request.py
from pydantic import BaseModel
from typing import List, Optional, Dict, Any

class ChatRequest(BaseModel):
    model: Optional[str] = "unsloth/functiongemma-270m-it"
    messages: List[Dict[str, Any]]
    max_tokens: Optional[int] = None
    temperature: Optional[float] = 1.0

为什么用 Pydantic

  • 自动验证参数
  • 类型安全
  • 自动生成文档

视觉建议

  • 代码 + 解释
  • 配 Pydantic logo

幻灯片 12:聊天响应模块(4分钟)

核心挑战:处理 Gemma 的特殊返回格式

Gemma 返回格式

{
  "generated_text": [
    {"role": "user", "content": "你好"},
    {"role": "assistant", "content": "你好!我是助手"}
  ]
}

我们需要提取

"你好!我是助手"

调试过程

# 问题:如何提取 assistant 的内容?
# 方案1:字符串分割
content = text.split("assistant:")[-1]

# 方案2:正则表达式(更精确)
import re
content = re.search(r'assistant:\s*(.*)', text, re.DOTALL).group(1)

视觉建议

  • 数据流图:输入 → 处理 → 输出
  • 用动画展示提取过程

幻灯片 13:主程序 app.py(3分钟)

三大核心

  1. 全局变量:存储模型状态
  2. Startup 事件:自动加载模型
  3. 三个路由:状态、下载、聊天

代码结构

# 全局状态
model_name = None
pipe = None
tokenizer = None

# 启动事件
@app.on_event("startup")
async def startup_event():
    # 加载模型...

# 路由
@app.get("/")
@app.post("/download")
@app.post("/v1/chat/completions")

视觉建议

  • 架构图:展示组件关系
  • 用虚线框标注全局变量

幻灯片 14:完整代码演示(5分钟)

分文件手写

  1. .env(30秒)
  2. utils/model.py(1.5分钟)
  3. utils/chat_request.py(30秒)
  4. utils/chat_response.py(1.5分钟)
  5. app.py(1分钟)

手写原则

  • 一行一行敲
  • 边敲边解释
  • 遇到问题现场调试

视觉建议

  • 录屏演示:真实手写过程
  • 每行代码配解释

幻灯片 15:本地测试(3分钟)

启动服务

uvicorn app:app --host 0.0.0.0 --port 7860 --reload

测试 1:状态检查

curl http://localhost:7860/

测试 2:函数调用

curl -X POST "http://localhost:7860/v1/chat/completions" \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [
      {"role": "user", "content": "北京天气如何?"},
      {"role": "system", "content": "使用 get_weather(city) 函数"}
    ],
    "max_tokens": 100
  }'

预期结果

{
  "choices": [{
    "message": {
      "content": "根据您的请求,我需要调用 get_weather(city='北京')"
    }
  }]
}

视觉建议

  • 三栏布局:命令、输出、解释
  • 用箭头连接

幻灯片 16:部署到云端(2分钟)

步骤 1:准备文件

# Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 7860
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]

步骤 2:上传代码

git init
git add .
git commit -m "v0.0.1"
git remote add origin https://huggingface.co/spaces/你的用户名/你的Space名称
git push -u origin main

步骤 3:等待构建(5-10分钟)

视觉建议

  • 流程图:3 步走
  • 配 HuggingFace Space 截图

幻灯片 17:免费资源说明(1分钟)

HuggingFace Space 免费版

  • CPU: 2核
  • 内存: 16GB
  • 存储: 10GB
  • 休眠: 48小时无访问后休眠

Gemma-270M 需求

  • 模型大小: ~1GB
  • 运行内存: ~3-4GB
  • 完全够用!

视觉建议

  • 对比表格
  • 用绿色 ✅ 标注够用

幻灯片 18:常见问题解答(2分钟)

Q1: 下载很慢?

export HF_ENDPOINT=https://hf-mirror.com

Q2: 内存不够?

  • 换更小的模型
  • 使用量化版本
  • 增加 Swap

Q3: 为什么不用 Ollama?

  • 模型库有限
  • Transformers 支持所有模型
  • 部署更灵活

Q4: 如何换模型?

# 修改 .env
DEFAULT_MODEL_NAME="其他模型名称"
# 重启服务

视觉建议

  • 问答卡片形式
  • 每个问题配图标

幻灯片 19:Prompt 技巧总结(2分钟)

好的 Prompt: ✅ 具体明确
✅ 分步迭代
✅ 提供上下文
✅ 要求示例

调试技巧

  1. 打印中间结果print() 大法
  2. 缩小范围:单独测试函数
  3. 对比测试:已知正确代码
  4. 分步验证:改一步测一步

我的 Prompt 模板

任务:[具体要做什么]
背景:[为什么要做]
要求:
1. [具体要求1]
2. [具体要求2]
输出格式:[代码/解释/示例]
已知问题:[如果有]

视觉建议

  • 清单形式
  • 用 ✅ 标注要点

幻灯片 20:项目总结(1分钟)

我们完成了

  1. ✅ 170 行代码的完整项目
  2. ✅ 从 0 到部署的全流程
  3. ✅ AI 编码的真实过程
  4. ✅ 调试和优化技巧

学到了什么

  • Transformers 部署原理
  • FastAPI 项目结构
  • Prompt 调试方法
  • 云端部署流程

下一步可以

  • 测试更多模型
  • 添加更多函数
  • 集成到实际应用

视觉建议

  • 3 个要点,配图标
  • 鼓励性结束语

幻灯片 21:Q&A(不限时)

欢迎提问

  • 代码问题
  • 部署问题
  • 模型选择
  • 优化建议

联系方式

  • GitHub: [你的链接]
  • 邮箱: [你的邮箱]
  • 社区: [社区链接]

视觉建议

  • 简洁背景
  • 联系方式清晰

幻灯片 22:参考资料

官方文档

相关资源

视觉建议

  • 链接可点击(如果是 PDF)
  • 清晰的列表

视频录制建议

时间分配(30分钟)

  • 0-2分:介绍和目标
  • 2-8分:环境准备和项目结构
  • 8-15分:代码手写(重点)
  • 15-20分:测试演示
  • 20-25分:部署到云端
  • 25-30分:总结和 Q&A

录制技巧

  1. 分段录制:每 5 分钟一段,方便剪辑
  2. 代码放大:确保观众能看清代码
  3. 语速适中:重要步骤放慢
  4. 互动提问:在关键点停顿,引导思考

后期剪辑

  • 添加字幕
  • 突出关键代码
  • 添加动画效果
  • 背景音乐(轻柔)

版本记录

v0.0.1 - 2026-01-01

  • 初始版本
  • 22 页幻灯片
  • 适合 30 分钟视频
  • 包含完整代码演示

下一步计划

  • v0.0.2:添加更多案例
  • v0.0.3:性能优化专题
  • v0.0.4:生产部署最佳实践

祝你录制顺利!🚀