第 1 节 / 共 7 节
大模型发展史 · 提示词入门与 API 调用
Day01 完整笔记
Python 大模型提示词 Day01 完整笔记
今日目标
- 了解大模型发展的几个关键时间节点。
- 掌握大模型幻觉的概念和常见解决方法。
- 掌握提示词工程的五项原则。
- 理解大模型调用外部工具的基本思想。
- 掌握调用云端大模型的基本方法。
- 掌握大模型提示词中的角色划分。
- 补充理解 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. 作用
学习发展节点不是为了背历史,而是为了理解:
- 大模型不是突然出现的,而是长期技术积累的结果。
- 大模型能力来自数据、算法、算力共同发展。
- 今天学习提示词,是为了把现成大模型能力接入实际项目。
6. 重点
人工智能发展的三个核心驱动力:
- 数据:模型学习的材料。
- 算法:模型学习规律的方法。
- 算力:支撑大规模训练和推理的硬件能力。
7. 难点
不要把“大模型发展史”理解成单纯背年份。它真正要说明的是:现在的大模型应用,是建立在深度学习、Transformer、海量数据和强大算力基础上的。
面试中最重要的是时间顺序不要乱:
AlexNet → Transformer → GPT/BERT → GPT-3 → ChatGPT → GPT-4 → 多模态/开源模型 → 推理模型
二、大模型幻觉
1. 定义
大模型幻觉是指:模型生成了错误、无依据、和事实不一致,或者不符合用户要求的内容。
大白话理解:
模型看起来说得很自信,但内容可能是编的,或者没有按要求回答。
2. 分类
| 类型 | 定义 | 例子 |
|---|---|---|
| 事实性幻觉 | 模型输出内容和现实事实不一致 | 编造不存在的论文、作者、公司新闻 |
| 忠实性幻觉 | 模型输出内容和用户指令、上下文不一致 | 要求只输出 JSON,模型却输出解释文字 |
3. 作用
理解幻觉是为了知道:大模型不能无条件相信。尤其是企业项目里,模型输出可能会进入数据库、报表、客服回复或业务流程,所以必须设计约束和校验。
4. 解决方法
| 方法 | 作用 |
|---|---|
| 写清提示词 | 限定角色、任务、格式、边界,减少模型乱答 |
| 提供参考资料 | 让模型基于资料回答,减少凭空生成 |
| 使用 RAG | 先检索知识库,再把资料交给模型回答 |
| 使用工具校验 | 对日期、金额、JSON 格式等内容用程序检查 |
| 人工复核 | 对低置信度或高风险结果交给人工确认 |
5. 重点
幻觉最危险的地方不是“看起来假”,而是“看起来很真”。模型可能把不存在的来源、数据、结论说得非常完整。
6. 易错点
| 错误理解 | 正确理解 |
|---|---|
| 模型说得自信就一定是真的 | 模型可能一本正经地生成错误内容 |
| 模型出错就是模型完全不能用 | 模型可用,但要加提示词约束、资料依据和程序校验 |
| 幻觉只和事实有关 | 没按用户要求输出,也属于忠实性幻觉 |
三、提示词工程
1. 定义
提示词工程是通过设计清晰、结构化的指令,引导大模型按照指定角色、任务、步骤、边界和格式完成任务的方法。
2. 作用
提示词工程的作用是让模型:
- 更清楚地理解任务。
- 更稳定地输出结果。
- 更少产生幻觉。
- 更容易被程序继续处理。
- 更贴近真实业务需求。
3. 提示词和用户问题的区别
用户问题只是提示词的一部分。
真实项目中的提示词可能包含:
- 系统角色。
- 用户原始问题。
- 业务背景。
- 参考资料。
- 示例输入和输出。
- 输出格式。
- 边界规则。
- 工具调用结果。
4. 提示词工程五项原则
| 原则 | 定义 | 作用 | 示例 |
|---|---|---|---|
| 清晰的指令 | 把任务、背景、限制、格式说清楚 | 减少模型误解 | “请输出 JSON,字段为 name、phone、address” |
| 文本参考 | 给模型提供依据资料 | 减少凭空发挥 | “请根据三引号中的资料回答” |
| 复杂任务拆解 | 把大任务拆成多个小步骤 | 降低任务难度 | 先提取问题,再判断情绪,再给建议 |
| 给模型示例 | 提供输入和输出样例 | 让模型模仿格式和风格 | few-shot 示例 |
| 调用外部工具 | 让模型判断工具,程序执行工具 | 让模型不只回答,还能间接做事 | 查天气、查数据库、调用接口 |
5. 重点
提示词不是越长越好,而是越清楚越好。好的提示词要让模型知道:
- 你是谁。
- 你要做什么。
- 根据什么做。
- 按什么步骤做。
- 不能做什么。
- 最后输出什么格式。
6. 难点
难点在于把“模糊需求”变成“模型能执行、程序能接收”的结构化任务说明。
模糊需求:
帮我分析客户反馈。
结构化提示词:
你是一个客户反馈分析助手。
任务:
1. 判断客户情绪,只能是:正面、负面、中性。
2. 提取客户提到的主要问题。
3. 给出一句客服回复建议。
输出格式:
{
"emotion": "正面|负面|中性",
"problem": "客户问题",
"suggestion": "回复建议"
}
客户反馈:
"""
这个 AI 写作工具生成速度挺快,但是经常答非所问,导出的格式也有点乱。
"""
四、RAG、微调和 Agent
1. RAG
定义
RAG 是检索增强生成。它会先从知识库中检索相关资料,再把资料和用户问题一起交给大模型生成答案。
作用
RAG 主要解决:
- 模型知识过时。
- 模型不知道企业内部资料。
- 模型回答没有依据。
类比
RAG 像开卷考试。模型不是只靠自己的记忆回答,而是先查资料,再根据资料作答。
2. 微调
定义
微调是在已有模型基础上,用特定领域或任务数据继续训练模型,让模型长期适配某类任务。
作用
微调主要解决:
- 模型长期风格不统一。
- 模型需要稳定掌握某类领域表达。
- 模型需要大量适配同一种任务。
和提示词的区别
提示词是调用时临时给规则;微调是通过训练改变模型后续表现。
3. Agent
定义
Agent 是智能体。它让模型不仅能回答问题,还能根据目标拆解任务、选择工具,并由程序执行工具。
作用
Agent 主要解决:
- 需要多步骤执行的任务。
- 需要调用外部工具的任务。
- 需要根据结果继续调整的任务。
例子
用户说:“帮我规划明天去广州的行程。”
Agent 可能需要:
- 调用定位工具获取出发地。
- 调用天气工具查询广州天气。
- 调用搜索工具查景点。
- 调用交通工具查路线。
- 整合结果生成计划。
4. 对比总结
| 技术 | 解决什么 | 大白话 |
|---|---|---|
| 提示词工程 | 模型怎么答 | 把话说清楚 |
| RAG | 回答依据从哪来 | 开卷考试 |
| 微调 | 模型长期擅长什么 | 回炉深造 |
| Agent | 模型如何调用工具完成任务 | 智能任务管家 |
五、大模型提示词中的角色划分
1. 定义
在大模型对话接口中,常见角色有:
systemuserassistanttool
这些角色共同组成 messages,也就是提交给模型的消息列表。
2. 三种核心角色
| 角色 | 定义 | 作用 |
|---|---|---|
system |
系统角色 | 设定模型身份、任务规则、输出边界 |
user |
用户角色 | 提出具体问题或提供待处理数据 |
assistant |
助手角色 | 表示模型历史回复,也可以作为示例答案 |
3. tool 角色
tool 通常用于 Agent 或工具调用场景,表示外部工具执行后的结果。
例如:
- 天气接口返回的天气信息。
- 数据库查询结果。
- 搜索引擎返回的网页摘要。
4. 重点
一句话记忆:
system定规则,user给任务,assistant给回答,tool给工具结果。
5. 难点
难点是理解 assistant 的两种用法:
- 在普通 API 调用中,
assistant是模型实时生成的回复。 - 在 few-shot 示例中,
assistant可以作为提前写好的标准答案,让模型模仿。
六、调用云端大模型的方法
1. 定义
调用云端大模型,就是通过 Python 代码请求模型服务,把问题发送给模型,再接收模型返回结果。
2. 调用云端模型的基本步骤
- 安装 SDK,例如
openai或dashscope。 - 获取并配置 API Key。
- 创建客户端对象或设置密钥。
- 准备
messages。 - 调用模型。
- 取出模型返回内容。
3. API Key
API Key 是调用模型服务的密钥。
正确做法:
- 不要写进公开代码。
- 不要截图发群。
- 推荐放到环境变量中。
- 首次配置环境变量后,重启 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
含义:
choices:模型返回的候选结果列表。choices[0]:取第一个候选结果。message:候选结果中的消息对象。content:模型真正生成的文本。
另外,返回值中的 usage 通常表示 Token 消耗,后续做成本统计时会用到。
七、调用外部工具
1. 定义
调用外部工具是指:模型判断当前任务需要什么工具,程序负责真正执行工具,并把工具结果交给模型继续生成答案。
2. 作用
外部工具可以弥补大模型本身不能直接完成的动作,例如:
- 查天气。
- 查数据库。
- 搜索网页。
- 执行计算。
- 调用业务系统接口。
3. 重点
模型本身不是浏览器、数据库或计算器。真正执行动作的是程序,模型负责理解任务和决定工具使用方向。
4. 简单流程
用户提出目标
→ 模型判断需要调用工具
→ 程序执行工具
→ 工具返回结果
→ 模型基于结果生成最终回答
八、今日重点与难点
1. 今日重点
- 大模型发展不是突然发生的,核心依赖数据、算法、算力。
- 幻觉是大模型的重要风险,必须通过提示词、RAG、工具校验等方式降低。
- 提示词工程的五项原则要会说、会用。
system、user、assistant的作用必须分清。- 云端模型调用要掌握基本流程。
- API Key 不能写死在代码里。
2. 今日难点
- 分清提示词和用户问题的区别。
- 分清事实性幻觉和忠实性幻觉。
- 分清提示词、RAG、微调、Agent 各自解决的问题。
- 理解
assistant既可以表示模型回复,也可以作为 few-shot 示例答案。 - 理解模型返回值中为什么要取
choices[0].message.content。
九、今日易错点
| 易错点 | 错误 | 正确 |
|---|---|---|
| 提示词 | 提示词就是用户随便问一句 | 提示词是一整套任务说明 |
| 幻觉 | 模型说得自信就是真的 | 模型可能生成无依据内容 |
| RAG | RAG 是重新训练模型 | RAG 是检索资料后增强回答 |
| 微调 | 微调就是改提示词 | 微调是继续训练模型 |
| Agent | Agent 只是聊天机器人 | Agent 能拆任务并调用工具 |
| API Key | 可以写进代码里 | 应放环境变量中 |
| 返回值 | completion 是最终文本 | completion.choices[0].message.content 才是常用文本内容 |
十、今日总结
今天学习的是大模型应用开发的第一步:如何认识大模型、约束大模型、调用大模型。
一句话总结:
提示词让模型按规则回答,RAG 让模型有资料依据,微调让模型长期适配任务,Agent 让模型能调用工具完成复杂任务。
Day01 代码:各家平台 API 调用与提示词练习
7 个文件- 📄 01_openai方式调用大模型.py 6.3KB 下载
- 📄 02_response_api.py 3.6KB 下载
- 📄 03_deshscope方式调用大模型.py 4.9KB 下载
- 📄 04_角色练习.py 455B 下载
- 📄 05_zeroshot_fewshot.py 962B 下载
- 📄 06_火山引擎openai.py 827B 下载
- 📄 demo_test.py 1.8KB 下载
Day01 作业
Python 大模型提示词 Day01 作业
一、选择题
- 人工智能发展的三个核心驱动力是?
A. 数据、算法、算力
B. 电脑、鼠标、键盘
C. 前端、后端、数据库
D. 图片、视频、音频
- 关于提示词的说法,正确的是?
A. 提示词只等于用户最后输入的问题
B. 提示词可以包含角色、规则、资料、示例和输出格式
C. 提示词越短越好,不能写长
D. 提示词只在网页聊天中有用,代码调用时没有用
- 下面哪种情况更像事实性幻觉?
A. 要求只输出 JSON,模型多输出解释
B. 模型把不存在的公司新闻说成真实发生
C. 模型回复太长
D. 模型没有使用表格
- 下面哪种情况更像忠实性幻觉?
A. 模型没有遵守“只输出 JSON”的要求
B. 模型说了一个错误年份
C. 模型编造了不存在的人名
D. 模型把别人的作品说成某歌手作品
- RAG 更适合解决什么问题?
A. 让模型改变底层参数
B. 让模型检索外部资料后再回答
C. 让模型自动点击网页
D. 让模型不需要提示词
- 微调更像下面哪种说法?
A. 给模型一份临时参考资料
B. 让模型回炉深造,长期学习某类能力
C. 让模型调用天气接口
D. 让模型把回答变短
- Agent 的核心理解是?
A. 模型只负责生成图片
B. 模型做决策,程序负责调用工具执行
C. 模型不能和程序结合
D. Agent 等于普通聊天窗口
- 在
messages中,system角色主要用于?
A. 提供模型身份、规则和输出边界
B. 表示用户本次提问
C. 表示数据库连接
D. 表示 Python 文件名
- API Key 的正确使用方式是?
A. 直接写进代码并发给同学
B. 截图发到群里方便大家复制
C. 放到环境变量或安全配置中读取
D. 随便写一个字符串即可
- 为什么很多 AI 项目要求模型输出 JSON?
A. JSON 看起来更复杂
B. JSON 方便程序继续解析和处理
C. JSON 只能给人阅读
D. JSON 可以自动训练模型
二、填空题
-
AI 能力的三个核心驱动力是 、、________。
-
大模型幻觉可以分为 ________ 幻觉和 ________ 幻觉。
-
提示词包含用户问题,但不等于 ________。
-
RAG 可以用“________ 考试”来类比,因为它会给模型提供外部资料。
-
微调可以理解为让模型 ________,从而长期适配某类任务。
-
Agent 中,模型主要负责 ________,程序主要负责 ________。
-
messages中常见的三个角色是 、、________。 -
system角色通常用于设定模型的身份、任务规则和 ________。 -
API Key 不应该写进公开代码,推荐放到 ________ 中。
-
如果希望程序更容易处理模型结果,可以要求模型输出 ________ 格式。
三、简答题
-
为什么说提示词不是简单的一句用户提问?
-
请用自己的话解释事实性幻觉。
-
请用自己的话解释忠实性幻觉。
-
RAG 和微调有什么区别?
-
为什么工作中经常要求模型输出 JSON?
-
system、user、assistant三种角色分别有什么作用? -
为什么 API Key 不能直接写在代码里?
-
请列出一个清晰提示词应该包含的 4 个要素。
-
什么情况下适合给模型提供示例?
-
为什么复杂任务要拆成多个步骤再交给模型?
四、代码实操题
1. 基础练习:调用模型完成一句话解释
要求:
- 使用 OpenAI 兼容方式调用模型。
- 从环境变量读取
OPENAI_API_KEY。 - 提问:“请用一句话解释提示词工程。”
- 打印模型回复。
2. 基础练习:设置计算器角色
要求:
- 使用 OpenAI 兼容方式调用模型。
system中设定:你是一个计算器,只输出最终结果,不要解释。user中提问:2 + 5 * 3 等于多少?- 打印模型回复。
3. 基础练习:DashScope 调用模型
要求:
- 使用
dashscope库调用模型。 - 从环境变量读取
DASHSCOPE_API_KEY。 - 提问:“请用一句话解释 RAG。”
- 打印模型回复。
4. 进阶练习:客户反馈情绪分类
要求:
- 使用
system设定模型为客户反馈分析助手。 - 输入一段客户反馈。
- 要求输出 JSON,字段包含
emotion、problem、suggestion。 - 情绪只能是:正面、负面、中性。
客户反馈:
这个 AI 写作工具生成速度挺快,但是经常答非所问,导出的格式也有点乱。
5. 进阶练习:会议行动项提取
要求:
- 从会议内容中提取行动项。
- 输出 JSON。
- 每个行动项包含
item、owner、deadline。 - 如果没有明确截止时间,
deadline写null。
会议内容:
本次周会决定,小王本周五前完成智能客服原型页面,小张负责整理客户反馈,但没有明确截止时间。
6. 进阶练习:给模型一个示例
要求:
- 使用
system设定模型为信息抽取助手。 - 给模型提供一个
user示例和一个assistant示例。 - 再提供真正要处理的文本。
- 输出姓名、手机号、地址 JSON。
7. 综合案例:社媒内容分类
要求:
设计一个社媒内容分类提示词,将输入内容分为:
- 噪音
- 广告营销
- 弱相关
- 非噪音
要求:
- 使用
system写清分类规则。 - 使用
user输入待分类内容。 - 输出 JSON,字段包含
label、confidence。
测试内容:
#海底捞# 今天生日去吃饭,服务员送了蛋糕,体验很好!
8. 综合案例:AI 产品需求整理
要求:
从一段需求描述中提取结构化信息。
输入:
我们想做一个 AI 客服助手,主要用于回答用户关于订单、退款、物流的问题。
希望先接入网页端,输出要简洁,遇到不确定的问题要提示转人工。
输出 JSON,字段包含:
productscenariochannelsconstraintsrisk_handling
五、选择题答案
- A
- B
- B
- A
- B
- B
- B
- A
- C
- B
六、填空题答案
- 数据、算法、算力
- 事实性、忠实性
- 用户问题
- 开卷
- 回炉深造
- 决策、调用工具执行
- system、user、assistant
- 输出边界
- 环境变量
- JSON
七、简答题参考答案
-
因为真实提示词除了用户问题,还可能包含角色设定、业务背景、参考资料、示例、步骤、输出格式和边界规则。用户问题只是提示词的一部分。
-
事实性幻觉指模型生成的内容和现实事实不一致,比如编造不存在的事件、人物、作品或时间。
-
忠实性幻觉指模型没有遵守用户指令或上下文要求,比如要求只输出 JSON,它却额外输出解释。
-
RAG 是检索外部资料后交给模型回答,像开卷考试;微调是对模型进行二次训练或参数调整,让模型长期适配某类任务。
-
因为 JSON 字段固定,程序容易解析,可以继续写入数据库、传给前端或进入工作流。
-
system用来设定规则和边界;user用来提出具体问题;assistant表示模型回复,常用于提供示例答案。 -
因为 API Key 相当于账户钥匙,泄露后别人可能消耗额度或造成安全风险。应该放到环境变量或安全配置中读取。
-
可以包含角色、任务、背景、约束、输出格式、示例、参考资料等,答出其中 4 个即可。
-
当希望模型模仿固定格式、风格、分类标准或输出结构时,适合提供示例。
-
因为复杂任务一次性提交容易让模型遗漏步骤或误解意图,拆步骤可以降低难度,让模型按流程完成任务。
八、代码实操参考答案
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)