深了解 GPT-4和ChatGPT的API
学习OpenAI Playground,使你在编写代码之前更好地了解 模型。学习 OpenAI Python 库,这部分内容包括登录信息和⼀个简单的 Hello World ⽰例。然后学习创建和发送 API 请求的过程,并 了解如何处理 API 响应。这将确保你知道如何解释这些 API 返回的数据。 最后,本章还会介绍诸如安全最佳实践和成本管理等考虑因素。 根据业务类型和模型特点选择不同的模型,这些模型可通过API 作为服务使⽤(通过直接的 HTTP 调⽤或提供的库) 1.1 在 OpenAI Playground 中使⽤ GPT 模型 OpenAI Playground 是⼀个基于试用 Web 的平台,可以注册账号,登录后,编写提⽰词,选择模型,并轻松查看模型⽣成的输出。 1.2 使⽤ OpenAI Python 库 GTP运行大模型服务,对外提供API接口,用户获取OpenAI 账户和 API 密钥,调用接口;密钥赋予你调⽤ API ⽅法的权利;它将你的 API 调⽤与你的账户关联,⽤于计费。最好将其导出为环境变量。这样⼀来,你的应⽤程序就能够在不直接将密钥写⼊代码的情况下使⽤它。以下说明具体如何做。OpenAI Python 库会⾃动查找名为 OPENAI_API_KEY 的环境变量。 对于 Linux 或 macOS: # 设置当前会话的环境变量 OPENAI_API_KEY export OPENAI_API_KEY=sk-(...) # 检查是否设置了环境变量 echo $OPENAI_API_KEY 对于 Windows: # 设置当前会话的环境变量 OPENAI_API_KEY set OPENAI_API_KEY=sk-(...) # 检查是否设置了环境变量 echo %OPENAI_API_KEY% 1.3 helloworld程序 (1)安装openAI pip install openai (2)用python编写helloworld程序 import openai # 调⽤ OpenAI 的 ChatCompletion 端点 response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Hello World!"}], ) # 提取响应 print(response["choices"][0]["message"]["content"]) (3)或者直接在cmd中输入如下命令 openai api chat_completions.create -m gpt-3.5-turbo -g user "Hello world" (4)加载key的方法 OpenAI Python 库会⾃动查找名为 OPENAI_API_KEY 的环境变量。 你可以使⽤以下代码将 openai 模块指向包含密钥的⽂件: # 从⽂件加载 API 密钥 openai.api_key_path = 你还可以使⽤以下⽅法在代码中⼿动设置 API 密钥: # 加载 API 密钥 openai.api_key = os.getenv("OPENAI_API_KEY") 1.4 ChatCompletion的create ⽅法入参 1.4.1 必选参数 ChatCompletion 端点及其有多个输⼊参数,但只有两 个是必需的,如表 2-1 所⽰。 添加图片注释,不超过 140 字(可选) 实例 import openai # 对 GPT-3.5 Turbo 来说,端点是 ChatCompletion openai.ChatCompletion.create( # 对 GPT-3.5 Turbo 来说,模型是 gpt-3.5-turbo model="gpt-3.5-turbo", # 消息列表形式的对话 messages=[ {"role": "system", "content": "You are a helpful teacher."}, { "role": "user", "content": "Are there other measures than time complexity for an algorithm?", }, { "role": "assistant", "content": "Yes, there are other measures besides time complexity for an algorithm, such as space complexity.", }, {"role": "user", "content": "What is it?"}, ], ) 1.4.2 可选参数 添加图片注释,不超过 140 字(可选) 1.5 用GTP创建一个查询数据库的应用 例如我开了一家商店,需要查询商品的价格; 添加图片注释,不超过 140 字(可选) (1) 定义数据库查询函数 import sqlite3 def find_product (query_SQL): # 连接到SQLite数据库 conn = sqlite3.connect(db_path) cursor = conn.cursor() # 执行查询 cursor.execute(query_SQL) # 获取查询结果 results = cursor.fetchall() # 关闭连接 cursor.close() conn.close() return results (2) 接下来定义函数的规范 函数规范的作用是将查询数据库函数和大模型做一个关联,定义了大模型调用这个函数的功能和输入参数; # 函数定义 functions = [ { "name": "find_product", "description": "Get a list of products from a sql query", "parameters": { "type": "object", "properties": { "sql_query": { "type": "string", "description": "A SQL query", } }, "required": ["sql_query"], }, } ] (3)调用大模型将用户语言转为SQL # ⽰例问题 user_question = "I need the top 2 products where the price is less than 2.00" messages = [{"role": "user", "content": user_question}] # 使⽤函数定义调⽤ ChatCompletion 端点 response = openai.ChatCompletion.create( model="gpt-3.5-turbo-0613", messages=messages, functions=functions ) response_message = response["choices"][0]["message"] messages.append(response_message) (4)将查询结果转化为自然语言 # 调⽤函数 function_args = json.loads( response_message["function_call"]["arguments"] ) products = find_product(function_args.get("sql_query")) # 将函数的响应附加到消息中 messages.append( { "role": "function", "name": function_name, "content": json.dumps(products), } ) # 将函数的响应格式化为⾃然语⾔ response = openai.ChatCompletion.create( model="gpt-3.5-turbo-0613", messages=messages, ) 1.6 安全和隐私 ⽤户的输⼊将被保留 30 天,⽤于监控和 使⽤合规检查⽬的。这意味着 OpenAI 员⼯和专门的第三⽅承包商可能会访 问你的 API 数据。 请勿通过 OpenAI 的端点发送个⼈信息或密码等敏感数据。 1.7 其他open Ai功能 1.7.1 嵌入 将嵌⼊视为⼀种复杂的语⾔解释器,它将丰富的词汇和句⼦转换为 ML 模型能够轻松理解的数值语⾔。嵌⼊的⼀个突出特点是,它能够保持语义相似性。也就是说,含义相近的词语或短语在数值空间中更接近。嵌⼊的原则是以某种⽅式有意义地表⽰⽂本字符串,以捕捉其语义相似性。由于模型依赖数学函数,因此它需要数值输⼊来处理信息。然⽽,许多元 素(如单词和标记)本质上并不是数值。为了解决这个问题,我们⽤嵌⼊ 将这些单词标记转化为数值向量,以数值⽅式表⽰这些概念,OpenAI提供了将⽂本转换为数值向量的模型。用这个模型先将输⼊⽂本转化为数字向量,然后将该向量作为模型的输⼊。嵌⼊具有这样的属性:如果两段⽂本具有相似的含义,那么它们的向量表 ⽰也是相似的。 result = openai.Embedding.create( model="text-embedding-ada-002", input="your text" ) 通过以下⽅式访问嵌⼊: result['data']['embedding'] 嵌⼊是⼀个向量,即⼀个浮点数数组。 添加图片注释,不超过 140 字(可选) 1.7.2 内容审核模型 OpenAI 提供了⼀个模型来检查内容是否符合使用规则。识别用户输入对种族、性别、⺠族、宗教、国籍、残疾或种姓的仇恨。对特定群体的暴⼒⾏为或严重伤害。内容涉及⾃残⾏为。内容涉及性⾏为,涉及 18 岁以下的未成年⼈。内容涉及崇尚暴⼒或者给他⼈造成痛苦或羞辱。内容涉及详尽地描绘死亡、暴⼒或严重的⾝体伤害。 (1)审核模型接口 import openai # 调⽤ Moderation 端点,并使⽤ text-moderation-latest 模型 response = openai.Moderation.create( model="text-moderation-latest", input="I want to kill my neighbor.", ) (2)模型审核结果 { "id" : "modr-7AftIJg7L5jqGIsbc7NutObH4j0Ig" , "model" : "text-moderation-004" , "results" : [ { "categories" : { "hate" : false , "hate/threatening" : false , "self-harm" : false , "sexual" : false , "sexual/minors" : false , "violence" : true , "violence/graphic" : false }, "category_scores" : { "hate" : 0.0400671623647213 , "hate/threatening" : 0.000003671687863970874 , "self-harm" : 0.0000013143378509994363 , "sexual" : 0.0000005508050548996835 , "sexual/minors" : 0.00000011862029225540027 , "violence": 0.9461417198181152, "violence/graphic" : 0.000001463699845771771 }, "flagged" : true } ] } (3)输出字段说明 添加图片注释,不超过 140 字(可选)