01_TextModel.py
import os
from openai import OpenAI
- 导入了Python的标准库
os库,用于访问操作系统的环境变量 - 从
openai库中导入了OpenAI类。openai库是OpenAI提供的Python SDK,用于与OpenAI的API进行交互。OpenAI类是这个SDK的核心,它提供了各种方法来调用OpenAI的API,例如文本生成、代码补全、图像生成等。
Python SDK(Software Development Kit,软件开发工具包)是一组用于开发Python应用程序的工具、库和文档的集合。它提供了一系列的API(Application Programming Interface,应用程序编程接口)和工具,使得开发者可以更方便地使用特定的软件或服务。在Python中,SDK通常是由第三方开发者或组织提供的,用于与他们的产品或服务进行交互。
#os.environ["OPENAI_API_KEY"] = '你的OpenAI API Key'
#os.environ["OPENAI_BASE_URL"] = 'OpenAI 的 API URL'
这两行代码设置了OpenAI的API密钥和基础URL。API密钥用于认证,而基础URL指定了API的访问端点。 本课程的演示使用的是内置在环境变量中的模型,跳过了设置这些参数的步骤。
client = OpenAI()
这里创建了一个OpenAI客户端实例,用于后续与OpenAI的API进行交互。
response = client.completions.create(
model=os.environ.get("LLM_MODELEND"),
temperature=0.5,
max_tokens=100,
prompt="请给我的花店起个名",
)
client.completions.create方法用于创建一个文本补全请求。这个方法会调用OpenAI的Completions API,该API使用先进的语言模型(如GPT-3)来生成文本。
由于OpenAI的Completions API已经在2023年7月完成最后一次更新并废弃,该接口仅适用于早期版本的少量模型("gpt-3.5-turbo-instruct", "davinci-002", "babbage-002")。 相关功能可以被ChatCompletion接口替代。
model: 指定要使用的模型。在这个例子中,模型是通过环境变量LLM_MODELEND获取的。这里获取的是内置豆包API的模型,因为Doubao API兼容最新版本的API调用,对废弃接口不再支持。所以本文件代码仅做示意,如果想要运行,需要接入上述早期版本的模型。temperature: 控制生成文本的随机性。值越低,生成的文本越确定;值越高,生成的文本越多样。在这个例子中,temperature设置为0.5,这是一个中等的随机性水平。max_tokens: 指定生成文本的最大长度。长度以Tokens为单位,一个Token可以是一个字、一个词或一个字符,取决于语言和模型。prompt: 指定生成文本的起始点。在这个例子中,提示是 "请给我的花店起个名",这是一个请求,希望模型能够生成一个合适的花店名字。- 方法执行后,返回一个
response对象,其中模型生成的输出和其他一些信息,也包含了生成的文本。这个响应对象是一个字典结构,包含多个字段。
OpenAI文本生成模型的参数
model:模型的类型。text-devinci-003(最强大的GPT-3版Text模型),其他早期版本有text-curie-003(比davinci小一些的GPT-3模型,性能较差,但速度更快、成本更低)、text-babbage-003(更小的GPT-3模型,用于需要快速响应和较低成本的任务)、text-ada-003(最小的GPT-3模型,通常用于大模型筛选或初步处理任务)。prompt:输入给模型的问题或指示,告诉模型我们要它做什么。temperature: 控制生成文本的随机性。值越低(接近0),生成的文本越确定;值越高(接近1),生成的文本越多样。max_tokens: 指定生成文本的最大长度。长度以Tokens为单位,一个Token可以是一个字、一个词或一个字符,取决于语言和模型。suffix:允许用户为模型生成的输出文本附加一个后缀。默认值为null,表示没有后缀。如果指定了一个字符串作为此参数的值,该字符串将被追加到每个输出文本的末尾。如果想让每次模型生成的文本都以某种特定格式或标记结尾,可以使用这个参数。top_p:使用核心抽样,模型将只考虑概率质量最高的Tokens。如果top_p设置为0.1意味着只有前10%的最有可能的Tokens会被考虑。n:决定了为每个提示生成多少个完整的输出。注意,该参数可能加速你的Token配额的消耗。stream:决定是否实时流式传输生成的Tokens。如果设置为true,Tokens将在生成时被发送。logprobs:表示要求API包括最有可能的Tokens的对数概率。如果logprobs设置为5,API将返回最有可能的5个Tokens的列表。echo:如果设置为true,除了生成的完成的内容外,还会回显提示。stop:该参数允许指定一个或多个序列,当模型遇到这些序列时,它会停止生产Tokens,返回的文本将不包含stop序列。presence_penalty:-2.0到2.0之间的数字。正值会惩罚已经出现在文本中的新Tokens,帮助模型更多地谈论新话题。frequency_penalty:-2.0到2.0之间的数字。正值会惩罚到目前为止文本中频繁出现的Tokens,减少模型重复相同内容的可能性。best_of:会在服务器端生成best_of个完整的输出,并返回其中最好的一个(即每个Token的对数概率最高的那个)。与参数n结合使用时,best_of决定了候选完成的数量,n决定了返回的数量。logit_bias:修改指定Tokens在完成中出现的可能性。接受一个JSON对象,该对象将Tokens映射到-100到100之间的偏置值。user:可选参数,表示你的最终用户的唯一标识符,帮助OpenAI监测和检测滥用。
使用Text模型(text-davinci-003),响应对象的主要字段
id:响应的唯一标识符。object:表示该响应的对象类型。对于生成操作,这个字段通常为text_completion。create:表示响应创建的时间。model:表示生成响应的模型名称。choices:列表,包含了模型生成的所有输出。除非指定了参数n,否则通常只包含一个条目,即索引[0]。有多个输出时,每个输出都是一个字典,其中包含以下字段:text:模型生成的文本。finish_reason:模型停止生成的原因,可能包括stop(遇到了停止标记)、length(达到了最大长度)或temperature(根据设定的temperature参数决定停止)。
usage:提供关于文本生成过程的统计信息,包括prompt_tokens(提示的Token数量)、completion_tokens(生成的Token数量)、totak_tokens(总的Token数量)。
print(response.choices[0].text.strip())
response.choices[0]: 这部分代码表示从response变量中获取choices列表的第一个元素。response响应对象中包含了一个叫做choices的列表,列表中包含了API生成的多个文本补全选择项。通过response.choices[0],我们访问了第一个选择项。.text: 这是访问选择项的文本内容的方式。每个选择项都有一个text属性,用来存储选择项的文本信息,即API生成的文本补全结果。通过.text,我们获取了选择项的文本内容。.strip(): 这是一个字符串方法,用于去除字符串两侧的空格(包括换行符、制表符等空白字符)。
02_ChatModel.py
OpenAI文本生成模型-- Chat模型特有参数
messages: messages参数是一个列表,包含了多个消息。每个消息都有一个role(可以是system、user或assistant)和content(消息的内容)。系统消息设定了对话的背景,然后用户消息提出了具体请求。模型的任务是基于这些消息来生成回复。system:系统消息主要用于设定对话的背景或上下文。这可以帮助模型理解它在对话中的角色和任务。例如,你可以通过系统消息来设定一个场景,让模型知道它是在扮演一个医生、律师或者一个知识丰富的AI助手。系统消息通常在对话开始时给出。user:用户消息是从用户或人类角色发出的。它们通常包含了用户想要模型回答或完成的请求。用户消息可以是一个问题、一段话,或者任何其他用户希望模型响应的内容。assistant:助手消息是模型的回复。例如,在你使用API发送多轮对话中新的对话请求时,可以通过助手消息提供先前对话的上下文。然而,请注意在对话的最后一条消息应始终为用户消息,因为模型总是要回应最后这条用户消息。
response = client.chat.completions.create(
model=os.environ.get("LLM_MODELEND"),
messages=[
{"role": "system", "content": "You are a creative AI."},
{"role": "user", "content": "请给我的花店起个名"},
],
temperature=0.8,
max_tokens=600,
)
根据这段代码,系统消息设定的背景是“你是一个有创造力的AI”,用户消息提出的请求是“请给我的花店起个名”。
在使用Chat模型生成内容后,返回的响应,也就是response会包含一个或多个choices。
每个choices都包含一个message。每个message也都包含一个role和content。role可以是system、user或assistant,表示该消息的发送者,content则包含了消息的实际内容。
使用Chat模型响应对象的主要字段
id:OpenAI给这个生成任务分配的唯一标识符。object:表示该响应的对象类型。chat.completion表示这是一个聊天模型的生成任务。create:表示响应创建的时间。model:表示生成任务的模型名称。choices:列表,包含了模型生成的所有条目。除非指定了参数n,否则通常只包含一个条目,即索引[0]。有多个输出时,每个输出都是一个字典,其中包含以下字段:message:包含两个字段,分别是role(消息的角色,可以是system、user或assistant)和content(消息的内容)。finish_reason:模型停止生成的原因,可能包括stop(遇到了停止标记)、length(达到了最大长度)或temperature(根据设定的temperature参数决定停止)。index:表示这个选项在choice列表中索引位置。
usage:提供关于文本生成过程的统计信息,包括prompt_tokens(提示的Token数量)、completion_tokens(生成的Token数量)、totak_tokens(总的Token数量)。
Chat模型和Text模型返回的响应结构类型,只有choices字段中的text和message不同,我们可以通过解析该队形获取我们需要的信息。
print(response.choices[0].message.content)
表示打印响应中的message字段中content字段下的内容,即模型返回的消息的内容。