Day54——晚课 AI应用部署与上线

作者:

系列教程说明

这是「AI零基础70天学习计划」系列教程的第54天晚课。

上篇回顾

今天早课我们学习了微调(Fine-tuning)——如何用少量数据让通用大模型变成某个领域的专家。你已经知道了SFT、LoRA等概念,也了解了微调的基本流程。

但微调完的模型,还只是躺在你的电脑里。今晚的实战目标:把AI能力变成别人能用的产品。

第一步:理解”部署”到底是什么

很多初学者觉得”部署”很神秘,其实用一个生活比喻就能说清楚:

微调 = 学会做菜

部署 = 开餐厅

你学会了做菜(训练好模型),但朋友想吃你做的菜,总不能让人家来你家厨房吧?你需要开一家餐厅(部署),让人家点餐(调用API),你来做菜,然后端上去(返回结果)。

部署的核心就三件事:

  1. 让模型一直运行着——别人随时能用
  2. 提供一个”点餐窗口”——通常是API接口或网页
  3. 处理并发——多人同时用不能崩

第二步:零代码部署——用Gradio 5分钟上线

Gradio 是Python最简单的AI应用部署工具,只需要几行代码,就能把你的AI模型变成一个网页应用。

安装Gradio

`bash

pip install gradio

`

你的第一个AI应用

创建一个文件 my_app.py

`python

import gradio as gr

def chat(message, history):

“””简单的聊天函数,实际项目中替换为你的AI模型”””

response = f”你说了:{message}。这是AI的回复!”

return response

demo = gr.ChatInterface(

fn=chat,

title=”我的AI助手”,

description=”这是我的第一个AI应用”,

)

demo.launch()

`

运行:

`bash

python my_app.py

`

就是这么简单! 浏览器会自动打开一个网页,你可以直接和AI对话。

接入真实AI模型

把上面的函数换成真正的AI调用:

`python

import gradio as gr

from openai import OpenAI

client = OpenAI(api_key=”你的API密钥”)

def chat(message, history):

messages = [{“role”: “system”, “content”: “你是一个有帮助的AI助手。”}]

for h in history:

messages.append({“role”: “user”, “content”: h[0]})

messages.append({“role”: “assistant”, “content”: h[1]})

messages.append({“role”: “user”, “content”: message})

response = client.chat.completions.create(

model=”gpt-4o-mini”,

messages=messages,

)

return response.choices[0].message.content

demo = gr.ChatInterface(fn=chat, title=”GPT-4o-mini 助手”)

demo.launch(server_name=”0.0.0.0″, server_port=7860)

`

关键参数说明:

  • server_name="0.0.0.0":允许外部访问(不只是本机)
  • server_port=7860:指定端口号

添加更多功能

Gradio支持丰富的组件:

`python

import gradio as gr

def process(text, style, temperature):

“””根据风格调整文本”””

styles = {

“正式”: f”尊敬的用户,{text}”,

“活泼”: f”嘿!{text}~”,

“简洁”: text[:50] + “…”

}

return styles.get(style, text)

demo = gr.Interface(

fn=process,

inputs=[

gr.Textbox(label=”输入文本”, placeholder=”请输入内容…”),

gr.Radio([“正式”, “活泼”, “简洁”], label=”选择风格”, value=”正式”),

gr.Slider(0, 1, value=0.7, label=”创意程度”),

],

outputs=gr.Textbox(label=”处理结果”),

title=”文本风格转换器”,

description=”选择不同的风格,AI会帮你改写文本”,

)

demo.launch()

`

第三步:免费部署到云端——Hugging Face Spaces

本地运行的Gradio应用,关掉电脑就没了。Hugging Face Spaces 提供免费的云端托管,让你的应用24小时在线。

创建步骤

1. 注册Hugging Face账号

访问 https://huggingface.co 注册(免费)

2. 创建新的Space

  • 点击右上角头像 → New Space
  • 填写Space名称(如 my-ai-app
  • 选择 Gradio 作为SDK
  • 选择 Free 级别的硬件

3. 上传文件

你的Space需要至少两个文件:

app.py(你的Gradio代码):

`python

import gradio as gr

def chat(message, history):

return f”收到:{message}”

demo = gr.ChatInterface(fn=chat, title=”我的AI助手”)

demo.launch()

`

requirements.txt(依赖包):

`

gradio>=4.0

openai

`

4. 等待部署

上传文件后,Spaces会自动构建和部署,通常2-5分钟就能访问。

5. 获取链接

部署成功后,你的应用地址是:https://你的用户名.hf.space

实战:部署一个AI翻译助手

`python

import gradio as gr

from openai import OpenAI

import os

client = OpenAI(api_key=os.getenv(“OPENAI_API_KEY”))

def translate(text, target_lang):

“””AI翻译函数”””

lang_map = {

“English”: “英语”,

“日本語”: “日语”,

“한국어”: “韩语”,

“Français”: “法语”,

}

lang = lang_map.get(target_lang, target_lang)

response = client.chat.completions.create(

model=”gpt-4o-mini”,

messages=[

{“role”: “system”, “content”: f”你是一个专业翻译,请将用户输入翻译成{lang},只输出翻译结果。”},

{“role”: “user”, “content”: text}

],

)

return response.choices[0].message.content

demo = gr.Interface(

fn=translate,

inputs=[

gr.Textbox(label=”原文”, placeholder=”输入要翻译的文本…”, lines=3),

gr.Radio([“English”, “日本語”, “한국어”, “Français”], label=”目标语言”, value=”English”),

],

outputs=gr.Textbox(label=”翻译结果”, lines=3),

title=”AI翻译助手”,

description=”支持中→英/日/韩/法翻译”,

)

demo.launch()

`

注意: API密钥不要直接写在代码里!在Hugging Face Spaces的 Settings → Repository secrets 中添加 OPENAI_API_KEY,然后用 os.getenv("OPENAI_API_KEY") 读取。

第四步:Streamlit——更灵活的选择

如果Gradio的界面不够灵活,Streamlit 是另一个优秀的选择,适合构建更复杂的应用。

安装

`bash

pip install streamlit

`

创建应用 streamlit_app.py

`python

import streamlit as st

st.title(“AI文档分析助手”)

st.write(“上传文档,AI帮你提取关键信息”)

# 侧边栏设置

with st.sidebar:

st.header(“设置”)

analysis_type = st.selectbox(

“分析类型”,

[“摘要”, “关键词提取”, “情感分析”]

)

max_length = st.slider(“摘要长度”, 50, 500, 200)

# 文件上传

uploaded_file = st.file_uploader(“上传文档”, type=[“txt”, “pdf”, “docx”])

if uploaded_file:

text = uploaded_file.read().decode(“utf-8”)

st.subheader(“文档内容预览”)

st.text_area(“”, text[:500], height=150)

if st.button(“开始分析”):

with st.spinner(“AI正在分析…”):

# 这里调用你的AI模型

result = f”分析类型:{analysis_type}n文档长度:{len(text)}字n摘要:这是AI生成的摘要…”

st.success(“分析完成!”)

st.write(result)

`

运行:

`bash

streamlit run streamlit_app.py

`

部署到Streamlit Cloud

  1. 把代码推送到GitHub仓库
  2. 访问 https://share.streamlit.io
  3. 连接GitHub,选择仓库和主文件
  4. 点击Deploy

第五步:API服务化——给别人调用

如果你的AI能力要给其他程序员用,需要做成API服务。

用FastAPI创建API服务

`bash

pip install fastapi uvicorn

`

创建 api_server.py

`python

from fastapi import FastAPI, HTTPException

from pydantic import BaseModel

from openai import OpenAI

import os

app = FastAPI(title=”AI服务API”)

client = OpenAI(api_key=os.getenv(“OPENAI_API_KEY”))

class ChatRequest(BaseModel):

message: str

model: str = “gpt-4o-mini”

class ChatResponse(BaseModel):

reply: str

model: str

@app.post(“/chat”, response_model=ChatResponse)

async def chat(request: ChatRequest):

try:

response = client.chat.completions.create(

model=request.model,

messages=[{“role”: “user”, “content”: request.message}],

)

return ChatResponse(

reply=response.choices[0].message.content,

model=request.model,

)

except Exception as e:

raise HTTPException(status_code=500, detail=str(e))

@app.get(“/health”)

async def health():

return {“status”: “ok”}

if __name__ == “__main__”:

import uvicorn

uvicorn.run(app, host=”0.0.0.0″, port=8000)

`

运行和测试:

`bash

# 启动服务

python api_server.py

# 测试调用(另一个终端)

curl -X POST http://localhost:8000/chat

-H “Content-Type: application/json”

-d ‘{“message”: “什么是AI?”}’

`

第六步:Docker容器化——一次打包,到处运行

Docker把你的应用和所有依赖打包成一个”集装箱”,在任何服务器上都能运行。

创建Dockerfile

`dockerfile

FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .

RUN pip install –no-cache-dir -r requirements.txt

COPY . .

EXPOSE 7860

CMD [“python”, “app.py”]

`

构建和运行

`bash

# 构建镜像

docker build -t my-ai-app .

# 运行容器

docker run -p 7860:7860 -e OPENAI_API_KEY=你的密钥 my-ai-app

`

部署到云服务器

`bash

# 推送到Docker Hub

docker tag my-ai-app 你的用户名/my-ai-app:latest

docker push 你的用户名/my-ai-app:latest

# 在服务器上拉取运行

docker pull 你的用户名/my-ai-app:latest

docker run -d -p 7860:7860 -e OPENAI_API_KEY=你的密钥 你的用户名/my-ai-app

`

实操练习:部署你的第一个AI应用

跟着做,10分钟内上线一个真正的AI应用:

练习1:最小可用版(5分钟)

  1. 安装Gradio:pip install gradio
  2. 复制上面的”第一个AI应用”代码
  3. 运行 python my_app.py
  4. 在浏览器中测试

练习2:上线到云端(10分钟)

  1. 注册Hugging Face账号
  2. 创建Space,选择Gradio SDK
  3. 上传app.py和requirements.txt
  4. 等待部署完成,分享链接给朋友

练习3:进阶挑战

  • 给你的应用添加文件上传功能
  • 增加一个下拉菜单选择不同的AI模型
  • 添加”点赞”和”反馈”按钮

今日收获

  • 部署的本质:让模型一直运行 + 提供访问接口 + 处理并发
  • Gradio:最简单的部署方式,几行代码搞定
  • Hugging Face Spaces:免费云端托管,适合个人项目
  • Streamlit:更灵活的界面,适合复杂应用
  • FastAPI:API服务化,给其他程序调用
  • Docker:容器化部署,一次打包到处运行

🚇 地铁深读:为什么大厂的AI应用比你的快?

你有没有注意到,ChatGPT的回复几乎是瞬间出现的,而你自己部署的Gradio应用可能要等好几秒?

这背后是推理优化的技术:

1. 模型量化

GPT-4原始模型可能需要几百GB显存,通过INT8/INT4量化,可以压缩到几分之一,速度提升2-4倍。

2. KV Cache

大模型生成每个token时,需要计算之前所有token的注意力。KV Cache把中间结果缓存起来,避免重复计算。

3. 批处理(Batching)

多个用户的请求打包在一起计算,GPU的并行能力被充分利用。这就是为什么大厂的API比你的单机部署快得多。

4. 模型蒸馏

用大模型(教师)训练小模型(学生),让小模型学到大模型的能力但体积小得多。比如GPT-4o-mini就是GPT-4的蒸馏版本。

5. 推测解码(Speculative Decoding)

用一个小模型快速”猜”出多个token,再用大模型验证。猜对了就直接用,速度提升2-3倍。

思考题: 如果你要为1000个用户部署一个AI客服系统,你会选择哪种架构?需要考虑哪些因素?

下篇预告

明天早上8点:Day55——早课 AI产品设计思维

明晚5点:Day55——晚课 AI产品设计实战

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注