php OpenAI API在本地工作,但在主机上返回404错误(hPanel)

zysjyyx4  于 5个月前  发布在  PHP
关注(0)|答案(1)|浏览(57)

这个使用 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;
}

pdkcd3nj

pdkcd3nj1#

看起来你是在指出,当使用openai-php/laravel包时,404问题与OpenAI无关,而是与在一个扩展名为.js的JavaScript文件中使用Blade语法有关。
这是你的句子的更正版本:
如果您在使用openai-php/laravel包时遇到404问题,请务必注意,无论您是在生产环境还是本地环境中,该问题都与OpenAI无关。(“/API/send”)}},直接在扩展名为.js的JavaScript文件中。要解决此问题,在包含外部JavaScript文件之前,请考虑在Blade视图的块中定义动态值,如下所示

<script>
      const url = '{{ url('/api/send') }}';
</script>
<script src="{{ asset('js/yourfile.js') }}"></script>

字符串
这种方法可以确保在加载外部JavaScript文件之前定义url变量,从而解决问题并允许请求正确访问指定的URL路径。

相关问题