当前位置: 首页 > news >正文

【动手学大模型开发】使用 LLM API:ChatGPT

目录

1. 使用 ChatGPT

1.1 API 申请指引

获取并配置 OpenAI API key

1.2 调用 OpenAI API


本章节主要介绍四种大语言模型(ChatGPTAPI、文心一言、讯飞星火、智谱 GLM)的 API 申请指引和 Python 版本的原生 API 调用方法,读者按照实际情况选择一种自己可以申请的 API 进行阅读学习即可。如果你需要在 LangChain 中使用 LLM,可以参照LLM 接入 LangChain中的调用方式。

  • ChatGPT:推荐可科学上网的读者使用;
  • 文心一言:当前无赠送新用户 tokens 的活动,推荐已有文心 tokens 额度用户和付费用户使用;
  • 讯飞星火:新用户赠送 tokens,推荐免费用户使用;
  • 智谱 GLM:新用户赠送 tokens,推荐免费用户使用。

1. 使用 ChatGPT

ChatGPT,发布于 2022 年 11 月,是目前火热出圈的大语言模型(Large Language Model,LLM)的代表产品。在 2022 年底,也正是 ChatGPT 的惊人表现引发了 LLM 的热潮。时至目前,由 OpenAI 发布的 GPT-4 仍然是 LLM 性能上限的代表,ChatGPT 也仍然是目前使用人数最多、使用热度最大、最具发展潜力的 LLM 产品。事实上,在圈外人看来,ChatGPT 即是 LLM 的代称。

OpenAI 除发布了免费的 Web 端产品外,也提供了多种 ChatGPT API,支持开发者通过 Python 或 Request 请求来调用 ChatGPT,向自己的服务中嵌入 LLM 的强大能力。可选择的主要模型包括 ChatGPT-3.5 和 GPT-4,并且每个模型也存在多个上下文版本,例如 ChatGPT-3.5 就有最原始的 4K 上下文长度的模型,也有 16K 上下文长度的模型 gpt-turbo-16k-0613。

1.1 API 申请指引

获取并配置 OpenAI API key

OpenAI API 调用服务是付费的,每一个开发者都需要首先获取并配置 OpenAI API key,才能在自己构建的应用中访问 ChatGPT。我们将在这部分简述如何获取并配置 OpenAI API key。

在获取 OpenAI API key 之前我们需要在OpenAI 官网注册一个账号。这里假设我们已经有了 OpenAI 账号,在OpenAI 官网登录,登录后如下图所示:

我们选择 API,然后点击左侧边栏的 API keys,如下图所示:

点击 Create new secret key 按钮创建 OpenAI API key ,我们将创建好的 OpenAI API key 复制以此形式 OPENAI_API_KEY="sk-..." 保存到 .env 文件中,并将 .env 文件保存在项目根目录下。

下面是读取 .env 文件的代码:

import os
from dotenv import load_dotenv, find_dotenv# 读取本地/项目的环境变量。# find_dotenv() 寻找并定位 .env 文件的路径
# load_dotenv() 读取该 .env 文件,并将其中的环境变量加载到当前的运行环境中  
# 如果你设置的是全局的环境变量,这行代码则没有任何作用。
_ = load_dotenv(find_dotenv())# 如果你需要通过代理端口访问,还需要做如下配置
os.environ['HTTPS_PROXY'] = 'http://127.0.0.1:7890'
os.environ["HTTP_PROXY"] = 'http://127.0.0.1:7890'Copy to clipboardErrorCopied

1.2 调用 OpenAI API

调用 ChatGPT 需要使用 ChatCompletion API,该 API 提供了 ChatGPT 系列模型的调用,包括 ChatGPT-3.5,GPT-4 等。

ChatCompletion API 调用方法如下:

from openai import OpenAIclient = OpenAI(# This is the default and can be omittedapi_key=os.environ.get("OPENAI_API_KEY"),
)# 导入所需库
# 注意,此处我们假设你已根据上文配置了 OpenAI API Key,如没有将访问失败
completion = client.chat.completions.create(# 调用模型:ChatGPT-3.5model="gpt-3.5-turbo",# messages 是对话列表messages=[{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello!"}]
)Copy to clipboardErrorCopied

调用该 API 会返回一个 ChatCompletion 对象,其中包括了回答文本、创建时间、id 等属性。我们一般需要的是回答文本,也就是回答对象中的 content 信息。

completionCopy to clipboardErrorCopied
ChatCompletion(id='chatcmpl-9FA5aO72SD9X0XTpc1HCNZkSFCf7C', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='Hello! How can I assist you today?', role='assistant', function_call=None, tool_calls=None))], created=1713400730, model='gpt-3.5-turbo-0125', object='chat.completion', system_fingerprint='fp_c2295e73ad', usage=CompletionUsage(completion_tokens=9, prompt_tokens=19, total_tokens=28))Copy to clipboardErrorCopied
print(completion.choices[0].message.content)Copy to clipboardErrorCopied
Hello! How can I assist you today?Copy to clipboardErrorCopied

此处我们详细介绍调用 API 常会用到的几个参数:

· model,即调用的模型,一般取值包括“gpt-3.5-turbo”(ChatGPT-3.5)、“gpt-3.5-turbo-16k-0613”(ChatGPT-3.5 16K 版本)、“gpt-4”(ChatGPT-4)。注意,不同模型的成本是不一样的。· messages,即我们的 prompt。ChatCompletion 的 messages 需要传入一个列表,列表中包括多个不同角色的 prompt。我们可以选择的角色一般包括 system:即前文中提到的 system prompt;user:用户输入的 prompt;assistant:助手,一般是模型历史回复,作为提供给模型的参考内容。· temperature,温度。即前文中提到的 Temperature 系数。· max_tokens,最大 token 数,即模型输出的最大 token 数。OpenAI 计算 token 数是合并计算 Prompt 和 Completion 的总 token 数,要求总 token 数不能超过模型上限(如默认模型 token 上限为 4096)。因此,如果输入的 prompt 较长,需要设置较大的 max_token 值,否则会报错超出限制长度。Copy to clipboardErrorCopied

OpenAI 提供了充分的自定义空间,支持我们通过自定义 prompt 来提升模型回答效果,如下是一个简单的封装 OpenAI 接口的函数,支持我们直接传入 prompt 并获得模型的输出:

from openai import OpenAIclient = OpenAI(# This is the default and can be omittedapi_key=os.environ.get("OPENAI_API_KEY"),
)def gen_gpt_messages(prompt):'''构造 GPT 模型请求参数 messages请求参数:prompt: 对应的用户提示词'''messages = [{"role": "user", "content": prompt}]return messagesdef get_completion(prompt, model="gpt-3.5-turbo", temperature = 0):'''获取 GPT 模型调用结果请求参数:prompt: 对应的提示词model: 调用的模型,默认为 gpt-3.5-turbo,也可以按需选择 gpt-4 等其他模型temperature: 模型输出的温度系数,控制输出的随机程度,取值范围是 0~2。温度系数越低,输出内容越一致。'''response = client.chat.completions.create(model=model,messages=gen_gpt_messages(prompt),temperature=temperature,)if len(response.choices) > 0:return response.choices[0].message.contentreturn "generate answer error"Copy to clipboardErrorCopied
get_completion("你好")Copy to clipboardErrorCopied
'你好!有什么可以帮助你的吗?'Copy to clipboardErrorCopied

在上述函数中,我们封装了 messages 的细节,仅使用 user prompt 来实现调用。在简单场景中,该函数足够满足使用需求。

相关文章:

  • 使用Curl进行本地MinIO的操作
  • 30天通过软考高项-第六天
  • MTKAndroid12-13-开机应用自启功能实现
  • Vue 对话框出现时,为什么滚动鼠标还是能滚动底层元素
  • Spring系列四:AOP切面编程第三部分
  • 软件工程(一):黑盒测试与白盒测试
  • 如何在WordPress网站中设置双重验证,提升安全性
  • 打火机检测数据集VOC+YOLO格式925张1类别
  • 案例篇:如何用tcpdump和Wireshark识别潜在威胁
  • Finish技术生态计划: FinishRpc
  • 无线采发仪多通道 在结构健康与地质灾害监测中的应用 VS-Box振弦、温度及多信号采发仪
  • 【Vue.js】Vue3父子组件数据通信案例(基础案例)
  • Vue组件开发进阶:从通信原理到DOM异步更新实战
  • 【北京】昌平区某附小v3700存储双控故障维修案例
  • leetcode刷题日记——两数相加
  • C++20 小语法
  • Dockerfile 编写根据需求阶段而出现
  • 【Redis】基础4:作为分布式锁
  • 克隆/备份后的虚拟机无法获取IP地址(FQA)
  • 微软编程一小时:探索 AI 世界
  • 上海74岁老人宜春旅游时救起落水儿童,“小孩在挣扎容不得多想”
  • 王毅会见泰国外长玛里:坚决有力打击电诈等跨境犯罪
  • 公交公司须关注新出行需求:“单车巴士”能否常态化
  • 高璞任中国一汽党委常委、副总经理
  • 特朗普承认“24小时结束俄乌冲突”是玩笑:大家都知道
  • 铜钴巨头洛阳钼业一季度净利润同比大增九成,最新宣布超30亿元收购黄金资产