想学AI应用开发,却不知道从何下手?不用怕,你不需要懂复杂的算法,也不需要昂贵的显卡。今天这篇“保姆级”教程,带你从零开始,用Python写出你的第一个AI对话脚本。包含完整代码、踩坑指南和流式输出优化,新手也能轻松跑通!
一、 写在前面:新手别慌,真的没那么难
很多想转行AI应用开发的新手,上来就被“微调”、“CUDA”、“Transformer”这些词吓退了。其实,AI应用开发本质上就是写代码调用别人已经训练好的“超级大脑”。
你不需要训练模型,只需要学会:
- 注册一个提供大模型API的平台。
- 拿到一串API Key(钥匙)。
- 用Python发一个网络请求,把问题塞进去,把答案拿出来。
今天,我们就来完成这个“新手村任务”。准备好你的电脑(普通配置就行,不需要显卡),我们开始!
二、 准备工作(领取你的装备)
在开始写代码之前,我们需要准备两样东西:
1. Python环境
确保你的电脑上安装了Python(3.8以上版本)。在终端输入python --version检查。如果没有,去官网下载安装一下。
2. 获取大模型API Key(新手避坑重点!)
⚠️新手注意:很多教程让你直接去用OpenAI(GPT-4),但这需要海外信用卡和特殊的网络环境,对新手极度不友好。
强烈建议新手先使用国内的大模型平台,比如:DeepSeek(深度求索)、通义千问(Qwen)、智谱GLM。它们通常有免费额度,且注册简单。
以DeepSeek为例(因为它的API完全兼容OpenAI格式,价格极便宜且注册简单):
- 搜索“DeepSeek 开放平台”并注册。
- 进入控制台,点击“API Keys”,创建一个新的Key。
- ⚠️ 千万不要把这个Key发给任何人,不要直接写在代码里上传到GitHub!(后面教你怎么安全存)。
三、 动手实操:从“能跑通”到“能聊天”
第一步:安装依赖库
打开你的终端(或者CMD),创建一个新的文件夹,然后输入以下命令安装我们需要的库:
pipinstallopenai python-dotenv注:虽然很多国内模型不是OpenAI开发的,但为了行业通用,它们通常兼容OpenAI的SDK。
第二步:安全地配置你的API Key
在项目文件夹下新建一个文件,命名为.env,内容如下:
API_KEY=你的真实API_KEY填在这里 BASE_URL=https://api.deepseek.com注:BASE_URL是模型平台的接口地址,不同平台不一样,去官网文档查一下即可。
第三步:写最基础的代码(非流式)
新建一个chat.py文件,粘贴以下代码:
# pip install openai python-dotenv# ========== 用到的库说明 ==========# os:Python 内置标准库,提供与操作系统交互的功能(如读写环境变量、路径处理)。# 本程序中只用它读取环境变量 os.getenv()。# openai:OpenAI 官方提供的 Python SDK(第三方库),用来调用兼容 OpenAI 接口的大模型 API。# 通过它可以用同样的代码访问 DeepSeek 等兼容 OpenAI 协议的服务。# python-dotenv:第三方库,用于把当前目录下 .env 文件中的键值对加载到环境变量中,# 这样代码就能用 os.getenv() 读到,避免把密钥写死在代码里。# OpenAI:openai 库中的客户端类,实例化后用来发送 API 请求。# load_dotenv:python-dotenv 提供的函数,执行后会读取当前目录下的 .env 文件。importos# 导入 os 模块,后续用它读取环境变量fromopenaiimportOpenAI# 从 openai 库中导入 OpenAI 客户端类fromdotenvimportload_dotenv# 从 python-dotenv 库中导入 load_dotenv 函数load_dotenv()# 调用 load_dotenv(),读取当前目录下的 .env 文件,把其中的 API_KEY、BASE_URL 注入环境变量client=OpenAI(# 创建一个 OpenAI 客户端实例 client,后续用它发起 API 请求api_key=os.getenv("API_KEY"),# os.getenv("API_KEY") 从环境变量读取名为 API_KEY 的值,作为鉴权密钥传入base_url=os.getenv("BASE_URL")# os.getenv("BASE_URL") 读取 API 基础地址,让请求发到对应服务器(这里指向 DeepSeek))response=client.chat.completions.create(# 调用"聊天补全"接口:client.chat.completions 是接口对象,create() 方法发起一次请求,返回结果存入 responsemodel="deepseek-flash",# model 指定使用哪个模型;deepseek-flash 为模型名messages=[# messages 是对话消息列表,必须是列表 [ ],每个元素是一条消息字典{"role":"user","content":"你好,请用一句话介绍你自己!"}# 一条消息:role="user" 表示这是用户角色说的话,content 是消息文本内容])print("AI回复:",response.choices[0].message.content)# 打印结果:response.choices 是模型返回的候选回复列表,[0] 取第一个候选,message 是该候选的消息对象,content 即文本内容运行这个脚本,如果你在控制台看到了AI的回复,恭喜你,你已经迈出了AI应用开发的第一步!
四、 升级体验:加入“流式输出”(打字机效果)
上面的代码有个缺点:它要等AI全部想完,才一次性把结果打印出来,往往要等好几秒。
真正的AI应用(如ChatGPT),都是一个字一个字往外蹦的(流式输出)。我们怎么实现?
修改chat.py,加入stream=True:
importosfromopenaiimportOpenAIfromdotenvimportload_dotenv load_dotenv()client=OpenAI(api_key=os.getenv("API_KEY"),base_url=os.getenv("BASE_URL"))print("AI正在思考中...")# 先打印一句提示语,让用户知道请求已发出、正在等待回复(纯体验,非必需)#开启流式输出response=client.chat.completions.create(# 与 chat.py 不同:因下面 stream=True,这里 response 不再是单个完整结果对象,而是一个“可迭代的数据块流”,要用 for 循环逐块接收model="deepseek-flash",# model 指定使用哪个模型;deepseek-flash 为模型名messages=[# messages 是对话消息列表,必须是列表 [ ],每个元素是一条消息字典{"role":"user","content":"请写一首关于程序员转行AI的诗。"}# 一条消息:role="user" 表示这是用户角色说的话,content 是消息文本内容],stream=True# 关键点:stream=True 开启流式输出;服务器边生成边把内容切成多个 chunk(数据块)陆续返回,而不是等全部生成完再一次性返回)forchunkinresponse:# for 遍历流式返回的 response,每次循环拿到一个 chunk(一个数据块),里面装着这一刻新增的一小段文本ifchunk.choices[0].delta.contentisnotNone:# chunk.choices[0].delta 是本块的“增量内容”(delta=增量,区别于 chat.py 里的 message 完整消息);流式开头/结尾的某些 chunk 的 content 为 None,需判空跳过print(chunk.choices[0].delta.content,end="",flush=True)# 打印这一小段:end="" 让 print 结尾不换行(默认 end="\n" 会换行),把每段紧挨着拼成完整文字;flush=True 立即刷新输出缓冲区,让字符实时显示,从而实现打字机效果五、 终极形态:写一个能多轮对话的命令行聊天机器人
现在的AI是没有记忆的,你问一句它答一句。为了让AI记住上下文,我们需要把之前的对话记录也传给它。
新建chatbot.py:
importosfromopenaiimportOpenAIfromdotenvimportload_dotenv load_dotenv()client=OpenAI(api_key=os.getenv("API_KEY"),base_url=os.getenv("BASE_URL"))# 初始化对话历史(包含系统设定)messages=[{"role":"system","content":"你是一个乐于助人的AI助手,说话要简短幽默。"}]print("🤖 聊天机器人已启动(输入 'quit' 退出)")whileTrue:user_input=input("\n你: ")ifuser_input.lower()=='quit':break# 1. 把用户的话加入历史messages.append({"role":"user","content":user_input})# 2. 请求AIresponse=client.chat.completions.create(model="deepseek-chat",messages=messages,stream=True)# 3. 打印AI回复并收集完整回复文本print("AI: ",end="")ai_reply=""forchunkinresponse:content=chunk.choices[0].delta.contentifcontent:print(content,end="",flush=True)ai_reply+=content# 4. 把AI的回复也加入历史,实现多轮记忆messages.append({"role":"assistant","content":ai_reply})print("\n对话结束,拜拜!")六、 新手避坑指南(血泪总结)
- 报错
AuthenticationError:大概率是API Key填错了,或者.env文件没读取到。检查Key前后有没有空格。 - 报错
Connection error:检查网络,或者BASE_URL填错了。一定要去平台官方文档复制准确的地址。 - 千万别把Key硬编码在代码里:一定要用我上面教的
dotenv方法,或者设置环境变量。一旦Key泄露,别人会瞬间刷爆你的余额。 - Token超限:大模型的记忆是有限的(比如128K)。多轮对话太久,历史记录太长,就会报错。解决方案是限制历史记录条数,或者对历史记录做摘要(这个我们以后讲)。
七、 总结与下一步计划
到这里,你已经成功用Python打通了“调用大模型API”的全链路。你学会了:
1.获取API Key并安全配置
2.安装SDK并发送请求
3实现流式打字机效果
4.用代码维护多轮对话记忆
下一步可以玩什么?
- 进阶1:用
FastAPI把这段代码包成接口,前端用Vue/React写个网页界面。 - 进阶2:引入
LangChain,给AI挂载一个“查天气”的工具,让它变成智能体(Agent)。 - 进阶3:结合本地PDF文档,搭建一个RAG知识库问答系统。
如果你跟着做跑通了,欢迎在评论区留言“打卡”!遇到任何报错,也欢迎把错误截图发在评论区,我会尽力帮大家解答。点赞收藏,你的AI应用开发之路不迷路!