手动发送HTTP请求到API端点
使用Python的requests
库(或其他HTTP客户端库)来构建和发送HTTP POST请求。它不使用openai
客户端库,而是直接发送HTTP请求到OpenAI的聊天完成API端点
假设我们要创建一个简单的聊天机器人,它能够回答用户关于NBA球员的问题。我们将使用gpt-3.5-turbo
模型来生成聊天响应。
- import requests
- import json
-
- # 设置OpenAI API的密钥
- api_key = '你的OpenAI API密钥'
- api_endpoint = "https://api.openai.com/v1/chat/completions"
-
- # 定义聊天消息,包括系统消息和用户消息
- messages = [
- {"role": "system", "content": "你是一个NBA知识助手,能够回答关于NBA球员的问题。"},
- {"role": "user", "content": "谁是NBA历史上最伟大的球员?"}
- ]
-
- # 构建请求头,包含API密钥和Content-Type
- headers = {
- "Authorization": f"Bearer {api_key}",
- "Content-Type": "application/json"
- }
-
- # 构建请求体,包含模型和消息
- payload = {
- "model": "gpt-3.5-turbo",
- "messages": messages
- }
-
- # 发送HTTP POST请求到API端点
- response = requests.post(api_endpoint, headers=headers, data=json.dumps(payload))
-
- # 检查响应状态码并提取聊天响应
- if response.status_code == 200:
- # 解析JSON响应
- response_data = response.json()
- # 提取并打印生成的聊天响应
- print(response_data['choices'][0]['message']['content'])
- else:
- # 打印错误信息
- print(f"Error: {response.status_code} - {response.text}")
用OpenAI客户发送请求到API端点
上述程序改为:
- import openai
-
- # 设置OpenAI API的密钥(注意在实际使用中保护你的密钥)
- openai.api_key = '你的OpenAI API密钥'
-
- # 定义聊天消息,包括系统消息、用户消息和(可能的)助手消息
- messages = [
- {"role": "system", "content": "你是一个NBA知识助手,能够回答关于NBA球员的问题。"},
- {"role": "user", "content": "谁是NBA历史上最伟大的球员?"}
- ]
-
- # 调用chat.completions.create方法创建聊天完成请求
- response = openai.ChatCompletion.create(
- model="gpt-3.5-turbo", # 指定GPT模型
- messages=messages # 提供聊天消息
- )
-
- # 提取并打印生成的聊天响应
- print(response.choices[0].message.content)
使用异步客户端进行 API 调用
- import asyncio
-
- async def main():
- client = openai.AsyncClient()
- response = await client.completions.create(
- engine="davinci",
- prompt="Once upon a time",
- max_tokens=150,
- n=1,
- stop=None,
- temperature=0.7,
- )
- print(response.choices[0].text.strip())
-
- # 运行异步主函数
- asyncio.run(main())
使用同步客户端进行 API 调用
可用如下两种方法:
(1) 使用openai.Client():
将上述的 openai.AsyncClient()改为openai.Client(),对应的句子作相应修改即可。
(2)直接使用openai
模块的方法(见前述第2个例子),因为通常不需要显式创建客户端实例