第 1 节 / 共 7 节

大模型发展史 · 提示词入门与 API 调用

🎯 了解大模型发展关键节点与幻觉问题;掌握提示词核心原则;会用 OpenAI 兼容接口(OpenAI / DashScope / 火山引擎)调用大模型。
📖 笔记

Day01 完整笔记

Python 大模型提示词 Day01 完整笔记

今日目标

  1. 了解大模型发展的几个关键时间节点。
  2. 掌握大模型幻觉的概念和常见解决方法。
  3. 掌握提示词工程的五项原则。
  4. 理解大模型调用外部工具的基本思想。
  5. 掌握调用云端大模型的基本方法。
  6. 掌握大模型提示词中的角色划分。
  7. 补充理解 API Key 安全、messages 结构和模型返回值的读取方式。

一、大模型发展的关键时间节点

1. 定义

大模型是指参数规模大、训练数据量大、可以完成理解、生成、推理、总结、分类、信息抽取等任务的人工智能模型。

2. 面试防穿帮时间线

学习大模型历史,不是为了背一堆年份,而是为了面试和项目表达时不穿帮。

比如:如果你在讲 2020 年以前的项目,就不能说“当时用 ChatGPT 做了智能客服”,因为 ChatGPT 是 2022 年 11 月才发布的。不同时间点能说的模型和技术要符合当时的技术背景。

时间 代表模型或技术 重点
2012 AlexNet 深度学习在图像识别任务中取得重要突破,让 CNN 被更多人重视
2017 Transformer 后续大语言模型的重要基础结构,注意力机制成为核心
2018 GPT-1、BERT GPT 代表生成式预训练方向,BERT 代表理解式预训练方向
2019 GPT-2 生成能力明显增强,文本生成效果开始受到大量关注
2020 GPT-3 大参数规模带来更强的少样本学习能力,Prompt 价值开始凸显
2021 CLIP、DALL·E 文本和图像开始更紧密结合,多模态方向受到关注
2022 ChatGPT、Stable Diffusion ChatGPT 推动大模型进入大众视野,文生图工具快速普及
2023 GPT-4、Claude、LLaMA、通义千问 Qwen 高能力闭源模型与开源模型并行发展,国内大模型开始大量落地
2024 GPT-4o、Claude 3、Gemini 1.5、Llama 3、Qwen2 多模态、长上下文、开源大模型能力快速提升
2025 DeepSeek-R1、Qwen3 推理模型和高性价比模型受到广泛关注,国产模型影响力进一步增强

3. 面试表达时怎么用

如果你想表达 更稳妥的说法
讲 2017 年前后的技术 可以说 Transformer 架构出现,为后续大语言模型打基础
讲 2018-2020 年 NLP 技术 可以说 BERT、GPT 系列推动预训练语言模型发展
讲 2020 年左右的能力 可以说 GPT-3 展示了大规模语言模型的少样本学习能力
讲 2022 年后的应用 可以说 ChatGPT 推动大模型进入大众应用阶段
讲 2023 年后的项目 可以说 GPT-4、Claude、LLaMA、通义千问等模型可用于真实业务探索
讲 2024 年后的应用 可以说多模态、长上下文、开源模型能力明显增强
讲 2025 年后的趋势 可以说推理模型、低成本高性能模型、国产模型影响力明显提升

4. 面试中不能乱说的点

错误说法 为什么不严谨 正确表达
2020 年用 ChatGPT 做客服 ChatGPT 2022 年才发布 2020 年可以说基于 GPT-3 或传统 NLP 方案探索
2018 年用 GPT-4 做项目 GPT-4 2023 年才发布 2018 年可以说 BERT、GPT-1 这类预训练模型
2021 年用 DeepSeek-R1 做推理 DeepSeek-R1 是 2025 年代表模型 2021 年更适合说 GPT-3、CLIP、DALL·E 等方向
说所有大模型都是 ChatGPT ChatGPT 是产品,不等于所有大模型 应该说大语言模型或生成式 AI 模型
说 RAG 是 2017 年 Transformer 同期就普及 RAG 作为企业知识库方案是后续大模型应用中逐渐普及 可以说 RAG 是大模型落地中解决知识依据的重要方案

5. 作用

学习发展节点不是为了背历史,而是为了理解:

  1. 大模型不是突然出现的,而是长期技术积累的结果。
  2. 大模型能力来自数据、算法、算力共同发展。
  3. 今天学习提示词,是为了把现成大模型能力接入实际项目。

6. 重点

人工智能发展的三个核心驱动力:

  1. 数据:模型学习的材料。
  2. 算法:模型学习规律的方法。
  3. 算力:支撑大规模训练和推理的硬件能力。

7. 难点

不要把“大模型发展史”理解成单纯背年份。它真正要说明的是:现在的大模型应用,是建立在深度学习、Transformer、海量数据和强大算力基础上的。

面试中最重要的是时间顺序不要乱:

AlexNet → Transformer → GPT/BERT → GPT-3 → ChatGPT → GPT-4 → 多模态/开源模型 → 推理模型

二、大模型幻觉

1. 定义

大模型幻觉是指:模型生成了错误、无依据、和事实不一致,或者不符合用户要求的内容。

大白话理解:

模型看起来说得很自信,但内容可能是编的,或者没有按要求回答。

2. 分类

类型 定义 例子
事实性幻觉 模型输出内容和现实事实不一致 编造不存在的论文、作者、公司新闻
忠实性幻觉 模型输出内容和用户指令、上下文不一致 要求只输出 JSON,模型却输出解释文字

3. 作用

理解幻觉是为了知道:大模型不能无条件相信。尤其是企业项目里,模型输出可能会进入数据库、报表、客服回复或业务流程,所以必须设计约束和校验。

4. 解决方法

方法 作用
写清提示词 限定角色、任务、格式、边界,减少模型乱答
提供参考资料 让模型基于资料回答,减少凭空生成
使用 RAG 先检索知识库,再把资料交给模型回答
使用工具校验 对日期、金额、JSON 格式等内容用程序检查
人工复核 对低置信度或高风险结果交给人工确认

5. 重点

幻觉最危险的地方不是“看起来假”,而是“看起来很真”。模型可能把不存在的来源、数据、结论说得非常完整。

6. 易错点

错误理解 正确理解
模型说得自信就一定是真的 模型可能一本正经地生成错误内容
模型出错就是模型完全不能用 模型可用,但要加提示词约束、资料依据和程序校验
幻觉只和事实有关 没按用户要求输出,也属于忠实性幻觉

三、提示词工程

1. 定义

提示词工程是通过设计清晰、结构化的指令,引导大模型按照指定角色、任务、步骤、边界和格式完成任务的方法。

2. 作用

提示词工程的作用是让模型:

  1. 更清楚地理解任务。
  2. 更稳定地输出结果。
  3. 更少产生幻觉。
  4. 更容易被程序继续处理。
  5. 更贴近真实业务需求。

3. 提示词和用户问题的区别

用户问题只是提示词的一部分。

真实项目中的提示词可能包含:

  1. 系统角色。
  2. 用户原始问题。
  3. 业务背景。
  4. 参考资料。
  5. 示例输入和输出。
  6. 输出格式。
  7. 边界规则。
  8. 工具调用结果。

4. 提示词工程五项原则

原则 定义 作用 示例
清晰的指令 把任务、背景、限制、格式说清楚 减少模型误解 “请输出 JSON,字段为 name、phone、address”
文本参考 给模型提供依据资料 减少凭空发挥 “请根据三引号中的资料回答”
复杂任务拆解 把大任务拆成多个小步骤 降低任务难度 先提取问题,再判断情绪,再给建议
给模型示例 提供输入和输出样例 让模型模仿格式和风格 few-shot 示例
调用外部工具 让模型判断工具,程序执行工具 让模型不只回答,还能间接做事 查天气、查数据库、调用接口

5. 重点

提示词不是越长越好,而是越清楚越好。好的提示词要让模型知道:

  1. 你是谁。
  2. 你要做什么。
  3. 根据什么做。
  4. 按什么步骤做。
  5. 不能做什么。
  6. 最后输出什么格式。

6. 难点

难点在于把“模糊需求”变成“模型能执行、程序能接收”的结构化任务说明。

模糊需求:

帮我分析客户反馈。

结构化提示词:

你是一个客户反馈分析助手。

任务:
1. 判断客户情绪,只能是:正面、负面、中性。
2. 提取客户提到的主要问题。
3. 给出一句客服回复建议。

输出格式:
{
  "emotion": "正面|负面|中性",
  "problem": "客户问题",
  "suggestion": "回复建议"
}

客户反馈:
"""
这个 AI 写作工具生成速度挺快,但是经常答非所问,导出的格式也有点乱。
"""

四、RAG、微调和 Agent

1. RAG

定义

RAG 是检索增强生成。它会先从知识库中检索相关资料,再把资料和用户问题一起交给大模型生成答案。

作用

RAG 主要解决:

  1. 模型知识过时。
  2. 模型不知道企业内部资料。
  3. 模型回答没有依据。

类比

RAG 像开卷考试。模型不是只靠自己的记忆回答,而是先查资料,再根据资料作答。

2. 微调

定义

微调是在已有模型基础上,用特定领域或任务数据继续训练模型,让模型长期适配某类任务。

作用

微调主要解决:

  1. 模型长期风格不统一。
  2. 模型需要稳定掌握某类领域表达。
  3. 模型需要大量适配同一种任务。

和提示词的区别

提示词是调用时临时给规则;微调是通过训练改变模型后续表现。

3. Agent

定义

Agent 是智能体。它让模型不仅能回答问题,还能根据目标拆解任务、选择工具,并由程序执行工具。

作用

Agent 主要解决:

  1. 需要多步骤执行的任务。
  2. 需要调用外部工具的任务。
  3. 需要根据结果继续调整的任务。

例子

用户说:“帮我规划明天去广州的行程。”

Agent 可能需要:

  1. 调用定位工具获取出发地。
  2. 调用天气工具查询广州天气。
  3. 调用搜索工具查景点。
  4. 调用交通工具查路线。
  5. 整合结果生成计划。

4. 对比总结

技术 解决什么 大白话
提示词工程 模型怎么答 把话说清楚
RAG 回答依据从哪来 开卷考试
微调 模型长期擅长什么 回炉深造
Agent 模型如何调用工具完成任务 智能任务管家

五、大模型提示词中的角色划分

1. 定义

在大模型对话接口中,常见角色有:

  1. system
  2. user
  3. assistant
  4. tool

这些角色共同组成 messages,也就是提交给模型的消息列表。

2. 三种核心角色

角色 定义 作用
system 系统角色 设定模型身份、任务规则、输出边界
user 用户角色 提出具体问题或提供待处理数据
assistant 助手角色 表示模型历史回复,也可以作为示例答案

3. tool 角色

tool 通常用于 Agent 或工具调用场景,表示外部工具执行后的结果。

例如:

  1. 天气接口返回的天气信息。
  2. 数据库查询结果。
  3. 搜索引擎返回的网页摘要。

4. 重点

一句话记忆:

system 定规则,user 给任务,assistant 给回答,tool 给工具结果。

5. 难点

难点是理解 assistant 的两种用法:

  1. 在普通 API 调用中,assistant 是模型实时生成的回复。
  2. 在 few-shot 示例中,assistant 可以作为提前写好的标准答案,让模型模仿。

六、调用云端大模型的方法

1. 定义

调用云端大模型,就是通过 Python 代码请求模型服务,把问题发送给模型,再接收模型返回结果。

2. 调用云端模型的基本步骤

  1. 安装 SDK,例如 openai 或 dashscope。
  2. 获取并配置 API Key。
  3. 创建客户端对象或设置密钥。
  4. 准备 messages。
  5. 调用模型。
  6. 取出模型返回内容。

3. API Key

API Key 是调用模型服务的密钥。

正确做法:

  1. 不要写进公开代码。
  2. 不要截图发群。
  3. 推荐放到环境变量中。
  4. 首次配置环境变量后,重启 PyCharm。

4. OpenAI 兼容方式代码

"""
需求:
    使用 OpenAI 兼容方式调用阿里百炼模型。

步骤:
    1. 从环境变量读取 API Key,避免密钥泄露。
    2. 创建 OpenAI 客户端对象。
    3. 准备 messages,包含 system 和 user。
    4. 调用模型并打印模型生成的文本内容。
"""

import os  # 用于读取环境变量,避免把真实 API Key 写进代码
from openai import OpenAI  # OpenAI 客户端类,用于发送模型调用请求


api_key = os.getenv("OPENAI_API_KEY")  # 从环境变量中读取密钥

if not api_key:
    # 如果没有读到密钥,说明环境变量没有配置好,或者配置后没有重启 PyCharm
    raise ValueError("没有读取到 OPENAI_API_KEY,请检查环境变量并重启 PyCharm。")

client = OpenAI(
    api_key=api_key,  # 用于证明调用者身份
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",  # 阿里百炼 OpenAI 兼容接口地址
)

completion = client.chat.completions.create(
    model="qwen-plus",  # 指定要调用的模型名称
    messages=[
        {
            "role": "system",
            "content": "你是一个简洁的 AI 助手,请用中文回答。"
        },
        {
            "role": "user",
            "content": "请用一句话解释提示词工程。"
        },
    ],
)

# choices 表示候选回复列表,通常取第 1 个
# message 表示模型返回的消息对象
# content 才是真正要打印给用户看的文本内容
print(completion.choices[0].message.content)

5. DashScope 原生方式代码

"""
需求:
    使用 DashScope 原生 SDK 调用阿里通义模型。

步骤:
    1. 导入 dashscope。
    2. 从环境变量读取 DASHSCOPE_API_KEY。
    3. 使用 dashscope.Generation.call 调用模型。
    4. 从 response.output["text"] 中取出模型回复。
"""

import os  # 用于读取环境变量
import dashscope  # 阿里百炼官方 SDK


dashscope.api_key = os.getenv("DASHSCOPE_API_KEY")  # 设置 DashScope 调用密钥

if not dashscope.api_key:
    raise ValueError("没有读取到 DASHSCOPE_API_KEY,请检查环境变量并重启 PyCharm。")

response = dashscope.Generation.call(
    model="qwen-plus",  # 指定模型名称
    messages=[
        {
            "role": "system",
            "content": "你是一个简洁的 AI 助手,请用中文回答。"
        },
        {
            "role": "user",
            "content": "请用一句话解释 RAG。"
        },
    ],
)

# DashScope 原生方式的文本结果通常在 output["text"] 中
print(response.output["text"])

6. OpenAI 风格返回结构

OpenAI 风格调用返回的不是普通字符串,而是一个结构化对象。

最常用的取值路径:

completion.choices[0].message.content

含义:

  1. choices:模型返回的候选结果列表。
  2. choices[0]:取第一个候选结果。
  3. message:候选结果中的消息对象。
  4. content:模型真正生成的文本。

另外,返回值中的 usage 通常表示 Token 消耗,后续做成本统计时会用到。

七、调用外部工具

1. 定义

调用外部工具是指:模型判断当前任务需要什么工具,程序负责真正执行工具,并把工具结果交给模型继续生成答案。

2. 作用

外部工具可以弥补大模型本身不能直接完成的动作,例如:

  1. 查天气。
  2. 查数据库。
  3. 搜索网页。
  4. 执行计算。
  5. 调用业务系统接口。

3. 重点

模型本身不是浏览器、数据库或计算器。真正执行动作的是程序,模型负责理解任务和决定工具使用方向。

4. 简单流程

用户提出目标
→ 模型判断需要调用工具
→ 程序执行工具
→ 工具返回结果
→ 模型基于结果生成最终回答

八、今日重点与难点

1. 今日重点

  1. 大模型发展不是突然发生的,核心依赖数据、算法、算力。
  2. 幻觉是大模型的重要风险,必须通过提示词、RAG、工具校验等方式降低。
  3. 提示词工程的五项原则要会说、会用。
  4. system、user、assistant 的作用必须分清。
  5. 云端模型调用要掌握基本流程。
  6. API Key 不能写死在代码里。

2. 今日难点

  1. 分清提示词和用户问题的区别。
  2. 分清事实性幻觉和忠实性幻觉。
  3. 分清提示词、RAG、微调、Agent 各自解决的问题。
  4. 理解 assistant 既可以表示模型回复,也可以作为 few-shot 示例答案。
  5. 理解模型返回值中为什么要取 choices[0].message.content。

九、今日易错点

易错点 错误 正确
提示词 提示词就是用户随便问一句 提示词是一整套任务说明
幻觉 模型说得自信就是真的 模型可能生成无依据内容
RAG RAG 是重新训练模型 RAG 是检索资料后增强回答
微调 微调就是改提示词 微调是继续训练模型
Agent Agent 只是聊天机器人 Agent 能拆任务并调用工具
API Key 可以写进代码里 应放环境变量中
返回值 completion 是最终文本 completion.choices[0].message.content 才是常用文本内容

十、今日总结

今天学习的是大模型应用开发的第一步:如何认识大模型、约束大模型、调用大模型。

一句话总结:

提示词让模型按规则回答,RAG 让模型有资料依据,微调让模型长期适配任务,Agent 让模型能调用工具完成复杂任务。

💻 代码

Day01 代码:各家平台 API 调用与提示词练习

7 个文件
✏️ 作业

Day01 作业

Python 大模型提示词 Day01 作业

一、选择题

  1. 人工智能发展的三个核心驱动力是?

A. 数据、算法、算力
B. 电脑、鼠标、键盘
C. 前端、后端、数据库
D. 图片、视频、音频

  1. 关于提示词的说法,正确的是?

A. 提示词只等于用户最后输入的问题
B. 提示词可以包含角色、规则、资料、示例和输出格式
C. 提示词越短越好,不能写长
D. 提示词只在网页聊天中有用,代码调用时没有用

  1. 下面哪种情况更像事实性幻觉?

A. 要求只输出 JSON,模型多输出解释
B. 模型把不存在的公司新闻说成真实发生
C. 模型回复太长
D. 模型没有使用表格

  1. 下面哪种情况更像忠实性幻觉?

A. 模型没有遵守“只输出 JSON”的要求
B. 模型说了一个错误年份
C. 模型编造了不存在的人名
D. 模型把别人的作品说成某歌手作品

  1. RAG 更适合解决什么问题?

A. 让模型改变底层参数
B. 让模型检索外部资料后再回答
C. 让模型自动点击网页
D. 让模型不需要提示词

  1. 微调更像下面哪种说法?

A. 给模型一份临时参考资料
B. 让模型回炉深造,长期学习某类能力
C. 让模型调用天气接口
D. 让模型把回答变短

  1. Agent 的核心理解是?

A. 模型只负责生成图片
B. 模型做决策,程序负责调用工具执行
C. 模型不能和程序结合
D. Agent 等于普通聊天窗口

  1. 在 messages 中,system 角色主要用于?

A. 提供模型身份、规则和输出边界
B. 表示用户本次提问
C. 表示数据库连接
D. 表示 Python 文件名

  1. API Key 的正确使用方式是?

A. 直接写进代码并发给同学
B. 截图发到群里方便大家复制
C. 放到环境变量或安全配置中读取
D. 随便写一个字符串即可

  1. 为什么很多 AI 项目要求模型输出 JSON?

A. JSON 看起来更复杂
B. JSON 方便程序继续解析和处理
C. JSON 只能给人阅读
D. JSON 可以自动训练模型

二、填空题

  1. AI 能力的三个核心驱动力是 、、________。

  2. 大模型幻觉可以分为 ________ 幻觉和 ________ 幻觉。

  3. 提示词包含用户问题,但不等于 ________。

  4. RAG 可以用“________ 考试”来类比,因为它会给模型提供外部资料。

  5. 微调可以理解为让模型 ________,从而长期适配某类任务。

  6. Agent 中,模型主要负责 ________,程序主要负责 ________。

  7. messages 中常见的三个角色是 、、________。

  8. system 角色通常用于设定模型的身份、任务规则和 ________。

  9. API Key 不应该写进公开代码,推荐放到 ________ 中。

  10. 如果希望程序更容易处理模型结果,可以要求模型输出 ________ 格式。

三、简答题

  1. 为什么说提示词不是简单的一句用户提问?

  2. 请用自己的话解释事实性幻觉。

  3. 请用自己的话解释忠实性幻觉。

  4. RAG 和微调有什么区别?

  5. 为什么工作中经常要求模型输出 JSON?

  6. system、user、assistant 三种角色分别有什么作用?

  7. 为什么 API Key 不能直接写在代码里?

  8. 请列出一个清晰提示词应该包含的 4 个要素。

  9. 什么情况下适合给模型提供示例?

  10. 为什么复杂任务要拆成多个步骤再交给模型?

四、代码实操题

1. 基础练习:调用模型完成一句话解释

要求:

  1. 使用 OpenAI 兼容方式调用模型。
  2. 从环境变量读取 OPENAI_API_KEY。
  3. 提问:“请用一句话解释提示词工程。”
  4. 打印模型回复。

2. 基础练习:设置计算器角色

要求:

  1. 使用 OpenAI 兼容方式调用模型。
  2. system 中设定:你是一个计算器,只输出最终结果,不要解释。
  3. user 中提问:2 + 5 * 3 等于多少?
  4. 打印模型回复。

3. 基础练习:DashScope 调用模型

要求:

  1. 使用 dashscope 库调用模型。
  2. 从环境变量读取 DASHSCOPE_API_KEY。
  3. 提问:“请用一句话解释 RAG。”
  4. 打印模型回复。

4. 进阶练习:客户反馈情绪分类

要求:

  1. 使用 system 设定模型为客户反馈分析助手。
  2. 输入一段客户反馈。
  3. 要求输出 JSON,字段包含 emotion、problem、suggestion。
  4. 情绪只能是:正面、负面、中性。

客户反馈:

这个 AI 写作工具生成速度挺快,但是经常答非所问,导出的格式也有点乱。

5. 进阶练习:会议行动项提取

要求:

  1. 从会议内容中提取行动项。
  2. 输出 JSON。
  3. 每个行动项包含 item、owner、deadline。
  4. 如果没有明确截止时间,deadline 写 null。

会议内容:

本次周会决定,小王本周五前完成智能客服原型页面,小张负责整理客户反馈,但没有明确截止时间。

6. 进阶练习:给模型一个示例

要求:

  1. 使用 system 设定模型为信息抽取助手。
  2. 给模型提供一个 user 示例和一个 assistant 示例。
  3. 再提供真正要处理的文本。
  4. 输出姓名、手机号、地址 JSON。

7. 综合案例:社媒内容分类

要求:

设计一个社媒内容分类提示词,将输入内容分为:

  • 噪音
  • 广告营销
  • 弱相关
  • 非噪音

要求:

  1. 使用 system 写清分类规则。
  2. 使用 user 输入待分类内容。
  3. 输出 JSON,字段包含 label、confidence。

测试内容:

#海底捞# 今天生日去吃饭,服务员送了蛋糕,体验很好!

8. 综合案例:AI 产品需求整理

要求:

从一段需求描述中提取结构化信息。

输入:

我们想做一个 AI 客服助手,主要用于回答用户关于订单、退款、物流的问题。
希望先接入网页端,输出要简洁,遇到不确定的问题要提示转人工。

输出 JSON,字段包含:

  • product
  • scenario
  • channels
  • constraints
  • risk_handling

五、选择题答案

  1. A
  2. B
  3. B
  4. A
  5. B
  6. B
  7. B
  8. A
  9. C
  10. B

六、填空题答案

  1. 数据、算法、算力
  2. 事实性、忠实性
  3. 用户问题
  4. 开卷
  5. 回炉深造
  6. 决策、调用工具执行
  7. system、user、assistant
  8. 输出边界
  9. 环境变量
  10. JSON

七、简答题参考答案

  1. 因为真实提示词除了用户问题,还可能包含角色设定、业务背景、参考资料、示例、步骤、输出格式和边界规则。用户问题只是提示词的一部分。

  2. 事实性幻觉指模型生成的内容和现实事实不一致,比如编造不存在的事件、人物、作品或时间。

  3. 忠实性幻觉指模型没有遵守用户指令或上下文要求,比如要求只输出 JSON,它却额外输出解释。

  4. RAG 是检索外部资料后交给模型回答,像开卷考试;微调是对模型进行二次训练或参数调整,让模型长期适配某类任务。

  5. 因为 JSON 字段固定,程序容易解析,可以继续写入数据库、传给前端或进入工作流。

  6. system 用来设定规则和边界;user 用来提出具体问题;assistant 表示模型回复,常用于提供示例答案。

  7. 因为 API Key 相当于账户钥匙,泄露后别人可能消耗额度或造成安全风险。应该放到环境变量或安全配置中读取。

  8. 可以包含角色、任务、背景、约束、输出格式、示例、参考资料等,答出其中 4 个即可。

  9. 当希望模型模仿固定格式、风格、分类标准或输出结构时,适合提供示例。

  10. 因为复杂任务一次性提交容易让模型遗漏步骤或误解意图,拆步骤可以降低难度,让模型按流程完成任务。

八、代码实操参考答案

1. 基础练习:调用模型完成一句话解释

"""
需求:
    使用 OpenAI 兼容方式调用云端模型,让模型用一句话解释提示词工程。

步骤:
    1. 导入 os 和 OpenAI。
    2. 从环境变量读取 OPENAI_API_KEY,避免把真实密钥写进代码。
    3. 创建 OpenAI 客户端,并指定阿里百炼兼容接口地址。
    4. 准备 messages,提交系统规则和用户问题。
    5. 获取模型回复并打印。
"""

import os  # 用来读取系统环境变量
from openai import OpenAI  # 用来创建模型调用客户端


api_key = os.getenv("OPENAI_API_KEY")  # 从环境变量读取密钥
if not api_key:
    # 如果没有读取到密钥,直接抛出清晰错误,方便排查
    raise ValueError("没有读取到 OPENAI_API_KEY,请配置环境变量后重启 PyCharm。")

client = OpenAI(
    api_key=api_key,  # 平台通过密钥识别调用者身份
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",  # 阿里百炼兼容接口地址
)

completion = client.chat.completions.create(
    model="qwen-plus",  # 指定模型,实际可用模型以平台列表为准
    messages=[
        {
            "role": "system",
            "content": "你是一个简洁的 AI 助手,请用中文回答。"
        },
        {
            "role": "user",
            "content": "请用一句话解释提示词工程。"
        }
    ]
)

print(completion.choices[0].message.content)  # 打印第一条模型回复

2. 基础练习:设置计算器角色

"""
需求:
    设定模型为计算器,让它只输出最终计算结果。

步骤:
    1. 读取 API Key。
    2. 创建客户端。
    3. 在 system 中限定模型角色和输出规则。
    4. 在 user 中提出计算问题。
"""

import os
from openai import OpenAI


api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
    raise ValueError("没有读取到 OPENAI_API_KEY,请配置环境变量后重启 PyCharm。")

client = OpenAI(
    api_key=api_key,
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen-plus",
    messages=[
        {
            "role": "system",
            # system 用来定规则:这里明确要求模型像计算器一样,只输出结果
            "content": "你是一个计算器,只输出最终计算结果,不要解释过程。"
        },
        {
            "role": "user",
            # user 是本次真正要处理的问题
            "content": "2 + 5 * 3 等于多少?"
        }
    ]
)

print(completion.choices[0].message.content)

3. 基础练习:DashScope 调用模型

"""
需求:
    使用 dashscope 库调用阿里通义模型,解释 RAG。

步骤:
    1. 导入 os 和 dashscope。
    2. 从环境变量读取 DASHSCOPE_API_KEY。
    3. 调用 Generation.call。
    4. 从 response.output["text"] 中取出模型回复。
"""

import os
import dashscope


dashscope.api_key = os.getenv("DASHSCOPE_API_KEY")  # 设置 SDK 调用密钥
if not dashscope.api_key:
    raise ValueError("没有读取到 DASHSCOPE_API_KEY,请配置环境变量后重启 PyCharm。")

response = dashscope.Generation.call(
    model="qwen-plus",
    messages=[
        {
            "role": "system",
            "content": "你是一个简洁的 AI 助手,请用中文回答。"
        },
        {
            "role": "user",
            "content": "请用一句话解释 RAG。"
        }
    ]
)

print(response.output["text"])

4. 进阶练习:客户反馈情绪分类

"""
需求:
    从客户反馈中判断情绪、提取问题,并给出回复建议。

步骤:
    1. system 中写清模型身份、分类范围和输出格式。
    2. user 中放入客户反馈。
    3. 要求模型只输出 JSON,方便程序继续处理。
"""

import os
from openai import OpenAI


api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
    raise ValueError("没有读取到 OPENAI_API_KEY,请配置环境变量后重启 PyCharm。")

client = OpenAI(
    api_key=api_key,
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

system_prompt = """
你是一个客户反馈分析助手。
请分析用户反馈,并输出 JSON。

要求:
1. emotion 只能是:正面、负面、中性。
2. problem 提取客户提到的主要问题。
3. suggestion 给出一句适合客服回复的建议。
4. 只输出 JSON,不要输出解释文字。
"""

user_feedback = """
这个 AI 写作工具生成速度挺快,但是经常答非所问,导出的格式也有点乱。
"""

completion = client.chat.completions.create(
    model="qwen-plus",
    messages=[
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": user_feedback},
    ]
)

print(completion.choices[0].message.content)

5. 进阶练习:会议行动项提取

"""
需求:
    从会议内容中提取行动项,输出可被程序解析的 JSON。

步骤:
    1. 定义提取规则。
    2. 指定每个行动项必须包含 item、owner、deadline。
    3. 对没有截止时间的任务,要求 deadline 使用 null。
"""

import os
from openai import OpenAI


api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
    raise ValueError("没有读取到 OPENAI_API_KEY,请配置环境变量后重启 PyCharm。")

client = OpenAI(
    api_key=api_key,
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

system_prompt = """
你是一个会议行动项提取助手。
请从会议内容中提取明确有人负责的任务。

输出要求:
1. 只输出 JSON。
2. JSON 顶层字段为 action_items。
3. 每个行动项包含 item、owner、deadline。
4. 如果没有明确截止时间,deadline 写 null。
"""

meeting_text = """
本次周会决定,小王本周五前完成智能客服原型页面,小张负责整理客户反馈,但没有明确截止时间。
"""

completion = client.chat.completions.create(
    model="qwen-plus",
    messages=[
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": meeting_text},
    ]
)

print(completion.choices[0].message.content)

6. 进阶练习:给模型一个示例

"""
需求:
    使用 few-shot 示例,让模型学习快递信息抽取的输入和输出格式。

步骤:
    1. system 设定任务规则。
    2. user 提供一个示例输入。
    3. assistant 提供一个示例输出。
    4. user 提供真正要处理的新输入。
"""

import os
from openai import OpenAI


api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
    raise ValueError("没有读取到 OPENAI_API_KEY,请配置环境变量后重启 PyCharm。")

client = OpenAI(
    api_key=api_key,
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

system_prompt = """
你是一个快递信息提取助手。
请提取姓名、手机号、地址。
只输出 JSON。
手机号中的横线和空格要去掉。
"""

example_user = """
张明远,138-1234-5678
广东省深圳市南山区科技园南区高新南一道1000号腾讯大厦18层 1806室
"""

example_assistant = """
{"name": "张明远", "phone": "13812345678", "address": "广东省深圳市南山区科技园南区高新南一道1000号腾讯大厦18层 1806室"}
"""

real_user = """
李婉婷
151-9876-5432
北京市海淀区中关村大街1号海龙大厦8层805室
东西是一份文件,已经封装好了。
"""

completion = client.chat.completions.create(
    model="qwen-plus",
    messages=[
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": example_user},
        {"role": "assistant", "content": example_assistant},
        {"role": "user", "content": real_user},
    ]
)

print(completion.choices[0].message.content)

7. 综合案例:社媒内容分类

"""
需求:
    将社媒内容分类为噪音、广告营销、弱相关、非噪音。

步骤:
    1. 在 system 中写清四个标签的判断规则。
    2. 在 user 中输入待分类文本。
    3. 要求模型输出 label 和 confidence。
"""

import os
from openai import OpenAI


api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
    raise ValueError("没有读取到 OPENAI_API_KEY,请配置环境变量后重启 PyCharm。")

client = OpenAI(
    api_key=api_key,
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

system_prompt = """
你是一个品牌社媒内容分类助手。

请将输入内容分类为以下四类之一:
1. 噪音:完全无关,比如成语、误匹配、人名等。
2. 广告营销:促销、打卡、优惠、正面分享。
3. 弱相关:只是顺带提到品牌,没有具体行为或评价。
4. 非噪音:真实评价、投诉、体验、负面内容或有效内容。

输出要求:
1. 只输出 JSON。
2. label 必须是:噪音、广告营销、弱相关、非噪音。
3. confidence 必须是:high、medium、low。
"""

content = "#海底捞# 今天生日去吃饭,服务员送了蛋糕,体验很好!"

completion = client.chat.completions.create(
    model="qwen-plus",
    messages=[
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": content},
    ]
)

print(completion.choices[0].message.content)

8. 综合案例:AI 产品需求整理

"""
需求:
    从一段 AI 产品需求描述中提取结构化信息。

步骤:
    1. system 中规定字段和输出要求。
    2. user 中输入原始需求。
    3. 输出 JSON,方便后续写入需求文档或传给工作流。
"""

import os
from openai import OpenAI


api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
    raise ValueError("没有读取到 OPENAI_API_KEY,请配置环境变量后重启 PyCharm。")

client = OpenAI(
    api_key=api_key,
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

system_prompt = """
你是一个 AI 产品需求分析助手。
请从用户输入中提取结构化需求信息。

输出 JSON,字段包括:
1. product:产品名称或产品类型。
2. scenario:主要应用场景。
3. channels:使用渠道,数组格式。
4. constraints:约束条件,数组格式。
5. risk_handling:风险处理方式。

只输出 JSON,不要输出解释文字。
"""

requirement = """
我们想做一个 AI 客服助手,主要用于回答用户关于订单、退款、物流的问题。
希望先接入网页端,输出要简洁,遇到不确定的问题要提示转人工。
"""

completion = client.chat.completions.create(
    model="qwen-plus",
    messages=[
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": requirement},
    ]
)

print(completion.choices[0].message.content)