这个使用 openai-php/laravel 的Laravel项目在本地工作得很好,但是我无法在在线prod托管版本上获得响应。尽管我上传了所有的项目文件,一切都是完全相同的,URL,路由和下面的代码,当我发送POST请求时,它只是返回404错误。
POST DOMAIN_NAME/API/send 404
fetchAndUpdateHTML @(index):67
(index):90 Fetch error:服务器错误。
我不知道这是否是一个路由问题,一个需要重新定义的URL,以在线使用API..
JavaScript:
//CSRF TOKEN
const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.openai.com/v1/completions', true);
xhr.setRequestHeader('X-CSRF-TOKEN', csrfToken);
//VARIABLES
const button = document.getElementById('button-submit');
const chatWindow = document.getElementById('chat-window');
const url = '{{ url('/api/send') }}';
const inputField = document.getElementById('input');
const clean = document.getElementById('button-clean');
//API FETCH AND HTML UPDATE
function fetchAndUpdateHTML() {
const input = document.getElementById('input').value;
if(isInputValid(input)){
chatWindow.insertAdjacentHTML('beforeend', `<div class="messages-user">
<div class="__user">
<p>${input}</p>
</div>
<img src="{{ asset('/images/avatar.png') }}" alt="Avatar">
<div style="clear: both"></div>
</div>`);
inputField.value = '';
fetch(url, {
method: 'POST',
body: JSON.stringify({input: input}),
headers: {
'Content-Type': 'application/json',
}
}).then(function (response) {
if (response.ok) {
return response.text();
} else {
throw new Error('Server error.');
}
}).then(function (data) {
chatWindow.insertAdjacentHTML('beforeend', `<div class="messages-bot">
<img src="{{ asset('/images/chatbot.png') }}" alt="Avatar">
<div class="__bot">
<p>${data}</p>
</div>
</div>
`);
}).catch(function (error) {
console.log('Fetch error:', error.message);
});
}
}
字符串
api.php:
use App\Http\Controllers\ChatBotController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
});
Route::post('send', [ChatBotController::class, 'sendChat']);
型
控制器:
public function sendChat(Request $request){
$result = OpenAI::completions()->create([
‘max-token’ => 150,
‘model’ => ‘text-davinci-003’,
‘prompt’ => $request->input
]);
$response = array_reduce(
$result->toArray()['choices'],
fn(string $result, array $choice) => $result . $choice['text'], ""
);
return $response;
}
型
1条答案
按热度按时间pdkcd3nj1#
看起来你是在指出,当使用openai-php/laravel包时,404问题与OpenAI无关,而是与在一个扩展名为.js的JavaScript文件中使用Blade语法有关。
这是你的句子的更正版本:
如果您在使用openai-php/laravel包时遇到404问题,请务必注意,无论您是在生产环境还是本地环境中,该问题都与OpenAI无关。(“/API/send”)}},直接在扩展名为.js的JavaScript文件中。要解决此问题,在包含外部JavaScript文件之前,请考虑在Blade视图的块中定义动态值,如下所示
字符串
这种方法可以确保在加载外部JavaScript文件之前定义url变量,从而解决问题并允许请求正确访问指定的URL路径。