《Python AI入门》第10章 拥抱AIGC——OpenAI API调用与Prompt工程实战

章节导语

"在前几章,我们像个辛勤的厨师,从选材(数据清洗)到烹饪(模型训练),亲手制作每一道菜。虽然很有成就感,但如果我想吃满汉全席怎么办?

现在的时代变了。大语言模型(Large Language Model, LLM) 的出现,就像是把你带进了一家米其林三星餐厅。你不再需要自己切菜炒菜,你只需要学会如何优雅地点菜。"

欢迎来到 AIGC(人工智能生成内容) 的时代。

从本章开始,我们的身份将发生转变:从"模型构建者"转变为"AI应用工程师 "。我们将不再纠结于如何调整神经网络的层数,而是学习如何通过 API(应用程序接口)驾驭像 ChatGPT 这样强大的大脑,并用一种新的编程语言------提示词(Prompt),来构建令人惊叹的应用。


10.1 学习目标

在学完本章后,你将能够:

  1. 完成首秀:配置 OpenAI SDK(或国内兼容接口),成功发起第一次对话请求。
  2. 理解LLM原理 :通俗理解"文字接龙"机制,掌握 TokenTemperature 等核心参数的工程含义。
  3. 掌握咒语 :学会 Prompt Engineering 的三大核心技巧(结构化、少样本、思维链),让AI不再胡说八道。
  4. 工程化落地:学会处理 API 的异常重试与 JSON 格式化输出。
  5. 实战演练:开发一个"批量智能舆情分析工具",自动读取 Excel 评论并生成情感报告。

10.2 什么是 API?为什么不自己训练了?

在第9章,我们训练了一个 LSTM 模型来分析情感,准确率可能在 85% 左右。但如果你问那个模型:"这句评论里提到的退货原因是什么?"它会直接傻眼,因为它没学过。

而像 GPT-4 这样的大模型,阅读了几乎整个人类互联网的文本。它不仅能判断情感,还能写诗、写代码、做推理。

为什么我们不自己训练一个 GPT?

因为太贵了。训练一次 GPT-4 的成本高达数千万美元。
API 的意义在于:巨头公司把模型训练好,部署在云端服务器上。我们只需要写几行 Python 代码,发送请求(Request),就能获得顶级的智能回复(Response)。这就像我们不需要自己建发电厂,只需要插上插头就能用电。


10.3 Hello, LLM! ------ 你的第一次调用

我们将使用 Python 的 openai 官方库。
注:考虑到国内网络环境,本章代码将同时兼顾 OpenAI 官方接口与国内兼容接口(如 DeepSeek、月之暗面等),它们的代码写法几乎完全一致。

10.3.1 环境配置

打开终端,安装库:

bash 复制代码
pip install openai pandas

10.3.2 编写第一段对话代码

在 VS Code 中新建 hello_llm.py

python 复制代码
from openai import OpenAI
import os

# 1. 初始化客户端
# 如果你是 OpenAI 官方用户:
# client = OpenAI(api_key="你的sk-开头的密钥")

# 【国内用户推荐】如果你使用国内大模型(以 DeepSeek 为例):
client = OpenAI(
    api_key="你的API_Key", 
    base_url="https://api.deepseek.com"  # 替换为对应厂商的 URL
)

# 2. 发送请求
response = client.chat.completions.create(
    model="deepseek-chat",  # 或 "gpt-3.5-turbo"
    messages=[
        {"role": "system", "content": "你是一个资深的 Python 程序员。"},
        {"role": "user", "content": "请用一句话解释什么是递归。"}
    ]
)

# 3. 获取回复
answer = response.choices[0].message.content
print(f"AI回复: {answer}")

【小白避坑】关于 Role(角色)
messages 列表里通常包含三种角色:

  • System(系统):上帝视角,设定 AI 的人设(比如"你是一个猫娘"或"你是一个严谨的律师")。
  • User(用户):也就是你,提出问题。
  • Assistant(助手):AI 的历史回复(用于多轮对话中保存上下文)。

10.4 提示词工程 (Prompt Engineering):新时代的编程

很多人觉得用 AI 很简单,不就是"聊天"吗?
大错特错

如果你的指令模糊,AI 回复就是废话;如果你的指令精准,AI 就是神。Prompt 就是你在给 AI 编写程序。

10.4.1 核心原则:明确、结构化

  • 差劲的 Prompt

    "帮我写个卖咖啡的文案。"
    结果:AI 会写出一堆陈词滥调。

  • 优秀的 Prompt

    "你是一名拥有10年经验的小红书文案专家 。请为一款燕麦拿铁 写一篇推广文案。
    目标用户 :上班族。
    卖点 :低脂、提神、只需9.9元。
    风格 :活泼、使用Emoji、包含标签。
    字数:200字以内。"

10.4.2 技巧一:Few-Shot Prompting(少样本提示)

大模型有时候听不懂"定义",但看懂"例子"的能力极强。

Prompt :

"这是一个将口语转换为鲁迅风格的转换器。

用户:今天天气真好。

助手:这天气大约是极好的,风也温柔,像极了那年的故乡。

用户:我不想上班。

助手:横竖是睡不着,坐起来一想,这班大约是不必上了,满纸写着的都是'吃人'的KPI。

用户:我想吃夜宵。

助手:____________"

只要你给出一两个例子,AI 就会瞬间模仿这个范式。这在工程中被称为 In-Context Learning(上下文学习)

10.4.3 技巧二:Chain of Thought(思维链)

当你问 AI 复杂的数学或逻辑题时,直接问答案容易错。你需要强迫它"把思考过程写出来"。

魔法咒语Let's think step by step(让我们一步步思考)。


10.5 工程视角:控制参数与成本

作为工程师,除了会写 Prompt,你还需要理解 API 的核心参数。

10.5.1 Temperature(温度)

这是一个范围在 0.0 ~ 2.0 之间的数值。

  • Temperature = 0.0严谨模式。每次回答几乎一模一样。适合做数据提取、代码生成。
  • Temperature = 1.0+狂野模式。AI 会尝试更有创意的词汇,但也更容易胡说八道。适合写小说、头脑风暴。

10.5.2 Token(词元)------ AI 是怎么收费的?

大模型不按"字"算钱,按 Token 算。

  • 英文单词:1个单词 ≈\approx≈ 1.3 个 Token。
  • 汉字:1个汉字 ≈\approx≈ 1.5 ~ 2 个 Token。
  • 切记:输入(Input)和输出(Output)都要算钱!如果你的 Prompt 里塞了一本小说作为背景,那每次调用的成本都会很高。

10.6 实战案例:批量智能舆情分析工具

场景描述

产品经理丢给你一个 Excel,里面有 50 条用户对新产品的评价。有的在骂物流,有的在夸质量。
任务

  1. 判断每一条的情感(正面/负面)。
  2. 提取用户的核心槽点或夸点。
  3. 输出格式必须是 JSON,以便后续存入数据库。

10.6.1 第一步:模拟数据

python 复制代码
import pandas as pd

# 模拟真实的用户评论
data = {
    "review_id": [101, 102, 103, 104],
    "content": [
        "东西收到了,包装破了个大洞,快递员态度极差!",
        "虽然物流慢了点,但衣服质量真的好,面料很舒服,值得等待。",
        "一般般吧,无功无过,习惯性好评。",
        "什么垃圾设计?按键根本按不动,退钱!"
    ]
}
df = pd.read_DataFrame(data)

10.6.2 第二步:编写工程级 Prompt

这是本案例的精华。注意看我是如何强制 AI 输出 JSON 的。

python 复制代码
def analyze_review(text):
    prompt = f"""
    你是一个专业的数据分析助手。请分析以下用户评论。
    
    评论内容:"{text}"
    
    请严格按照以下 JSON 格式输出,不要输出任何其他废话:
    {{
        "sentiment": "正面" 或 "负面" 或 "中性",
        "tags": ["关键词1", "关键词2"],
        "summary": "一句话摘要"
    }}
    """
    return prompt

10.6.3 第三步:批量调用与异常处理

网络请求是不稳定的,真正的工程代码必须包含 try-except

python 复制代码
import json
import time

results = []

print("开始分析...")

for index, row in df.iterrows():
    text = row['content']
    
    # 构造 Prompt
    user_prompt = analyze_review(text)
    
    try:
        # 发起调用 (这里假设你已经配置好了 client)
        # 记得把 temperature 设低,因为我们要的是结构化数据
        response = client.chat.completions.create(
            model="deepseek-chat", 
            messages=[{"role": "user", "content": user_prompt}],
            temperature=0.1 
        )
        
        # 获取原始文本
        raw_content = response.choices[0].message.content
        
        # 【关键步骤】清洗数据:有时候AI会多输出 ```json ... ```,需要去掉
        clean_content = raw_content.replace("```json", "").replace("```", "").strip()
        
        # 解析 JSON 字符串为 Python 字典
        parsed_data = json.loads(clean_content)
        
        # 合并结果
        parsed_data['review_id'] = row['review_id']
        results.append(parsed_data)
        print(f"ID {row['review_id']} 分析成功")
        
    except Exception as e:
        print(f"ID {row['review_id']} 失败: {e}")
        # 可以在这里加 retry 逻辑
    
    # 礼貌性停顿,防止触发 API 速率限制 (Rate Limit)
    time.sleep(0.5)

# --- 结果展示 ---
result_df = pd.DataFrame(results)
print("\n分析结果:")
print(result_df)

预期输出

review_id sentiment tags summary
101 负面 [物流, 包装] 包装破损且快递员态度差
102 正面 [质量, 面料] 物流慢但衣服质量好
... ... ... ...

10.6.4 为什么这很有价值?

以前做这种分析,我们需要训练一个情感分类模型,再训练一个关键词提取模型,还要训练一个摘要模型。

现在,一个 Prompt + 一个 API 接口,全部搞定。 开发效率提升了 10 倍不止。


10.7 章节小结

本章我们正式跨入了 AIGC 应用开发 的大门。

  1. API 思维:不要重复造轮子,学会利用现成的最强大脑。
  2. Prompt Engineering:学会了结构化提示、Few-Shot 和 Chain of Thought,这是你驾驭 AI 的缰绳。
  3. 工程化细节:了解了 Temperature 对结果的影响,掌握了如何强制 AI 输出 JSON 格式,这对于将 AI 接入现有软件系统至关重要。

但是,目前的 AI 还仅仅是一个"聊天机器人",它无法访问你的本地文件,不知道你电脑里存的 PDF,也无法帮你联网搜索最新的新闻。

如何让大模型拥有"外挂",访问你的私有数据?这就是下一章的主题------RAG(检索增强生成)与 LangChain


10.8 思考与扩展练习

  1. 角色扮演 Bot

    修改 messages 中的 system prompt,把 AI 设定为一个"苏格拉底式的老师"。不管你问什么,它都不直接回答,而是反问你,引导你自己思考。尝试与之对话。

  2. 成本计算器

    利用 tiktoken 库(OpenAI 官方的分词计算工具),写一个小脚本,计算一下你输入的一段文本大概包含多少个 Token,如果按 GPT-4 的价格调用一次需要花多少人民币?

  3. JSON 容错

    在实战案例中,如果 AI 偶尔抽风,输出的 JSON 格式少了一个大括号,json.loads() 会报错。作为工程师,你能想到什么办法来自动修复这个错误的 JSON 字符串吗?(提示:可以使用 LLM 进行自我修复,或者使用正则提取)。

相关推荐
لا معنى له2 小时前
目标检测的内涵、发展和经典模型--学习笔记
人工智能·笔记·深度学习·学习·目标检测·机器学习
AKAMAI4 小时前
Akamai Cloud客户案例 | CloudMinister借助Akamai实现多云转型
人工智能·云计算
墨风如雪5 小时前
OpenAI 甩出王炸:GPT-5.2-Codex 上线,这次它想做你的“赛博合伙人”
aigc
Robot侠6 小时前
极简LLM入门指南4
大数据·python·llm·prompt·提示工程
小a杰.6 小时前
Flutter 与 AI 深度集成指南:从基础实现到高级应用
人工智能·flutter
colorknight6 小时前
数据编织-异构数据存储的自动化治理
数据仓库·人工智能·数据治理·数据湖·数据科学·数据编织·自动化治理
Lun3866buzha6 小时前
篮球场景目标检测与定位_YOLO11-RFPN实现详解
人工智能·目标检测·计算机视觉
janefir6 小时前
LangChain框架下DirectoryLoader使用报错zipfile.BadZipFile
人工智能·langchain
等....7 小时前
Miniconda使用
开发语言·python
Java&Develop7 小时前
Aes加密 GCM java
java·开发语言·python