尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

从零搭建AI开发环境:Python虚拟环境配置与第一个大模型应用实战

从零搭建AI开发环境:Python虚拟环境配置与第一个大模型应用实战 兄弟如果你正在刷各种AI资讯觉得大模型很神奇但又不知道从哪下手那这篇文章就是写给你的。搞AI开发没你想的那么玄乎但确实有一道门槛环境搭建。我见过太多人卡在第一步Python装好了库又冲突环境搞定了显卡又不认最后代码还没写一行热情先凉了一半。这篇文章我不讲虚的直接带你从零开始把完整的 AI 开发环境搭起来再顺手写出你的第一个 AI 应用。整个过程我会把选型逻辑、避坑经验、实操步骤全部摊开讲清楚。不管是之后要做大模型应用、训练自己的模型还是转行做 AI 工程师这套流程你都绕不开。1. 先想清楚一次完整的AI开发环境包含什么很多新手装环境就是一顿乱装先装 Python再装 PyCharm发现缺库又去 pip install装到一半报错就百度百度回来又装错版本。折腾半天环境烂成一锅粥最后只能重装系统。我当初也这么干过踩完坑之后才明白搭环境这件事关键不是装而是规划。1.1 为什么环境比代码更容易让人放弃编程里面有一句很扎心的话代码没跑起来八成不是代码的问题是环境的问题。AI 开发环境尤其如此因为它的依赖复杂度比我以前做 Web 开发高出好几个量级。你写个网页主要依赖就是 Node.js 和几个 npm 包版本冲突顶多报个错改一改就好。但 AI 开发不一样你会同时遇到 Python 版本、CUDA 版本、cuDNN 版本、PyTorch 版本、NumPy 版本之间互相咬合的兼容性问题。而且深度学习框架有个特点它对版本极其敏感比如 PyTorch 1.x 训练的模型用 PyTorch 2.x 加载经常直接报错。所以我的建议是不要在一开始就想着我要把环境配到最好而是先搭一个可控的环境。可控的意思是每个项目都有自己独立的 Python 环境互不干扰系统坏了可以直接删掉重来所有依赖版本都记录在案随时可以还原。1.2 环境三件套解释器、虚拟环境、编辑器整理一下思路任何 AI 开发环境本质上都离不开三样东西Python 解释器这是运行 Python 代码的引擎。现在主流用 Python 3.9 到 3.12太老的版本不支持新库太新的版本有些老库还没适配。虚拟环境相当于给每个项目单独隔一个房间房间里装什么库、什么版本都是这个项目自己的事不会污染全局。虚拟环境是 AI 开发里最重要的习惯没有之一。编辑器写代码的地方。AI 领域主流是 VS Code 和 PyCharm我两个都用过后面会详细对比。这三件事里被忽略最多的是虚拟环境。我看到太多新手直接往全局环境里 pip install装到后面连自己都不知道装了什么项目之间依赖打架最后甚至连系统自带的 Python 都被搞坏了。一旦你学会用虚拟环境这种问题就能从根源上消失。1.3 硬件和操作系统现实一点的考量聊到 AI 开发绕不开的就是硬件。很多新手一上来就焦虑我的电脑是不是不行我的显卡是不是太差我是不是一定要买一块几千块的显卡我的回答是分阶段看。如果你做的是大模型应用开发调用 API 那种那对硬件几乎没要求一台普通的电脑能跑浏览器、能写代码就够了。真正吃显卡的是模型训练和本地推理比如你想在本地跑一个 7B 参数的大模型那才会涉及显存、CUDA 这些概念。操作系统方面Windows、macOS、Linux 都能做 AI 开发。但要说最省心的还是 Linux。因为绝大多数深度学习框架、预训练模型、部署工具都是先在 Linux 上做适配的。不过如果你用的是 Windows也不用太担心现在 Win 11 有 WSL 2Windows Subsystem for Linux相当于在 Windows 里跑一个轻量级 Linux开发体验已经很接近原生 Linux 了。2. 动手实操搭建一套干净可控的开发环境好理论讲完了现在开始动手。这一步我会带着你把我自己常用的那套流程走一遍每一步都会告诉你为什么这么做以及背后的坑在哪里。2.1 用 Miniconda 管理 Python而不是直接装 Python很多新手的第一反应是装 Python去官网下载安装包双击下一步。这个思路没错但不够好。为什么因为 Python 官方安装包不带虚拟环境管理工具严格来说有 venv但用起来不够方便而你接下来一定会需要虚拟环境。我推荐用 Miniconda。它是 Anaconda 的轻量版Anaconda 自带了太多用不上的科学计算库几百个包安装起来又慢又臃肿Miniconda 只保留核心的 conda 包管理器和 Python干净利落。安装 Miniconda 的步骤如下去 Miniconda 官网找到对应你操作系统的安装包Windows 选 .exemacOS 选 .pkgLinux 选 .sh。安装过程中有个选项问你要不要Add Miniconda3 to my PATHWindows 上我建议勾选能省掉后面很多配置环境变量的麻烦。安装完成后打开终端Windows 上就是 Anaconda Prompt输入conda --version能输出版本号就说明装好了。装好 Miniconda 之后你就拥有了 conda 这个包管理器。它最强大的功能是创建独立的虚拟环境而且不光能管理 Python 包还能管理 Python 版本本身。比如某个老项目需要 Python 3.7你不需要装多个 Python 版本直接用一个 conda 命令创建环境就行。2.2 创建项目专属虚拟环境一步都不能省假设我们现在要做的项目叫ai-demo我来演示一遍从创建环境到安装依赖的完整流程。打开终端依次输入# 创建虚拟环境指定 Python 版本为 3.10 conda create -n ai-demo python3.10 -y # 激活这个环境 conda activate ai-demo看到命令行前面多了(ai-demo)前缀就说明你成功进入这个环境了。现在你在这个环境里做的所有 pip install 和 conda install都不会影响系统里其他 Python 环境。为什么选 Python 3.10因为目前绝大多数 AI 框架PyTorch、TensorFlow对这个版本的兼容性最稳。3.12 虽然更新但一些底层库还没跟上没必要给自己找麻烦。激活环境之后下一步是装基础库。我一般会先装这几个它们是 AI 开发的地基# 先升级 pip 本身 pip install --upgrade pip # 安装 Jupyter Notebook 和 IPython pip install jupyter ipython # 安装 NumPy所有数值计算的底层基础 pip install numpyJupyter Notebook 对 AI 开发是刚需因为你做实验、看数据、测试模型都需要交互式环境一行一行地运行代码、随时看中间结果。这一点后面写应用的时候你会体会到。2.3 显卡驱动与 CUDA只有跑本地模型才需要说一个特别容易让新手懵的地方CUDA。我看过太多教程一开始就让人装 CUDA结果一台没有 NVIDIA 显卡的电脑装了半天全白忙活。先搞清楚你的需求如果你只是调用大模型 API 做应用开发那 CUDA 跟你一毛钱关系都没有。你只需要装一个 OpenAI 或者国内厂商提供的 SDK剩下的计算都在人家的服务器上完成。真正需要 CUDA 的是本地推理和模型训练比如你想把 LLaMA、ChatGLM 这类开源模型跑在自己电脑上那就必须让 PyTorch 能调用 GPU而 PyTorch 调用 GPU 的前提就是装好匹配的 CUDA 和 cuDNN。所以我的建议是第一台电脑、第一个项目先别折腾 CUDA。把 CPU 版本的 PyTorch 装好先把流程跑通等你有明确需求了再回过来搞 GPU 加速。这条路我走过能帮你省下至少一整天。3. 配置编辑器与开发辅助工具环境装好之后就要选一个趁手的编辑器了。这不是小事因为你要在这个编辑器里写很多很多行代码难用的编辑器会持续消耗你的耐心。3.1 VS Code 配置 Python 开发环境的完整流程我主推 VS Code不管你信不信它现在是 AI 开发者的主流选择。原因很简单免费、插件生态丰富、启动速度快而且对 Jupyter Notebook 的支持做得非常好一个编辑器搞定所有需求。配置步骤如下去 VS Code 官网下载安装包安装后打开。打开左侧扩展面板搜索并安装这几个插件Python必装微软官方出品提供代码补全、调试、环境管理Pylance和 Python 插件配合代码智能提示效果翻倍Jupyter必装让你能直接在 VS Code 里打开 .ipynb 文件按下Ctrl Shift P输入 Python: Select Interpreter选择你刚才用 conda 创建的ai-demo环境。到这里VS Code 就已经认你的项目用了哪个 Python 环境了。你打开任意一个.py文件右下角会显示当前的解释器路径确认是ai-demo即可。踩过的坑提醒一下很多新手装完插件但是忘了选择解释器结果 VS Code 默认用了系统的全局 Python你明明在 conda 环境里装了库编辑器却提示找不到模块。这种问题 90% 都是解释器没选对遇到了先检查这个。3.2 Jupyter Notebook 和脚本文本两者分工不同提到 Jupyter我再多说一句。很多 AI 新手有个误区觉得 Jupyter 就是用来写作业的正式项目还是用 .py 文件。我的看法是工具没有高低关键是场景。Jupyter Notebook.ipynb适合做的数据分析、模型实验、效果可视化、快速验证想法。它的优势是能一块一块地执行代码每块代码的输出直接显示在下方这对调参和看数据非常友好。纯 Python 脚本.py适合做的工程化代码、API 服务、数据处理管线、生产环境部署。因为这些代码需要被复用、被测试、被自动化执行而 Notebook 的文件结构不便于做这些事情。我自己的习惯是探索阶段用 Notebook落地阶段转脚本。比如写第一个 AI 应用一开始我会在 Notebook 里跑通调用模型 - 生成回答的流程确认没问题后再把它改写成 .py 文件封装成函数最后用 FastAPI 暴露成一个接口。3.3 AI 编程辅助工具用但别依赖现在做 AI 开发不带 AI 编程助手确实说不过去了。我用的是 GitHub Copilot 和通义灵码这类工具它们能根据你的代码上下文自动补全大段代码写一些样板代码比如 import、函数签名特别高效。但我必须给你一个忠告先用脑子再用 AI 补全。我见过一些新手一上来就让 AI 写一整段代码自己完全看不懂然后出 bug 了也无从下手。编程的核心能力永远是理解代码工具只是加速器。你可以在写某个函数时让 AI 提供参考实现但你要能读懂每一行在干什么并且能调通它。4. 写第一个 AI 应用从想法到能跑的代码环境配好了工具也选好了接下来就是最激动人心的部分写代码。我选一个最经典也最能说明问题的场景做一个 AI 聊天助手。目标很简单你输入一句话它返回一段智能回复。4.1 需求拆解第一版只需要一个能跑的最小闭环做技术的人都懂一个词MVP最小可行产品。你的第一个 AI 应用不需要复杂能跑起来能把流程走通就算成功。所以第一版的需求我定为三条用户输入一句话程序调用大模型接口获取模型的回复把回复打印出来就是这么简单。别一上来就想着要做成网页、做成小程序、加上语音输入、配上漂亮的 UI那是后面迭代的事情。先把最小闭环打通你才有信心继续往下走。4.2 调用大模型 API实现你的第一个对话程序现在写代码。我会用国内可以直接访问的大模型服务做演示流程上是一样的。首先安装 OpenAI SDK大部分大模型服务都兼容这个 SDK 的调用方式pip install openai然后创建一个chat_demo.py文件写入以下代码from openai import OpenAI # 初始化客户端 client OpenAI( api_key你的API密钥, base_url模型服务的接口地址 ) # 发起对话请求 response client.chat.completions.create( model你的模型名称, messages[ {role: system, content: 你是一个乐于助人的AI助手。}, {role: user, content: 请用一句话介绍你自己。} ] ) # 打印模型的回复 print(response.choices[0].message.content)运行这段代码之前你需要准备两样东西API 密钥和接口地址。去你选定的模型服务商官网注册账号创建一个 API Key然后在代码里替换掉对应的字符串。跑起来你会看到终端里输出一段像模像样的自我介绍。恭喜你你的第一个 AI 应用已经诞生了。虽然它很简陋但你完成了从看别人玩 AI到自己写代码让 AI 听话的转变。4.3 从单次对话到多轮对话加一个记忆能力跑通最简单的版本之后我们来升级一下让它支持多轮对话。这个需求很常见因为聊天助手如果记不住上下文每一句话都是失忆状态体验会很差。多轮对话的实现原理其实很简单把历史消息都拼接在messages列表里一起发给模型。模型本身不记聊天记录它只根据你发给它的所有内容来生成回复。from openai import OpenAI client OpenAI( api_key你的API密钥, base_url模型服务的接口地址 ) # 用一个列表维护对话历史 messages [ {role: system, content: 你是一个乐于助人的AI助手。} ] print(AI 助手已启动输入 exit 退出对话。) while True: user_input input(\n你) if user_input.lower() exit: break # 把用户的输入加入对话历史 messages.append({role: user, content: user_input}) # 调用模型 response client.chat.completions.create( model你的模型名称, messagesmessages ) # 获取AI回复 assistant_reply response.choices[0].message.content print(fAI{assistant_reply}) # 把AI的回复加入对话历史 messages.append({role: assistant, content: assistant_reply})运行一下你会发现 AI 能记住你说过的话了。你问它我叫小明下一句再问我叫什么它能正确回答。这就是多轮对话的精髓。不过这里有个隐藏问题随着对话越来越长messages列表越来越大最终会超出模型的上下文窗口限制。解决方法是做截断只保留最近几轮对话这个属于优化细节以后可以慢慢琢磨。4.4 把脚本做成 Web 服务让 AI 应用真正应用起来终端里跑程序只是第一步要让别人能使用你的应用得做成 Web 服务。这一步我用 FastAPI 来实现它轻量、高性能、代码量少是目前 AI 应用开发里最流行的 Web 框架。先安装 FastAPI 和 Uvicornpip install fastapi uvicorn然后新建一个app.pyfrom fastapi import FastAPI from pydantic import BaseModel from openai import OpenAI app FastAPI() client OpenAI( api_key你的API密钥, base_url模型服务的接口地址 ) class ChatRequest(BaseModel): message: str app.get(/) def read_root(): return {message: AI 应用已启动} app.post(/chat) def chat(request: ChatRequest): response client.chat.completions.create( model你的模型名称, messages[ {role: system, content: 你是一个乐于助人的AI助手。}, {role: user, content: request.message} ] ) return {reply: response.choices[0].message.content}保存后在终端运行uvicorn app:app --reload看到 Uvicorn running on http://127.0.0.1:8000 就说明服务启动成功了。打开浏览器访问http://127.0.0.1:8000你会看到 JSON 返回的提示消息。再试试用工具比如 Postman向http://127.0.0.1:8000/chat发送一个 POST 请求body 里带上{message: 你好}就能拿到 AI 的回复。到这一步你做的已经不是脚本而是服务了。这意味着其他人可以通过网络访问你的 AI 应用它具备了一个正式应用该有的雏形。5. 工程化意识从能跑向能交付能跑能通只是万里长征第一步。如果你以后想靠 AI 吃饭那有几个工程化的习惯必须从一开始就养成。这些习惯不需要额外时间成本但在关键时刻能救你一命。5.1 用 requirements.txt 锁定依赖版本换个电脑、换个环境你的代码就跑不起来了这恐怕是开发里最折磨人的事情。原因通常就是依赖版本没锁住。解决办法很简单在项目根目录生成一个requirements.txt文件把当前环境里所有依赖及其版本号记录下来。pip freeze requirements.txt别人拿到你的代码后只需要执行pip install -r requirements.txt就能把一模一样的依赖装上项目就能跑起来。这里有个细节pip freeze会把环境里所有包都导出来其中很多可能与项目无关。更推荐的做法是只记录项目直接依赖的包用pip list对照着写或者安装pipreqs工具自动扫描项目里的 import 语句来生成精简版。不管用哪种关键是版本号一定要写清楚。5.2 API Key 安全绝不能把密钥写进代码我在前面示例代码里直接写了api_key你的API密钥这只是教学演示。真实项目里如果这么做一旦代码传到了 GitHub 上等于把钱包直接交给别人——有人会用你的 Key 疯狂调用 API账单能给你刷爆。正确的做法是把密钥放进环境变量或者 .env 文件并且把 .env 加入.gitignore。我推荐用python-dotenv这个库来加载环境变量。安装pip install python-dotenv在.env文件里写入API_KEYsk-xxxxx BASE_URLhttps://api.xxx.com MODEL_NAMEgpt-xxxx然后在代码中这样读取import os from dotenv import load_dotenv load_dotenv() api_key os.getenv(API_KEY) base_url os.getenv(BASE_URL) model_name os.getenv(MODEL_NAME)这样你的密钥只存在于本地文件中不会泄露到代码仓库里。这是一个 AI 应用开发工程师最基本的职业素养。5.3 日志和错误处理别让程序静默死亡新手写代码最怕的是程序报错老手写代码最怕的是程序不报错但结果不对。所以从一开始就要养成记录日志和处理异常的习惯。还拿刚才的聊天接口举例加入错误处理app.post(/chat) def chat(request: ChatRequest): try: response client.chat.completions.create( modelmodel_name, messages[ {role: system, content: 你是一个乐于助人的AI助手。}, {role: user, content: request.message} ] ) return {reply: response.choices[0].message.content} except Exception as e: return {error: str(e)}, 500别小看这一个 try-except它意味着当 API 调用失败比如网络超时、余额不足时你的服务不会直接崩溃而是返回一个明确的错误信息方便你快速定位问题。6. 常见问题排查与实测技巧最后我把这些年搭环境、写 AI 应用过程中踩过的一些高频问题整理出来做成一个速查清单你遇到的时候直接对照着排查。6.1 环境相关的高频坑问题常见原因解决方法conda 命令找不到安装时未添加 PATH或终端未重启检查是否勾选PATH选项或重新打开终端pip install 报权限错误当前终端权限不足或在全局环境安装先conda activate进入虚拟环境再安装VS Code 找不到安装的库解释器未选择 conda 环境CtrlShiftP选择 Python: Select InterpreterJupyter 里 import 报错Notebook 使用的内核与当前环境不一致用python -m ipykernel install --user --nameai-demo注册内核终端激活环境后 pip 装的包却在别处系统里可能存在多个 pip 路径用which pip检查确认指向 conda 环境的 pip6.2 大模型调用时的问题问题常见原因解决方法返回 401 错误API Key 不正确或已过期检查密钥注意不要有多余空格返回 429 错误请求过于频繁触发了限流增加重试间隔或升级套餐返回超时网络不稳定或模型响应时间过长增大 timeout 参数或换一个更快的模型中文输出乱码终端编码问题在代码头部加# -*- coding: utf-8 -*-上下文长度超限messages 列表过长只保留最近 N 轮对话做窗口滑动6.3 写在最后的几点体会文章写到这里该讲的都讲得差不多了。最后说几句心里话。我带过不少人入门 AI发现一个规律能不能学出来根本不看天赋就看你能不能沉得住气把环境配通。环境这关过了后面就是一路顺风环境这关过不去再好的教程也白搭。我自己第一次配 PyTorch 的 GPU 版本时光一个 CUDA 版本匹配就弄了一下午最后发现是显卡驱动太老升级驱动之后一切豁然开朗。所以我想告诉你的是遇到问题不要慌先看报错信息再定位原因大多数环境问题网上都有前辈踩过坑你要做的就是耐心搜索、反复尝试。还有一点如果你真打算长期做 AI 开发我强烈建议至少学一点 Linux 的基础命令。现在绝大多数 AI 生产环境都是 Linux你的代码最终要跑在云服务器或者 GPU 集群上早一点熟悉后面就少一点痛苦。这个领域最有意思的地方就在于一天不学就觉得自己落伍了但只要你肯动手从零到一其实没那么难。第一个应用写出来之后你可以继续折腾给它加个语音输入、接入一个知识库、做成一个自己的 AI Agent……路已经铺好了接下来就看你怎么走了。
返回列表