Openai api调用的python实现和JavaScript前端实现

写在2024.05.29:
标签:openai api,python,javascript

一、获取api-eky

访问OpenAI的官方API网站并登录(https://platform.openai.com/api-keys)
在这里插入图片描述
拿到sk-xxx开头的api之后就可以开始下一步了,
*注意:网络问题的解决
对于无法直接访问opeai服务器的情况,建议采用以下两种建议的解决方案:

  1. 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怎么使用?");
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
chatgtp接口的调用可以分为前端代码和后端代码两部分。 前端代码示例: ``` #!/usr/bin/python # -*- coding: UTF-8 -*- import gradio as gr import openai import time # 定义 OpenAI API key openai.api_key = "请输入你的key" # 定义模型 ID model_engine = "text-davinci-003" # 定义对话历史记录 conversation_history = [] # 定义聊天函数 def chat(prompt): # 获取 OpenAI 的 GPT 模型的响应 response = openai.Completion.create( # 输入需要使用的引擎 engine=model_engine, # 输入发给openai的内容 prompt=prompt, temperature=0.7, # 这个模型最大4096个token好像,可以设置大一点 max_tokens=3400, n=1, stop=None, frequency_penalty=0, presence_penalty=0 ) message = response.choices[0].text.strip() # 将聊天历史记录添加到会话历史记录中 conversation_history.append(message) # 返回模型的文本响应 return message # 输出接口 def greet(name): response = chat(name) time.sleep(1) return "ChatGtp:" + response if __name__ == '__main__': iface = gr.Interface( fn=greet, inputs=[gr.Textbox(placeholder='请输入您想问chatgtp的问题', label="您想问ChatGtp什么问题?", lines=3)], outputs=[gr.Textbox(lines=15)] ) iface.launch(share=True) ``` 后端代码示例: ``` import openai import time # 定义 OpenAI API key openai.api_key = "请在此输入你的key" # 定义模型 ID model_engine = "text-davinci-003" # 定义对话历史记录 conversation_history = [] # 定义聊天函数 def chat(prompt): # 获取 OpenAI 的 GPT 模型的响应 response = openai.Completion.create( # 输入需要使用的引擎 engine=model_engine, # 输入发给openai的内容 prompt=prompt, temperature=0.7, # 这个模型最大4096个token好像,可以设置大一点 max_tokens=3400, n=1, stop=None, frequency_penalty=0, presence_penalty=0 ) message = response.choices[0].text.strip() # 将聊天历史记录添加到会话历史记录中 conversation_history.append(message) # 返回模型的文本响应 return message # 测试聊天函数 while True: # 获取用户输入的信息 user_input = input("请输入问题: ") # 结束对话的条件 if user_input.lower() == "exit": break # 聊天并打印模型的响应 response = chat(user_input) print("ChatGPT: " + response) time.sleep(1) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值