写在2024.05.29:
标签:openai api,python,javascript
一、获取api-eky
访问OpenAI的官方API网站并登录(https://platform.openai.com/api-keys)
拿到sk-xxx开头的api之后就可以开始下一步了,
*注意:网络问题的解决
对于无法直接访问opeai服务器的情况,建议采用以下两种建议的解决方案:
- 1.通过云函数实现代理
2.直接采用国内的大模型厂商的api,像kimi和deepseek都是支持openai风格的调用的*
二、python的实现
1.openai库的安装(是openai不是openapi)
$pip3 install openai
以下是python的代码:
from openai import OpenAI
#定义一个函数,输入是prompt,输出是gpt返回的的response.message中的content
def gpt_completions(prompt):
#如果是其他大模型,替换这里的url、modely和key
url = "https://api.openai.com/v1"
ai_model="gpt-3.5-turbo"
Key="sk-替换成你自己的apikey"
#创建连接示例
client = OpenAI(api_key=API,base_url = url)
message_send=[{"role": "system", "content": ""},{"role": "user", "content": prompt}]
completion = client.chat.completions.create(
model=ai_model,
messages=message_send
)
message = completion.choices[0].message.content
return message
result=gpt_completions("你好")
print("gpt-返回",result)
注意:
不同的大模型提供的接口中,url、model和key都是不同的
新版的openai库和旧版的调用方式是不同的,用gpt3.5给出的调用方式可能是旧版的
二、python的流式输出实现
上面的代码虽然可以运行,但是服务器会在完全生成好了之后才返回结果
在一些长文本输出的情况下速度太慢,流式输出可以很好地解决问题
def gpt_completions_stream(prompt):
url = "https://api.openai.com/v1"
ai_model="gpt-3.5-turbo"
Key="sk-替换成你自己的apikey"
client = OpenAI(api_key=API,base_url = proxy_url)
message_send=[{"role": "system", "content": ""},{"role": "user", "content": prompt}]
stream = client.chat.completions.create(
model=ai_model,
messages=message_send,
#通过添加流式输出参数,使返回的对象变成流式对象
stream=True
)
#输出流式对象
for chunk in stream:
if chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end="")
三、JavaScript的流式输出实现
const axios = require('axios');
async function gptCompletionsStream(prompt) {
const url = "https://api.openai.com/v1/chat/completions";
const aiModel = "gpt-3.5-turbo";
const apiKey = "替换成你自己的apikey";
const headers = {
"Authorization": `Bearer ${apiKey}`,
"Content-Type": "application/json"
};
const data = {
model: aiModel,
messages: [
{"role": "system", "content": ""},
{"role": "user", "content": prompt}
],
stream: true
};
try {
const response = await axios.post(url, data, {
headers: headers,
responseType: 'stream'
});
response.data.on('data', (chunk) => {
const lines = chunk.toString().split('\n').filter(line => line.trim() !== '');
for (let line of lines) {
const parsedLine = JSON.parse(line);
if (parsedLine.choices && parsedLine.choices[0].delta && parsedLine.choices[0].delta.content) {
process.stdout.write(parsedLine.choices[0].delta.content);
}
}
});
response.data.on('end', () => {
console.log("\nStream ended.");
});
} catch (error) {
console.error("Error in streaming completion:", error.response ? error.response.data : error.message);
}
}
// Example usage
gptCompletionsStream("请问OpenAI的API怎么使用?");