news 2026/7/24 20:40:18

Day 02 · 环境搭建:一套装备打天下

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 项目搭建环境,你得:

  1. 手动创建虚拟环境
  2. 一个个pip install装库
  3. 每个项目重写一遍 API 调用代码
  4. API Key 硬编码在代码里(危险)
  5. 换个模型供应商?整个项目重改

痛点:重复劳动,代码不可复用,密钥不安全。

AI 时代做法:一套装备打天下

我们的思路很简单:

  1. 一份llm_client.py通吃四家 APIGLM/DeepSeek/Qwen/OpenAI
  2. API Key 走环境变量,代码里看不到密钥
  3. 一行代码切换供应商LLMClient(provider="glm")LLMClient(provider="deepseek")
  4. 后续 18 篇全用这同一个文件,不重复造轮子

这套封装不是花架子——梅雅达编程笔记的实际开发中,从 Day 03 到 Day 20,每一篇的代码都from llm_client import LLMClient一行导入,然后直接干活。


二、环境搭建三步走

第一步:安装 Python 3.11+

如果你已经装了 Python 3.10 以上,可以跳过这步。

Windows 用户:

  1. 去 python.org 下载 3.11+ 安装包
  2. 安装时务必勾选 “Add Python to PATH”
  3. 打开终端验证:
python--version# 输出 Python 3.11.x 或更高

Mac 用户:

# 用 Homebrew 安装brewinstallpython@3.11 python3--version

第二步:注册智谱 BigModel,拿到免费 API Key

这是整个专栏唯一需要你注册的平台。GLM-4.7-Flash 永久免费,不花一分钱。

注册流程:

  1. 打开 智谱开放平台
  2. 手机号注册并登录

  1. 进入控制台,左侧菜单找到API 密钥管理

  1. 点击创建新密钥,复制生成的 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文件不外传,密钥就是安全的。

操作步骤:

  1. 在项目目录下创建.env文件(注意前面有个点)
  2. 填入你的 Key:
# .env 文件内容 GLM_API_KEY=你刚复制的Key
  1. 创建.gitignore文件,排除.env(防止误传到代码仓库):
.env __pycache__/ *.pyc
  1. .env.example(模板文件)放进去,方便别人知道要填什么

如果已经有 Key 了?直接填进去就行,智谱的 Key 通用的,不用重新申请。

习惯用系统环境变量的也行:代码会先读.env文件,如果没有再读系统环境变量。两种方式任选一种。

  • Windows:$env:GLM_API_KEY = "你的Key"
  • Mac/Linux:export GLM_API_KEY="你的Key"

推荐用.env,更省心。


三、一份通用封装:llm_client.py

这是整个专栏最核心的一个文件。后续每一篇都会import它。

设计思路:

  • openai官方库(智谱 API 兼容OpenAI格式,一套库通吃四家)
  • 传入provider参数切换供应商
  • Key 从环境变量读取
  • chat()方法:普通对话
  • chat_json()方法:让 AI 返回JSON(Day 05 会详细讲)
  • 内置简单的重试机制

安装依赖

pipinstallopenai>=1.12.0

完整依赖见文末requirements.txt

llm_client.py完整代码

""" llm_client.py - 通用 LLM 客户端封装 支持:GLM(智谱)/ DeepSeek / Qwen(通义千问)/ OpenAI 用法:from llm_client import LLMClient client = LLMClient(provider="glm") 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,provider="glm",model=None):""" 初始化客户端 参数: provider: 供应商 "glm" / "deepseek" / "qwen" / "openai" model: 模型名称,不传则用默认模型 """ifprovidernotinself.PROVIDERS:raiseValueError(f"不支持的供应商:{provider}\n"f"可选:{', '.join(self.PROVIDERS.keys())}")config=self.PROVIDERS[provider]self.provider=provider self.model=modelorconfig["default_model"]# 从环境变量读取 API Key(.env 文件会被 load_dotenv() 自动加载)api_key=os.environ.get(config["env_key"])ifnotapi_key:raiseValueError(f"环境变量{config['env_key']}未设置!\n"f"请在项目目录下创建 .env 文件,填入:\n"f"{config['env_key']}=你的Key\n"f"或设置系统环境变量:\n"f" Windows: $env:{config['env_key']}= \"你的Key\"\n"f" Mac/Linux: export{config['env_key']}=\"你的Key\"")self.client=OpenAI(api_key=api_key,base_url=config["base_url"],)defchat(self,message,system_prompt=None,temperature=0.7,max_tokens=4096,retry=2):""" 普通对话 参数: 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(retry+1):try:response=self.client.chat.completions.create(model=self.model,messages=messages,temperature=temperature,max_tokens=max_tokens,)returnresponse.choices[0].message.contentexceptExceptionase:ifattempt<retry:print(f"⚠️ 第{attempt+1}次调用失败,{1.5}s 后重试...")print(f" 错误信息:{e}")time.sleep(1.5)else:raisedefchat_json(self,message,system_prompt=None,temperature=0.1,retry=2):""" 让 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(retry+1):try:response=self.client.chat.completions.create(model=self.model,messages=messages,temperature=temperature,response_format={"type":"json_object"},)returnresponse.choices[0].message.contentexceptExceptionase:ifattempt<retry:print(f"⚠️ 第{attempt+1}次调用失败,{1.5}s 后重试...")time.sleep(1.5)else:raisedef__repr__(self):returnf"LLMClient(provider='{self.provider}', model='{self.model}')"

代码解读

你不需要完全看懂每个细节,但有几个关键点要理解:

1. 为什么要用openai库调智谱的 API?

因为智谱的 API 兼容OpenAI的接口格式。这意味着你只要会调OpenAI,就会调智谱、DeepSeek、通义千问。一套库通吃四家,切换只需要改base_urlapi_key

2.PROVIDERS字典怎么用?

四家供应商的配置写在一个字典里。初始化时传provider="glm"就用智谱,传provider="deepseek"就用DeepSeek。模型名、API地址、环境变量名都自动对应。

3.chat()chat_json()有什么区别?

  • chat():普通对话,AI 想说什么就说什么
  • chat_json():强制 AI 返回 JSON 格式,后续办公自动化大量用到(Day 05 会详细讲)

4. 重试机制为什么重要?

API 调用偶尔会失败(网络波动、服务端超时等)。retry=2意味着失败后自动重试两次,不用你手动重新运行脚本。这在批量处理文档时特别重要——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-Flash)client=LLMClient(provider="glm")print(f"✅ 客户端就绪:{client}")print()# 第 2 步:最简单的对话print("="*50)print("测试 1:简单问候")print("="*50)answer=client.chat("你好!请用一句话介绍你自己")print(f"AI:{answer}")print()# 第 3 步:带系统提示词的对话print("="*50)print("测试 2:角色设定")print("="*50)answer=client.chat(message="我们公司明天要开周会,帮我写三句话的开场白",system_prompt="你是一个简洁干练的职场助手,说话不超过三句,不废话。",temperature=0.3,# 低温度=更稳定)print(f"AI:{answer}")print()# 第 4 步:让 AI 返回结构化数据(Day 05 预告)print("="*50)print("测试 3:JSON 结构化输出")print("="*50)json_answer=client.chat_json(message='请提取这段信息:张三,手机号13800138000,邮箱zhangsan@example.com,''输出为JSON,包含name、phone、email字段',system_prompt="你是一个信息提取助手,只输出JSON,不输出其他内容。",)print(f"AI:{json_answer}")print()print("🎉 全部测试通过!环境搭建成功!")if__name__=="__main__":main()

路径处理说明

为什么需要这两行?

因为llm_client.py在项目根目录,而hello_llm.pycode/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(provider='glm', model='glm-4.7-flash') ================================================== 测试 1:简单问候 ================================================== AI:你好!我是 GLM-4.7-Flash,一个由智谱AI开发的大语言模型,擅长中文理解和生成。 ================================================== 测试 2:角色设定 ================================================== AI:各位同事好,本周工作汇报现在开始。上周我们完成了三项核心任务的推进,今天重点同步进展和本周计划。请大家先看会议议程。 ================================================== 测试 3:JSON 结构化输出 ================================================== AI:{"name": "张三", "phone": "13800138000", "email": "zhangsan@example.com"} 🎉 全部测试通过!环境搭建成功!

注意:AI 的实际回复内容每次可能略有不同(因为temperature参数的存在),但格式和结构应该一致。测试 3 的 JSON 字段名应该完全匹配。

如果报错了怎么办?

报错原因解决
ModuleNotFoundError: No module named 'openai'openai库没装pip install openai
环境变量 GLM_API_KEY 未设置Key没配好回到第三步创建.env文件
AuthenticationErrorKey不对或已过期去智谱控制台重新生成Key
RateLimitError超出并发限制等几秒再跑,免费版限 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.txt

openai>=1.12.0 python-dotenv>=1.0.0

python-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_prompttemperature参数。

改造 2(进阶):写一个translate()函数,调用client.chat()实现中英互译。输入中文返回英文,输入英文返回中文。

提示:可以让 AI 先判断输入语言,再翻译。或者直接在system_prompt里设定规则。


下期预告

Day 03 · Prompt 工程 5 大心法

环境搭好了,Key也拿到了。但如果你只会说"帮我写个周报"——AI 给你的大概率是废话。

Day 03 讲透 5 个Prompt心法,每个配一个办公场景对比实验。写完你就能让 AI 从"大概能用"变成"精准好用"。


📚 资源与工具(文末合规集中)

  • 智谱开放平台(注册 + API Key):https://open.bigmodel.cn/
  • 智谱模型文档:https://docs.bigmodel.cn/
  • DeepSeek 开放平台:https://platform.deepseek.com/
  • 通义千问(Qwen):https://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
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/24 20:39:38

终极免费A股分析指南:如何零成本构建AI驱动的智能投资系统

终极免费A股分析指南&#xff1a;如何零成本构建AI驱动的智能投资系统 您是否曾为A股市场的复杂波动而烦恼&#xff1f;是否渴望拥有专业的股票分析工具却受限于高昂费用&#xff1f;daily_stock_analysis正是为您量身打造的解决方案——这是一款完全免费的AI驱动股票智能分析…

作者头像 李华
网站建设 2026/7/24 20:34:09

openEuler-22.03-LTS-x86_64离线安装nginx过程记录

给了台机器,是新系统,通过堡垒机访问,不通互联网,环境的安装就变得相当麻烦,先把过程记录下来,方便以后再次安装时可以有资料可查 首先,需要安装tar命令包 进入官网rpm包仓库, https://repo.openeuler.org/openEuler-22.03-LTS/everything/x86_64/Packages/ 找到并…

作者头像 李华
网站建设 2026/7/24 20:32:30

抖音下载神器:如何一键批量下载无水印视频的完整指南

抖音下载神器&#xff1a;如何一键批量下载无水印视频的完整指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…

作者头像 李华
网站建设 2026/7/24 20:32:18

多智能体集群落地:Spring AI Alibaba 六大协作模式深度拆解与高并发实战

多智能体集群落地:Spring AI Alibaba 六大协作模式深度拆解与高并发实战 当单个智能体不再是瓶颈,真正的挑战就不再是“怎么再写一个 Prompt”,而是“如何让一组具备不同职责的智能体,在高并发、分布式、可观测、可回滚的前提下稳定协作”。围绕电商大促客服场景,本文系统…

作者头像 李华
网站建设 2026/7/24 20:31:15

一场茶博会,引起737篇笔记刷屏,这家茶粉品牌是怎么做到的?

2026年5月末&#xff0c;杭州龙坞茶博会现场&#xff0c;一个茶粉品牌的展位上摆了一张智碰卡。观众拿出手机碰一下&#xff0c;图文笔记就能自动出现&#xff0c;复制粘贴就能发出&#xff0c;顺手还能一键关注品牌账号。一场活动下来&#xff0c;小红书和抖音上多了737篇笔记…

作者头像 李华