【限时特惠】小白玩转AI大模型应用开发_哔哩哔哩_bilibili
开发环境准备
Section titled “开发环境准备”- 进入AI大模型应用开发前,安装所需工具
- 必备:Python解释器 和 代码编辑器(已在前置Python课安装)
- 用于在本地编写和运行Python代码
- 推荐安装:Jupyter Notebook
- 基于网页的交互式计算环境
- 机器学习及数据科学流行工具
- 功能:编写代码、运行代码、查看输出、分享文档
- 支持按单元格运行代码
- 课程使用
- 教学篇:主要使用 Jupyter Notebook
- 项目开发篇:使用代码编辑器,如 PyCharm、VSCode
Jupyter Notebook 的优势
Section titled “Jupyter Notebook 的优势”- 按单元格运行代码
- 编辑器运行代码文件时,从头到尾完整运行一遍
- 但常只需查看某行/段输出,如修改AI模型提示
- 前置代码无需重复运行
- 原因:等待API回复耗时,且按量计费(虽单次几分钱,但避免白耗)
- Jupyter Notebook:代码分单元格,每次只运行一格
- 保留前输出,查看新输出,省时省钱
- 交互式环境
- 编辑器运行Python文件用命令行模式
- Jupyter Notebook提供交互运行环境
import osfrom openai import OpenAI
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
def get_openai_response(client, prompt): response = client.chat.completions.create( messages=[{"role": "user", "content": prompt}], model="gpt-3.5-turbo", ) message = response.choices[0].message return message.content
get_openai_response(client, "相对论是由谁提出的?")get_openai_response(client, "原子核有什么组成?")get_openai_response(client, "光年是测量什么距离的?")In [2]: 365 * 5Out[2]: 1825
In [ ]:交互模式与展示优势
Section titled “交互模式与展示优势”- 交互模式查看输出:无需print语句直接显示结果
- 命令行模式需显式print
- 丰富展示格式:支持Markdown语言
- 注释清晰、有层级(标题、加粗、斜体、链接、引用、代码块)
- 示例:
# 一级标题
## 二级标题 **加粗** *斜体* > 引用- HTML分享时效果原封不动,便于直观理解
Jupyter Notebook 安装
Section titled “Jupyter Notebook 安装”- 步骤:打开命令行,运行
pip install notebook - Windows:搜索CMD进入
- macOS:搜索终端(terminal)进入
Jupyter Notebook 启动与关闭
Section titled “Jupyter Notebook 启动与关闭”- 启动验证:安装后在命令行输入
jupyter notebook - 浏览器自动打开Jupyter Notebook窗口,即安装成功
- 显示类似:
http://localhost:8888/?token=... - 关闭方法:关掉浏览器窗口不够,需要中止后台服务器
- 在命令行按 Ctrl+C
- macOS/Linux:提示确认,输入
y回车 - Windows:直接中止
- 备选安装:安装问题无法解决时,用 Anaconda
- 针对计算科学(科学计算、机器学习、大数据)的库和环境管理工具
- 一站式安装多个工具,包括 Jupyter Notebook
$ pip install notebook
# ... 安装过程 ...Successfully installed notebook-6.5.4
$ jupyter notebook[I 17:42:13.730 NotebookApp] http://localhost:8888/?token=...
# 关闭:Ctrl+C启动 Jupyter Notebook
Section titled “启动 Jupyter Notebook”- 进入命令行(大黑窗口)
- Windows:菜单栏搜索 CMD,点击命令提示符
- macOS:顶部菜单栏放大镜图标,输入 terminal,回车进入
- 输入启动命令
jupyter notebook
Jupyter Notebook 启动后的浏览器行为与注意事项
Section titled “Jupyter Notebook 启动后的浏览器行为与注意事项”- 默认浏览器自动打开 Notebook主面板
- 若意外关闭,可从 CMD/终端 复制地址
- 地址格式:
http://localhost:8888/?token=...(命令行中Jupyter is running at后) - 重要:不要关闭启动命令的 CMD/终端窗口
- 否则 Jupyter Notebook服务终止
- 主面板功能:展示当前目录下所有文件
Jupyter Notebook 文件管理与创建
Section titled “Jupyter Notebook 文件管理与创建”- 启动后界面:显示当前目录所有文件和文件夹
- 可点击文件夹访问子目录(如Music、Pictures、Desktop)
- 创建第一个notebook
- 进入目标目录(如桌面文件夹)
- 点击 New → Notebook,自动打开新编辑界面
- 桌面同时出现新文件 Untitled.ipynb
- 重命名文件
- 点击标题栏,输入新名称(如 Demo.ipynb),确认即可
# 示例目录结构Desktop/├── 2023-09-15-17-00-00.ipynb└── Demo.ipynb (新创建)- 编辑界面包含:菜单栏、Code/Markdown/Raw NBConvert 单元格类型、Python 3 内核
Jupyter Notebook 编辑界面与单元格操作
Section titled “Jupyter Notebook 编辑界面与单元格操作”- 工具条:菜单栏常用操作的快捷方式,大部分时间通过工具条与单元格交互
- 单元格:主要用于编写 Python代码
- 示例:输入简单语句演示操作
print("hello world!")- 两种模式:
- 编辑模式:点击单元格内,底色变白色
- 命令模式:输入完成后按 ESC键 或点击其他地方,底色变灰色
Jupyter Notebook 单元格运行机制
Section titled “Jupyter Notebook 单元格运行机制”- 运行单元格:点击运行按钮或快捷键执行当前单元格
- 执行完毕后,
[ ]括号内变为数字,如[1]、[2] - 数字表示执行顺序,记录每个单元格的运行次数和先后
- 灵活执行顺序
- 支持任意顺序运行单元格
- 示例:先跑第3格,再回第1格重跑,或多次反复跑同一格
- 数字帮忙记录和提醒执行顺序
- 为什么重要:顺序关键,前单元格输出可能被后单元格依赖
[1]: print("hello world!")hello world!
[2]: print("hello world!")hello world!
[ ]: print("hello world!")单元格执行数字:变量更新提醒
Section titled “单元格执行数字:变量更新提醒”- 示例:第一格定义
a = 3并打印输出 3,第二格打印a - 修改第一格为
a = 6并重跑,数字变为 [2](第一格) > [1](第二格) - 这提醒第二格仍针对旧值
a=3,需重跑第二格更新输出为 6
[1]: a = 3 print(a) 3
[2]: a = 6 print(a) 6- 不全塞一格的原因:虽确保顺序,但违背按单元格运行节省 API调用时间与费用 的目的
- 前置代码无需重复执行,后续修改只跑对应格
Jupyter Notebook 单元格运行机制 (续)
Section titled “Jupyter Notebook 单元格运行机制 (续)”- 单元格分块:将耗时/烧钱步骤拆分,节省时间。
- 灵活调整:更灵活地调整单元格间的代码。
- 交互模式运行:代码单元格通过交互模式运行。
- 无需
print语句,直接显示结果。 - 多条输出语句:仅显示最后一条结果。
- 需借助
print展示多项输出。 - 停止运行:运行按钮旁为中止执行按钮。
中断与重启内核按钮
Section titled “中断与重启内核按钮”- 中断按钮(左边停止图标):运行单元格代码时点击,中止当前执行
- 示例:
[1]: import time time.sleep(10)- 点击后输出 KeyboardInterrupt 错误
- 重启按钮(右边循环箭头):清空所有定义过的变量,重置内核状态
- 对话框确认:Restart Kernel? 所有变量将丢失
- 示例:
[1]: a = 3
[2]: a3 # 重启前输出- 重启后运行
[2]:NameError: name ‘a’ is not defined - 单元格数字重置为 [1]、[2] 等,从1开始,表明已重启
- 作用:模拟全新启动,清除内存中变量,确保独立测试代码
重启并重新运行所有单元格按钮
Section titled “重启并重新运行所有单元格按钮”- 位置:重启按钮旁边
- 功能:
- 清空变量后,从上往下完整执行所有单元格
- 查看整个代码顺序的输出结果
- 检查单元格执行顺序是否有问题
示例:
[1]: a = 3
[2]: a3- 实用性:模拟从头运行所有代码,确保依赖关系正确
单元格类型切换与 Markdown
Section titled “单元格类型切换与 Markdown”- 切换单元格类型:位于重启并重新运行按钮旁的下拉框
- 最常用:Code(代码) 和 Markdown(文字)
- 单元格不限于代码,也可写文字说明
- Markdown 标记语言:为内容增加样式,语法简单
- 一级标题:
# 标题(井号+空格) - 运行后自动加粗加大
- 二级标题:
## 标题(两个井号+空格)
Markdown 语法详解
Section titled “Markdown 语法详解”- 标题层级:井号数量决定级别(1-6级)
- 一级:
# 标题→ 最大加粗 - 二级:
## 标题→ 次大 - 以此类推至 #####)
- 操作:双击单元格编辑 → 加井号 → 运行渲染
- 文字样式
- 粗体:
**文字** - 斜体:
*文字* - 换行:普通文字默认单行显示
- 多行文字不自动分行
# 我是最大的标题
## 我是第二大的标题
### 我是第三大的标题我是 **粗体**我是 *斜体*我是普通文字我 是另一行的普通文字渲染效果:
- 标题逐级递减大小
- 粗斜体独立显示
- 普通文字连续一行
Markdown 换行与列表语法
Section titled “Markdown 换行与列表语法”- 换行方法(普通文字默认单行显示)
- 方法1:在行间放一个空行
- 方法2:在第一行末尾加两个空格(更紧凑效果)
我是普通通的文字我是另一行的普通文字 # 行尾两个空格- 无序列表:每个元素前加短横杠(键盘0右边键)+空格
- 我是列表的第一项 - 我是列表的第二项 - 我是列表的第三项- 有序列表:每个元素前加数字 + 英文句号 + 空格
1. 我是列表的第一项 2. 我是列表的第二项 3. 我是列表的第三项单元格操作按钮
Section titled “单元格操作按钮”- 位置:每个单元格旁边
- 功能(从左到右):
- 复制:复制当前单元格
- 上移:把当前单元格上移一格
- 下移:把当前单元格下移一格
- 上方添加:在当前单元格上面添加空单元格
- 下方添加:在当前单元格下面添加空单元格
- 删除:删除当前选中的单元格
单元格图标示例:[剪刀复制] [↑上移] [↓下移] [+上方] [+下方] [垃圾桶删除]Jupyter Notebook 快捷键使用
Section titled “Jupyter Notebook 快捷键使用”- 查看方法:点击 Help → Keyboard shortcuts 查看完整列表
- 掌握快捷键可大大提升使用 Jupyter Notebook 的效率
- 命令模式下使用(灰色底色,非编辑模式)
- A键:在当前单元格上方插入一个新单元格
- B键:在当前单元格下方插入一个新单元格
- 连按两次D(DD):删除当前单元格
注意:编辑模式(白色底色)下无效,必须先按 ESC 进入命令模式
运行单元格快捷键与打开已有 Notebook
Section titled “运行单元格快捷键与打开已有 Notebook”- 运行按钮:最常用,运行当前单元格(代码或 Markdown)
- 快捷键:Shift + Enter
- 效果同点击运行按钮
- 节省离开键盘找鼠标的时间
- 打开已有 Notebook:
- 上节提到终止 Jupyter Notebook 的命令行窗口
- 重新启动后,在主面板点击已有
.ipynb文件即可打开
Jupyter Notebook 关闭后的恢复操作
Section titled “Jupyter Notebook 关闭后的恢复操作”- 关闭确认:在新的 CMD/终端 窗口按 Ctrl+C
- macOS/Linux:额外按 Y 回车确认中止
- 效果:Notebook 刷新后浏览器展示页面无效(后台服务器关闭)
- 重新打开:在 CMD/终端 输入
jupyter notebook命令 - 进入存放 Notebook 的目录
- 点击相应的 .ipynb 文件恢复编辑界面
AI大模型API调用
Section titled “AI大模型API调用”- 用代码调用AI的优势:
- 通过参数控制输出质量
temperature=0.1:降低创造性,确保更可靠、可预测输出max_tokens=512:限制最大token长度frequency_penalty=0.25:频率惩罚
client.chat.completions.create( messages=[ { "role": "user", "content": "模仿李白的风格,写一首描述夏天的七言绝句" } ], temperature=0.1, max_tokens=512, frequency_penalty=0.25)- 批量处理:对大量数据处理,如AI一次性总结多个文档
- 系统集成:嵌入自家流程,实现定制化
- 示例:自动回复邮件、生成报告
- API调用方式:最常见对话AI大模型方法
- 无需本地高端硬件
- 不需满足模型算力和存储需求
API 定义与特点
Section titled “API 定义与特点”- API 全称:Application Programming Interface(应用程序编程接口)
- 中文常用 API
- 核心作用:定义两个软件程序之间的服务合约
- 通过请求和响应进行通讯
- 通俗理解:如何与服务对话的说明书
- 技术基础:绝大部分基于 HTTP 协议
- HTTP 是 HyperText Transfer Protocol(超文本传输协议)
HTTP 协议基础
Section titled “HTTP 协议基础”- HTTP:Hypertext Transfer Protocol 的缩写,意思是超文本传输协议
- 是一种客户端和服务器之间的请求-响应协议
+-----------------+ HTTP +-----------------+| 客户端 | <--------------------> | 服务器 |+-----------------+ +-----------------+- AI对话场景:运行的代码程序就是客户端
- 把给AI的提示放到请求内容里
- 发送给AI服务提供方(如 OpenAI 或 百度 的服务器)
- 得到对方的响应,把 AI的回复 为后续所用
- 发送HTTP请求:有很多信息是我们提供给服务器的
POST /v1/chat/completions HTTP/1.1Host: api.openai.comAccept: application/json{ "messages": [ { "role": "user", "content": "牛顿第三定律是什么?" } ]}HTTP 请求与响应示例
Section titled “HTTP 请求与响应示例”- HTTP 请求示例:包含资源路径、Host、Accept响应类型等
POST /v1/chat/completions HTTP/1.1Host: api.openai.comAccept: application/json{ "messages": [ { "role": "user", "content": "牛顿第三定律是什么?" } ]}- HTTP 响应示例:包含状态码、日期、Content-Type 和 AI 回复
HTTP/1.1 200 OKDate: Fri, 27 Jan 2008 18:10:48 GMTContent-Type: application/json{ "object": "chat.completion", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "牛顿第三定律,通常被称为作用与反作用定律,表述为:对于每一个作用力,总有大小相等、方向相反的相互作用力。" } } ]}- 实际使用:无需从头构建 HTTP 请求
- OpenAI、百度等公司基于 API 封装 Python 库
- 直接调用库的函数/方法 达成相同目的
- 发 HTTP 请求 → 使用库
OpenAI Python库调用示例
Section titled “OpenAI Python库调用示例”- 导入与初始化:
from openai import OpenAIclient = OpenAI()- 调用方法:
client.chat.completions.create() - model:指定模型,如
"gpt-3.5-turbo" - messages:消息列表,支持system和user角色
completion = client.chat.completions.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "你好"} ])print(completion.choices[0].message)百度erniebot库调用示例
Section titled “百度erniebot库调用示例”- 调用方法:
erniebot.ChatCompletion.create() - model:指定模型,如
"ernie-3.5" - messages:消息列表,通常user角色
import erniebot
response = erniebot.ChatCompletion.create( model="ernie-3.5", messages=[ {"role": "user", "content": "你好,请介绍下你自己"} ])print(response.get_result())- API文档作用:规定方法、参数(如模型指定、messages数据结构)、响应格式,便于正确提取服务器信息
- 不同模型区别:OpenAI的GPT、百度的文心等,使用对应Python库,调用代码有差异
API密钥必要性与作用
Section titled “API密钥必要性与作用”- 课程示例:主要用 GPT模型,但对话数据结构相似,一通百通
- 前提步骤:调用AI大模型功能前,必须获取API密钥
- 当前主流AI大模型(如GPT、文心)均需创建API密钥才能使用
- API密钥作用:让服务器识别和验证客户端请求
- 确认请求来自哪个账号
- 追踪计费和使用频率 等
OpenAI API密钥创建准备
Section titled “OpenAI API密钥创建准备”- 课程示例模型:以 OpenAI公司的GPT模型 为主
- 原因是它是行业内领先的AI模型
- 创建必要性:没有API密钥,无法通过代码使用AI模型及相关功能
- 声明:展示OpenAI API密钥创建方式
- 严格遵守中国法律法规
- 不提供网络环境相关工具
- 遇到API问题:加入付费学员社群寻求帮助
👤 ─── API密钥 ─── 💰 │我们会一起创建API密钥OpenAI API密钥创建步骤
Section titled “OpenAI API密钥创建步骤”- 访问官网:前往OpenAI官网API密钥页面
- 显示账户下所有API密钥列表
- 无账号先注册一个
- 创建新密钥:点击 Create new secret key 按钮
- 输入密钥名称(可选,随便取)
- 用于区分不同应用程序的密钥
- 不输入则系统分配默认名称
NAME SECRET KEY TRACKING CREATED LAST USEDH2O sk-biJTG + Enable 2023年11月20日 Never+ Create new secret keyDefault organization- 安全提醒:
- 不要分享 API密钥
- 避免在浏览器或客户端代码暴露
- OpenAI可能自动禁用泄露的密钥
OpenAI API密钥下载与安全保存
Section titled “OpenAI API密钥下载与安全保存”- 点击创建:点击 Create new secret key 按钮生成新密钥
- 重要提醒:生成后点击 Done 按钮,即再也看不到完整密钥
- 立即复制密钥并粘贴保存到安全位置
- 忘记复制处理:若关掉忘记复制,无大碍
- 删除该密钥,重新创建一个新的
- 安全注意:千万不能泄露密钥
- 密钥只属于你,与你的账户绑定
OpenAI API密钥安全使用与风险
Section titled “OpenAI API密钥安全使用与风险”- 泄露风险:密钥被别人看到并使用,所有消耗的 token 都会计费到你的账号
- 应对:怀疑泄露时立即删除密钥,使其失效,防止他人继续使用
- 传递方式:发送API请求时需传递密钥
- 风险:直接写在代码中,任何人看到代码都能看到 明文密钥
from openai import OpenAIclient = OpenAI(api_key="sk-xqeiKhHpzYS9jxm")response = client.chat.completions.create( model="gpt-3.5-turbo", messages=[ {"role": "user", "content": "四大文明古国分别有哪些"} ])- 注意:以上代码完整含义后续讲解
API密钥在代码中的风险与环境变量解决方案
Section titled “API密钥在代码中的风险与环境变量解决方案”- 直接写在代码的风险:即使没想分享,不小心上传到 GitHub 等公共代码仓库,密钥也会向公众暴露
- 任何人看到代码都能获取明文密钥
- 更好办法:将密钥设置为电脑的环境变量
- 代码调用AI时,不用粘贴密钥,而是自动通过环境变量获取密钥值
- 即使代码发给别人或上传GitHub,密钥也不会暴露,安全性很高
- 操作差异:不同操作系统设置环境变量的方法不一样
Windows 系统环境变量设置步骤
Section titled “Windows 系统环境变量设置步骤”- 进入设置:在计算机或此电脑右击 → 属性 → 高级系统设置
- 系统属性界面选高级标签 → 点击环境变量按钮
- 新建系统变量:
- 变量名:
OPENAI_API_KEY(严格无误输入) - 变量值:粘贴先前复制的 API密钥
- 保存:点击确定按钮完成设置
from openai import OpenAI
client = OpenAI() # 自动从环境变量读取密钥response = client.chat.completions.create( model="gpt-3.5-turbo", messages=[ {"role": "user", "content": "四大发明古代中国有何"} ])macOS 系统环境变量设置步骤
Section titled “macOS 系统环境变量设置步骤”- 打开终端,输入
ps -p $$查看当前 Shell 类型 - 示例输出:
PID TTY TIME CMD94682 ttys001 0:00.35 -zsh- Bash:配置文件
~/.bash_profile - Zsh:配置文件
~/.zshrc - 其他 Shell 类型:自行搜索对应配置文件位置
macOS 系统环境变量设置 (续)
Section titled “macOS 系统环境变量设置 (续)”- 编辑配置文件:
- Bash: 终端输入
nano ~/.bash_profile - Zsh: 终端输入
nano ~/.zshrc - 进入nano编辑器。
- 添加环境变量:
- 添加
export OPENAI_API_KEY="你的API密钥" - 注意替换
"你的API密钥"为实际密钥,不要有拼写错误。 - 保存:
- 按
Control + X,再按Y确认,最后按Enter。
macOS 系统环境变量设置步骤 (续)
Section titled “macOS 系统环境变量设置步骤 (续)”- 编辑配置文件:
- Bash:终端输入
nano ~/.bash_profile - Zsh:终端输入
nano ~/.zshrc - 进入编辑模式
- 添加环境变量:添加一行
export OPENAI_API_KEY="<你的API密钥>"- 保存退出:按 Control + X 保存 → Y 确认 → Enter 回车
- 使修改生效:运行 source 命令
- Bash:
source ~/.bash_profile - Zsh:
source ~/.zshrc - 效果:电脑已存储密钥,即可对 GPT模型 发送请求,与 AI进行对话
- 使用 OpenAI官方Python库,无需构建 HTTP请求,直接调用函数/方法
OpenAI Python库安装
Section titled “OpenAI Python库安装”- 第一步:安装 openai Python库(Python 3.7及以上)
- 终端/CMD:
- Windows:
pip install openai - macOS:
pip3 install openai - Jupyter Notebook:新建notebook,运行
!pip install openai - ! 前缀相当于系统 Shell命令,效果同终端
- 灵活选择:按个人方便方式操作
- 安装完成后即可使用
OpenAI库使用初始化
Section titled “OpenAI库使用初始化”- 在Jupyter Notebook中使用:
from openai import OpenAI
client = OpenAI() # 自动从环境变量读取OPENAI_API_KEY- 前提:上一节已设置环境变量,密钥自动传递,无需手动输入
- 备用方式(电脑无密钥或用新密钥):
client = OpenAI(api_key="sk-XXXX-替换为你的密钥-XXXX")- OpenAI类作用:创建client实例,用于调用发送给AI的请求方法
OpenAI客户端初始化与对话调用
Section titled “OpenAI客户端初始化与对话调用”- 初始化方式:可直接传入api_key参数,或从环境变量自动读取
- 示例(明文传入,不推荐生产环境):
from openai import OpenAIclient = OpenAI(api_key="sk-XXXX-替换为你的密钥-XXXX")- 推荐(环境变量):
client = OpenAI() # 自动读取 OPENAI_API_KEY- 原因:传入密钥后,OpenAI才能校验请求,确保后续API调用成功
chat.completions.create 方法调用
Section titled “chat.completions.create 方法调用”- 功能:实现与AI的对话
- 关键参数:
- model:指定聊天模型,支持多种GPT系列
- 如 gpt-3.5-turbo、gpt-4、gpt-4-turbo 等
- messages:消息列表
response = client.chat.completions.create( model="gpt-3.5-turbo", messages=[ {"role": "user", "content": "四大文明古国分别有哪些?"} ])- 效果:发送请求后即可获得AI回复
chat.completions.create 方法的关键参数(续)
Section titled “chat.completions.create 方法的关键参数(续)”- messages 参数:传给AI模型的对话内容
- messages 是一个列表,可有一条或多条消息
- 每条消息用字典表示
- 字典包含两个关键字段:
- role:角色
- content:消息内容
- model 参数补充:支持聊天功能的GPT模型种类
- 示例:gpt-3.5-turbo、gpt-4、gpt-4-turbo
- 选择依据:
- 模型数字越大,版本越新,性能越好
- 越老的模型,对话价格越便宜
messages 参数的 role 字段详解
Section titled “messages 参数的 role 字段详解”- role 值含义:
"user":用户发的消息(提示,prompt)"assistant":AI发的消息(回答,response)- messages 列表作用:既可包含用户提示,也可包含 AI 回答
- 既有提示又有回答:用作小样本提示(few-shot prompting,后续课程讲解)
- system 消息:第一条消息可为
"system"角色
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create( model="gpt-3.5-turbo", messages=[ {"role": "user", "content": "你是谁"}, {"role": "assistant", "content": "我是ChatGPT,由OpenAI开发的一款大型语言模型。"}, {"role": "user", "content": "四大文明古国分别有哪些"} ])role: "system" ← 第一条可选role: "user"role: "assistant"messages 参数的 role 字段详解 (续)
Section titled “messages 参数的 role 字段详解 (续)”- system 消息作用:给AI传递背景或安排个性/角色
- 示例:
{"role": "system", "content": "你是一个乐于助人、语言友善的AI聊天助手"} - 可选:没有也行
- 最简单对话:messages 只放一条 user 提示
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "你是一个乐于助人、语言友善的AI聊天助手"}, {"role": "user", "content": "你是谁"}, {"role": "assistant", "content": "我是ChatGPT,由OpenAI开发的一款大型语言模型。"}, {"role": "user", "content": "四大文明古国分别有哪些?"} ])- 运行结果:
response为 ChatCompletion 类实例 - AI回复位置:choices[0].message.content
response
# ChatCompletion(id='chatcmpl-...', choices=[Choice(..., message=ChatCompletionMessage(content='四大文明古国是指...'))], ...)
print(response.choices[0].message.content)
# 四大文明古国是指古代四个发达的文明古国,分别是:...提取并打印AI回复
Section titled “提取并打印AI回复”- response 对象:ChatCompletion 类实例,包含AI回复
- 路径:
response.choices[0].message.content
print(response.choices[0].message.content)
# 输出:四大文明古国是指古代四个发达的文明古国,分别是:...本节总结与资源
Section titled “本节总结与资源”- 已掌握:向 OpenAI GPT模型 发送请求并解析回复
- 配套资料:课程 Jupyter Notebook 文件
API 计费预告
Section titled “API 计费预告”- 核心知识:绝大部分模型 API 基于 token 数量 计费
- 下一节详解
Token 概念与计费基础
Section titled “Token 概念与计费基础”- Token 定义:文本的基本单位
- 取决于token化方法:短单词可能1个token,长单词拆分成多个
- 中文特点:占token数量相对更多,有些字需1个甚至更多token表示
英文示例:She is in a restaurant中文示例:你好,我来自中国,我说中文OpenAI Tokenizer 工具
Section titled “OpenAI Tokenizer 工具”- 网址:platform.openai.com/tokenizer
- 交互式分词器:输入任意文本,展示如何映射为不同token及总数
- 模型差异:不同模型token化过程不同(如GPT-3.5/GPT-4 vs 旧版GPT-3)
示例:
| 输入文本 | Tokens | 字符数 |
|---|---|---|
| My favourite food is hamburgers! | 7 | 32 |
| 我是中国人,我来自上海城市。 | 14 | 14 |
- 作用:理解大模型如何处理文本,统计relationships between tokens
- 模型擅长预测下一个token
Token化细节与英文经验法则
Section titled “Token化细节与英文经验法则”- 中文token化特点:常用词可能一个词一个token,不常见字被映射成多个token
- 示例:
我是中国人,我来自上海城市。→ 14 tokens(14字符) - 有些字导致网页显示半个字现象
- 英文经验法则(OpenAI官方):
- 1 token ≈ 4个英文字符
- 100 tokens ≈ 75单词
- 精确计数:比估算更准确,使用API响应中的 usage字段
{ "usage": { "completion_tokens": 105, "prompt_tokens": 20, "total_tokens": 125 }}- prompt_tokens:输入提示token数
- completion_tokens:AI生成回复token数
- total_tokens:总计(输入+输出)
API响应中的 usage 字段与计费细节
Section titled “API响应中的 usage 字段与计费细节”- usage 字段:API响应包含 token 数信息
- completion_tokens:AI 回应包含多少 token
- prompt_tokens:用户提示包含多少 token
- total_tokens:提示 + 回应总 token 数
usage=CompletionUsage(completion_tokens=105, prompt_tokens=20, total_tokens=125)- 计费依据:基于 total_tokens(输入 + 输出),不是 只算 completion_tokens
- 提示:学会简洁提问控制总 token 数,降低成本
OpenAI API 价格表
Section titled “OpenAI API 价格表”- 官网查看:https://openai.com/pricing
- GPT-3.5 Turbo 示例(gpt-3.5-turbo-1106)
| 模型 | 输入 (美元/1K tokens) | 输出 (美元/1K tokens) |
|---|---|---|
| gpt-3.5-turbo-1106 | 0.0010 | 0.0020 |
| gpt-3.5-turbo-instruct | 0.0015 | 0.0020 |
- 解读:GPT-3.5 Turbo 输入每 1K token 0.1 美分(成本低)
OpenAI API 价格表 (续)
Section titled “OpenAI API 价格表 (续)”- GPT-3.5 Turbo 价格:
- 输入:$0.0010 / 1K tokens(约 0.7分人民币)
- 输出:$0.0020 / 1K tokens(约 1.4分人民币)
| 模型 | 输入 | 输出 |
|---|---|---|
| gpt-3.5-turbo-1106 | $0.0010 / 1K tokens | $0.0020 / 1K tokens |
| gpt-3.5-turbo-instruct | $0.0015 / 1K tokens | $0.0020 / 1K tokens |
- GPT-4 价格(性能更好但更贵):
- 输入:$0.03 / 1K tokens(约 四毛人民币)
- 输出:$0.06 / 1K tokens
| 模型 | 输入 | 输出 |
|---|---|---|
| gpt-4 | $0.03 / 1K tokens | $0.06 / 1K tokens |
| gpt-4-32k | $0.06 / 1K tokens | $0.12 / 1K tokens |
- 价格趋势:随着技术进步,API价格持续下降
- 课程时价格可能已更低
OpenAI API 价格对比与tiktoken库
Section titled “OpenAI API 价格对比与tiktoken库”- GPT-4系列价格(对比GPT-3.5 Turbo更贵):
| 模型 | 输入 (美元/1K tokens) | 输出 (美元/1K tokens) |
|---|---|---|
| gpt-4 | 0.03 | 0.06 |
| gpt-4-32k | 0.06 | 0.12 |
- tiktoken库作用:OpenAI官方快速BPE分词器,用于计算文本token数
- 优势:无需调用API(不消耗token),直接估算成本
- 安装方法:
- Jupyter Notebook:
!pip install tiktoken - CMD/终端:
pip install tiktoken(macOS可能pip3)
tiktoken库使用方法
Section titled “tiktoken库使用方法”- 安装命令(根据系统选择):
- Windows:
pip install tiktoken - macOS:
pip3 install tiktoken - 导入与编码器获取:
import tiktoken
encoding = tiktoken.encoding_for_model("gpt-3.5-turbo")
# 返回 <Encoding 'cl100k_base'>- 编码与token计数:
encoding.encode(文本)返回 token ID列表len(...)获取 token数量
encoding.encode("黄河之水天上来")
# [30868, 226, 31106, 111, 55030, 53610, 36827, 17905, 37507]
len(encoding.encode("黄河之水天上来"))
# 9- 优势:无需API调用,直接估算任意文本token数与成本
tiktoken 价格估算应用
Section titled “tiktoken 价格估算应用”- 估算价格方法:token数量 × token单价
- 得到完全准确价格需严谨逻辑(考虑messages列表中角色等额外信息)
- 简化估算:直接用
encode返回列表长度作为token数 - 适合大致了解消耗
- AI输出控制:提示token可调整,但AI回复token数无法直接控制
import tiktoken
encoding = tiktoken.encoding_for_model("gpt-3.5-turbo")encoding # <Encoding 'cl100k_base'>
len(encoding.encode("黄河之水天上来")) # 9GPT-4系列模型更新与上下文窗口
Section titled “GPT-4系列模型更新与上下文窗口”- gpt-4-1106-preview:最新GPT-4 Turbo,支持128,000 tokens上下文窗口
- 改进指令跟随、JSON模式、可复现输出、并行函数调用
- 输出最大4,096 tokens
- 预览版,暂不适合生产环境
- gpt-4-vision-preview:支持图像理解(含GPT-4 Turbo所有能力)
- 同上窗口与输出限制,预览版
模型选择权衡
Section titled “模型选择权衡”- 优先前沿模型:性能更强,但需考虑成本
- gpt-4-32k 比 gpt-4 贵一倍(输入 $0.06 vs $0.03 /1K tokens)
- 上下文窗口应对:后续介绍多种方法处理限制
- 掌握 token 计数与计费机制
- 通过 tiktoken 估算 + API usage 精确统计
- 价格低廉,随技术进步持续下降
AI大模型API参数预告
Section titled “AI大模型API参数预告”- 下一节内容:返回对话API,研究可调整参数
- 示例参数:回复长度、创造性、随机性等
- 优势:API控制网页端无法调整的参数,实现定制化
- 通用性:本节GPT参数适用于大多数AI大模型(参数名可能有细微差别)
chat.completions.create 方法常用参数:max_tokens
Section titled “chat.completions.create 方法常用参数:max_tokens”- max_tokens 参数:控制AI回答消耗的最大token数
- 作用:限制回复长度,避免过长回答
- 示例:设置
max_tokens=300,回答最多消耗300 tokens - 使用场景:控制每次请求的成本上限
- API计费基于提示 + 回答总tokens
- 提示长度自己可控,回答长度通过此参数限制
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create( model="gpt-3.5-turbo", messages=[ { "role": "user", "content": "四大古文明分别有哪些" } ], max_tokens=300)chat.completions.create 方法常用参数:max_tokens (续)
Section titled “chat.completions.create 方法常用参数:max_tokens (续)”- max_tokens 实际效果:GPT模型不会调整回复篇幅,而是直接截断
- 到达指定token数时停止生成
- 示例设置
max_tokens=300,回复可能说到一半
print(response.choices[0].message.content)
# 四大文明古国通常指的是古代埃及、黄河不达米亚、古希腊、古印度。下面是这四个文明的。
# 1. 埃及:古埃及及尼罗河文明的起源,起源于公元前3100年左右,并延续了数千年。古埃及的文明时期包括了建立埃及金字塔、墓穴和神庙等。
# 2. 美索不达达:包括古巴比伦、苏美尔和苏美尔尔文明等文明,分布在幼发拉底河和底格里斯河间。该文明出现在公元前4000年左右,建立了城市、宫殿、神庙和伟大的工程项目。
# 3. 印度河流域:又称哈拉帕——
# 话没说完...- 完整控制建议:结合提示词限制,如“回复在500字以内”
- 避免截断导致回答不完整
- 同时控制成本上限(提示+回答总tokens)
chat.completions.create 方法常用参数:temperature
Section titled “chat.completions.create 方法常用参数:temperature”- temperature 参数:控制 AI 回答的随机性或创造性
- 取值范围:0 到 2,默认 1
- 值越低:随机性越低、创造性越低,更确定性
temperature=0:每次回复差不多相同- 值越高:随机性越高、创造性越高
model="gpt-3.5-turbo",max_tokens=300,temperature=0.1 # 示例:低随机性❄️ 0 ---------- 1 ---------- 2 ☀️ 确定性 ↑ ↓ 随机性chat.completions.create 方法常用参数:temperature (续)
Section titled “chat.completions.create 方法常用参数:temperature (续)”- temperature 高值效果:随机性/创造性极高
- 可能收到出乎意料的回答
- 值太高风险:AI放飞自我,不按人类语言规则
- 甚至产生外星文
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create( model="gpt-3.5-turbo", messages=[ {"role": "user", "content": "四大文明古国分别有哪些"} ], max_tokens=100, temperature=2)
print(response.choices[0].message.content)- 体验建议:设
temperature=2(最大值),观察几句能看明白
❄️ 0 ────────── 1 ────────── 2 ☀️ ↑确定性 ↑随机性- 参数命名灵感:借用物理学温度概念
- 高温:粒子运动越快、随机性越大
- 对应AI输出高随机性
![温度比喻图]
左:稀疏火柴(低温、低随机)
右:密集乱向火柴(高温、高随机)
- temperature 参数底层机制:改变各个token的概率分布
- 低温:概率分布峰值很高
- 高概率词选择权重大大增加
- 低概率词更容易被忽略
- 结果:输出更确定性,几乎总是选概率最高的词
- 高温:概率分布更加平坦
- 低概率词被选择的机会变高
Low Temperature High Temperature概率分布:███████████ ← 峰值高,集中高概率词███████████████████████████████████████████████████████
各个token的概率分布- 物理比喻延续:
- 低温:粒子运动减慢,随机性降低
- 高温:粒子运动越快,随机性越大
chat.completions.create 方法常用参数:top_p
Section titled “chat.completions.create 方法常用参数:top_p”- top_p 参数(也称 nucleus sampling,核采样):从概率累计刚好大于或等于 top_p 值的 token 子集中采样
- 避免选择极端低概率的词
- 示例:
top_p=0.4,只纳入前排累积概率 >=0.4 的词 top_p=1:覆盖整个词汇表,不做概率裁剪,所有词均可入选- 与 temperature 关系:两者都能控制回答的创造性
- 官方建议:不要同时修改,只调整其中一个即可
chat.completions.create 方法常用参数:frequency_penalty
Section titled “chat.completions.create 方法常用参数:frequency_penalty”- frequency_penalty 参数:表示频率惩罚,控制多大程度上惩罚重复内容
- 取值范围:-2 到 2,默认 0
<--|-----|-----|--> -2 0 2- 作用:调整模型对已出现token的重复倾向
- 正值:增加惩罚,减少重复
- 负值:减少惩罚,鼓励重复
- 0:无惩罚(默认)
chat.completions.create 方法常用参数:frequency_penalty (续)
Section titled “chat.completions.create 方法常用参数:frequency_penalty (续)”- frequency_penalty 机制:基于已生成文本中词的频率,对出现过的词进行惩罚
- 降低该词后续出现概率
- 引导AI避免重复,增加文本多样性
- 值为0:不对重复词惩罚,按原始概率分布选择下一个词
- 正值效果:生成更丰富多变的文本
- 但设太高不合适(可能过度避免重复)
<--|-----|-----|--> -2 0 2chat.completions.create 方法常用参数:frequency_penalty 机制
Section titled “chat.completions.create 方法常用参数:frequency_penalty 机制”- frequency_penalty 机制:基于已生成文本中词的频率,对出现过的词进行惩罚
- 降低该词后续出现概率
- 引导AI避免重复,增加文本多样性
- 值为0:不对重复词惩罚,按原始概率分布选择下一个词
- 正值效果:生成更丰富多变的文本
- 但设太高不合适(可能过度避免重复)
- 实际示例:让AI生成购物清单(至少20个物品,用豆号分割)
- AI回复现象:前几个用中文豆号,后切换英文豆号、空格+英文豆号、空格+中文豆号
- 原因:某种豆号重复使用过多,触发AI自动折腾变体避免重复
chat.completions.create 方法常用参数:presence_penalty
Section titled “chat.completions.create 方法常用参数:presence_penalty”- presence_penalty 参数:控制生成内容的重复性,取值 -2 到 2,默认 0
- 与 frequency_penalty 的区别:
- frequency_penalty:基于词出现频率惩罚,频率越高惩罚越大
- presence_penalty:基于词是否出现过惩罚
- 正值时:只要词出现过一次,后续再次被选择概率降低
- 鼓励引入新词,增加多样性
- 使用建议:frequency_penalty 通常设 0 到 1 之间,避免过高
<--|-----|-----|--> (两者均适用) -2 0 2chat.completions.create 方法常用参数:presence_penalty
Section titled “chat.completions.create 方法常用参数:presence_penalty”- presence_penalty 参数:存在惩罚,只看词是否出现
- 出现了就降低其后续出现概率,不管具体出现多少次
- 作用:鼓励生成更多新词,减少已出现词的重复
- frequency_penalty 与 presence_penalty 区别:
frequency_penalty: 词x1 👍 (出现1次,惩罚轻) 词x2 👍👎 (出现2次,惩罚加重) 词x3 👍👍👎 (出现3次,惩罚更重) ↓ 再次选中概率大幅降低
presence_penalty: 词x1 👍 (出现过就惩罚) 词x2 👍 (不管次数,一律惩罚) 词x3 👍- 实际影响:
- frequency_penalty:控制词重复出现的频率(高频词惩罚更重)
- presence_penalty:控制是否包含更多新词(已出现词一律惩罚)
- 结合使用建议:
- 想减少重复词:提高 presence_penalty
- 想减少高频词重复次数:提高 frequency_penalty
OpenAI API 游乐场工具
Section titled “OpenAI API 游乐场工具”- 功能:官方提供的在线工具,无需编写代码即可测试 API 参数效果
- 填写 messages(给 AI 的消息)
- 调整任意参数:切换 模型、temperature、max_tokens、top_p、frequency_penalty、presence_penalty 等
- 使用方式:点击 Submit 按钮,AI 回复直接显示在页面
- 优势:快速实验不同参数组合对输出影响,便于理解机制
OpenAI API Playground
Section titled “OpenAI API Playground”- 可视化界面:API提供的游乐场,所有操作(如聊天)都会消耗账号token
- 提醒:别当成免费,小心玩
- 最实用功能:View code按钮
- 点击左上角View code,当前所有设置自动生成调用代码
- 直接复制粘贴到代码编辑器使用
- 源码福音:快速获取完整API调用示例
from openai import OpenAIclient = OpenAI()response = client.chat.completions.create( model="gpt-4", messages=[ {"role": "user", "content": "四大文明古国分别有哪些"}, {"role": "assistant", "content": "..."} ], temperature=0.7, max_tokens=50, top_p=1, frequency_penalty=0, presence_penalty=0)- 国产大模型:除了OpenAI,很多国产大模型也在崭露头角
国产大模型API调用
Section titled “国产大模型API调用”- 国产大模型崭露头角:如通义千问等,通过各自服务商API对话
- 切换AI模型:不止创建新密钥,需遵循不同服务商的API规则
- API通俗理解:两个程序间通讯的说明书
- 定义请求与响应方式
- 由服务商制定:OpenAI定GPT规则、阿里定通义规则
程序 ──[请求]──► API说明书 ──[响应]──► 服务 ▲ │ └──────────────────────────────┘国产大模型切换步骤
Section titled “国产大模型切换步骤”- 切换国产大模型步骤:不止创建新API密钥,还需
- 阅读各服务商的API文档
- 修改代码以符合其规则
- 常见误区:担心前文OpenAI内容白学
- 三个好消息:
- 大模型API结构相似,基本无大逻辑改动
- GPT常用参数通用大多数大模型(参数名可能细微差别)
OpenAI vs 百度erniebot 示例对比
Section titled “OpenAI vs 百度erniebot 示例对比”# OpenAI
from openai import OpenAIclient = OpenAI()
completion = client.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": "你好,请介绍下你自己吧!"}])
print(completion.choices[0].message)# 百度erniebotimport erniebot
response = erniebot.ChatCompletion.create( model="ernie-3.5", messages=[{"role": "user", "content": "你好,请介绍下你自己吧!"}])
print(response.get_result())- 相似性:messages格式、model参数、ChatCompletion调用基本一致
- 差异:客户端初始化、方法名、结果提取方式
国产大模型兼容OpenAI API
Section titled “国产大模型兼容OpenAI API”- OpenAI领头羊地位:阿里云等国产服务商直接兼容OpenAI API
- 可直接使用OpenAI Python库调用通义千问等国产大模型
LangChain通用框架
Section titled “LangChain通用框架”- 作用:大模型应用的通用框架,无需担心接口兼容性
- 支持多种模型作为Chat Model(聊天模型):
- GPT、文心、Claude、通义等
from langchain_community.vectorstores import Chromafrom langchain_core.output_parsers import StrOutputParserfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_core.runnables import RunnablePassthroughfrom langchain_openai import ChatOpenAI
chain = ( RunnablePassthrough.assign( context=(..., as_retriever) ) | ChatPromptTemplate(...) | ChatOpenAI(...) | StrOutputParser())- 优势:统一接口,轻松切换不同大模型服务商
DeepSeek国产大模型API调用
Section titled “DeepSeek国产大模型API调用”- 兼容OpenAI接口:只需修改代码里的模型名字,即可完成国产大模型的丝滑切换
- LangChain预告:LangChain很强,但先掌握直接调用兼容OpenAI接口的国产大模型
DeepSeek账号与API密钥获取
Section titled “DeepSeek账号与API密钥获取”- 使用DeepSeek模型步骤:先创建DeepSeek账号,获取API密钥
- API文档官网:访问 https://api.deepseek.com
- 点击右上角切换中文
# 配置参数base_url = "https://api.deepseek.com" # 或 https://api.deepseek.com/v1api_key = "申请API密钥"- OpenAI SDK兼容:DeepSeek API格式兼容OpenAI,通过配置修改即可使用OpenAI SDK访问
- 模型升级:deepseek-chat 已升级为 DeepSeek-V2,API不变,指定
model="deepseek-chat" - 推理模型:deepseek-reasoner 为最新 DeepSeek-RT
(Key Icon) ────────► (Whale Logo) API密钥 DeepSeek模型DeepSeek 注册登录与API Key 操作流程 (续)
Section titled “DeepSeek 注册登录与API Key 操作流程 (续)”- 登录/注册页面:点击Apply for API链接
- 输入邮箱/密码/确认密码,或Google账号登录
- 无账号:立即注册,发送验证码
- 控制台操作:左侧菜单API Keys → 创建API key按钮
- 弹窗输入:名称(请输入API Key的名称) → 创建
- 生成弹窗:您的API key已生成,点击复制(仅显示一次)
- API Keys表格:
| 名称 | Key | 创建时间 | 最后使用时间 |
|---|
- 安全警告:妥善保管,API key泄露可能导致账户被盗用或产生不必要费用
DeepSeek API密钥创建完成
Section titled “DeepSeek API密钥创建完成”- 创建后立即保存:密钥页面关闭后无法再次查看,需妥善保管
- 充值要求:API收费服务,创建密钥后需充值才能调用DeepSeek模型
第一个DeepSeek请求准备
Section titled “第一个DeepSeek请求准备”- 兼容OpenAI库:尽管调用DeepSeek模型,仍从openai库导入OpenAI并创建实例
from openai import OpenAIclient = OpenAI()- 原因:DeepSeek使用与OpenAI兼容的API格式,无需切换库
DeepSeek OpenAI实例配置
Section titled “DeepSeek OpenAI实例配置”- DeepSeek兼容OpenAI格式:使用OpenAI Python库调用DeepSeek模型
- 创建OpenAI实例时设置两个参数:
- api_key:赋值为DeepSeek获取的密钥
- base_url:
https://api.deepseek.com
from openai import OpenAI
client = OpenAI( api_key=..., base_url=...,)- 环境变量推荐:将DeepSeek密钥存入DEEPSEEK_API_KEY环境变量
| 变量 | 值 |
|—————–|———––|
| DEEPSEEK_API_KEY | sk-… |
DeepSeek OpenAI实例环境变量与base_url配置
Section titled “DeepSeek OpenAI实例环境变量与base_url配置”- 使用os库读取环境变量:导入os,通过
os.getenv("DEEPSEEK_API_KEY")获取DeepSeek密钥值 - 原因:安全存储密钥,避免硬编码到代码中
import osfrom openai import OpenAI
client = OpenAI( api_key=os.getenv("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com",)- base_url参数作用:基地址参数,决定客户端请求发送到DeepSeek服务器(
https://api.deepseek.com) - 与OpenAI默认服务器区分,确保请求路由正确
DeepSeek 模型选择与调用
Section titled “DeepSeek 模型选择与调用”- 推理模型:deepseek-reasoner
- 区别:输出最终回答前,先输出思维链内容,提升最终答案准确性
from openai import OpenAI
client = OpenAI( api_key=os.getenv("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com",)
response = client.chat.completions.create( model="deepseek-reasoner", messages=[ {"role": "user", "content": "四大文明古国分别有哪些"} ])- 提取回复:与OpenAI完全相同
print(response.choices[0].message.content)- 兼容感谢:DeepSeek对OpenAI接口高度兼容,直接复用代码
response = client.chat.completions.create( model="deepseek-reasoner", # 或 "deepseek-chat" messages=[...])print(response.choices[0].message.content)通义千问阿里云账号准备
Section titled “通义千问阿里云账号准备”- 访问阿里云官网:已有账号右上角登录,无账号右上角注册并按指引完成
- 进入控制台:登录后点击右上角控制台按钮
阿里云DashScope(灵机)API开通
Section titled “阿里云DashScope(灵机)API开通”阿里云控制台开通灵机服务
Section titled “阿里云控制台开通灵机服务”- 搜索定位:控制台搜索框输入灵机,点击控制台分类下的模型服务灵机
- 开通步骤:
- 未开通服务点击未开通按钮
- 右下角点击立即开通
- 开通成功后前往控制台
- 下一步:返回控制台,点击左侧API-KEY管理创建密钥
| 服务名称 | 说明 |
|---|---|
| DashScope模型服务灵机 | 开发生阶段模型API调用接口,方便开发者调用,不同模型计量收费标准参考文档 |
通义千问阿里云API密钥创建完成
Section titled “通义千问阿里云API密钥创建完成”- 创建后立即复制:API-KEY仅显示一次,关闭页面后无法再次查看,务必保存到安全地方
- 表格显示:ID、API-KEY、创建时间、过期时间、状态
| ID | API-KEY | 创建时间 | 过期时间 | 状态 |
|––––|—————|———————–|———————–|——|
| 1793505| sk-f2b64ca4b…| 2024年03月15日 11:35:51| 2024年03月14日 11:35:51| 正常 |
- 安全警告:妥善保管,泄露可能导致账户风险
通义千问OpenAI实例配置
Section titled “通义千问OpenAI实例配置”- 兼容OpenAI库:调用通义千问仍从openai库导入OpenAI创建实例
- 原因:阿里云通义千问使用与OpenAI兼容的API格式,无需切换库
通义千问OpenAI实例配置 (续)
Section titled “通义千问OpenAI实例配置 (续)”- 兼容OpenAI接口:阿里云通义千问大模型服务对OpenAI接口兼容,调用通义模型仍使用OpenAI Python库创建实例
- 原因:API格式兼容,尽管不是完全相同,仍可行
- 实例参数设置:在OpenAI实例中配置两个参数
- api_key:赋值为阿里云获取的API-KEY(之前复制的密钥)
- base_url:基地址参数,指向阿里云DashScope服务器
- 环境变量推荐:更好方式是将阿里云密钥存入环境变量(如DASHSCOPE_API_KEY)
- 避免硬编码,提高安全性
通义千问OpenAI实例环境变量与base_url配置
Section titled “通义千问OpenAI实例环境变量与base_url配置”- 使用os库读取环境变量:导入os,通过
os.getenv("DASH_SCOPE_API_KEY")获取通义千问密钥值 - 原因:安全存储密钥,避免硬编码到代码中
import osfrom openai import OpenAI
client = OpenAI( api_key=os.getenv("DASH_SCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/", compatible_mode="v1",)- base_url参数作用:基地址参数,决定客户端请求发送到阿里云DashScope服务器(
https://dashscope.aliyuncs.com/) - compatible_mode=“v1”:确保兼容OpenAI格式
- 与OpenAI默认服务器区分,确保请求路由正确
通义千问模型调用配置
Section titled “通义千问模型调用配置”- 请求自由选择服务器:不必发给OpenAI官方服务器,作为请求方可自由选择阿里云服务器或其他中转/自建服务器
- 复用代码:直接复制之前发送给GPT模型的请求代码
import osfrom openai import OpenAI
client = OpenAI( api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/", compatible-mode="v1",)
response = client.chat.completions.create( model="qwen-plus", messages=[ {"role": "user", "content": "四大文明古国分别有哪些"}, ])- 唯一修改:model参数改为通义模型名称(如qwen-plus)
- 模型名称查询:阿里云官方文档搜索获取
| 模型分类 | 模型名称示例 |
|---|---|
| 通义千问 | qwen-long, qwen-turbo, qwen-plus, qwen-max |
| 通义千问(VL系列) | qwen-vl-plus, qwen-vl-max |
| 通义千问(Qwen系列) | qwen2-57b-a14b-instruct 等 |
通义千问模型选择与调用
Section titled “通义千问模型选择与调用”- 通义千问模型列表:qwen-turbo, qwen-plus, qwen-max, qwen-max-0428 等
- 区别:
- qwen-turbo:生成速度最快
- qwen-max:参数最大,回答最聪明
- qwen-plus:速度与效果平衡
from openai import OpenAI
client = OpenAI( api_key=os.getenv("DASH_SCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/", compatible_mode="v1",)
response = client.chat.completions.create( model="qwen-plus", messages=[ {"role": "user", "content": "四大文明古国分别有哪些"} ])print(response.choices[0].message.content)- 提取回复:与OpenAI/GPT完全相同,在
response.choices[0].message.content - 直接复制之前代码即可
Moonshot AI(Kimi)大模型API调用
Section titled “Moonshot AI(Kimi)大模型API调用”- 感谢阿里云兼容:复用之前发送给GPT模型的请求,只需稍微改改参数值,就能变成和通义模型对话
Moonshot密钥获取准备
Section titled “Moonshot密钥获取准备”- Kimi Chat背后的模型:Moonshot模型,需先获取Moonshot密钥
- 官网访问:https://platform.moonshot.cn/console/
- 点击用户中心,自动跳转基本信息页面
- 登录方式:扫码登录、手机快捷登录、账号密码登录(注册新账号)
Key icon (API密钥) ────────► Icon with stripes (Moonshot模型)Moonshot的文本生成模型(Moonshot-v1)是训练模型自然语言生成类书籍的语言模型… 语言模型推理服务提供Chat Completions接口,用于生成文本。
Moonshot API密钥创建
Section titled “Moonshot API密钥创建”- 左侧菜单操作:点击API Key 管理 → 新建按钮
- 输入名称(如demo,区分不同大模型应用密钥,最多32字符) → 创建
- 密钥表格:
| 名称 | 创建时间 | Key | 操作 |
|---|---|---|---|
| demo | 2024-08-15 23:58:04 | sk-wd_PkUki | 编辑 删除 |
- 安全规则:最多5个密钥,仅展示一次,妥善保存;勿共享,泄露可能被禁用
Moonshot OpenAI实例配置
Section titled “Moonshot OpenAI实例配置”- 兼容OpenAI库:Moonshot AI对OpenAI接口兼容,仍从openai库导入OpenAI创建实例
from openai import OpenAI
client = OpenAI()- 迁移说明:配置api_key和base_url即可替换OpenAI为Kimi模型
Moonshot AI OpenAI实例配置
Section titled “Moonshot AI OpenAI实例配置”- 兼容OpenAI库:调用Moonshot模型仍使用openai库创建OpenAI实例,设置两个参数
- api_key:赋值为Moonshot平台获取的密钥
- base_url:基地址参数(后续设置)
from openai import OpenAI
client = OpenAI( api_key=..., base_url=...,)- 环境变量推荐:将Moonshot密钥存入MOONSHOT_API_KEY环境变量,提高安全性
| 变量 | 值 |
|––––––––––|–––––|
| MOONSHOT_API_KEY | sk-… |
- 代码读取环境变量:导入os,使用
os.getenv("MOONSHOT_API_KEY")获取密钥值
import osfrom openai import OpenAI
client = OpenAI( api_key=os.getenv("MOONSHOT_API_KEY"), base_url=...,)- os库作用:与操作系统交互,传入环境变量名即可获取对应值
Moonshot AI OpenAI实例base_url配置与模型调用
Section titled “Moonshot AI OpenAI实例base_url配置与模型调用”- base_url参数设置:赋值为
https://api.moonshot.cn/v1 - 作用:基地址参数,将请求发送到Moonshot AI服务器,而非默认OpenAI服务器
import osfrom openai import OpenAI
client = OpenAI( api_key=os.getenv("MOONSHOT_API_KEY"), base_url="https://api.moonshot.cn/v1",)
response = client.chat.completions.create( model="moonshot-v1-8k", messages=[ {"role": "user", "content": "四大文明古国分别有哪些"} ])- 调用方式:复用之前GPT请求代码,唯一修改
model为Moonshot模型名(如moonshot-v1-8k)
提示工程(Prompt Engineering)
Section titled “提示工程(Prompt Engineering)”- 提示(Prompt)定义:输入给AI大语言模型的问题或指令
- AI根据提示内容给予回应
- 好提示作用:极大提高AI理解和执行效率,提供更准确、有用的回答
- 提示工程核心:研究如何提高与AI沟通质量及效率
- 重点关注提示的开发和优化
- OpenAI官方资源:
- 最佳实践指南:《Best practices for prompt engineering with OpenAI API》
- 作者:Jessica Shah
- 关键原则(Rules of Thumb)示例:
- 使用最新模型
- 指令放在提示开头,用##
- 具体描述期望的上下文、结果、长度、格式、风格等
- 通过“well-formed”示例明确输出格式
用户提示 (User Prompt) ──► 大模型 (Large Model) ◄── AI回应 (AI Response)API提示工程最佳实践
Section titled “API提示工程最佳实践”第一条原则:使用最新模型
Section titled “第一条原则:使用最新模型”- 模型版本持续迭代:选择最新模型以获得最佳效果
- 2022年11月前:只有Text-Ada、Text-Babbage、Text-Curie、Text-DaVinci等文本不全模型
- 现在:GPT-3.5 Turbo、GPT-4等擅长聊天模型
- 判断标准:开头字母越靠后、版本数字越大,模型越先进
- 示例:从Ada → Babbage → Curie → DaVinci,能力递增
第二条原则:指令置于开头并用##)
Section titled “第二条原则:指令置于开头并用##)”- 分隔作用:用##
将下面的文本总结为最重要的要点列表。 文本:### (此处输入文本)
### ```
- **对比**:直接放文本效果差,用##
### 第三条原则:具体描述输出要求
- **详细要求**:对上下文、输出长度、格式、风格给出具体描述- **差示例**:`写一首关于OpenAI的诗`(不详细)- **好示例**:
> 以(某著名诗人)的风格,写一首关于**OpenAI**的鼓舞人心的短诗,主题要集中在最近推出的**DALL-E**产品上(DALL-E是一种根据文本生成图形的机器学习模型)。
- 模型更易达成预期效果
### 第四条原则:通过例子阐明输出格式
- **好示例**:明确格式并举例
```javascript提取下面文本中重要的实体。首先提取所有公司名称,然后提取所有人名,然后获取适合内容的特定主题,最后提取一般总体主题。 所需格式: 公司名称:<逗号分隔的公司名称列表> 人名:<逗号分隔的人名列表> 特定主题:<逗号分隔的特定主题列表> 一般主题:<逗号分隔的一般主题列表> 文本:{文本}- 差示例:
提取下面文本中提取的实体。提取以下4种实体类型:公司名称、人名、特定主题和总体主题。文本:{文本}(无格式示例)
第五条原则:提供输出格式模板
Section titled “第五条原则:提供输出格式模板”- 实体提取示例:要求模型提取公司名、人名、特定主题、一般主题
- 差提示:仅列出类型,输出格式随心所欲
- 好提示:附上格式模板
公司名称:<逗号分隔的公司名称列表>人名:<||分隔>特定主题:<||分隔>一般主题:<||分隔>文本:{文本}- 模板作用:模型严格遵循格式(如公司用逗号、其他用||分隔),方便后续解析
- 后续讨论:下一节更详细说明
第五条原则:零样本提示优先,若无效则用小样本提示
Section titled “第五条原则:零样本提示优先,若无效则用小样本提示”- 零样本提示:不给AI任何回应示例,直接丢问题或指令给AI
- 大部分时候使用,但若回应不符合期望,可升级
- 小样本提示:给AI几个回答作为参考例子
- 后续章节详细讲解
第六条原则:减少空洞和不严谨的描述
Section titled “第六条原则:减少空洞和不严谨的描述”- 问题示例:空洞描述如“给这个产品的描述应该是很短,就是呢只有几句话,不要太多了”(重复、空洞)
- 改进:具体要求,如“用3到5句话组成的一个段落来描述此产品”
关键词提取示例对比
Section titled “关键词提取示例对比”好示例(小样本,有示范):
从下面文本中提取关键词。文本1: Stripe 提供 API, Web 开发人员可以使用这些 API 将支付处理集成到他们的网站和移动应用程序中。关键词1: Stripe, 支付处理, API, Web 开发人员, 网站, 移动应用程序
### 文本2: {text}关键字2:差示例(零样本,无示范):
❌ 从下面文本中提取关键词。文本: {text}关键字: