大模型应用开发实战:从环境搭建到 API 服务
本文介绍大模型应用开发的基础流程。涵盖工具准备(MiniConda、PyCharm)、环境配置(清华镜像)、项目创建、模型下载与加载(基于 ModelScope 和 ChatGLM3)、API 服务构建(FastAPI+Uvicorn)以及客户端开发(Gradio)。通过实战案例展示如何从零搭建一个简单的大模型交互系统,解决环境依赖、运行耗时及结果验证等常见问题,为后续微调与部署打下基础。

本文介绍大模型应用开发的基础流程。涵盖工具准备(MiniConda、PyCharm)、环境配置(清华镜像)、项目创建、模型下载与加载(基于 ModelScope 和 ChatGLM3)、API 服务构建(FastAPI+Uvicorn)以及客户端开发(Gradio)。通过实战案例展示如何从零搭建一个简单的大模型交互系统,解决环境依赖、运行耗时及结果验证等常见问题,为后续微调与部署打下基础。

在接触 AI 应用开发的这段时间,我以为会像以前学 .NET、Java、Vue 一样,先写个 Hello World,再一步一步搭功能、搭框架直到完成一个系统。然而,理想总是很丰满,现实很骨感。在实践的过程中会遇到各种千奇百怪的问题。
**概念太多。**你以为就 GPT、LLM?太年轻了,Hugging Face、Transformers、Torch、Tokenizers、LangChain、ModelScope、FastAPI、CUDA、cuDNN、Conda、vLLM、ResNet-50、top_p 等等。它们有些是工具,有些只是库,有些甚至只是个参数名,还有些到现在都不清楚具体用途。
**运行代码时,经常莫名其妙地报错。**以前学 Vue 的时候,以为前端的包已经够混乱了,直到开始接触 AI,没有最混只有更混。
**运行时间太长,且结果不确定。**没有云上足够的算力和显卡,一个简单的代码运行少则 10 分钟,多则几小时,一般人是忍受不了的。就算历经千辛万苦程序跑完了,你会发现不太容易验证运行结果的正确性,不知道改了某个参数到底是起没起作用。
看了网上很多 AI 开发的文章,总结下来往往缺乏实操细节。本文旨在通过实战步骤,把这些牛鬼蛇神掰扯清楚,从 Hello World 开始,带你完成一个大模型应用的完整闭环。
首先安装这个,它有点像 Docker,可以隔离多个项目的 Python 环境,并且默认带有 VC++ 等库。为什么把它放第一?作为一个程序员,我还是有洁癖的。开始时我非常不想装这玩意,直接装个 Python 3.12,手动 pip install 霹雳巴拉下各种包多潇洒。直到运行一个最简单的代码缺各种依赖环境时,不但缺 Python 的包,竟然还缺各种 DLL,还缺 VC++ 运行时,当时心里各种崩溃。然后老老实实把它装上了,一切都顺了。安装它会默认集成 Python,所以不用单独装 Python。
开发 Python 的第一选择。开始我用的 VS Code,调试运行各种手动命令敲烦了,还是 PyCharm 按钮好使。
就先装这两个吧。
电脑 CMD 命令提示符。设置清华的镜像,用于后面下载各种 Python 的包。默认国外的镜像和.NET NuGet 包、Java Maven 库及前端 NPM 包一个尿性卡得要死,只能用国内的。
python -m pip install --upgrade pip
复制代码
直接在 PyCharm 新建一个项目,名字随便起。毕竟我们是整大模型的,不是学 Python 入门的。叫 llmTest 吧!
这里注意:
目前国内外的通用大模型可以用密密麻麻来形容。模型下载方式很多,有直接用 Git LFS 下载的、有直接下文件的,还有不直接下载运行时才加载的写代码方式。关键是这种方案还挺好使。本着新手不能太多选择,直接推最顺手的原则。我用的阿里魔塔 ModelScope(注意它不是模型,不是!它只是个下载工具)。
直接在 PyCharm 命令终端里面执行 pip install modelscope。
新建一个 app.py。编写下载代码:
from modelscope import snapshot_download
# 指定模型仓库 ID 和保存路径
model_dir = snapshot_download(
model_id='ZhipuAI/chatglm3-6b',
cache_dir=r'D:\Transformers'
)
print(f"模型已下载到:{model_dir}")
这里我以清华智谱 ChatGLM3 模型为例,下载到 D:\Transformers。如果人品不是太差的话,运行效果如下:
总共有 15G 左右,需要等一段时间。至此一个大模型顺利下载完毕,它的结构如下图所示,别问我里面是啥,我也看不懂:
![图 4:模型目录结构]
以上算是完成了全部的准备工作,作为一个有效率的打工人,马上迫不及待地想看效果了。立马码字:
from modelscope import AutoTokenizer, AutoModel
import torch
# 加载模型和分词器
model_path = r'D:\Transformers\chatglm3-6b'
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModel.from_pretrained(model_path, device_map="auto", trust_remote_code=True).eval()
# 生成回答
response, history = model.chat(tokenizer, "你好", history=[])
print(response)
这段代码意图无比清晰,启动刚刚下载的 chatglm3-6b 模型,和它打个招呼,羞涩地问下:'你好'。先别急着运行,因为你运行肯定会报错(多么痛地领悟,该踩的坑我都踩完了)。先参考上文,在 PyCharm 命令终端依次执行以下安装命令,保证安装模型运行所需要的包:
conda install pytorch torchvision torchaudio cpuonly -c pytorch
全部安装完毕后,点击 Debug 尝试运行:
ChatGLM 会输出类似'你好!我是人工智能助手 ChatGLM3-6B,很高兴见到你,欢迎问我任何问题。'这样的回答。当然,就像文章开始说的结果不确定,你的结果和上面不一定相同。
视频我剪辑过,在我的电脑上,实际运行时间 5 分钟左右。至此最简单的模型应用开发完毕。
上面最简单的 Hello World 写完了,接下来就要为各种客户端提供接口服务。.NET 有 WebAPI + IIS,Java 有 Spring Boot+Tomcat,大模型有 FastAPI+Uvicorn:FastAPI 用于构建应用的业务逻辑,Uvicorn 是运行这些应用的服务器。
参考上文,在 PyCharm 命令终端依次执行以下安装命令:
pip install fastapi uvicorn
把上面的代码微调一下,封装成 API:
from fastapi import FastAPI
from pydantic import BaseModel
import uvicorn
from modelscope import AutoTokenizer, AutoModel
app = FastAPI()
# 全局加载模型(避免每次请求都加载)
model_path = r'D:\Transformers\chatglm3-6b'
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModel.from_pretrained(model_path, device_map="auto", trust_remote_code=True).eval()
class Message(BaseModel):
text: str
@app.post("/chat")
async def chat_endpoint(message: Message):
response, _ = model.chat(tokenizer, message.text, history=[])
return {"reply": response}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=7866)
点击 Debug 尝试运行,即可启动一个 7866 端口的 API 服务。
我们用 Postman 等客户端工具测试一下:
![图 7:Postman 测试结果]
服务端有了,当然要做个漂亮的客户端,总不能一直用 Postman。不得不吐槽下,大模型也搞前后端分离这套!.NET Java 有 HttpRequest,JS 有 jQuery、Axios,大模型也有个出名的库 LangChain,官方的解释它提供了'链'的概念,允许开发者将多个语言模型调用、API 请求、数据处理等操作链接起来,以创建更复杂的应用流程。这里你就当它是个用来封装 HTTP 请求的客户端吧!还是按上文的方式先安装:
pip install langchain requests
在工程里面新建一个文件 client.py。编写客户端代码:
import requests
url = "http://localhost:7866/chat"
data = {"text": "你是谁?"}
response = requests.post(url, json=data)
print(response.json())
执行一下,和它说个'你好',再问下它是谁,效果如下(再次友情提示:视频剪辑过,肯定没有这么快):
![图 8:客户端测试结果]
等等,这好像还是算不上客户端!怎么着也得个应用程序 APP 之类,再不济也得有个 Web 吧!好吧,安排!为了搞大模型的人能安心研究模型,不用花精力在界面上。市场上就出现了 2 个常用的大模型 Web 界面框架 Gradio 和 Streamlit,不用去研究哪个更好,顺手就行!类似 ElementUI、AntDesign 没必要非争个你死我活的!我这里以 Gradio 为例,先安装:
pip install gradio
在工程里面新建一个文件 webclient.py。编写网页代码:
import gradio as gr
import requests
def predict(text):
url = "http://localhost:7866/chat"
try:
res = requests.post(url, json={"text": text})
return res.json().get("reply", "Error")
except Exception as e:
return f"Error: {str(e)}"
with gr.Blocks() as demo:
gr.Markdown("# 大模型对话演示")
input_text = gr.Textbox(label="输入内容")
output_text = gr.Textbox(label="模型回复")
btn = gr.Button("发送")
btn.click(predict, inputs=input_text, outputs=output_text)
demo.launch()
执行一下:
![图 9:Gradio 启动界面]
在浏览器里面打开:就可以看到我们的客户端。这时随便问大模型几个问题吧(再次友情提示:视频剪辑过,后面那个问题 1500 多秒):
![图 10:Web 客户端交互]
到这里,入门流程介绍完毕。看的人多的话,我会继续介绍模型微调和训练,希望大家喜欢!
本文从零开始,演示了如何在大模型领域进行基础应用开发。我们经历了环境配置、模型下载、本地推理、API 封装以及前端交互的全过程。
虽然目前只是一个简单的 Demo,但已经具备了后续扩展的基础。在实际生产环境中,你可能还需要考虑以下几点:
希望这篇教程能帮助你跨越大模型开发的门槛,开启你的 AI 应用之旅。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online