一、简介

1、什么是OpenAI

OpenAI是一个非营利研究公司,致力于研究人工智能领域。他们的GPT模型可用于生成基于文本的图像,包括自然语言描述的图像、语音转换为图像等。

在本文中,我们将使用OpenAI的API来生成文字描述

二、相关技术介绍

1、深度学习模型

深度学习是一种基于人工神经网络,对数据进行建模和学习的机器学习方法。

它的主要优势在于,可以对大量的复杂数据进行训练和学习,以实现有意义的预测和决策。在图像生成方面,深度学习模型被广泛应用。

2、GAN模型

GAN(Generative Adversarial Networks)是一种深度学习模型,它由生成器和判别器两部分组成。判别器用于判断输入的数据是否真实,生成器用于生成尽可能逼真的数据。这种模型可以用于图像生成、视频生成、文本生成等领域。

3、TensorFlow框架

TensorFlow是谷歌开源的深度学习框架,它提供了丰富的工具和API,可以帮助开发人员更轻松地实现深度学习模型。在本文中,我们将使用TensorFlow框架来训练和部署我们的模型。

2、搭建OpenAI API环境

要开始使用OpenAI API,您需要注册以获取API密钥,并将其与API绑定。注册OpenAI账户并创建API密钥是非常简单的,只需要遵循官方文档中提供的指导即可。

获取API key

前往地址 https://platform.openai.com/account/api-keys
登录账号,然后获取key

3、配置API参数

我们可能需要提供以下参数:

  1. text:输入的文本内容

  2. model:生成图像的模型名称

  3. prompts:附加提示文本,有助于增加图像的多样性

  4. temperature:随机性的强度,影响样本的多样性。温度越高,生成的图像样式越多样化

接口文档

https://platform.openai.com/docs/api-reference/completions/create

请求参数解析:

字段 说明
model 可选参数。语言模型,这里选择的是text-davinci-003
prompt 必选参数。即用户的输入。
max_tokens 可选参数,默认值为 16。最大分词数,会影响返回结果的长度。
temperature 可选参数,默认值为 1,取值 0-2。该值越大每次返回的结果越随机,即相似度越小。
top_p 可选参数,与temperature类似。
n 可选参数,默认值为 1。表示对每条prompt生成多少条结果。
stream 可选参数,默认值为false。表示是否回流部分结果。

三、编写前端代码调用接口

可以从本博客中生活 –>chatGPT 页面查看效果

直接使用前端代码调用OpenAI的http接口

  • 需要在 xhr.setRequestHeader(“Authorization”, “Bearer 你的key”) 这里配置你的key,如果不知道从哪里找key,请看前文

    千万不将带有你自己key的前端代码上传到网上, 会被OPAI检测出来并将你当前暴露的key给删除掉(所以本前端代码仅适合本地测试)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    <!doctype html>
    <html class="no-js" lang="">

    <head>
    <meta charset="utf-8">
    <meta http-equiv="x-ua-compatible" content="ie=edge">
    <title>Ai - Chat</title>
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
    body {
    font-family: Arial, sans-serif;
    font-size: 16px;
    line-height: 1.5;
    color: #333;
    margin: 0;
    padding: 0;
    }

    .container {
    max-width: 1200px;
    margin: 0 auto;
    padding: 0 15px;
    }

    .filter-menu {
    background-color: #f4f4f4;
    padding: 20px;
    border-radius: 10px;
    }

    .filter-menu h4 {
    margin: 0;
    font-size: 24px;
    font-weight: bold;
    }

    .form-control {
    width: 100%;
    height: auto;
    margin: 20px 0;
    padding: 10px;
    font-size: 18px;
    line-height: 1.5;
    color: #333;
    background-color: #f4f4f4;
    border: 1px solid #ccc;
    border-radius: 10px;
    resize: none;
    }

    .btn {
    display: inline-block;
    font-size: 18px;
    font-weight: bold;
    color: #fff;
    background-color: #333;
    border: none;
    border-radius: 10px;
    padding: 15px 25px;
    cursor: pointer;
    transition: background-color 0.2s ease;
    }

    .btn:hover {
    background-color: #222;
    }

    .spinner-border {
    margin-right: 10px;
    }

    #chatgpt-response {
    width: 100%;
    height: auto;
    margin: 20px 0;
    padding: 10px;
    font-size: 20px;
    line-height: 1.5;
    color: #0000FF;
    font-weight: bold;
    background-color: #f4f4f4;
    border: 1px solid #ccc;
    border-radius: 10px;
    overflow: auto;
    }

    </style>

    <script>
    async function callCHATGPT() {
    var responseText1 = document.getElementById("chatgpt-response");
    responseText1.innerHTML = ""

    function printMessage(message) {
    var responseText = document.getElementById("chatgpt-response");
    var index = 0;

    // 创建一个定时器,每隔一段时间打印一个字符
    var interval = setInterval(function() {
    responseText.innerHTML += message[index];
    index++;

    // 当打印完成时,清除定时器
    if (index >= message.length) {
    clearInterval(interval);
    }
    },
    150); // 每隔50毫秒打印一个字符
    }
    var xhr = new XMLHttpRequest();
    var url = "https://api.openai.com/v1/completions";
    xhr.open("POST", url, true);
    xhr.setRequestHeader("Content-Type", "application/json");
    xhr.setRequestHeader("Authorization", "Bearer 你的key");
    xhr.onreadystatechange = function() {
    if (xhr.readyState === 4 && xhr.status === 200) {
    var json = JSON.parse(xhr.responseText);
    var response = json.choices[0].text;

    // 将CHATGPT的返回值输出到文本框
    var responseText = document.getElementById("chatgpt-response");
    var index = 0;

    // 创建一个定时器,每隔一段时间打印一个字符
    var interval = setInterval(function() {
    responseText.innerHTML += response[index];
    index++;

    // 当打印完成时,清除定时器
    if (index >= response.length) {
    clearInterval(interval);
    }
    },
    50); // 每隔50毫秒打印一个字符
    }
    };

    var data = JSON.stringify({
    "prompt": document.getElementById("chat-gpt-input").value,
    "max_tokens": 2048,
    "temperature": 0.5,
    "top_p": 1,
    "frequency_penalty": 0,
    "presence_penalty": 0,
    "model": "text-davinci-003"
    });
    console.log(data);
    await printMessage('正在思考,请等待......');
    await xhr.send(data);
    }
    </script>
    </head>

    <body>

    <div class="filter-menu text-center mb-40">
    <h4>与Ai对话,请描述您的需求-支持中文、英语、日本语等</h4>
    </div>

    <textarea class="form-control" id="chat-gpt-input" placeholder="输入描述" rows="3" resize="none"
    style="width: 135%; margin: 0 auto; background-color: #f4f4f4; color: #333; border: 1px solid #ccc; border-radius: 12px;"></textarea>
    <button onclick="callCHATGPT()" autocomplete="off" class="btn btn-large" href="#"
    style="background-color: #333; color: #f4f4f4; border-radius: 10px">
    <span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>回答
    </button>
    <textarea class="form-control" id="chatgpt-response"
    placeholder="请耐心等待回答 Ai生成它很快,但是由于网络问题我们需要等待,通常内容越长等待越久 如果长时间没反应请刷新页面重试" rows="26" resize="none"
    style="width: 150%;height: auto; margin: 0 auto; background-color: #f4f4f4; color: #333; border: 1px solid #ccc; border-radius: 10px; overflow: scroll;"
    readonly="true"></textarea>

1、实现效果

在实现效果方面,我们能够成功地从API中生成文字,并将其展示。通过调整API的参数和选择,我们还能够获得不同风格和多样性的文字。
当然,我们本地调用需要使用到魔法上网工具(请自行解决)