我靠一个脚本,自动调用大模型 API
✨ 每天省 3 小时,老板说要给我加薪
调用 API 不是技术,是 AI 开发的入门券。
90% 的新手在手动处理数据,老手写个脚本自动调用。
任何大模型 API 都能轻松调用。
"小雪,我每天要给 100 篇文章写摘要,每篇要花 2 分钟,一天就是 3 小时,干了 1 个月,眼睛都花了,腰也疼。"
我问她:"这些文章有电子版吗?"
她说:"有,都在一个文件夹里,Word 文档。"
这不就是大模型 API 的最佳场景吗?
我给她写了个脚本:
for article in articles:
summary = call_llm_api(f'请给这篇文章写摘要:{article}')
save_summary(summary)
✅ 3 小时→1 分钟,100% 准确。
昨天她给我发消息:"现在每天 9 点 01 分点一下运行,9 点 02 分 100 篇摘要就写完了。老板说给我加薪 2000,让我教其他同事用。"
这不是脚本,这是加薪神器。✿
| 1 分钟 | ||
| 0%(零错误) | ||
| 脚本永久可用 | ||
| 准时下班 | ||
| "技术人才" | ||
| 加薪 2000 |
算一笔账:每天省 3 小时,一年省下1095 小时,相当于多活 45 天。
import requests
url = 'https://api.example.com/v1/chat'
headers = {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
}
data = {
'prompt': '你好',
'max_tokens': 100
}
response = requests.post(url, json=data, headers=headers)
result = response.json()
print(result)
📚 讲解:
• requests.post():发送 POST 请求
• json=data:自动把字典转成 JSON 发送
• response.json():把响应 JSON 转成字典
• 记忆口诀:POST 请求 = 发送数据给 API,等待返回结果
import requests
def call_api(prompt, api_key, max_retries=3):
"""调用 API(带重试)"""
url = 'https://api.example.com/v1/chat'
headers = {
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json'
}
data = {'prompt': prompt}
for attempt in range(max_retries):
try:
response = requests.post(url, json=data, headers=headers, timeout=10)
response.raise_for_status() # 检查 HTTP 错误
return response.json()
except requests.exceptions.Timeout:
print(f'超时,重试 ({attempt+1}/{max_retries})')
except requests.exceptions.HTTPError as e:
print(f'HTTP 错误:{e}')
break
except Exception as e:
print(f'未知错误:{e}')
break
return None
result = call_api('你好', 'your-api-key')
print(result)
📚 讲解:
• timeout=10:10 秒超时
• raise_for_status():检查 HTTP 错误(4xx、5xx)
• try...except:捕获异常
• 重试机制:网络波动自动重试
• 重要:生产环境必须加错误处理和重试
为什么需要虚拟环境?
不同项目需要不同版本的库,虚拟环境让每个项目有独立的依赖:
# 1. 创建虚拟环境
python -m venv venv
# 2. 激活虚拟环境
# Windows:
venv\Scripts\activate
# Mac/Linux:
source venv/bin/activate
# 3. 安装依赖
pip install requests aiohttp
# 4. 生成依赖清单
pip freeze > requirements.txt
# 5. 从清单安装
pip install -r requirements.txt
📚 讲解:
• venv:虚拟环境目录
• activate:激活脚本
• requirements.txt:依赖清单
• 重要:每个项目都应该有独立的虚拟环境
📦 项目功能:批量处理文章,自动生成摘要
⏱️ 运行时间:100 篇文章,1 分钟完成
🔧 核心技术:POST 请求 + 错误处理 + 重试 + 日志
#!/usr/bin/env python3
"""
大模型 API 批量调用脚本
功能:批量处理文章,自动生成摘要
作者:你的姓名
日期:2024-03-23
"""
import requests
import json
import logging
from datetime import datetime
from pathlib import Path
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler(f'llm_api_{datetime.now().strftime("%Y-%m-%d")}.log'),
logging.StreamHandler()
]
)
CONFIG = {
'api_key': 'YOUR_API_KEY', # 替换为你的 API Key
'base_url': 'https://api.example.com',
'timeout': 30,
'max_retries': 3,
}
class LLMClient:
"""大模型 API 客户端"""
def __init__(self, api_key, base_url):
self.api_key = api_key
self.base_url = base_url
self.session = requests.Session()
self.session.headers.update({
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json'
})
def chat(self, prompt, max_tokens=500):
"""发送对话请求"""
url = f'{self.base_url}/v1/chat'
data = {
'prompt': prompt,
'max_tokens': max_tokens
}
for attempt in range(CONFIG['max_retries']):
try:
response = self.session.post(
url,
json=data,
timeout=CONFIG['timeout']
)
response.raise_for_status()
result = response.json()
logging.info(f'✅ API 调用成功')
return result
except requests.exceptions.Timeout:
logging.warning(f'超时,重试 ({attempt+1}/{CONFIG["max_retries"]})')
except requests.exceptions.HTTPError as e:
logging.error(f'HTTP 错误:{e}')
break
except Exception as e:
logging.error(f'未知错误:{e}')
break
return None
def summarize(self, text):
"""生成摘要"""
prompt = f'请给下面的文章写一个 200 字以内的摘要:\n\n{text}'
result = self.chat(prompt, max_tokens=200)
if result:
return result.get('data', {}).get('content', '')
return None
def process_articles(article_folder, output_folder):
"""批量处理文章"""
# 创建输出文件夹
output_path = Path(output_folder)
output_path.mkdir(exist_ok=True)
# 初始化 API 客户端
client = LLMClient(CONFIG['api_key'], CONFIG['base_url'])
# 获取所有文章
article_files = list(Path(article_folder).glob('*.txt'))
logging.info(f'📁 找到 {len(article_files)} 篇文章')
# 批量处理
success_count = 0
for i, article_file in enumerate(article_files, 1):
logging.info(f'处理 ({i}/{len(article_files)}): {article_file.name}')
# 读取文章
try:
content = article_file.read_text(encoding='utf-8')
except Exception as e:
logging.error(f'读取失败:{article_file.name} - {e}')
continue
# 生成摘要
summary = client.summarize(content)
if summary:
# 保存摘要
output_file = output_path f'summary_{article_file.stem}.txt'
output_file.write_text(summary, encoding='utf-8')
logging.info(f'✅ 摘要已保存:{output_file.name}')
success_count += 1
else:
logging.error(f'❌ 摘要生成失败:{article_file.name}')
# 统计结果
logging.info(f'🎉 处理完成:成功{success_count}篇,失败{len(article_files)-success_count}篇')
if __name__ == '__main__':
logging.info('🚀 大模型 API 批量调用脚本启动')
# 处理文章
process_articles('articles', 'summaries')
logging.info('👋 脚本运行结束')
📚 代码讲解:
• 第 1-17 行:导入模块,配置日志(同时输出到文件和控制台)
• 第 19-24 行:配置参数字典,方便统一调整
• 第 26-71 行:LLMClient 类,封装 API 调用逻辑
• 第 30-35 行:__init__:初始化 API key、base_url、Session
• 第 37-61 行:chat():发送对话请求,带重试和错误处理
• 第 63-68 行:summarize():生成摘要,封装 prompt
• 第 70-104 行:process_articles():批量处理文章的主函数
• 第 106-113 行:程序入口,启动脚本
🔥 坑点 1 API Key 泄露
# ❌ 错误写法:直接写在代码里
api_key = 'sk-1234567890abcdef' # 泄露风险!
# ✅ 正确写法:从环境变量读取
import os
api_key = os.getenv('LLM_API_KEY')
设置环境变量:
• Windows: set LLM_API_KEY=sk-1234567890abcdef
• Mac/Linux: export LLM_API_KEY=sk-1234567890abcdef
真实案例:有程序员把 API Key 传到 GitHub,被人盗用,一天花了 1 万块——老板让他自己赔。
⚠️ 坑点 2 虚拟环境没激活
# ❌ 错误写法:安装到全局了
pip install requests
# ✅ 正确写法:先激活虚拟环境
source venv/bin/activate # Mac/Linux
venv\Scripts\activate # Windows
pip install requests # 安装到虚拟环境
💡 记忆口诀:激活虚拟环境后,命令行前面会有 (venv) 提示
💸 坑点 3 不处理超时
# ❌ 错误写法:没有超时
response = requests.post(url, json=data)
# ✅ 正确写法:30 秒超时
response = requests.post(url, json=data, timeout=30)
💡 建议:生产环境必须加 timeout,一般 10-30 秒
def translate(self, text, target_lang='en'):
prompt = f'请把下面的文字翻译成{target_lang}:\n\n{text}'
result = self.chat(prompt)
return result
def analyze_sentiment(self, text):
prompt = f'请分析下面文字的情感(正面/负面/中性):\n\n{text}'
result = self.chat(prompt)
return result
def classify(self, text, categories):
prompt = f'请把下面的文字分类({categories}):\n\n{text}'
result = self.chat(prompt)
return result
💡 核心思路:改 prompt,其他代码不用动
Q1:API Key 从哪里获取?
A:去大模型官网注册账号,在控制台创建 API Key。
Q2:虚拟环境必须创建吗?
A:强烈建议!不同项目依赖不同版本的库,虚拟环境避免冲突。
Q3:调用 API 失败怎么办?
A:看日志,根据错误信息处理。网络问题重试,参数错误改参数。
Q4:如何知道 API 返回的数据格式?
A:看官方文档,或者 print(response.json()) 打印出来看。
上面那个手动写摘要的读者,用脚本每天省出 3 小时。她把这些自动化待办、学习计划都记在「搭纸」小程序里,日程管理 + 习惯打卡,效率翻倍。
✅ 个人待办 — 把自动化脚本待办记下来
✅ 日程管理 — 规划省下来的时间
✅ 习惯打卡 — 每天学点 Python
点击下方小程序卡片「搭纸」一起来搭纸打卡学习
关注公众号,可私信进学习交流群 🎁
| POST 请求 | ||
| 错误处理 | ||
| 虚拟环境 | ||
| requirements.txt | ||
| 日志记录 | ||
| API Key 安全 | ||
| 生产思维 |
算下来,一篇回本——
不止是技术,还有你的职业前景。✿
那个每天花 3 小时写摘要的读者,
后来用脚本 1 分钟搞定。
现在她负责整个团队的自动化项目,老板给她加了薪。
有时候,一个脚本就能改变职业生涯。✿
本文是「AI 大模型入门 180 天」第 20 天内容
第 19 天:Python 面向对象进阶:继承与多态
第 21 天:大模型核心概念:Token 到底是什么?(明天 10 点更新)
❤️ 喜欢这篇文章?欢迎分享到朋友圈




