AI辅助编程入门指南:从环境搭建到第一个智能脚本

引言:当“Hello World”变成了“Hello AI”🌍
还记得第一次写 print("Hello, World!") 时的激动吗?那一刻,仿佛亲手敲开了通往数字宇宙的大门。🚪
但如今,编程的门槛正在被AI“一脚踹开”。🚪💥 新手程序员可能还没完全搞懂“变量到底是啥”,就已经靠AI助手写出了能爬数据、画图表、自动发邮件的脚本;老开发者则从“重复搬砖”中解放,把精力放在更核心的逻辑设计上。
这不是魔法,而是 AI辅助编程(AI-Powered Programming)——2025年最值得掌握的技能之一。它不是让AI“替你写代码”,而是让AI成为你的“全能搭档”:帮你补全语法、排查bug、生成测试,甚至提供架构思路。
本文将手把手带你完成从“编程小白”到“AI编程玩家”的蜕变:
✅ 搭建适配AI工具的开发环境(避坑版)
✅ 安装并玩转主流AI编程工具(附对比表)
✅ 编写第一个“能干活”的智能脚本(天气预警+邮件推送)
✅ 掌握AI编程避坑指南(别让AI坑了你)
✅ 解锁5个进阶技巧+3个实战场景(从“能用”到“好用”)
准备好了吗?系好安全带,咱们发车!🚀

第一章:环境搭建——打造你的“AI编程战车”🛠️
AI编程的核心是“工具链协同”,环境搭建不仅要“能用”,更要“顺手”。这一章会带你避开新手常踩的坑,配置一套高效的AI编程环境。
1.1 选择你的“操作系统”💻
AI编程工具对系统兼容性较好,但不同系统的“开发体验”差异明显。选对系统,能少走50%的弯路。
| 系统 | 优点 | 缺点 | 推荐指数 | 适合人群 |
|---|---|---|---|---|
| Windows 10/11 | 软件生态丰富,AI工具(如Copilot、Cursor)无缝兼容;支持WSL2(Linux子系统),兼顾Windows易用性和Linux开发能力 | 原生命令行体验差;部分Linux专属AI工具(如本地大模型部署)需额外配置 | ⭐⭐⭐⭐ | 零基础新手、需要兼顾办公软件的开发者 |
| macOS | 终端体验极佳,与Python、AI工具兼容性拉满;M系列芯片对本地大模型(如Llama 3)的运行效率高 | 价格昂贵;部分Windows专属工具(如某些企业级AI插件)无法使用 | ⭐⭐⭐⭐⭐ | 追求开发效率的程序员、苹果生态用户 |
| Linux(Ubuntu 22.04) | 开发者天堂,支持所有AI工具和本地大模型部署;命令行操作高效,适合自动化脚本 | 桌面生态较弱,新手可能被命令行“劝退”;部分GUI类AI工具适配一般 | ⭐⭐⭐⭐ | 有一定命令行基础、需部署本地AI模型的开发者 |
📌 新手闭眼选方案:Windows 11 + WSL2(安装教程见微软官方指南),既能用Windows的图形界面,又能享受Linux的开发环境;预算充足直接上macOS,一步到位。
1.2 安装Python——AI时代的“编程语言母语”🐍
Python是AI编程的“通用语言”,无论是调用API、处理数据,还是部署模型,都离不开它。务必安装3.10及以上版本(很多AI库已不再支持旧版本)。
方法一:官网下载(最稳,适合新手)
访问 Python官网,下载最新版(推荐3.11或3.12,兼容性最佳)。
安装时必须勾选两个选项(否则后续会哭着重装):
✅ Add Python to PATH(让系统能找到Python)
✅ Install pip(Python的包管理工具,用来装AI库)
💬 “不勾PATH?那你以后每次运行Python都要手动输全路径,比如 C:\Users\你的名字\AppData\Local\Programs\Python\Python312\python.exe……别问我怎么知道的,都是血泪教训。” 😅
方法二:包管理器(高级玩家,一键搞定)
macOS:用Homebrew(先安装Homebrew)
brew install python@3.12
Ubuntu/Debian:
sudo apt update && sudo apt install python3.12 python3-pip
Windows:用Winget(Win11自带,Win10需手动安装)
winget install --id Python.Python.3.12
验证安装(关键一步)
打开终端(Windows用PowerShell,macOS/Linux用Terminal),输入以下命令:
python --version # 或 python3 --version(部分系统) pip --version # 或 pip3 --version
如果输出类似以下内容,说明安装成功:
Python 3.12.4 pip 24.0 from /usr/local/lib/python3.12/site-packages/pip (python 3.12)
📌 踩坑提示:如果出现“python不是内部或外部命令”,说明没勾Add Python to PATH,卸载后重新安装并勾选即可。
1.3 安装代码编辑器——你的“AI指挥台”⌨️
AI编程离不开“智能编辑器”,好的编辑器能让AI工具(如Copilot)发挥最大威力。以下三款是目前最主流的选择,各有侧重:
1. Visual Studio Code(VS Code)—— 全能王者👑
核心优势:免费开源、插件生态爆炸、轻量高效,支持所有AI编程工具(Copilot、Codeium等)。
适合人群:所有人(新手、老手、全栈开发者)。
👉 下载地址
必装插件(AI编程必备):
Python:微软官方插件,提供语法高亮、调试功能。
Pylance:AI驱动的智能补全,比默认补全强10倍。
GitHub Copilot:AI代码生成核心插件。
Bracket Pair Colorizer 2:彩色括号,再也不眼花。
Code Runner:一键运行代码,省去终端输入命令的麻烦。
2. PyCharm(Community版)—— Python专家💼
核心优势:专为Python优化,调试、重构、测试功能一体化,对大型Python项目(如AI模型训练)支持更好。
适合人群:专注Python开发、需要复杂调试功能的开发者。
👉 下载地址(Community版免费)
AI增强插件:
GitHub Copilot:在PyCharm中直接启用,配置与VS Code一致。
AI Assistant:JetBrains官方AI工具,支持代码解释、文档生成。
3. Cursor—— AI原生编辑器🚀
核心优势:专为AI编程设计,内置ChatGPT/Claude接口,支持“代码生成-重构-解释”一条龙,不用切换窗口。
适合人群:重度依赖AI写代码、追求极致效率的开发者。
👉 官网
特色功能:
Cmd+K(Mac)/Ctrl+K(Windows):直接召唤AI对话,修改当前代码。
AI Refactor:一键让AI重构选中代码,优化性能和可读性。
Context Aware:自动识别代码上下文,生成更贴合需求的内容。
💬 “VS Code像瑞士军刀,啥都能做;PyCharm像专业手术刀,专攻Python;Cursor像魔法杖,全程靠AI开挂。新手从VS Code入手准没错,生态最成熟,踩坑最少。” ✨
1.4 配置虚拟环境——别让你的系统“变脏”🧫
Python项目多了,最头疼的问题就是“依赖冲突”:比如项目A需要requests==2.25.0,项目B需要requests==2.32.0,直接装在系统里会互相干扰。虚拟环境就是解决这个问题的“神器”——为每个项目创建独立的“小环境”,包的安装、升级互不影响。
步骤1:创建虚拟环境
先新建一个项目文件夹(比如ai_programming),并进入该文件夹:
mkdir ai_programming # 创建文件夹 cd ai_programming # 进入文件夹
创建虚拟环境(环境名推荐用venv,简单好记):
python -m venv venv # 第一个venv是命令,第二个venv是环境名
执行后,文件夹里会多出一个venv文件夹,这就是你的独立环境。
步骤2:激活虚拟环境
Windows(PowerShell):
.\venv\Scripts\Activate.ps1
🔔 提示:如果出现“无法加载脚本”,右键PowerShell图标,选择“以管理员身份运行”,执行Set-ExecutionPolicy RemoteSigned,输入Y确认即可。
macOS/Linux(Terminal):
source venv/bin/activate
激活成功后,终端前面会出现(venv)标识,比如:
(venv) user@MacBook-Pro ai_programming %
步骤3:安装依赖(在虚拟环境中)
激活后,用pip安装的所有包都会保存在venv文件夹里,不影响系统Python:
pip install requests pandas numpy openai # 安装常用AI相关库
步骤4:保存依赖(最佳实践)
开发完成后,把项目依赖保存到requirements.txt文件,方便别人复现你的环境:
pip freeze > requirements.txt
别人拿到项目后,只需执行以下命令,就能一键安装所有依赖:
pip install -r requirements.txt
步骤5:退出虚拟环境
不需要时,输入以下命令退出:
deactivate
📌 铁律:每个AI编程项目都必须创建独立虚拟环境!别嫌麻烦,这能帮你避开90%的“包版本冲突”问题。

第二章:AI编程工具安装——召唤你的“代码精灵”🧫♂️
AI编程的核心是“选对工具”。目前主流的AI编程工具分为两类:实时补全类(如Copilot)和对话生成类(如ChatGPT)。前者适合写代码时“随写随补”,后者适合生成完整脚本、解决复杂问题。
2.1 GitHub Copilot——你的“AI结对编程伙伴”👨💻
GitHub Copilot是目前最流行的AI编程工具,由GitHub和OpenAI联合开发,本质是“实时代码补全+生成”,能像“预言家”一样猜你接下来要写的代码。
核心功能(为什么它这么火?)
实时代码补全:输入注释或开头代码,Copilot自动续写,支持Python、Java、JavaScript等几十种语言。
函数/类生成:输入函数名和注释,比如# 计算斐波那契数列第n项,Copilot直接生成完整函数。
单元测试自动生成:写好业务代码后,输入# 为上述函数写单元测试,自动生成测试用例。
注释生成:选中代码,右键选择“Copilot: Generate Docs”,自动生成函数注释(支持中文)。
安装步骤(以VS Code为例)
访问 GitHub Copilot官网,点击“Start free trial”(学生、教师可免费使用,需验证身份)。
在VS Code中打开“扩展”面板(快捷键Ctrl+Shift+X),搜索“GitHub Copilot”,点击“安装”。
安装完成后,点击左下角的“登录GitHub”,授权Copilot访问你的GitHub账号。
授权成功后,Copilot会自动启用,代码编辑时会显示灰色的“建议代码”,按Tab键即可接受。
实战示例(感受Copilot的威力)
在VS Code中新建test_copilot.py文件,输入以下注释和函数开头:
# 功能:判断一个数是否为质数 # 参数:n - 正整数 # 返回:True(是质数)或 False(不是质数) def is_prime(n):
Copilot会立即给出建议代码(灰色显示),按Tab接受后,完整代码如下:
# 功能:判断一个数是否为质数 # 参数:n - 正整数 # 返回:True(是质数)或 False(不是质数) def is_prime(n): if n <= 1: return False if n <= 3: return True if n % 2 == 0 or n % 3 == 0: return False i = 5 while i * i <= n: if n % i == 0 or n % (i + 2) == 0: return False i += 6 return True
甚至不用写注释,只写函数名def is_prime(n):,Copilot也能生成正确代码!
💬 “Copilot不是‘写代码’,而是‘猜你想写什么代码’。用熟了之后,写代码速度至少翻倍,再也不用记复杂的算法实现了。” 🚀
2.2 对话式AI工具——你的“代码顾问”与“问题 solver”🧠
实时补全工具(如Copilot)适合“边写边补”,而对话式AI(如ChatGPT、Claude)适合“解决具体问题”:生成完整脚本、解释复杂代码、排查bug等。
1. ChatGPT(OpenAI)—— 综合能力最强
核心优势:生成代码质量高,支持多轮对话优化,对Python生态(如数据分析、API调用)理解深入。
使用场景:生成完整脚本、解释代码逻辑、调试错误、学习新库用法。
👉 访问地址:https://chat.openai.com(需科学上网,免费版可用,Plus版响应更快)
最佳使用技巧:
提供“上下文”:比如“我正在用Python写一个天气预警脚本,已经获取了天气数据,现在需要添加邮件发送功能,用smtplib实现”。
要求“分步实现”:复杂需求可以拆分成“第一步获取数据,第二步判断天气,第三步发送邮件”,让AI逐步生成。
追问“为什么”:生成代码后,加一句“解释一下这段代码中smtplib的使用逻辑”,加深理解。
2. Claude(Anthropic)—— 长文本与逻辑王者
核心优势:上下文窗口极大(免费版支持10万token,约7.5万字),能处理整个代码文件,逻辑推理能力强,适合复杂项目重构。
使用场景:上传完整代码文件优化、审查大型脚本、生成详细文档。
👉 访问地址:https://claude.ai(免费版可用,支持中文)
独家功能:
直接上传代码文件(.py、.txt等),让Claude分析并优化。
生成“逐行注释”:上传一段无注释代码,要求“为每一行添加中文注释,解释作用”。
3. 国内替代工具(无需科学上网)
如果无法访问国外工具,以下国内AI同样能满足需求:
通义千问(阿里):https://qianwen.aliyun.com,对中文需求理解好,支持生成Python代码。
豆包(字节跳动):https://www.doubao.com,操作简单,适合新手,提供“代码解释”“bug修复”专项功能。
讯飞星火(科大讯飞):https://xinghuo.xfyun.cn,数学计算和算法生成能力较强。
实战示例:用ChatGPT生成完整脚本
向ChatGPT输入以下提示词(Prompt):
“用Python写一个脚本,功能:1. 调用免费天气API获取上海当前天气;2. 判断是否下雨(包括小雨、中雨等);3. 如果下雨,用QQ邮箱发送提醒邮件给指定地址;4. 添加异常处理(比如API请求失败、邮件发送失败);5. 输出详细日志。”
ChatGPT会生成包含注释的完整代码,并给出使用步骤(如获取API密钥、开启QQ邮箱SMTP服务)。只需按提示替换配置(如API密钥、邮箱账号),就能直接运行!
2.3 其他AI编程工具推荐(按需选择)
除了主流工具,这些“小众但好用”的工具能解决特定场景的问题:
| 工具 | 核心优势 | 适用场景 | 访问地址 |
|---|---|---|---|
| Codeium | 完全免费,支持实时补全、代码解释、重构,无使用次数限制 | 不想付费的用户,替代Copilot | https://codeium.com |
| Tabnine | 支持本地部署(数据不联网),保护代码隐私 | 处理敏感项目(如公司内部代码) | https://tabnine.com |
| Phind | 开发者专用搜索引擎,结合AI直接给出代码解决方案 | 遇到bug时,“搜问题+得代码”一步到位 | https://phind.com |
| Amazon CodeWhisperer | 与AWS生态深度集成,适合在AWS上开发AI项目 | 用AWS服务(如S3、Lambda)的开发者 | https://aws.amazon.com/codewhisperer |
| CodeGeeX(智谱AI) | 支持多语言代码生成,中文提示词优化好,免费版可用 | 国内用户,偏好中文交互 | https://codegeex.cn |
📌 工具选择建议:新手优先用“VS Code + Copilot + ChatGPT”组合,覆盖90%的AI编程场景;有隐私需求选Tabnine,用AWS选CodeWhisperer,完全免费选Codeium。

第三章:编写第一个智能脚本——从“零”到“英雄”🦸♂️
理论讲得再多,不如亲手写一个能“干活”的脚本。本章我们将开发一个**“天气预警小助手”**:自动获取天气、判断是否下雨、发送邮件提醒,全程用AI辅助完成,零基础也能搞定!
3.1 需求拆解:把“大目标”拆成“小步骤”🎯
复杂功能之所以难,是因为没拆解开。我们把“天气预警小助手”拆成4个可执行的小步骤:
获取天气数据:调用免费天气API,拿到当前城市的天气(如“小雨”“晴”)和温度。
判断是否需要提醒:如果天气包含“雨”(小雨、中雨等),触发提醒;否则不动作。
发送邮件提醒:用SMTP协议(支持QQ邮箱、Gmail等)发送带天气信息的提醒邮件。
异常处理与日志:处理API请求失败、邮件发送失败等问题,输出清晰日志,方便排查。
💡 AI提示技巧:拆解步骤后,可以把每个步骤单独交给AI生成代码,再拼接整合。比如先让AI写“获取天气数据”的函数,测试通过后,再写“发送邮件”的函数。
3.2 第一步:获取天气数据(AI帮你调API)☁️
要获取天气数据,需要调用“免费天气API”。我们用OpenWeatherMap(全球通用,免费额度足够个人使用),AI会帮我们搞定API调用的所有细节。
步骤1:获取API密钥(免费)
访问 OpenWeatherMap官网,用邮箱注册账号(免费)。
登录后,点击右上角头像 → “My API Keys” → 输入Key名称(如“weather_alert”)→ 点击“Generate”。
生成的API Key(一串字母+数字,如abc123xyz789)保存好,后面要用。
🔔 注意:API Key生成后需要等10-15分钟生效,否则会提示“权限不足”。
步骤2:让AI生成“获取天气”函数
打开ChatGPT,输入以下提示词(越具体越好):
“用Python写一个函数get_weather(city, api_key),功能:调用OpenWeatherMap的API获取指定城市的当前天气。要求:1. 返回天气状况(如‘Rain’)和温度(摄氏度);2. 支持中文城市名;3. 添加异常处理(网络错误、API返回错误);4. 使用requests库;5. 输出详细日志(比如‘正在获取北京天气’‘获取成功,温度22℃’)。”
ChatGPT会生成类似以下的代码,并附带使用说明:
import requests
import logging
# 配置日志(输出时间、日志级别、内容)
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
def get_weather(city, api_key):
"""
获取指定城市的当前天气和温度
:param city: 中文城市名(如“北京”)
:param api_key: OpenWeatherMap的API密钥
:return: (weather: str, temp: float) | (None, None) 失败时返回(None, None)
"""
# API请求URL(units=metric表示温度单位为摄氏度,lang=zh_cn表示返回中文信息)
base_url = "http://api.openweathermap.org/data/2.5/weather"
params = {
"q": city,
"appid": api_key,
"units": "metric",
"lang": "zh_cn"
}
try:
logging.info(f"正在获取【{{C}{C}{C}city}】的天气数据...")
# 发送GET请求,设置超时时间10秒(避免卡死)
response = requests.get(base_url, params=params, timeout=10)
# 检查响应状态码:200表示成功,非200表示失败
response.raise_for_status()
# 解析JSON响应
data = response.json()
# 提取天气状况(main字段:如“Rain”“Clear”)和温度(temp字段)
weather = data["weather"][0]["main"]
temp = round(data["main"]["temp"], 1) # 保留1位小数
logging.info(f"【{{C}{C}{C}city}】天气获取成功:天气={{C}{C}{C}weather},温度={{C}{C}{C}temp}℃")
return weather, temp
except requests.exceptions.RequestException as e:
# 捕获网络错误(如超时、无网络)
logging.error(f"获取【{{C}{C}{C}city}】天气失败:网络错误 - {{C}{C}{C}str(e)}")
return None, None
except KeyError as e:
# 捕获JSON解析错误(API返回格式异常)
logging.error(f"获取【{{C}{C}{C}city}】天气失败:数据格式错误 - 缺少字段{{C}{C}{C}e}")
return None, None
except Exception as e:
# 捕获其他未知错误
logging.error(f"获取【{{C}{C}{C}city}】天气失败:未知错误 - {{C}{C}{C}str(e)}")
return None, None
# 测试函数(替换为你的API密钥和城市)
if __name__ == "__main__":
API_KEY = "你的OpenWeatherMap API密钥"
CITY = "上海"
weather, temp = get_weather(CITY, API_KEY)
if weather and temp:
print(f"测试结果:{{C}{C}{C}CITY}当前天气{{C}{C}{C}weather},温度{{C}{C}{C}temp}℃")
else:
print("测试失败,请检查API密钥或网络")步骤3:测试“获取天气”函数
在虚拟环境中安装requests库(AI生成的代码依赖它):
pip install requests
把代码中的API_KEY替换为你自己的密钥,CITY改为你所在的城市(如“广州”)。
运行脚本,若输出类似以下内容,说明功能正常:
2025-09-18 14:30:00,123 - INFO - 正在获取【上海】的天气数据... 2025-09-18 14:30:01,456 - INFO - 【上海】天气获取成功:天气=Rain,温度=22.5℃ 测试结果:上海当前天气Rain,温度22.5℃
3.3 第二步:发送邮件提醒(AI教你用SMTP)📧
接下来实现“发送邮件”功能。我们用QQ邮箱(国内用户最方便,无需科学上网),需要先开启SMTP服务并获取授权码。
步骤1:开启QQ邮箱SMTP服务(关键配置)
登录QQ邮箱 → 点击右上角“设置” → 选择“账户”选项卡。
下拉找到“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”,开启“POP3/SMTP服务”。
按提示发送短信验证,验证后会获得一个16位授权码(如abcdefghijklmnop),保存好(这不是QQ密码,是邮件客户端专用密码)。
步骤2:让AI生成“发送邮件”函数
向ChatGPT输入提示词:
“用Python写一个函数send_rain_alert(recipient_email, weather, temp, city),功能:当检测到下雨时,发送邮件提醒。要求:1. 使用QQ邮箱SMTP服务器(smtp.qq.com,端口587);2. 发件人邮箱为我的QQ邮箱,密码用SMTP授权码;3. 邮件主题包含‘下雨提醒’,正文显示城市、天气、温度和带伞建议;4. 添加异常处理(如登录失败、发送失败);5. 输出日志。”
ChatGPT生成的代码如下(需替换发件人信息):
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import logging
# 发件人配置(替换为你的信息)
SENDER_EMAIL = "你的QQ邮箱@qq.com" # 如123456@qq.com
SENDER_AUTH_CODE = "你的QQ邮箱SMTP授权码" # 16位字符串
def send_rain_alert(recipient_email, weather, temp, city):
"""
发送下雨提醒邮件
:param recipient_email: 收件人邮箱(如xxx@example.com)
:param weather: 当前天气(如“Rain”)
:param temp: 当前温度(摄氏度)
:param city: 城市名
:return: bool - 发送成功返回True,失败返回False
"""
# 构建邮件内容
msg = MIMEMultipart()
msg["From"] = SENDER_EMAIL
msg["To"] = recipient_email
msg["Subject"] = f"🌧️ 【{{C}{C}{C}city}】今日有雨,记得带伞!" # 邮件主题
# 邮件正文(支持换行)
email_body = f"""
亲爱的用户:
您好!根据最新天气预报,【{city}】今日天气状况如下:
• 天气:{weather}
• 温度:{temp}℃
由于检测到降雨,建议您出门时携带雨具,注意路滑和交通安全。
祝您度过愉快的一天!
—— 天气预警小助手
"""
# 把正文添加到邮件中,指定编码为utf-8(避免中文乱码)
msg.attach(MIMEText(email_body, "plain", "utf-8"))
try:
logging.info(f"正在向【{{C}{C}{C}recipient_email}】发送下雨提醒邮件...")
# 连接QQ邮箱SMTP服务器
with smtplib.SMTP("smtp.qq.com", 587) as server:
server.starttls() # 启用TLS加密(安全连接)
# 登录SMTP服务器(用授权码而非QQ密码)
server.login(SENDER_EMAIL, SENDER_AUTH_CODE)
# 发送邮件(将MIMEMultipart对象转为字符串)
server.send_message(msg)
logging.info(f"邮件发送成功!收件人:{{C}{C}{C}recipient_email}")
return True
except smtplib.SMTPAuthenticationError:
logging.error("邮件发送失败:SMTP登录失败,请检查发件人邮箱和授权码是否正确")
return False
except smtplib.SMTPException as e:
logging.error(f"邮件发送失败:SMTP服务错误 - {{C}{C}{C}str(e)}")
return False
except Exception as e:
logging.error(f"邮件发送失败:未知错误 - {{C}{C}{C}str(e)}")
return False
# 测试函数
if __name__ == "__main__":
# 测试发送(替换为收件人邮箱)
send_rain_alert(
recipient_email="你的收件人邮箱@example.com",
weather="Rain",
temp=22.5,
city="上海"
)步骤3:测试“发送邮件”函数
替换代码中的SENDER_EMAIL(你的QQ邮箱)和SENDER_AUTH_CODE(16位授权码)。
替换测试部分的recipient_email(可以填自己的另一个邮箱,方便测试)。
运行脚本,若收到邮件,说明功能正常!
3.4 第三步:整合脚本(把零件拼成整机)🧩
现在,我们有了“获取天气”和“发送邮件”两个核心函数,接下来要做的是:
读取配置(城市、API密钥、收件人邮箱等,集中管理,方便修改)。
串联逻辑:先获取天气 → 判断是否下雨 → 下雨则发送邮件。
添加主函数main(),让脚本可以直接运行。
完整脚本代码(带详细注释)
创建weather_alert.py文件,粘贴以下代码(替换所有“你的xxx”配置):
import requests
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import logging
# ======================== 配置区(请替换为你的信息) ========================
OPENWEATHER_API_KEY = "你的OpenWeatherMap API密钥" # 如"abc123xyz789"
TARGET_CITY = "上海" # 你要查询的城市
RECIPIENT_EMAIL = "收件人邮箱@example.com" # 接收提醒的邮箱
SENDER_EMAIL = "你的QQ邮箱@qq.com" # 发件人QQ邮箱(如"123456@qq.com")
SENDER_AUTH_CODE = "你的QQ邮箱SMTP授权码" # QQ邮箱16位授权码
# ===========================================================================
# 配置日志(输出到控制台,包含时间、级别、内容)
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s",
datefmt="%Y-%m-%d %H:%M:%S"
)
def get_weather(city, api_key):
"""获取指定城市的天气和温度"""
base_url = "http://api.openweathermap.org/data/2.5/weather"
params = {
"q": city,
"appid": api_key,
"units": "metric",
"lang": "zh_cn"
}
try:
logging.info(f"开始查询【{{C}{C}{C}city}】天气...")
response = requests.get(base_url, params=params, timeout=10)
response.raise_for_status()
data = response.json()
weather = data["weather"][0]["main"] # 天气状况(如"Rain")
temp = round(data["main"]["temp"], 1) # 温度(保留1位小数)
logging.info(f"【{{C}{C}{C}city}】天气查询成功:{{C}{C}{C}weather},{{C}{C}{C}temp}℃")
return weather, temp
except requests.exceptions.RequestException as e:
logging.error(f"【{{C}{C}{C}city}】天气查询失败(网络问题):{{C}{C}{C}str(e)}")
return None, None
except KeyError as e:
logging.error(f"【{{C}{C}{C}city}】天气查询失败(数据格式错误):缺少字段{{C}{C}{C}e}")
return None, None
except Exception as e:
logging.error(f"【{{C}{C}{C}city}】天气查询失败(未知错误):{{C}{C}{C}str(e)}")
return None, None
def send_rain_alert(recipient_email, weather, temp, city):
"""发送下雨提醒邮件"""
# 构建邮件
msg = MIMEMultipart()
msg["From"] = SENDER_EMAIL
msg["To"] = recipient_email
msg["Subject"] = f"🌧️ 【{{C}{C}{C}city}】降雨提醒:今日有{{C}{C}{C}weather},记得带伞!"
# 邮件正文
email_body = f"""
👋 您好!
天气预警小助手为您播报【{city}】今日天气:
• 天气状况:{weather}
• 实时温度:{temp}℃
⚠️ 温馨提示:
由于检测到降雨,建议您出门时携带雨伞或雨衣,注意路面湿滑,安全出行~
🌟 祝您今日一切顺利!
—— 天气预警小助手
"""
msg.attach(MIMEText(email_body, "plain", "utf-8"))
try:
logging.info(f"准备向【{{C}{C}{C}recipient_email}】发送降雨提醒...")
with smtplib.SMTP("smtp.qq.com", 587) as server:
server.starttls()
server.login(SENDER_EMAIL, SENDER_AUTH_CODE)
server.send_message(msg)
logging.info("降雨提醒邮件发送成功!")
return True
except smtplib.SMTPAuthenticationError:
logging.error("邮件发送失败:请检查QQ邮箱和SMTP授权码是否正确!")
return False
except Exception as e:
logging.error(f"邮件发送失败(未知错误):{{C}{C}{C}str(e)}")
return False
def main():
"""主函数:串联整个流程"""
logging.info("=" * 50)
logging.info("天气预警小助手启动!")
logging.info("=" * 50)
# 1. 获取天气数据
weather, temp = get_weather(TARGET_CITY, OPENWEATHER_API_KEY)
if not weather or not temp:
logging.error("流程终止:无法获取有效天气数据")
return
# 2. 判断是否需要发送提醒(包含"Rain"或"Drizzle"表示下雨/小雨)
rainy_conditions = ["Rain", "Drizzle"] # 下雨相关的天气状态
if weather in rainy_conditions:
logging.info(f"检测到【{{C}{C}{C}TARGET_CITY}】今日有雨({{C}{C}{C}weather}),触发提醒流程...")
# 3. 发送提醒邮件
send_success = send_rain_alert(RECIPIENT_EMAIL, weather, temp, TARGET_CITY)
if not send_success:
logging.error("流程终止:邮件发送失败")
else:
logging.info(f"【{{C}{C}{C}TARGET_CITY}】今日无雨({{C}{C}{C}weather}),无需发送提醒")
logging.info("=" * 50)
logging.info("天气预警小助手运行结束!")
logging.info("=" * 50)
# 当脚本直接运行时,执行主函数
if __name__ == "__main__":
main()3.5 运行与测试(见证成果的时刻!)🧪
运行步骤
确保虚拟环境已激活(终端前有(venv)标识)。
安装依赖(如果还没安装):
pip install requests
运行脚本:
python weather_alert.py
成功场景输出
如果城市正在下雨,终端会输出:
2025-09-18 15:00:00 - INFO - ================================================== 2025-09-18 15:00:00 - INFO - 天气预警小助手启动! 2025-09-18 15:00:00 - INFO - ================================================== 2025-09-18 15:00:01 - INFO - 开始查询【上海】天气... 2025-09-18 15:00:02 - INFO - 【上海】天气查询成功:Rain,22.5℃ 2025-09-18 15:00:02 - INFO - 检测到【上海】今日有雨(Rain),触发提醒流程... 2025-09-18 15:00:02 - INFO - 准备向【xxx@example.com】发送降雨提醒... 2025-09-18 15:00:05 - INFO - 降雨提醒邮件发送成功! 2025-09-18 15:00:05 - INFO - ================================================== 2025-09-18 15:00:05 - INFO - 天气预警小助手运行结束! 2025-09-18 15:00:05 - INFO - ==================================================
同时,收件人邮箱会收到一封带 emoji 的提醒邮件,效果如下:
主题:🌧️ 【上海】降雨提醒:今日有Rain,记得带伞!
正文:
👋 您好!
天气预警小助手为您播报【上海】今日天气:
• 天气状况:Rain
• 实时温度:22.5℃
⚠️ 温馨提示:由于检测到降雨,建议您出门时携带雨伞或雨衣…
常见问题排查
API请求失败:检查API密钥是否生效(生成后等15分钟)、城市名是否正确(如“北京”而非“beijing”)。
邮件发送失败:检查QQ邮箱授权码是否正确、发件人邮箱是否与授权码匹配、收件人邮箱是否填写正确。
中文乱码:确保邮件正文用utf-8编码(代码中已配置,无需修改)。
💬 “这个脚本比闹钟还贴心!每天早上运行一次,再也不用担心出门忘带伞了。如果想让它自动运行,可以用Windows任务计划或Linux的crontab,让AI帮你写定时任务脚本~” 😂

第四章:AI编程避坑指南——别让AI“坑”了你 🛑
AI很强大,但不是“万能的神”。新手很容易陷入“盲目信任AI”的误区,写出有bug、不安全甚至无法运行的代码。这一章会带你避开AI编程中最常见的6个坑,让你的代码既高效又可靠。
4.1 坑1:盲目复制AI生成的代码(最常见!)❌
AI生成的代码“看起来很对”,但可能隐藏致命问题:
使用废弃的库或API:比如推荐用requests的session.get()但参数错误,或用已停止维护的库(如pandas-profiling已改名为ydata-profiling)。
忽略边界条件:比如写“计算平均分”的函数时,没考虑“列表为空”的情况,导致ZeroDivisionError。
硬编码敏感信息:直接把API密钥、数据库密码写在代码里,上传到GitHub后泄露。
避坑方案:“三审原则”
一审语法:用编辑器的语法检查(VS Code会标红错误),确保没有拼写错误、缩进问题。
二审逻辑:逐行阅读代码,思考“这里是否有遗漏的情况?”比如:
函数是否处理了None输入?
循环是否会出现死循环?
API请求是否有超时设置?
三审安全:
敏感信息(密钥、密码)是否硬编码?用环境变量或配置文件替代(见4.3节)。
是否有SQL注入风险?(如果用到数据库)
是否调用了不可信的API?
实战示例:修复AI生成的“有坑代码”
AI生成的“计算平均分”函数(有坑):
# AI生成的代码(有bug) def calculate_average(scores): total = sum(scores) average = total / len(scores) return average
问题:当scores为空列表(如calculate_average([]))时,会抛出ZeroDivisionError。
修复后(添加边界条件):
# 修复后的代码
def calculate_average(scores):
if not scores: # 处理空列表
logging.warning("分数列表为空,无法计算平均分")
return 0.0 # 或返回None,根据业务需求定
total = sum(scores)
average = total / len(scores)
return round(average, 2) # 保留2位小数,更符合实际需求4.2 坑2:提示词(Prompt)太模糊,AI“猜不透你”🤔
新手常犯的错误是“用一句话丢给AI”,比如:
❌ 模糊提示:“写一个爬虫”“做一个数据分析脚本”
❌ 缺少上下文:“为什么这段代码报错?”(不贴代码)
❌ 没有格式要求:“生成测试用例”(没说用pytest还是unittest)
结果就是AI生成的代码“驴唇不对马嘴”,需要反复修改,反而浪费时间。
避坑方案:“5W1H”提示词公式
向AI提问时,包含以下6个要素,输出准确率提升80%:
What:要实现什么功能?(如“爬取豆瓣电影Top250的电影名、评分”)
Why:用途是什么?(如“用于数据分析,需要保存为CSV文件”)
Who:给谁用?(如“供新手运行,代码需要详细注释”)
Which:用什么技术栈?(如“用Python的requests和BeautifulSoup,不要用Scrapy”)
How:有什么特殊要求?(如“处理分页,每爬1页休眠1秒,避免被封禁”)
Where:输出到哪里?(如“保存到当前目录的douban_top250.csv”)
对比示例:模糊提示 vs 精准提示
| 类型 | 提示词 | AI输出效果 |
|---|---|---|
| ❌ 模糊 | “写一个Python爬虫爬豆瓣电影” | 生成的代码可能用Scrapy(新手难上手),不处理分页,不保存数据,无注释。 |
| ✅ 精准 | “用Python写一个爬取豆瓣电影Top250的爬虫:1. 使用requests和BeautifulSoup;2. 爬取每部电影的名称、评分、导演、上映年份;3. 处理10页分页(每页25部);4. 每爬1页休眠1秒(避免被反爬);5. 数据保存为CSV文件(编码utf-8);6. 添加详细中文注释,适合Python新手运行;7. 处理网络超时和403错误。” | 生成的代码符合所有要求,新手能直接运行,几乎无需修改。 |
4.3 坑3:敏感信息硬编码(安全大忌!)🔒
AI生成代码时,为了“演示方便”,会直接把API密钥、邮箱密码等硬编码在代码里,比如:
# AI生成的代码(不安全) API_KEY = "abc123xyz789" # 硬编码的API密钥 SMTP_PASSWORD = "123456" # 硬编码的密码
如果把这样的代码上传到GitHub,任何人都能看到你的密钥,可能导致:
API被恶意调用,耗尽免费额度。
邮箱被他人登录,发送垃圾邮件。
数据库被攻击,数据泄露。
避坑方案:用环境变量存储敏感信息
环境变量是系统级别的“变量”,代码从系统中读取,不在代码里明文显示。
实战步骤(以Windows为例)
设置环境变量:
变量名:OPENWEATHER_API_KEY,变量值:你的API密钥。
变量名:QQ_SMTP_AUTH_CODE,变量值:你的QQ邮箱授权码。
按下Win + R,输入sysdm.cpl → 点击“高级” → “环境变量”。
在“用户变量”中点击“新建”,添加以下变量:
点击“确定”保存,关闭所有终端(环境变量需重启终端生效)。
代码中读取环境变量:
使用Python的os库读取环境变量,替代硬编码:
import os import logging # 从环境变量读取敏感信息(安全!) OPENWEATHER_API_KEY = os.getenv("OPENWEATHER_API_KEY") QQ_SMTP_AUTH_CODE = os.getenv("QQ_SMTP_AUTH_CODE") # 检查环境变量是否配置 if not OPENWEATHER_API_KEY: logging.error("请先配置环境变量 OPENWEATHER_API_KEY!") exit(1) # 退出程序 if not QQ_SMTP_AUTH_CODE: logging.error("请先配置环境变量 QQ_SMTP_AUTH_CODE!") exit(1)
macOS/Linux设置环境变量
临时生效(当前终端):
export OPENWEATHER_API_KEY="你的API密钥" export QQ_SMTP_AUTH_CODE="你的授权码"
永久生效(所有终端):
编辑~/.bashrc(或~/.zshrc),添加上述两行,保存后执行:
source ~/.bashrc # 生效配置
4.4 坑4:不验证AI生成的依赖版本📦
AI生成代码时,通常不会指定库的版本(如pip install requests而非pip install requests==2.32.2),可能导致:
安装的库版本过新,与代码不兼容(比如新版本移除了旧函数)。
安装的库版本过旧,存在安全漏洞。
避坑方案:“固定依赖版本+定期更新”
固定版本:在requirements.txt中指定具体版本,比如:
# requirements.txt(指定版本) requests==2.32.2 # 稳定版本,与代码兼容 pandas==2.2.2 numpy==1.26.4
安装时用:pip install -r requirements.txt
如何选择版本:
优先选“最新的稳定版”(非beta版)。
参考库的官方文档,确认与Python版本兼容(如pandas 2.0+需要Python 3.8+)。
用pip list --outdated查看哪些库有更新,定期更新(但要先测试兼容性)。
安全扫描:用safety工具扫描依赖中的安全漏洞:
pip install safety safety check # 扫描当前环境的依赖漏洞
4.5 坑5:依赖“黑箱代码”,不理解原理📚
很多新手用AI写代码时,“复制粘贴就能跑”就满足了,从不问“这段代码为什么这么写?”。比如:
用AI生成了requests的session请求代码,却不知道session和普通get的区别。
用AI生成了pandas的数据处理代码,却不知道df.groupby()的逻辑。
长期下来,会变成“只会调AI的工具人”,遇到AI解决不了的问题(如复杂业务逻辑、性能优化)就束手无策。
避坑方案:“先懂后用”三步骤
问AI“为什么”:生成代码后,追加提问:
“解释一下这段代码中session的作用?”
“df.dropna(subset=['age'])为什么要加subset参数?”
“这段代码的时间复杂度是多少?有没有优化空间?”
查官方文档:AI的解释可能不全面,关键知识点一定要查官方文档:
Python基础:Python官方文档
requests库:requests官方文档
pandas库:pandas官方文档
手动改写代码:把AI生成的代码用“另一种方式实现”,比如:
AI用for循环处理列表,你尝试用列表推导式重写。
AI用pandas的apply函数,你尝试用map或vectorize优化。
4.6 坑6:忽视AI的“能力边界”🚫
AI不是万能的,它有明确的能力边界,超出边界的需求会生成“无效代码”:
处理实时数据或本地文件:AI无法访问你的本地硬盘(如“读取我电脑上的data.csv文件”),会生成“假设文件存在”的代码,但实际运行时会报FileNotFoundError。
调用未公开的API:AI不知道你公司内部系统的API地址和参数,会生成“通用格式”的代码,无法直接使用。
解决超复杂的算法问题:比如“实现一个分布式一致性协议”“优化深度学习模型的显存占用”,AI生成的代码可能只有框架,缺少核心逻辑。
避坑方案:“拆分需求+补充信息”
拆分需求:把“AI搞不定”的部分拆出来,手动处理。比如:
需求“读取本地data.csv并分析” → 拆分为“AI生成数据分析代码” + “手动确认文件路径和格式”。
补充信息:如果是公司内部API,向AI提供“API文档片段”(如请求地址、参数格式、返回示例),再让AI生成代码。
降低难度:把复杂问题拆成多个简单问题。比如“优化深度学习模型” → 先让AI“生成模型剪枝的基础代码”,再让AI“优化剪枝后的精度损失”。
4.7 避坑总结:AI是“助手”,不是“老板”👔
记住一句话:“AI负责生成代码,你负责对代码负责”。优秀的AI编程者会:
用AI提高效率,但不放弃思考。
依赖AI解决重复劳动,但坚持学习底层原理。
把AI当“结对编程伙伴”,而不是“甩手掌柜”。

第五章:进阶技巧——让AI成为你的“超级外挂”💥
掌握了基础后,这一章会带你解锁5个“AI编程进阶技巧”,让你的效率再上一个台阶。这些技巧能帮你解决“复杂项目开发”“代码优化”“团队协作”等场景的问题,从“会用AI”变成“善用AI”。
5.1 技巧1:用AI生成单元测试(代码质量翻倍)🧪
单元测试是“验证函数/类是否正确工作”的代码,能提前发现bug,尤其适合大型项目。但手动写测试用例很枯燥,AI能帮你自动生成,准确率高达90%。
实战步骤(以pytest为例)
安装pytest:
pip install pytest
让AI生成测试用例:
假设你有一个utils.py文件,包含一个“计算BMI指数”的函数:
# utils.py def calculate_bmi(weight, height): """ 计算BMI指数(体重kg / 身高m的平方) :param weight: 体重(kg,必须>0) :param height: 身高(m,必须>0) :return: BMI值(保留1位小数) :raise: ValueError - 体重或身高为非正数时 """ if weight <= 0 or height <= 0: raise ValueError("体重和身高必须为正数") bmi = weight / (height ** 2) return round(bmi, 1)向ChatGPT输入提示词:
“为以下Python函数写单元测试,使用pytest框架:1. 测试正常情况(如体重60kg,身高1.7m,BMI约20.8);2. 测试边界值(体重1kg,身高0.5m;体重100kg,身高2.0m);3. 测试异常情况(体重为0、负数,身高为0、负数),确保抛出ValueError;4. 测试用例文件名为test_utils.py,每个测试用例加中文注释。”
AI生成的测试代码(test_utils.py):
# test_utils.py import pytest from utils import calculate_bmi # 导入要测试的函数 def test_bmi_normal_case(): """测试正常情况:BMI在健康范围内""" # 体重60kg,身高1.7m → 60/(1.7²) ≈ 20.8 assert calculate_bmi(60, 1.7) == 20.8 # 体重70kg,身高1.8m → 70/(1.8²) ≈ 21.6 assert calculate_bmi(70, 1.8) == 21.6 def test_bmi_edge_case(): """测试边界值:体重/身高极小或极大""" # 体重1kg,身高0.5m → 1/(0.5²) = 4.0 assert calculate_bmi(1, 0.5) == 4.0 # 体重100kg,身高2.0m → 100/(2.0²) = 25.0 assert calculate_bmi(100, 2.0) == 25.0 def test_bmi_invalid_weight(): """测试异常情况:体重为0或负数""" # 体重为0 → 抛出ValueError with pytest.raises(ValueError, match="体重和身高必须为正数"): calculate_bmi(0, 1.7) # 体重为负数 → 抛出ValueError with pytest.raises(ValueError, match="体重和身高必须为正数"): calculate_bmi(-60, 1.7) def test_bmi_invalid_height(): """测试异常情况:身高为0或负数""" # 身高为0 → 抛出ValueError with pytest.raises(ValueError, match="体重和身高必须为正数"): calculate_bmi(60, 0) # 身高为负数 → 抛出ValueError with pytest.raises(ValueError, match="体重和身高必须为正数"): calculate_bmi(60, -1.7)
运行测试:
在终端中执行:
pytest test_utils.py -v # -v表示显示详细结果
输出如下(全部通过):
collected 4 items test_utils.py::test_bmi_normal_case PASSED test_utils.py::test_bmi_edge_case PASSED test_utils.py::test_bmi_invalid_weight PASSED test_utils.py::test_bmi_invalid_height PASSED
💡 优势:用AI生成单元测试,不仅节省时间,还能覆盖你没想到的边界情况(如体重为0),大幅提升代码可靠性。
5.2 技巧2:用AI重构“祖传代码”(老项目救星)🛠️
每个开发者都遇到过“祖传代码”——没有注释、逻辑混乱、重复代码多的旧脚本。手动重构耗时耗力,AI能帮你快速优化,让代码变得“优雅又高效”。
重构目标(AI能帮你实现)
拆分过大的函数(如一个函数写500行 → 拆成多个小函数)。
移除重复代码(用函数或类封装重复逻辑)。
添加类型注解(提升可读性和IDE提示)。
优化性能(如用列表推导式替代低效的for循环)。
添加中文注释和文档字符串。
实战示例:重构“混乱的用户数据处理代码”
原始代码(祖传代码,无注释、逻辑混乱):
# 祖传代码(bad_code.py)
def process_users(users):
result = []
for u in users:
if u.get('age') and u['age'] >= 18:
if u.get('city') == 'Beijing':
score = u.get('score', 0) * 1.2
else:
score = u.get('score', 0) * 1.1
result.append({
'name': u.get('name', 'Unknown'),
'age': u['age'],
'city': u.get('city', 'Unknown'),
'adjusted_score': round(score, 2)
})
return result向AI输入提示词:
“重构以下Python代码,要求:1. 拆分过大的函数(process_users太复杂);2. 添加详细中文注释和函数文档字符串;3. 添加类型注解(使用typing模块);4. 优化条件判断逻辑,减少嵌套;5. 处理可能的KeyError(比如用户字典缺少’age’字段);6. 用更Pythonic的方式实现(如列表推导式或生成器)。”
AI重构后的代码(优雅、易读、可靠):
# 重构后的代码(good_code.py)
from typing import List, Dict, Optional, Union
def calculate_adjusted_score(city: Optional[str], base_score: float) -> float:
"""
根据用户所在城市计算调整后的分数
:param city: 用户所在城市(可能为None)
:param base_score: 用户基础分数
:return: 调整后的分数(保留2位小数)
"""
# 北京用户加分20%,其他城市加分10%,默认不加分
if city == "Beijing":
return round(base_score * 1.2, 2)
elif city: # 城市存在但非北京
return round(base_score * 1.1, 2)
else: # 城市为None
return round(base_score, 2)
def validate_user(user: Dict[str, Union[str, int, float]]) -> bool:
"""
验证用户是否符合处理条件(成年且年龄字段存在)
:param user: 用户字典
:return: True(符合条件)/ False(不符合)
"""
# 确保age字段存在且为大于等于18的整数/浮点数
age = user.get("age")
return isinstance(age, (int, float)) and age >= 18
def process_users(users: List[Dict[str, Union[str, int, float]]]) -> List[Dict[str, Union[str, int, float]]]:
"""
处理用户列表:筛选成年用户,计算调整后分数,返回结构化结果
:param users: 原始用户列表(每个用户为字典,包含name/age/city/score等字段)
:return: 处理后的用户列表(包含name/age/city/adjusted_score)
"""
# 用列表推导式替代for循环,更Pythonic
return [
{
"name": user.get("name", "Unknown"), # 姓名默认值"Unknown"
"age": user["age"], # 已通过validate_user验证,age必存在
"city": user.get("city", "Unknown"), # 城市默认值"Unknown"
"adjusted_score": calculate_adjusted_score(
city=user.get("city"),
base_score=float(user.get("score", 0)) # 分数默认0,转为float
)
}
for user in users
if validate_user(user) # 只处理符合条件的用户
]
# 测试
if __name__ == "__main__":
test_users = [
{"name": "Alice", "age": 25, "city": "Beijing", "score": 80},
{"name": "Bob", "age": 17, "city": "Shanghai", "score": 90}, # 未成年,被过滤
{"name": "Charlie", "age": 30, "score": 85}, # 无city字段
{"name": "Dave", "city": "Guangzhou", "score": 75}, # 无age字段,被过滤
]
processed = process_users(test_users)
print(processed)重构前后对比:
| 维度 | 原始代码 | 重构后代码 |
|---|---|---|
| 可读性 | 无注释,逻辑嵌套深,难理解 | 有详细注释和文档字符串,函数拆分清晰 |
| 可维护性 | 一个函数50行,修改容易出bug | 拆分为3个小函数,各司其职,修改方便 |
| 可靠性 | 可能抛出KeyError(如user无’age’) | 有验证函数,处理默认值,无异常 |
| 扩展性 | 添加新规则(如上海用户加分)需改核心逻辑 | 只需修改calculate_adjusted_score,符合开闭原则 |
💬 “AI重构代码的能力堪比‘代码美容师’!以前要花1小时重构的祖传代码,现在AI5分钟就能搞定,还比我写得更规范。” 🚀
5.3 技巧3:用AI生成项目文档(告别“文档恐惧症”)📄
文档是团队协作的“桥梁”,但开发者往往“宁愿写代码,不愿写文档”。AI能帮你自动生成各类文档,包括:
README.md:项目介绍、安装步骤、使用示例。
函数/类的文档字符串(如docstring)。
API接口文档(如Swagger格式)。
数据库表结构说明。
实战示例:生成项目README.md
假设你开发了“天气预警小助手”项目,向ChatGPT输入提示词:
“为我的Python项目‘天气预警小助手’生成README.md,要求:1. 包含项目简介、功能特点、安装步骤、使用方法、配置说明、常见问题;2. 使用Markdown格式,添加适当的emoji和代码块;3. 语言为中文,适合新手阅读;4. 安装步骤包含虚拟环境创建和依赖安装;5. 配置说明详细说明环境变量的设置方法。”
AI生成的README.md(节选)
# 天气预警小助手 🌤️→🌧️ 一个基于Python和AI辅助开发的天气预警工具,能自动查询指定城市天气,若检测到降雨,通过QQ邮箱发送带伞提醒。 ## ✨ 功能特点 - 🌍 支持全球城市天气查询(基于OpenWeatherMap API) - 🌧️ 智能识别降雨天气(小雨、中雨等),自动触发提醒 - 📧 用QQ邮箱发送美观的提醒邮件(含天气和温度信息) - 🛡️ 完善的异常处理(网络错误、API失败、邮件发送失败) - 📝 详细日志输出,方便排查问题 - 🔒 安全的配置方式(用环境变量存储敏感信息,避免泄露) ## 🚀 安装步骤 ### 1. 克隆项目(或下载代码) ```bash git clone https://github.com/your-name/weather-alert.git cd weather-alert
2. 创建并激活虚拟环境
# Windows(PowerShell) python -m venv venv .\venv\Scripts\Activate.ps1 # macOS/Linux(Terminal) python3 -m venv venv source venv/bin/activate
3. 安装依赖
pip install -r requirements.txt
⚙️ 配置说明
项目需要配置4个环境变量(敏感信息,不硬编码):
| 环境变量名 | 说明 | 示例 |
|---|---|---|
| OPENWEATHER_API_KEY | OpenWeatherMap的API密钥(免费注册) | abc123xyz789 |
| TARGET_CITY | 要查询的城市(中文) | 上海 |
| RECIPIENT_EMAIL | 接收提醒的邮箱 | user@example.com |
| QQ_SMTP_AUTH_CODE | QQ邮箱的SMTP授权码 | abcdefghijklmnop |
配置方法(以Windows为例)
按下Win + R,输入sysdm.cpl → 点击“高级” → “环境变量”。
在“用户变量”中点击“新建”,逐个添加上述环境变量。
关闭所有终端,重新打开(环境变量生效)。
📖 使用方法
1. 运行脚本
python weather_alert.py
2. 查看输出
如果城市正在下雨,终端会显示:
2025-09-18 16:00:00 - INFO - 天气预警小助手启动! 2025-09-18 16:00:01 - INFO - 【上海】天气查询成功:Rain,22.5℃ 2025-09-18 16:00:02 - INFO - 降雨提醒邮件发送成功!
3. 自动运行(进阶)
Windows:用“任务计划程序”设置每天早上7点运行脚本。
macOS/Linux:用crontab设置定时任务,例如:
# 每天7:00运行 0 7 * * * /path/to/venv/bin/python /path/to/weather_alert.py
❓ 常见问题
Q1: API请求失败,提示“401 Unauthorized”?
A: 检查OPENWEATHER_API_KEY是否正确,或是否已生效(新注册的密钥需等15分钟)。
Q2: 邮件发送失败,提示“SMTPAuthenticationError”?
A: 确认QQ邮箱SMTP授权码正确,且发件人邮箱与授权码匹配。

版权及免责申明:本文由@dotaai原创发布。该文章观点仅代表作者本人,不代表本站立场。本站不承担任何相关法律责任。
如若转载,请注明出处:https://www.aipuzi.cn/ai-tutorial/311.html

