AI实战课程笔记-01

256 阅读9分钟

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文本生成模型的参数

  1. model:模型的类型。text-devinci-003(最强大的GPT-3版Text模型),其他早期版本有text-curie-003(比davinci小一些的GPT-3模型,性能较差,但速度更快、成本更低)、text-babbage-003(更小的GPT-3模型,用于需要快速响应和较低成本的任务)、text-ada-003(最小的GPT-3模型,通常用于大模型筛选或初步处理任务)。
  2. prompt:输入给模型的问题或指示,告诉模型我们要它做什么。
  3. temperature: 控制生成文本的随机性。值越低(接近0),生成的文本越确定;值越高(接近1),生成的文本越多样。
  4. max_tokens: 指定生成文本的最大长度。长度以Tokens为单位,一个Token可以是一个字、一个词或一个字符,取决于语言和模型。
  5. suffix:允许用户为模型生成的输出文本附加一个后缀。默认值为null,表示没有后缀。如果指定了一个字符串作为此参数的值,该字符串将被追加到每个输出文本的末尾。如果想让每次模型生成的文本都以某种特定格式或标记结尾,可以使用这个参数。
  6. top_p:使用核心抽样,模型将只考虑概率质量最高的Tokens。如果top_p设置为0.1意味着只有前10%的最有可能的Tokens会被考虑。
  7. n:决定了为每个提示生成多少个完整的输出。注意,该参数可能加速你的Token配额的消耗。
  8. stream:决定是否实时流式传输生成的Tokens。如果设置为true,Tokens将在生成时被发送。
  9. logprobs:表示要求API包括最有可能的Tokens的对数概率。如果logprobs设置为5,API将返回最有可能的5个Tokens的列表。
  10. echo:如果设置为true,除了生成的完成的内容外,还会回显提示。
  11. stop:该参数允许指定一个或多个序列,当模型遇到这些序列时,它会停止生产Tokens,返回的文本将不包含stop序列。
  12. presence_penalty:-2.0到2.0之间的数字。正值会惩罚已经出现在文本中的新Tokens,帮助模型更多地谈论新话题。
  13. frequency_penalty:-2.0到2.0之间的数字。正值会惩罚到目前为止文本中频繁出现的Tokens,减少模型重复相同内容的可能性。
  14. best_of:会在服务器端生成best_of个完整的输出,并返回其中最好的一个(即每个Token的对数概率最高的那个)。与参数n结合使用时,best_of决定了候选完成的数量,n决定了返回的数量。
  15. logit_bias:修改指定Tokens在完成中出现的可能性。接受一个JSON对象,该对象将Tokens映射到-100到100之间的偏置值。
  16. user:可选参数,表示你的最终用户的唯一标识符,帮助OpenAI监测和检测滥用。

使用Text模型(text-davinci-003),响应对象的主要字段

  1. id:响应的唯一标识符。
  2. object:表示该响应的对象类型。对于生成操作,这个字段通常为text_completion
  3. create:表示响应创建的时间。
  4. model:表示生成响应的模型名称。
  5. choices:列表,包含了模型生成的所有输出。除非指定了参数n,否则通常只包含一个条目,即索引[0]。有多个输出时,每个输出都是一个字典,其中包含以下字段:
    • text:模型生成的文本。
    • finish_reason:模型停止生成的原因,可能包括stop(遇到了停止标记)、length(达到了最大长度)或temperature(根据设定的temperature参数决定停止)。
  6. 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(可以是systemuserassistant)和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也都包含一个rolecontentrole可以是systemuserassistant,表示该消息的发送者,content则包含了消息的实际内容。 使用Chat模型响应对象的主要字段

  1. id:OpenAI给这个生成任务分配的唯一标识符。
  2. object:表示该响应的对象类型。chat.completion表示这是一个聊天模型的生成任务。
  3. create:表示响应创建的时间。
  4. model:表示生成任务的模型名称。
  5. choices:列表,包含了模型生成的所有条目。除非指定了参数n,否则通常只包含一个条目,即索引[0]。有多个输出时,每个输出都是一个字典,其中包含以下字段:
    • message:包含两个字段,分别是role(消息的角色,可以是systemuserassistant)和content(消息的内容)。
    • finish_reason:模型停止生成的原因,可能包括stop(遇到了停止标记)、length(达到了最大长度)或temperature(根据设定的temperature参数决定停止)。
    • index:表示这个选项在choice列表中索引位置。
  6. usage:提供关于文本生成过程的统计信息,包括prompt_tokens(提示的Token数量)、completion_tokens(生成的Token数量)、totak_tokens(总的Token数量)。

Chat模型和Text模型返回的响应结构类型,只有choices字段中的textmessage不同,我们可以通过解析该队形获取我们需要的信息。

print(response.choices[0].message.content)

表示打印响应中的message字段中content字段下的内容,即模型返回的消息的内容。