跳转到内容

【限时特惠】小白玩转AI大模型应用开发_哔哩哔哩_bilibili

  • 进入AI大模型应用开发前,安装所需工具
  • 必备Python解释器代码编辑器(已在前置Python课安装)
  • 用于在本地编写和运行Python代码
  • 推荐安装Jupyter Notebook
  • 基于网页的交互式计算环境
  • 机器学习及数据科学流行工具
  • 功能:编写代码、运行代码、查看输出、分享文档
  • 支持按单元格运行代码
  • 课程使用
  • 教学篇:主要使用 Jupyter Notebook
  • 项目开发篇:使用代码编辑器,如 PyCharmVSCode
  • 按单元格运行代码
  • 编辑器运行代码文件时,从头到尾完整运行一遍
  • 但常只需查看某行/段输出,如修改AI模型提示
  • 前置代码无需重复运行
  • 原因:等待API回复耗时,且按量计费(虽单次几分钱,但避免白耗)
  • Jupyter Notebook:代码分单元格,每次只运行一格
  • 保留前输出,查看新输出,省时省钱
  • 交互式环境
  • 编辑器运行Python文件用命令行模式
  • Jupyter Notebook提供交互运行环境
import os
from 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 * 5
Out[2]: 1825
In [ ]:
  • 交互模式查看输出:无需print语句直接显示结果
  • 命令行模式需显式print
  • 丰富展示格式:支持Markdown语言
  • 注释清晰、有层级(标题、加粗、斜体、链接、引用、代码块)
  • 示例:
# 一级标题
## 二级标题
**加粗** *斜体*
> 引用
  • HTML分享时效果原封不动,便于直观理解
  • 步骤:打开命令行,运行 pip install notebook
  • Windows:搜索CMD进入
  • macOS:搜索终端(terminal)进入
  • 启动验证:安装后在命令行输入 jupyter notebook
  • 浏览器自动打开Jupyter Notebook窗口,即安装成功
  • 显示类似:http://localhost:8888/?token=...
  • 关闭方法:关掉浏览器窗口不够,需要中止后台服务器
  • 在命令行按 Ctrl+C
  • macOS/Linux:提示确认,输入 y 回车
  • Windows:直接中止
  • 备选安装:安装问题无法解决时,用 Anaconda
  • 针对计算科学(科学计算、机器学习、大数据)的库和环境管理工具
  • 一站式安装多个工具,包括 Jupyter Notebook
Terminal window
$ pip install notebook
# ... 安装过程 ...
Successfully installed notebook-6.5.4
$ jupyter notebook
[I 17:42:13.730 NotebookApp] http://localhost:8888/?token=...
# 关闭:Ctrl+C
  • 进入命令行(大黑窗口)
  • 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服务终止
  • 主面板功能:展示当前目录下所有文件
  • 启动后界面:显示当前目录所有文件和文件夹
  • 可点击文件夹访问子目录(如Music、Pictures、Desktop)
  • 创建第一个notebook
  • 进入目标目录(如桌面文件夹)
  • 点击 NewNotebook,自动打开新编辑界面
  • 桌面同时出现新文件 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键 或点击其他地方,底色变灰色
  • 运行单元格:点击运行按钮或快捷键执行当前单元格
  • 执行完毕后,[ ] 括号内变为数字,如 [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展示多项输出。
  • 停止运行:运行按钮旁为中止执行按钮。
  • 中断按钮(左边停止图标):运行单元格代码时点击,中止当前执行
  • 示例:
[1]: import time
time.sleep(10)
  • 点击后输出 KeyboardInterrupt 错误
  • 重启按钮(右边循环箭头):清空所有定义过的变量,重置内核状态
  • 对话框确认:Restart Kernel? 所有变量将丢失
  • 示例:
[1]: a = 3
[2]: a
3 # 重启前输出
  • 重启后运行 [2]NameError: name ‘a’ is not defined
  • 单元格数字重置为 [1][2] 等,从1开始,表明已重启
  • 作用:模拟全新启动,清除内存中变量,确保独立测试代码

重启并重新运行所有单元格按钮

Section titled “重启并重新运行所有单元格按钮”
  • 位置:重启按钮旁边
  • 功能
  • 清空变量后,从上往下完整执行所有单元格
  • 查看整个代码顺序的输出结果
  • 检查单元格执行顺序是否有问题

示例

[1]: a = 3
[2]: a
3
  • 实用性:模拟从头运行所有代码,确保依赖关系正确
  • 切换单元格类型:位于重启并重新运行按钮旁的下拉框
  • 最常用:Code(代码) 和 Markdown(文字)
  • 单元格不限于代码,也可写文字说明
  • Markdown 标记语言:为内容增加样式,语法简单
  • 一级标题:# 标题(井号+空格)
  • 运行后自动加粗加大
  • 二级标题:## 标题(两个井号+空格)
  • 标题层级:井号数量决定级别(1-6级)
  • 一级:# 标题 → 最大加粗
  • 二级:## 标题 → 次大
  • 以此类推至 #####)
  • 操作:双击单元格编辑 → 加井号 → 运行渲染
  • 文字样式
  • 粗体**文字**
  • 斜体*文字*
  • 换行:普通文字默认单行显示
  • 多行文字不自动分行
# 我是最大的标题
## 我是第二大的标题
### 我是第三大的标题
我是 **粗体**
我是 *斜体*
我是普通文字
我 是另一行的普通文字

渲染效果:

  • 标题逐级递减大小
  • 粗斜体独立显示
  • 普通文字连续一行
  • 换行方法(普通文字默认单行显示)
  • 方法1:在行间放一个空行
  • 方法2:在第一行末尾加两个空格(更紧凑效果)
我是普通通的文字
我是另一行的普通文字 # 行尾两个空格
  • 无序列表:每个元素前加短横杠(键盘0右边键)+空格
- 我是列表的第一项
- 我是列表的第二项
- 我是列表的第三项
  • 有序列表:每个元素前加数字 + 英文句号 + 空格
1. 我是列表的第一项
2. 我是列表的第二项
3. 我是列表的第三项
  • 位置:每个单元格旁边
  • 功能(从左到右):
  • 复制:复制当前单元格
  • 上移:把当前单元格上移一格
  • 下移:把当前单元格下移一格
  • 上方添加:在当前单元格上面添加空单元格
  • 下方添加:在当前单元格下面添加空单元格
  • 删除:删除当前选中的单元格
单元格图标示例:
[剪刀复制] [↑上移] [↓下移] [+上方] [+下方] [垃圾桶删除]
  • 查看方法:点击 HelpKeyboard shortcuts 查看完整列表
  • 掌握快捷键可大大提升使用 Jupyter Notebook 的效率
  • 命令模式下使用(灰色底色,非编辑模式)
  • A键:在当前单元格上方插入一个新单元格
  • B键:在当前单元格下方插入一个新单元格
  • 连按两次DDD):删除当前单元格

注意:编辑模式(白色底色)下无效,必须先按 ESC 进入命令模式

运行单元格快捷键与打开已有 Notebook

Section titled “运行单元格快捷键与打开已有 Notebook”
  • 运行按钮:最常用,运行当前单元格(代码或 Markdown)
  • 快捷键Shift + Enter
  • 效果同点击运行按钮
  • 节省离开键盘找鼠标的时间
  • 打开已有 Notebook
  • 上节提到终止 Jupyter Notebook 的命令行窗口
  • 重新启动后,在主面板点击已有 .ipynb 文件即可打开
  • 关闭确认:在新的 CMD/终端 窗口按 Ctrl+C
  • macOS/Linux:额外按 Y 回车确认中止
  • 效果Notebook 刷新后浏览器展示页面无效(后台服务器关闭)
  • 重新打开:在 CMD/终端 输入 jupyter notebook 命令
  • 进入存放 Notebook 的目录
  • 点击相应的 .ipynb 文件恢复编辑界面
  • 用代码调用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 全称Application Programming Interface(应用程序编程接口)
  • 中文常用 API
  • 核心作用:定义两个软件程序之间的服务合约
  • 通过请求响应进行通讯
  • 通俗理解:如何与服务对话的说明书
  • 技术基础:绝大部分基于 HTTP 协议
  • HTTP 是 HyperText Transfer Protocol(超文本传输协议)
  • HTTPHypertext Transfer Protocol 的缩写,意思是超文本传输协议
  • 是一种客户端和服务器之间的请求-响应协议
+-----------------+ HTTP +-----------------+
| 客户端 | <--------------------> | 服务器 |
+-----------------+ +-----------------+
  • AI对话场景:运行的代码程序就是客户端
  • 给AI的提示放到请求内容
  • 发送给AI服务提供方(如 OpenAI百度 的服务器)
  • 得到对方的响应,把 AI的回复 为后续所用
  • 发送HTTP请求:有很多信息是我们提供给服务器
POST /v1/chat/completions HTTP/1.1
Host: api.openai.com
Accept: application/json
{
"messages": [
{
"role": "user",
"content": "牛顿第三定律是什么?"
}
]
}
  • HTTP 请求示例:包含资源路径、Host、Accept响应类型等
POST /v1/chat/completions HTTP/1.1
Host: api.openai.com
Accept: application/json
{
"messages": [
{
"role": "user",
"content": "牛顿第三定律是什么?"
}
]
}
  • HTTP 响应示例:包含状态码、日期、Content-Type 和 AI 回复
HTTP/1.1 200 OK
Date: Fri, 27 Jan 2008 18:10:48 GMT
Content-Type: application/json
{
"object": "chat.completion",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "牛顿第三定律,通常被称为作用与反作用定律,表述为:对于每一个作用力,总有大小相等、方向相反的相互作用力。"
}
}
]
}
  • 实际使用:无需从头构建 HTTP 请求
  • OpenAI、百度等公司基于 API 封装 Python 库
  • 直接调用库的函数/方法 达成相同目的
  • 发 HTTP 请求 → 使用库
  • 导入与初始化
from openai import OpenAI
client = 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.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库,调用代码有差异
  • 课程示例:主要用 GPT模型,但对话数据结构相似,一通百通
  • 前提步骤:调用AI大模型功能前,必须获取API密钥
  • 当前主流AI大模型(如GPT、文心)均需创建API密钥才能使用
  • API密钥作用:让服务器识别和验证客户端请求
  • 确认请求来自哪个账号
  • 追踪计费和使用频率
  • 课程示例模型:以 OpenAI公司的GPT模型 为主
  • 原因是它是行业内领先的AI模型
  • 创建必要性没有API密钥,无法通过代码使用AI模型及相关功能
  • 声明:展示OpenAI API密钥创建方式
  • 严格遵守中国法律法规
  • 不提供网络环境相关工具
  • 遇到API问题:加入付费学员社群寻求帮助
👤 ─── API密钥 ─── 💰
我们会一起创建API密钥
  • 访问官网:前往OpenAI官网API密钥页面
  • 显示账户下所有API密钥列表
  • 无账号先注册一个
  • 创建新密钥:点击 Create new secret key 按钮
  • 输入密钥名称(可选,随便取)
  • 用于区分不同应用程序的密钥
  • 不输入则系统分配默认名称
NAME SECRET KEY TRACKING CREATED LAST USED
H2O sk-biJTG + Enable 2023年11月20日 Never
+ Create new secret key
Default organization
  • 安全提醒
  • 不要分享 API密钥
  • 避免在浏览器或客户端代码暴露
  • OpenAI可能自动禁用泄露的密钥
  • 点击创建:点击 Create new secret key 按钮生成新密钥
  • 重要提醒:生成后点击 Done 按钮,即再也看不到完整密钥
  • 立即复制密钥并粘贴保存到安全位置
  • 忘记复制处理:若关掉忘记复制,无大碍
  • 删除该密钥,重新创建一个新的
  • 安全注意千万不能泄露密钥
  • 密钥只属于你,与你的账户绑定
  • 泄露风险:密钥被别人看到并使用,所有消耗的 token 都会计费到你的账号
  • 应对:怀疑泄露时立即删除密钥,使其失效,防止他人继续使用
  • 传递方式:发送API请求时需传递密钥
  • 风险:直接写在代码中,任何人看到代码都能看到 明文密钥
from openai import OpenAI
client = 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,密钥也不会暴露,安全性很高
  • 操作差异:不同操作系统设置环境变量的方法不一样
  • 进入设置:在计算机此电脑右击 → 属性高级系统设置
  • 系统属性界面选高级标签 → 点击环境变量按钮
  • 新建系统变量
  • 变量名OPENAI_API_KEY严格无误输入)
  • 变量值:粘贴先前复制的 API密钥
  • 保存:点击确定按钮完成设置
from openai import OpenAI
client = OpenAI() # 自动从环境变量读取密钥
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": "四大发明古代中国有何"}
]
)
  • 打开终端,输入 ps -p $$ 查看当前 Shell 类型
  • 示例输出:
Terminal window
PID TTY TIME CMD
94682 ttys001 0:00.35 -zsh
  • Bash:配置文件 ~/.bash_profile
  • Zsh:配置文件 ~/.zshrc
  • 其他 Shell 类型:自行搜索对应配置文件位置
  • 编辑配置文件
  • 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
  • 进入编辑模式
  • 添加环境变量:添加一行
Terminal window
export OPENAI_API_KEY="<你的API密钥>"
  • 保存退出:按 Control + X 保存 → Y 确认 → Enter 回车
  • 使修改生效:运行 source 命令
  • Bashsource ~/.bash_profile
  • Zshsource ~/.zshrc
  • 效果:电脑已存储密钥,即可对 GPT模型 发送请求,与 AI进行对话
  • 使用 OpenAI官方Python库,无需构建 HTTP请求,直接调用函数/方法
  • 第一步:安装 openai Python库(Python 3.7及以上
  • 终端/CMD
  • Windowspip install openai
  • macOSpip3 install openai
  • Jupyter Notebook:新建notebook,运行 !pip install openai
  • ! 前缀相当于系统 Shell命令,效果同终端
  • 灵活选择:按个人方便方式操作
  • 安装完成后即可使用
  • 在Jupyter Notebook中使用
from openai import OpenAI
client = OpenAI() # 自动从环境变量读取OPENAI_API_KEY
  • 前提:上一节已设置环境变量,密钥自动传递,无需手动输入
  • 备用方式(电脑无密钥或用新密钥):
client = OpenAI(api_key="sk-XXXX-替换为你的密钥-XXXX")
  • OpenAI类作用:创建client实例,用于调用发送给AI的请求方法
  • 初始化方式:可直接传入api_key参数,或从环境变量自动读取
  • 示例(明文传入,不推荐生产环境):
from openai import OpenAI
client = OpenAI(api_key="sk-XXXX-替换为你的密钥-XXXX")
  • 推荐(环境变量):
client = OpenAI() # 自动读取 OPENAI_API_KEY
  • 原因:传入密钥后,OpenAI才能校验请求,确保后续API调用成功
  • 功能:实现与AI的对话
  • 关键参数
  • model:指定聊天模型,支持多种GPT系列
  • gpt-3.5-turbogpt-4gpt-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-turbogpt-4gpt-4-turbo
  • 选择依据
  • 模型数字越大,版本越新,性能越好
  • 越老的模型,对话价格越便宜
  • 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": "四大文明古国分别有哪些?"}
]
)
  • 运行结果responseChatCompletion 类实例
  • AI回复位置:choices[0].message.content
response
# ChatCompletion(id='chatcmpl-...', choices=[Choice(..., message=ChatCompletionMessage(content='四大文明古国是指...'))], ...)
print(response.choices[0].message.content)
# 四大文明古国是指古代四个发达的文明古国,分别是:...
  • response 对象:ChatCompletion 类实例,包含AI回复
  • 路径:response.choices[0].message.content
print(response.choices[0].message.content)
# 输出:四大文明古国是指古代四个发达的文明古国,分别是:...
  • 已掌握:向 OpenAI GPT模型 发送请求并解析回复
  • 配套资料:课程 Jupyter Notebook 文件
  • 核心知识:绝大部分模型 API 基于 token 数量 计费
  • 下一节详解
  • Token 定义:文本的基本单位
  • 取决于token化方法:短单词可能1个token,长单词拆分成多个
  • 中文特点:占token数量相对更多,有些字需1个甚至更多token表示
英文示例:She is in a restaurant
中文示例:你好,我来自中国,我说中文
  • 网址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化特点:常用词可能一个词一个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 数,降低成本
模型 输入 (美元/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 美分(成本低)
  • 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价格持续下降
  • 课程时价格可能已更低
  • 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
  • 安装命令(根据系统选择):
  • 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数与成本
  • 估算价格方法: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("黄河之水天上来")) # 9
  • gpt-4-1106-preview:最新GPT-4 Turbo,支持128,000 tokens上下文窗口
  • 改进指令跟随、JSON模式、可复现输出、并行函数调用
  • 输出最大4,096 tokens
  • 预览版,暂不适合生产环境
  • gpt-4-vision-preview:支持图像理解(含GPT-4 Turbo所有能力)
  • 同上窗口与输出限制,预览版
  • 优先前沿模型:性能更强,但需考虑成本
  • gpt-4-32kgpt-4 贵一倍(输入 $0.06 vs $0.03 /1K tokens)
  • 上下文窗口应对:后续介绍多种方法处理限制
  • 掌握 token 计数与计费机制
  • 通过 tiktoken 估算 + API usage 精确统计
  • 价格低廉,随技术进步持续下降
  • 下一节内容:返回对话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 2

chat.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 2

chat.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
  • 功能:官方提供的在线工具,无需编写代码即可测试 API 参数效果
  • 填写 messages(给 AI 的消息)
  • 调整任意参数:切换 模型temperaturemax_tokenstop_pfrequency_penaltypresence_penalty
  • 使用方式:点击 Submit 按钮,AI 回复直接显示在页面
  • 优势:快速实验不同参数组合对输出影响,便于理解机制
  • 可视化界面:API提供的游乐场,所有操作(如聊天)都会消耗账号token
  • 提醒别当成免费,小心玩
  • 最实用功能View code按钮
  • 点击左上角View code,当前所有设置自动生成调用代码
  • 直接复制粘贴代码编辑器使用
  • 源码福音:快速获取完整API调用示例
from openai import OpenAI
client = 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对话
  • 切换AI模型:不止创建新密钥,需遵循不同服务商的API规则
  • API通俗理解:两个程序间通讯的说明书
  • 定义请求与响应方式
  • 服务商制定:OpenAI定GPT规则、阿里定通义规则
程序 ──[请求]──► API说明书 ──[响应]──► 服务
▲ │
└──────────────────────────────┘
  • 切换国产大模型步骤:不止创建新API密钥,还需
  • 阅读各服务商的API文档
  • 修改代码以符合其规则
  • 常见误区:担心前文OpenAI内容白学
  • 三个好消息
  • 大模型API结构相似,基本无大逻辑改动
  • GPT常用参数通用大多数大模型(参数名可能细微差别)
# OpenAI
from openai import OpenAI
client = OpenAI()
completion = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "你好,请介绍下你自己吧!"}]
)
print(completion.choices[0].message)
# 百度erniebot
import erniebot
response = erniebot.ChatCompletion.create(
model="ernie-3.5",
messages=[{"role": "user", "content": "你好,请介绍下你自己吧!"}]
)
print(response.get_result())
  • 相似性:messages格式、model参数、ChatCompletion调用基本一致
  • 差异:客户端初始化、方法名、结果提取方式
  • OpenAI领头羊地位:阿里云等国产服务商直接兼容OpenAI API
  • 直接使用OpenAI Python库调用通义千问等国产大模型
  • 作用:大模型应用的通用框架无需担心接口兼容性
  • 支持多种模型作为Chat Model(聊天模型):
  • GPT、文心、Claude、通义等
from langchain_community.vectorstores import Chroma
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI
chain = (
RunnablePassthrough.assign(
context=(..., as_retriever)
)
| ChatPromptTemplate(...)
| ChatOpenAI(...)
| StrOutputParser()
)
  • 优势:统一接口,轻松切换不同大模型服务商
  • 兼容OpenAI接口:只需修改代码里的模型名字,即可完成国产大模型的丝滑切换
  • LangChain预告:LangChain很强,但先掌握直接调用兼容OpenAI接口的国产大模型
  • 使用DeepSeek模型步骤:先创建DeepSeek账号,获取API密钥
  • API文档官网:访问 https://api.deepseek.com
  • 点击右上角切换中文
# 配置参数
base_url = "https://api.deepseek.com" # 或 https://api.deepseek.com/v1
api_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泄露可能导致账户被盗用产生不必要费用
  • 创建后立即保存:密钥页面关闭后无法再次查看,需妥善保管
  • 充值要求:API收费服务,创建密钥后需充值才能调用DeepSeek模型
  • 兼容OpenAI库:尽管调用DeepSeek模型,仍从openai库导入OpenAI并创建实例
from openai import OpenAI
client = OpenAI()
  • 原因:DeepSeek使用与OpenAI兼容的API格式,无需切换库
  • DeepSeek兼容OpenAI格式:使用OpenAI Python库调用DeepSeek模型
  • 创建OpenAI实例时设置两个参数:
  • api_key:赋值为DeepSeek获取的密钥
  • base_urlhttps://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 os
from 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-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)
  • 访问阿里云官网:已有账号右上角登录,无账号右上角注册并按指引完成
  • 进入控制台:登录后点击右上角控制台按钮
  • 搜索定位:控制台搜索框输入灵机,点击控制台分类下的模型服务灵机
  • 开通步骤
  • 未开通服务点击未开通按钮
  • 右下角点击立即开通
  • 开通成功后前往控制台
  • 下一步:返回控制台,点击左侧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库:调用通义千问仍从openai库导入OpenAI创建实例
  • 原因:阿里云通义千问使用与OpenAI兼容的API格式,无需切换库
  • 兼容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 os
from 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默认服务器区分,确保请求路由正确
  • 请求自由选择服务器:不必发给OpenAI官方服务器,作为请求方可自由选择阿里云服务器或其他中转/自建服务器
  • 复用代码:直接复制之前发送给GPT模型的请求代码
import os
from 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 等
  • 通义千问模型列表: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
  • 直接复制之前代码即可
  • 感谢阿里云兼容:复用之前发送给GPT模型的请求,只需稍微改改参数值,就能变成和通义模型对话
  • Kimi Chat背后的模型Moonshot模型,需先获取Moonshot密钥
  • 官网访问https://platform.moonshot.cn/console/
  • 点击用户中心,自动跳转基本信息页面
  • 登录方式扫码登录手机快捷登录账号密码登录(注册新账号)
Key icon (API密钥) ────────► Icon with stripes (Moonshot模型)

Moonshot的文本生成模型(Moonshot-v1)是训练模型自然语言生成类书籍的语言模型… 语言模型推理服务提供Chat Completions接口,用于生成文本。

  • 左侧菜单操作:点击API Key 管理新建按钮
  • 输入名称(如demo,区分不同大模型应用密钥,最多32字符) → 创建
  • 密钥表格
名称 创建时间 Key 操作
demo 2024-08-15 23:58:04 sk-wd_PkUki 编辑 删除
  • 安全规则:最多5个密钥,仅展示一次,妥善保存;勿共享,泄露可能被禁用
  • 兼容OpenAI库:Moonshot AI对OpenAI接口兼容,仍从openai库导入OpenAI创建实例
from openai import OpenAI
client = OpenAI()
  • 迁移说明:配置api_keybase_url即可替换OpenAI为Kimi模型
  • 兼容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 os
from 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 os
from 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)定义:输入给AI大语言模型的问题或指令
  • AI根据提示内容给予回应
  • 好提示作用:极大提高AI理解和执行效率,提供更准确、有用的回答
  • 提示工程核心:研究如何提高与AI沟通质量及效率
  • 重点关注提示的开发和优化
  • OpenAI官方资源
  • 最佳实践指南:《Best practices for prompt engineering with OpenAI API》
  • 作者:Jessica Shah
  • 关键原则(Rules of Thumb)示例:
  1. 使用最新模型
  2. 指令放在提示开头,用##
  3. 具体描述期望的上下文、结果、长度、格式、风格等
  4. 通过“well-formed”示例明确输出格式
用户提示 (User Prompt) ──► 大模型 (Large Model) ◄── AI回应 (AI Response)
  • 模型版本持续迭代:选择最新模型以获得最佳效果
  • 2022年11月前:只有Text-AdaText-BabbageText-CurieText-DaVinci等文本不全模型
  • 现在:GPT-3.5 TurboGPT-4等擅长聊天模型
  • 判断标准:开头字母越靠后、版本数字越大,模型越先进
  • 示例:从AdaBabbageCurieDaVinci,能力递增

第二条原则:指令置于开头并用##)

Section titled “第二条原则:指令置于开头并用##)”
  • 分隔作用:用##
将下面的文本总结为最重要的要点列表
文本:###
(此处输入文本)
### ```
- **对比**:直接放文本效果差,用##
### 第三条原则:具体描述输出要求
- **详细要求**:对上下文、输出长度、格式、风格给出具体描述
- **差示例**:`写一首关于OpenAI的诗`(不详细)
- **好示例**:
> 以(某著名诗人)的风格,写一首关于**OpenAI**的鼓舞人心的短诗,主题要集中在最近推出的**DALL-E**产品上(DALL-E是一种根据文本生成图形的机器学习模型)。
- 模型更易达成预期效果
### 第四条原则:通过例子阐明输出格式
- **好示例**:明确格式并举例
```javascript
提取下面文本中重要的实体首先提取所有公司名称然后提取所有人名然后获取适合内容的特定主题最后提取一般总体主题
所需格式
公司名称<逗号分隔的公司名称列表>
人名<逗号分隔的人名列表>
特定主题<逗号分隔的特定主题列表>
一般主题<逗号分隔的一般主题列表>
文本:{文本}
  • 差示例提取下面文本中提取的实体。提取以下4种实体类型:公司名称、人名、特定主题和总体主题。文本:{文本}(无格式示例)

第五条原则:提供输出格式模板

Section titled “第五条原则:提供输出格式模板”
  • 实体提取示例:要求模型提取公司名、人名、特定主题、一般主题
  • 差提示:仅列出类型,输出格式随心所欲
  • 好提示:附上格式模板
公司名称:<逗号分隔的公司名称列表>
人名:<||分隔>
特定主题:<||分隔>
一般主题:<||分隔>
文本:{文本}
  • 模板作用:模型严格遵循格式(如公司用逗号其他用||分隔),方便后续解析
  • 后续讨论:下一节更详细说明

第五条原则:零样本提示优先,若无效则用小样本提示

Section titled “第五条原则:零样本提示优先,若无效则用小样本提示”
  • 零样本提示:不给AI任何回应示例,直接丢问题或指令给AI
  • 大部分时候使用,但若回应不符合期望,可升级
  • 小样本提示:给AI几个回答作为参考例子
  • 后续章节详细讲解

第六条原则:减少空洞和不严谨的描述

Section titled “第六条原则:减少空洞和不严谨的描述”
  • 问题示例:空洞描述如“给这个产品的描述应该是很短,就是呢只有几句话,不要太多了”(重复、空洞)
  • 改进:具体要求,如“用3到5句话组成的一个段落来描述此产品”

好示例(小样本,有示范):

从下面文本中提取关键词
文本1: Stripe 提供 API, Web 开发人员可以使用这些 API 将支付处理集成到他们的网站和移动应用程序中
关键词1: Stripe, 支付处理, API, Web 开发人员, 网站, 移动应用程序
### 文本2: {text}
关键字2:

差示例(零样本,无示范):

从下面文本中提取关键词
文本: {text}
关键字: