最近GPT挺火的,想着怎么把OpenAI的接口接入PbootCMS系统,一个小尝试,仅供参考,,
1,先在文章页面写一个请求表单
<div class="layui-form-item">
<label class="layui-form-label">主题</label>
<div class="layui-input-block">
<input type="text" id="topic" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">关键字</label>
<div class="layui-input-block">
<input type="text" id="keywords" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">文章字数</label>
<div class="layui-input-inline">
<input type="number" id="length" class="layui-input" min="50" max="2000" value="500">
</div>
<div class="layui-form-mid layui-word-aux">(50-2000之间的整数)</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" type="button" id="openai-btn">生成文章</button>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">文章内容</label>
<div class="layui-input-block">
<textarea readonly class="layui-textarea" id="openai-content"></textarea>
</div>
</div>
2,js
$(document).ready(function () {
$("#openai-btn").click(function () {
let topic = $("#topic").val();
let keywords = $("#keywords").val();
let length = $("#length").val();
//在这里添加您的OpenAI API密钥
let openaiKey = '填写秘钥';
if (topic === "" || keywords === "") {
alert("请输入主题和关键字");
return;
}
let requestBody = {
"topic": topic,
"keywords": keywords,
"length": length
};
$.ajax({
type: "POST",
url: "这里写请求路径...",
data: JSON.stringify(requestBody),
contentType: "application/json;charset=utf-8",
headers: {
"Authorization": "Bearer " + openaiKey,
},
success: function (response) {
if ("generated_text" in response) {
$("#openai-content").val(response.generated_text);
} else if ("error" in response) {
alert("生成文章时出错:" + response.error);
} else {
alert("未知错误,请联系管理员");
}
},
error: function (jqXHR, textStatus, errorThrown) {
alert("生成文章时出错:" + errorThrown);
}
});
});
});
3,PHP文件
<?php
function generate_article($prompt, $openai_key, $length) {
$headers = [
"Content-Type: application/json",
"Authorization: Bearer " . $openai_key,
];
$data = [
"prompt" => "The topic is \"CAR RACING\". Write an article about car racing.",
"temperature" => 0.7,
"max_tokens" => 200,
"top_p" => 1,
"frequency_penalty" => 0,
"presence_penalty" => 0
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.openai.com/v1/engines/davinci-codex/completions");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
if (curl_errno($ch)) {
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$errorMsg = curl_error($ch);
error_log("OpenAI API请求失败: HTTP $httpCode, 错误信息: $errorMsg");
return false;
}
curl_close($ch);
$response = json_decode($response);
if (isset($response->choices) && !empty($response->choices)) {
return $response->choices[0]->text;
} else {
error_log("OpenAI API请求失败: 无法解析API响应");
return false;
}
}
if (!isset($_POST["topic"]) || !isset($_POST["keywords"]) || !isset($_POST["length"])) {
header("HTTP/1.1 400 Bad Request");
exit();
}
$prompt = "The topic is \"" . $_POST["topic"] . "\". Write an article about " . $_POST["keywords"] . ".";
$openai_key = $_SERVER["HTTP_AUTHORIZATION"] ?? "";
$length = $_POST["length"];
$generated_text = generate_article($prompt, $openai_key, $length);
if ($generated_text) {
$response = ["generated_text" => $generated_text];
} else {
$response = ["error" => "无法生成文章,请检查您的OpenAI API密钥或请求参数"];
}
header("Content-Type: application/json");
echo json_encode($response);
?>