第9章 9.3 AI接入:ChatGPT/通义/文心
上一章我们用 WebSocket 实现了实时通信,现在你手里有了一个「能随时发消息、收消息」的双向通道。问题来了——消息收到了,让谁来回?总不能雇一个人 24 小时盯着屏幕吧。🤖
这一章我们要给这个通道接上一个「超级大脑」,让它自动回复、智能处理。没错,就是把 AI 大模型(ChatGPT、通义、文心)接进来!
🎯 开场:为什么要学 AI 接入?
真实场景引入
你有没有遇到过这种情况:
- 半夜客户咨询,你困得不行,但错过可能丢单
- 群里 100 个人问同样的问题,你回答到想吐
- 手动整理用户反馈,分类归纳做到眼睛花了
这些问题,本质上都是:「重复的事让机器干,脑子留给创意」。
痛点问题
- 「我想接 AI,但 API 怎么调?密钥从哪来?」
- 「ChatGPT、通义、文心……到底用哪个?有啥区别?」
学完本文能解决
- ✅ 调用任意主流大模型 API 发送对话
- ✅ 用 Python 写一个「命令行 AI 助手」
\n\n
\n\n
\n\n - ✅ 读取 CSV/JSON 数据,让 AI 帮你分析
- ✅ 搭一个「本地小工具」,自动处理重复文本
🧱 基础 25 分钟:核心概念
概念 1:API 是什么?—— 点外卖的比喻
生活类比:你想吃火锅,但不想出门。你打开外卖 App,选好菜,下单 → 骑手取餐 → 送到你家。「外卖 App」就是一个「食物 API」,你不需要知道后厨怎么切菜,只需要「点单-收货」。
AI 大模型的 API 也一样:你发一段文字(提问),大模型返回一个答案(回复)。你不需要训练模型,只需要调用接口。
概念 2:API Key 是什么?—— 会员卡
为什么要用:API Key 就像是会员卡,证明「你有权使用这个服务」。没有卡,人家不给你送餐。
每个大模型平台(OpenAI、阿里、百度)都会给你一个 Key,用它来身份验证。
# 这就是你的「会员卡号」
API_KEY = "sk-xxxxxxxxxxxx" # 替换成你的真实Key
概念 3:请求结构—— 寄快递的比喻
生活类比:你寄快递需要填写:收件人地址(URL)、物品(messages)、是否加急(model)。AI 请求也一样。
import requests
url = "https://api.openai.com/v1/chat/completions"
headers = {
"Authorization": f"Bearer {API_KEY}", # 快递单上的「发件人签名」
"Content-Type": "application/json" # 「物品清单」格式说明
}
data = {
"model": "gpt-3.5-turbo", # 收件人:选哪个AI
"messages": [ # 包裹内容:你说的话
{"role": "user", "content": "你好!"}
]
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
这行在干嘛:
- Authorization:带上你的会员卡
- messages:对话历史,「role」分 user(你)和 assistant(AI)
概念 4:通义/文心的区别—— 三家外卖平台
| 平台 | API 地址 | 模型示例 | 特点 |
|---|---|---|---|
| ChatGPT | api.openai.com |
gpt-3.5-turbo / gpt-4 | 国际范、贵但强 |
| 通义(阿里) | dashscope.aliyuncs.com |
qwen-turbo | 中文友好、本土化 |
| 文心(百度) | qianfan.baidubce.com |
ernie-bot | 百度生态、中文理解强 |
类比:就像美团、饿了么、抖音外卖,菜差不多,但活动不同、送达速度不同。
概念 5:响应解析—— 拆快递
AI 返回的是一个 JSON,里面嵌套了好几层。新手最容易在这里懵圈。
result = response.json()
# 层层剥开:
reply = result["choices"][0]["message"]["content"]
print(reply) # 终于看到AI的回复了!
🔥 实战 35 分钟:3 个递进小项目
项目 1(5 分钟):最小可用 AI 对话
目标:输入一句话,AI 回复一句话
完整代码:
import requests
def chat_with_gpt(prompt, api_key, model="gpt-3.5-turbo"):
url = "https://api.openai.com/v1/chat/completions"
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
payload = {
"model": model,
"messages": [{"role": "user", "content": prompt}]
}
response = requests.post(url, headers=headers, json=payload)
result = response.json()
return result["choices"][0]["message"]["content"]
# 使用时只需要:
API_KEY = "sk-your-key-here" # 换成你的Key
reply = chat_with_gpt("用一句话夸夸Python", API_KEY)
print("AI:", reply)
预期输出:
AI: Python就像编程世界的瑞士军刀——简洁、强大、处处能用!
一句话解释:把用户输入包装成 JSON 发给 API,解析返回的 content 字段。
项目 2(15 分钟):批量处理 CSV,让 AI 帮忙分类
场景:你是一个客服主管,手里有 100 条用户反馈,需要分类成「投诉/建议/咨询」。
数据文件 feedback.csv:
内容
东西坏了很生气
希望增加深色模式
怎么退款的
快递太慢了差评
功能很好用点赞
完整代码:
import requests
import csv
def chat_with_gpt(prompt, api_key):
url = "https://api.openai.com/v1/chat/completions"
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
payload = {
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": prompt}]
}
response = requests.post(url, headers=headers, json=payload)
return response.json()["choices"][0]["message"]["content"]
def classify_feedback(text, api_key):
prompt = f"""请把下面这条用户反馈分类,只能返回「投诉」「建议」「咨询」中的一个:
反馈:{text}"""
return chat_with_gpt(prompt, api_key).strip()
def process_csv(input_file, api_key):
results = []
with open(input_file, "r", encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
content = row["内容"]
category = classify_feedback(content, api_key)
results.append({"原始内容": content, "分类": category})
print(f"「{content}」 → {category}")
return results
# 运行
API_KEY = "sk-your-key-here"
processed = process_csv("feedback.csv", API_KEY)
# 保存结果
with open("feedback_classified.csv", "w", encoding="utf-8", newline="") as f:
writer = csv.DictWriter(f, fieldnames=["原始内容", "分类"])
writer.writeheader()
writer.writerows(processed)
print("\n已保存到 feedback_classified.csv")
预期输出:
「东西坏了很生气」 → 投诉
「希望增加深色模式」 → 建议
「怎么退款的」 → 咨询
「快递太慢了差评」 → 投诉
「功能很好用点赞」 → 建议
已保存到 feedback_classified.csv
一句话解释:读取 CSV 每一行,单独发给 AI 分类,再写回新 CSV。
项目 3(15 分钟):本地 AI 待办整理工具
场景:你有一堆杂乱的待办事项,让 AI 帮你归类、整理成清晰清单。
完整代码:
import requests
def chat_with_gpt(messages, api_key):
url = "https://api.openai.com/v1/chat/completions"
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
payload = {
"model": "gpt-3.5-turbo",
"messages": messages
}
response = requests.post(url, headers=headers, json=payload)
return response.json()["choices"][0]["message"]["content"]
def organize_todos(todos_text, api_key):
system_prompt = """你是一个待办事项整理助手。
收到用户的待办列表后,请:
1. 按「工作」「生活」「学习」分类
2. 每个分类下用编号列出
3. 最后给一个完成建议(哪件先做)"""
user_prompt = f"我的待办事项:\n{todos_text}"
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_prompt}
]
return chat_with_gpt(messages, api_key)
# 使用
API_KEY = "sk-your-key-here"
todos = """
1. 写项目方案
2. 买菜做饭
3. 复习考试
4. 约客户开会
5. 健身30分钟
6. 给妈妈打电话
"""
result = organize_todos(todos, API_KEY)
print("=== AI 整理结果 ===")
print(result)
预期输出:
=== AI 整理结果 ===
## 工作
1. 写项目方案
2. 约客户开会
## 生活
3. 买菜做饭
4. 给妈妈打电话
5. 健身30分钟
## 学习
6. 复习考试
💡 建议:先「约客户开会」再「写项目方案」,因为会议结论会影响方案方向。
一句话解释:用 system 角色给 AI 定义身份,用 user 角色发任务,组合成完整对话。
💪 进阶 20 分钟:常见坑 + 性能小贴士
坑 1:Key 暴露了!—— 删掉 Git 提交记录
# ❌ 错误:直接写死在代码里
API_KEY = "sk-abc123xxxxx"
# ✅ 正确:从环境变量读取
import os
API_KEY = os.getenv("OPENAI_API_KEY")
# 终端运行:export OPENAI_API_KEY="sk-abc123xxxxx"
坑来了:一旦提交到 GitHub,你的 Key 就公开了,别人能用你的额度!立即去平台重新生成一个新 Key。
坑 2:网络超时 —— 设置超时时间
# ❌ 错误:不设超时,可能永远卡住
response = requests.post(url, headers=headers, json=data)
# ✅ 正确:10秒超时
response = requests.post(url, headers=headers, json=data, timeout=10)
坑 3:JSON 解析报错 —— 检查返回状态
# ❌ 错误:直接解析,没检查错误
result = response.json()
# ✅ 正确:先检查状态码
if response.status_code != 200:
print(f"出错了:{response.text}")
else:
result = response.json()
坑 4:Token 超出限制 —— 控制对话长度
# ❌ 错误:历史消息无限累积
messages.append(new_message) # 只加不减,越积越多
# ✅ 正确:只保留最近 N 条,或者定期清理
messages = messages[-10:] # 只保留最近10条
坑 5:模型名字写错 —— 查清楚再用
# ❌ 错误:模型名拼写错误
"model": "gpt-3.5-turboo" # 多了一个o
# ✅ 正确:确认你用的模型名(不同平台格式不同)
"model": "gpt-3.5-turbo" # OpenAI
"model": "qwen-turbo" # 通义
"model": "ernie-bot" # 文心
调试技巧:打印完整响应
# 当你不知道返回什么结构时,打印全部
result = response.json()
print(json.dumps(result, indent=2, ensure_ascii=False))
这样能看到所有字段,找到你需要的那个。
✏️ 练习题
练习 1(1 分钟):换一个问题
- 输入:把
chat_with_gpt("用一句话夸夸Python", API_KEY)改成问你自己的问题 - 预期输出:AI 回答你的新问题
- 提示:只改引号里的文字,其他不动
练习 2(2 分钟):加一个条件判断
- 输入:在项目 1 里,如果 API 返回错误,打印「出错了」,否则打印回复
- 预期输出:
出错了或 AI 回复 - 提示:用
if response.status_code == 200判断
练习 3(2 分钟):处理新的 CSV
- 输入:创建一个
products.csv,内容是商品名称,让 AI 给每个商品写一句营销文案 - 预期输出:CSV 输出两列(商品名称、营销文案)
- 提示:参考项目 2 的结构,改 prompt 即可
练习 4(3 分钟):串起两个项目
- 输入:把项目 2(分类)和项目 3(整理)串联起来——先分类,再整理成清单
- 预期输出:先输出分类结果,再输出整理后的待办清单
- 提示:项目2输出是CSV,项目3输入是文本列表,转换一下格式
练习 5(2 分钟):读懂报错信息
- 输入:以下报错是什么意思?
KeyError: 'choices'
- 预期输出:解释原因 + 修复方法
- 提示:检查 response 的 status_code 和实际返回内容
作业:做一个「AI 新闻摘要工具」
需求描述:
把一堆新闻标题/摘要扔进去,让 AI 帮你总结要点、判读情感、挑出最重要的 3 条。
功能点:
1. 从 CSV 读取新闻数据
2. 调用 AI 进行情感分析(正面/负面/中性)
3. 生成 200 字以内的摘要
4. 输出到新 CSV
加分项:
1. 支持 JSON 输入
2. 添加「关键词标签」
验收标准:
- 能跑起来
- 输出符合预期格式
- 代码有中文注释
提交方式:评论区贴代码或 GitHub 链接
📚 总结 + 资源
一句话总结
本章学了 3 件事:① AI API 的调用方式 ② 批量处理数据的技巧 ③ 用 AI 帮你做分类、总结等脏活累活。
延伸资源
- OpenAI API 官方文档 —— 最权威的参考
- 阿里云通义千问 API —— 中文场景首选
- 百度文心 API —— 百度生态集成
互动钩子
你有没有想过「让 AI 帮你写代码」?下一章我们要做一件更底层的事——看看 uniapp 框架本身是怎么写的。学会了源码解析,你就不只是「用框架的人」,而是「能改框架的人」了。🚀
上期复习:上一章我们用 WebSocket 实现了实时双向通信,给 AI 接入打好了「管道」基础。
下期预告:第 10 章 10.1 uniapp 源码解析——从用户变成「能改框架」的人!

评论(0)