OpenAI API 使用指南

本文介绍了如何使用OpenAIAPI进行多轮对话,涉及模型选择、角色设定、对话流程以及利用文本嵌入进行相关文本检索,通过向量相似度实现高效的问题召回。还提供了如何在实际场景中查找关于感冒治疗的信息,特别是关于阿莫西林的适用性。
摘要由CSDN通过智能技术生成

 


接口调用

模型列表:https://platform.openai.com/docs/models

计费说明:https://openai.com/pricing

接口文档:https://platform.openai.com/docs/api-reference/introduction

淘宝上有卖,5元一个(sk-xxx)。

注意一些卖家坑,给的 OpenAI 可能没验证银行卡,导致一分钟只能回复 3 次。

api_key = '淘宝买的 (sk-xxx)'

from openai import OpenAI  # 从 openai 模块导入 OpenAI 类
client = OpenAI(api_key)  # 创建一个 OpenAI 客户端实例,使用提供的 api_key

# 使用指定的模型 "No models available" 来创建聊天完成任务
completion = client.chat.completions.create(
  model="gpt-3.5-turbo",  # 指定模型名
  messages=[
    {"role": "system", "content": "You are a helpful assistant."},  # 系统消息,设置助手的角色
    {"role": "user", "content": "Hello!"}  # 用户消息,开始对话
  ],
  stream=True  # 开启流模式,实时接收响应
)

# 循环遍历 completion 对象中的每个响应块
for chunk in completion:
  print(chunk.choices[0].delta)  # 打印每个响应块的内容

role 字段用来定义消息的发送者角色,具体包括三种选择:systemuser、和 assistant

  1. system(系统提示):

    • 用途:通常用于设置聊天的上下文或者提供系统级别的指示和配置信息。
    • 场景:比如在对话开始前,系统可以发送一条消息来设定对话的规则或者说明助手的功能。
  2. user(用户):

    • 用途:代表实际的用户输入,即用户向聊天系统提出的问题或者发起的对话内容。
    • 场景:用户的任何提问、命令或者交流都通过这个角色来表达,这是聊天流程中最常见的角色。
  3. assistant(智能助手):

    • 用途:代表智能助手的回复或者动作,是模型根据用户输入给出的响应。
    • 场景:在接收到用户的消息后,助手根据用户的需求提供信息、答案或者执行特定的任务。

这三种角色共同构成了聊天的完整流程,其中系统角色可用于初始化设置,用户角色表达用户需求,智能助手角色则是响应这些需求,完成交互。
 


多轮对话

from openai import OpenAI  # 从 openai 模块导入 OpenAI 类

api_key = '淘宝买的 (sk-xxx)'  # 定义API密钥
client = OpenAI(api_key)  # 创建一个 OpenAI 客户端实例,使用提供的 api_key

# 初始化消息历史,首先包含一个系统提示和一个用户的问候
messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Hello!"}
]

# 开启一个循环以处理多轮对话
while True:
    # 输出助手的最新回复(如果有)
    if messages[-1]['role'] == 'assistant':
        print('Assistant:', messages[-1]['content'])
    
    # 获取用户的输入
    user_input = input("User: ")
    # 将用户的新消息添加到消息历史中
    messages.append({"role": "user", "content": user_input})
    
    # 请求模型生成回答
    response = client.chat.completions.create(
        model="gpt-3.5-turbo",  # 使用指定的模型
        messages=messages,  # 提供到目前为止的对话历史
        stream=False  # 设置为False,因为我们每次都等待完整的回答
    )
    
    # 提取模型的回答并添加到消息历史中
    asst_content = response.choices[0].message['content']
    messages.append({"role": "assistant", "content": asst_content})

句子的文本嵌入:相关文本检索,根据向量相似度

接口文档:https://platform.openai.com/docs/api-reference/embeddings

可选模型:https://openai.com/blog/new-and-improved-embedding-model

api_key = '淘宝买的 (sk-xxx)'  # 定义API密钥

from openai import OpenAI                      # 从openai导入OpenAI
client = OpenAI(api_key)                             # 创建OpenAI客户端实例

res = client.embeddings.create(                     # 创建嵌入
  model="text-embedding-ada-002",             # 模型为"text-embedding-ada-002"
  input="The food was delicious and the waiter...",  # 输入文本
  encoding_format="float"                     # 编码格式为浮点数
)
print(  len(res.data[0].embedding)  )  

相似文本召回

假设你是一个用户,想要找到关于感冒治疗的最佳建议,尤其是关于阿莫西林的使用。

场景设定

用户查询:“感冒吃什么药效果好?可以吃阿莫西林吗?”

备选问题文本集合:

  • “什么叫感冒? / 感冒是一种什么病?”
  • “感冒一般是由什么引起的?/ 什么会导致感冒?”
  • “感冒会有哪些症状?/ 感冒有哪些临床表现?”
  • “感冒吃什么药好得快?/ 感冒怎么治?”
  • “得了感冒去医院挂什么科室的号?”
  • “感冒要怎么预防?”
  • “感冒换着有什么禁忌?/ 感冒不能吃什么?”
  • “感冒要做哪些检查?”
  • “感冒能治好吗?/ 感冒治好的几率有多大?”
  • “感冒的并发症有哪些?”
  • “阿莫西林能治那些病?”

实施步骤

  1. 查询语句向量化: 用户的查询被转化为一个数字向量,代表其语义内容。
  2. 备选文本向量化: 上述每个问题也被转化为数字向量。
  3. 计算欧式距离: 使用欧式距离公式计算查询向量与每个问题向量之间的距离。
  4. 选择最相似的文本: 根据计算出的距离,选择三个最接近的问题作为回答。

示例输出

假设在距离计算后,三个最相似的问题是:

  • “感冒吃什么药好得快?/ 感冒怎么治?”
  • “阿莫西林能治那些病?”
  • “感冒的并发症有哪些?”

当用户的查询处理完毕后,这三个问题的文本将被显示给用户,帮助他们获得关于感冒治疗的具体信息,尤其是关于是否可以使用阿莫西林的详细解答。

这个过程有效地将用户的自然语言查询转化为可以操作的数据(向量),通过数学方法找到最相关的回答,从而提供具体而有用的医疗建议。

from openai import OpenAI
import numpy as np

api_key = '淘宝买的 (sk-xxx)'  # 定义API密钥
# Create an instance of the OpenAI client
client = OpenAI(api_key)

# User query
query = '感冒吃什么药效果好?可以吃阿莫西林吗?'

# Vectorize the query
query_resp = client.embeddings.create(
    model="text-embedding-ada-002",
    input=query
)
query_vec = np.array(query_resp.data[0].embedding)

# List of potential questions (备选文本)
question_texts = [
    '什么叫感冒? / 感冒是一种什么病?',
    '感冒一般是由什么引起的?/ 什么会导致感冒?',
    '感冒会有哪些症状?/ 感冒有哪些临床表现?',
    '感冒吃什么药好得快?/ 感冒怎么治?',
    '得了感冒去医院挂什么科室的号?',
    '感冒要怎么预防?',
    '感冒换着有什么禁忌?/ 感冒不能吃什么?',
    '感冒要做哪些检查?',
    '感冒能治好吗?/ 感冒治好的几率有多大?',
    '感冒的并发症有哪些?',
    '阿莫西林能治那些病?'
]

# Vectorize the questions
question_resp = client.embeddings.create(
    model="text-embedding-ada-002",
    input=question_texts
)
question_vecs = [np.array(item.embedding) for item in question_resp.data]

# Calculate Euclidean distances
l2_distances = np.linalg.norm(query_vec - question_vecs, axis=1)

# Get indices of the three closest questions
closest_indices = np.argsort(l2_distances)[:3]

# Output the most similar questions
for idx in closest_indices:
    print(question_texts[idx])
### 回答1: 要申请 OpenAI API 访问权限,您需要前往 OpenAI 网站并创建一个账户。接下来,您可以通过联系 OpenAI 支持团队来询问如何获得 API 访问权限。他们将告诉您如何完成 API 申请并提供相关指导。 ### 回答2: 要申请访问OpenAI API,需要按照以下步骤进行: 首先,访问OpenAI官方网址并创建一个账号。在网站右上角点击“Sign Up”按钮,然后按照指示填写所需信息以创建账号。 完成账号注册后,登录OpenAI网站。在顶部导航栏中找到“API”选项并点击进入API页面。 在API页面中,你会看到关于访问权限的信息。点击“Get started”按钮以开始申请过程。 申请表格将会出现,填写相关信息,包括你的姓名、联系方式、公司名称等。同时,你还需要提供用途描述,说明你希望使用OpenAI API的具体项目和应用场景。 接下来,你需要加入等待名单。点击相应按钮,然后耐心等待审核。OpenAI将会根据需要的情况、资源可用性和其他因素来审核申请。 一旦你的申请获得批准,你将收到一封电子邮件通知。邮件中将包含有关如何开始使用API的详细指南和授权访问凭证。 请留意,由于API访问权限可能受到限制,OpenAI可能会根据需求进行筛选和优先级排定,使得不是所有的申请都能得到批准。因此,请提供详细和有说服力的申请材料,以提高获批准的机会。 总之,申请OpenAI API访问权限是一个相对简单的过程,只需要在官方网站上注册账号、填写申请表格并等待审核即可。希望这些信息能对你有所帮助。 ### 回答3: 要申请OpenAI API的访问权限,可以按照以下步骤进行: 1. 首先,访问OpenAI的官方网站并登录到您的OpenAI账户。 2. 在导航栏中找到“API”选项并点击进入API页面。 3. 在API页面,您将看到关于获取访问权限的信息和指导。请仔细阅读这些信息,以便您了解访问权限的申请流程和注意事项。 4. 接下来,您需要点击“加入等待列表”按钮以申请访问权限。这将把您的请求加入到OpenAI API的等待列表中,您将在有空余资源时获得访问权限。 5. 在等待期间,您还可以填写一份申请访问API的表格。在这个表格中,您需要提供一些必要的信息,例如您使用API的目的、您的背景和经验、您计划使用API的方式等等。这些信息将帮助OpenAI了解您的需求和资质。 6. 一旦您填写完表格并提交,您的申请将进一步被OpenAI审核。他们会考虑一系列因素,例如资源的可用性、您的使用案例的合适性、您的技术能力等来决定是否批准您的访问权限。 7. 如果您的申请被批准,您将会收到一封确认邮件,并且可以在OpenAI API页面中获取到访问密钥和相关的开发文档。 8. 最后,使用您的访问密钥可以通过OpenAIAPI进行开发和访问。 请注意,由于OpenAI API的访问权限是有限的,所以可能需要一定的等待时间来获得。同时,确保您的申请表格中提供的信息准确、详细和清晰,这将有助于提高获得访问权限的机会。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值