Day 02 · 环境搭建:一套装备打天下
AI Python 系列」第 01 栏 · AI 时代的 Python 办公自动化全栏 20 篇 · 零成本跟完 品牌梅雅达编程笔记开篇 · 你是不是也卡在这一步Day 01 说了AI 办公自动化能帮你省钱省时间。很多读者看完热血沸腾——然后打开电脑对着满屏的报错发呆“openai这个库不是 OpenAI 的吗我不用 OpenAI 也要装”“智谱的 API 到底怎么调官方文档看了三遍还是懵”“每个教程用的库都不一样我到底装哪个”“API Key 写在代码里发到 GitHub 上被人盗了怎么办”这些问题看着小但90% 的新手就卡在这里放弃了。今天这篇我把整个环境搭建拆成三步装 Python → 注册智谱拿 Key → 写一份通用封装代码。搞完这三步后续 18 篇的代码你都能直接跑。一、传统做法 vs AI 时代做法传统做法每个项目从头搭传统 Python 项目搭建环境你得手动创建虚拟环境一个个pip install装库每个项目重写一遍 API 调用代码API Key 硬编码在代码里危险换个模型供应商整个项目重改痛点重复劳动代码不可复用密钥不安全。AI 时代做法一套装备打天下我们的思路很简单一份llm_client.py通吃四家 APIGLM/DeepSeek/Qwen/OpenAIAPI Key 走环境变量代码里看不到密钥一行代码切换供应商LLMClient(providerglm)→LLMClient(providerdeepseek)后续 18 篇全用这同一个文件不重复造轮子这套封装不是花架子——梅雅达编程笔记的实际开发中从 Day 03 到 Day 20每一篇的代码都from llm_client import LLMClient一行导入然后直接干活。二、环境搭建三步走第一步安装 Python 3.11如果你已经装了 Python 3.10 以上可以跳过这步。Windows 用户去 python.org 下载 3.11 安装包安装时务必勾选 “Add Python to PATH”打开终端验证python--version# 输出 Python 3.11.x 或更高Mac 用户# 用 Homebrew 安装brewinstallpython3.11 python3--version第二步注册智谱 BigModel拿到免费 API Key这是整个专栏唯一需要你注册的平台。GLM-4.7-Flash 永久免费不花一分钱。注册流程打开 智谱开放平台手机号注册并登录进入控制台左侧菜单找到API 密钥管理点击创建新密钥复制生成的 Key⚠️ 重要API Key 只显示一次丢了只能重新创建。复制好存到安全的地方。平台颁发的 API Key 由 API Key ID 与 签名密钥 secret 组成完整格式为{API Key ID}.{secret}。你拿到的 Key 长这样{API Key ID}.{secret} xxxxxxxx.xxxxxxxxxxxxxxxx为什么选智谱对比项智谱 GLM-4.7-FlashOpenAI GPT-4o-miniDeepSeek Chat价格✅永久免费❌ 需充值信用卡❌ 新用户送100万Token后收费上下文200K128K128K最大输出128K16K8K国内访问✅ 直连❌ 需科学上网✅ 直连注册门槛手机号海外信用卡手机号结论免费额度最大、门槛最低、中文能力最强。没理由不用它。第三步创建 .env 文件保护你的 Key为什么不直接把 Key 写在代码里因为如果你把 Key 写在代码里然后传到 GitHub 或分享给别人——你的 Key 就泄露了。别人可以用你的额度甚至拿去做坏事。我们的做法用.env文件存放 Key代码通过python-dotenv库自动读取。好处Key 跟着项目文件夹走重装系统也不怕丢。只要.env文件不外传密钥就是安全的。操作步骤在项目目录下创建.env文件注意前面有个点填入你的 Key# .env 文件内容 GLM_API_KEY你刚复制的Key创建.gitignore文件排除.env防止误传到代码仓库.env __pycache__/ *.pyc把.env.example模板文件放进去方便别人知道要填什么如果已经有 Key 了直接填进去就行智谱的 Key 通用的不用重新申请。习惯用系统环境变量的也行代码会先读.env文件如果没有再读系统环境变量。两种方式任选一种。Windows:$env:GLM_API_KEY 你的KeyMac/Linux:export GLM_API_KEY你的Key推荐用.env更省心。三、一份通用封装llm_client.py这是整个专栏最核心的一个文件。后续每一篇都会import它。设计思路用openai官方库智谱 API 兼容OpenAI格式一套库通吃四家传入provider参数切换供应商Key 从环境变量读取chat()方法普通对话chat_json()方法让 AI 返回JSONDay 05 会详细讲内置简单的重试机制安装依赖pipinstallopenai1.12.0完整依赖见文末requirements.txtllm_client.py完整代码 llm_client.py - 通用 LLM 客户端封装 支持GLM智谱/ DeepSeek / Qwen通义千问/ OpenAI 用法from llm_client import LLMClient client LLMClient(providerglm) answer client.chat(你好) importosimporttimefromdotenvimportload_dotenvfromopenaiimportOpenAI# 自动加载当前目录下的 .env 文件load_dotenv()classLLMClient:通用 LLM 客户端 - 一行代码切换四家模型# 四家供应商配置PROVIDERS{glm:{base_url:https://open.bigmodel.cn/api/paas/v4/,default_model:glm-4.7-flash,# 永久免费 · 200K上下文env_key:GLM_API_KEY,},deepseek:{base_url:https://api.deepseek.com/v1,default_model:deepseek-chat,env_key:DEEPSEEK_API_KEY,},qwen:{base_url:https://dashscope.aliyuncs.com/compatible-mode/v1,default_model:qwen-plus,env_key:DASHSCOPE_API_KEY,},openai:{base_url:https://api.openai.com/v1,default_model:gpt-4o-mini,env_key:OPENAI_API_KEY,},}def__init__(self,providerglm,modelNone): 初始化客户端 参数 provider: 供应商 glm / deepseek / qwen / openai model: 模型名称不传则用默认模型 ifprovidernotinself.PROVIDERS:raiseValueError(f不支持的供应商:{provider}\nf可选:{, .join(self.PROVIDERS.keys())})configself.PROVIDERS[provider]self.providerprovider self.modelmodelorconfig[default_model]# 从环境变量读取 API Key.env 文件会被 load_dotenv() 自动加载api_keyos.environ.get(config[env_key])ifnotapi_key:raiseValueError(f环境变量{config[env_key]}未设置\nf请在项目目录下创建 .env 文件填入\nf{config[env_key]}你的Key\nf或设置系统环境变量\nf Windows: $env:{config[env_key]} \你的Key\\nf Mac/Linux: export{config[env_key]}\你的Key\)self.clientOpenAI(api_keyapi_key,base_urlconfig[base_url],)defchat(self,message,system_promptNone,temperature0.7,max_tokens4096,retry2): 普通对话 参数 message: 用户消息字符串 system_prompt: 系统提示词可选设定AI角色 temperature: 0确定性输出1更随机默认0.7 max_tokens: 最大输出长度 retry: 失败重试次数 返回AI 回复的文本 messages[]ifsystem_prompt:messages.append({role:system,content:system_prompt})messages.append({role:user,content:message})forattemptinrange(retry1):try:responseself.client.chat.completions.create(modelself.model,messagesmessages,temperaturetemperature,max_tokensmax_tokens,)returnresponse.choices[0].message.contentexceptExceptionase:ifattemptretry:print(f⚠️ 第{attempt1}次调用失败{1.5}s 后重试...)print(f 错误信息:{e})time.sleep(1.5)else:raisedefchat_json(self,message,system_promptNone,temperature0.1,retry2): 让 AI 返回 JSON 格式数据 参数 message: 用户消息 system_prompt: 系统提示词 temperature: 低温度更稳定默认0.1 retry: 失败重试次数 返回AI 回复的 JSON 字符串 messages[]ifsystem_prompt:messages.append({role:system,content:system_prompt})messages.append({role:user,content:message})forattemptinrange(retry1):try:responseself.client.chat.completions.create(modelself.model,messagesmessages,temperaturetemperature,response_format{type:json_object},)returnresponse.choices[0].message.contentexceptExceptionase:ifattemptretry:print(f⚠️ 第{attempt1}次调用失败{1.5}s 后重试...)time.sleep(1.5)else:raisedef__repr__(self):returnfLLMClient(provider{self.provider}, model{self.model})代码解读你不需要完全看懂每个细节但有几个关键点要理解1. 为什么要用openai库调智谱的 API因为智谱的 API 兼容OpenAI的接口格式。这意味着你只要会调OpenAI就会调智谱、DeepSeek、通义千问。一套库通吃四家切换只需要改base_url和api_key。2.PROVIDERS字典怎么用四家供应商的配置写在一个字典里。初始化时传providerglm就用智谱传providerdeepseek就用DeepSeek。模型名、API地址、环境变量名都自动对应。3.chat()和chat_json()有什么区别chat()普通对话AI 想说什么就说什么chat_json()强制 AI 返回 JSON 格式后续办公自动化大量用到Day 05 会详细讲4. 重试机制为什么重要API 调用偶尔会失败网络波动、服务端超时等。retry2意味着失败后自动重试两次不用你手动重新运行脚本。这在批量处理文档时特别重要——Day 06 处理 200 张发票时你不会想因为第 87 张超时就全部重来。四、Hello LLM你的第一行 AI 代码环境搭好了封装写好了现在跑第一个测试。hello_llm.py hello_llm.py - 第一次调用大模型 验证环境是否搭建成功 importsys,os sys.path.insert(0,os.path.abspath(os.path.join(os.path.dirname(__file__),../../)))fromllm_clientimportLLMClientdefmain():# 第 1 步初始化客户端默认用 GLM-4.7-FlashclientLLMClient(providerglm)print(f✅ 客户端就绪{client})print()# 第 2 步最简单的对话print(*50)print(测试 1简单问候)print(*50)answerclient.chat(你好请用一句话介绍你自己)print(fAI{answer})print()# 第 3 步带系统提示词的对话print(*50)print(测试 2角色设定)print(*50)answerclient.chat(message我们公司明天要开周会帮我写三句话的开场白,system_prompt你是一个简洁干练的职场助手说话不超过三句不废话。,temperature0.3,# 低温度更稳定)print(fAI{answer})print()# 第 4 步让 AI 返回结构化数据Day 05 预告print(*50)print(测试 3JSON 结构化输出)print(*50)json_answerclient.chat_json(message请提取这段信息张三手机号13800138000邮箱zhangsanexample.com输出为JSON包含name、phone、email字段,system_prompt你是一个信息提取助手只输出JSON不输出其他内容。,)print(fAI{json_answer})print()print( 全部测试通过环境搭建成功)if__name____main__:main()路径处理说明为什么需要这两行因为llm_client.py在项目根目录而hello_llm.py在code/day02/目录下。Python 默认只会在当前目录找模块所以需要告诉它去根目录找。importsys,os sys.path.insert(0,os.path.abspath(os.path.join(os.path.dirname(__file__),../../)))../../是什么意思就像在文件管理器里点两次返回上级code/day02/hello_llm.py ↓ (../) 返回上级 code/ ↓ (../) 再返回上级 ai-office/ ← 根目录找到 llm_client.py 了后续每篇都要加吗是的。只要代码文件在code/子目录下开头都要加这两行。复制粘贴即可不用记。运行结果预期输出✅ 客户端就绪LLMClient(providerglm, modelglm-4.7-flash) 测试 1简单问候 AI你好我是 GLM-4.7-Flash一个由智谱AI开发的大语言模型擅长中文理解和生成。 测试 2角色设定 AI各位同事好本周工作汇报现在开始。上周我们完成了三项核心任务的推进今天重点同步进展和本周计划。请大家先看会议议程。 测试 3JSON 结构化输出 AI{name: 张三, phone: 13800138000, email: zhangsanexample.com} 全部测试通过环境搭建成功注意AI 的实际回复内容每次可能略有不同因为temperature参数的存在但格式和结构应该一致。测试 3 的 JSON 字段名应该完全匹配。如果报错了怎么办报错原因解决ModuleNotFoundError: No module named openaiopenai库没装pip install openai环境变量 GLM_API_KEY 未设置Key没配好回到第三步创建.env文件AuthenticationErrorKey不对或已过期去智谱控制台重新生成KeyRateLimitError超出并发限制等几秒再跑免费版限 30 并发ConnectionError网络不通检查网络公司内网可能需要代理五、项目文件结构建议按这个结构组织代码ai-office/ ├── llm_client.py ← 通用封装本篇创建后续所有篇复用 ├── hello_llm.py ← 测试脚本本篇创建 ├── requirements.txt ← 依赖清单 ├── .env ← 你的 API Key不要传到 GitHub ├── .env.example ← 模板文件可以传告诉别人要填什么 ├── .gitignore ← 排除 .env 等敏感文件 ├── code/ ← 后续每篇的代码放这里 │ ├── day03/ │ ├── day06/ │ └── ... └── data/ ← 测试数据 └── ...requirements.txtopenai1.12.0 python-dotenv1.0.0python-dotenv是可选的——如果你不想用系统环境变量可以创建.env文件存放Key用dotenv加载。但别把.env文件传到GitHub 本篇成本透明栏项目数值API 调用次数3 次测试 1-3消耗 Token约 2,000 tokens成本¥0GLM-4.7-Flash永久免费免费额度是否够✅ 够用新用户送 2000 万Token商用估算¥0练手改造题改造 1基础修改hello_llm.py让 AI 用五种不同风格回答同一个问题今天午饭吃什么。提示调整system_prompt和temperature参数。改造 2进阶写一个translate()函数调用client.chat()实现中英互译。输入中文返回英文输入英文返回中文。提示可以让 AI 先判断输入语言再翻译。或者直接在system_prompt里设定规则。下期预告Day 03 · Prompt 工程 5 大心法环境搭好了Key也拿到了。但如果你只会说帮我写个周报——AI 给你的大概率是废话。Day 03 讲透 5 个Prompt心法每个配一个办公场景对比实验。写完你就能让 AI 从大概能用变成精准好用。 资源与工具文末合规集中智谱开放平台注册 API Keyhttps://open.bigmodel.cn/智谱模型文档https://docs.bigmodel.cn/DeepSeek 开放平台https://platform.deepseek.com/通义千问Qwenhttps://dashscope.aliyun.com/Python 官网下载https://www.python.org/downloads/本专栏配套代码CSDN 下载区每篇更新 作者的话梅雅达编程笔记专注 Python AI 办公自动化实战教程。这套llm_client.py不是教学演示代码——它是我们在实际开发中真正在用的封装。后续 18 篇每篇都会用到它所以今天这篇请务必跑通。跑通了的读者评论区扣个 1让我知道你准备好了 上一篇Day 01 · 为什么 2026 年办公自动化必须AI 化下一篇Day 03 · Prompt 工程 5 大心法专栏订阅「AI 时代的 Python 办公自动化」姊妹专栏Python 零基础编程笔记编程启蒙-Scratch转Python