実装したい機能
こんにちは。
Cloud Funtionsを使ってGPTのAPIを呼び出したくCloud Funtionを作成したのですが、internalエラーが発生しています。
何か知っている方いらっしゃれば教えていただければ幸いです。よろしくお願いいたします。
スクリーンショット・実行手順
まず、Cloud Funtion(名前はcreateQuiz)はこのようになっています。下記にテキストでコードを記載しています。
ボタンを押すとcreateQuizが起動するようにしました。
結果はエラーで、"internal"と表示されました。
コンソールのエクスプローラを見たところこのようになっていました。GPTの応答は取得できているようです。
Firebasej上でも問題なくDeployできているように思います。
試したこと
実は何度かinternalが出なかった時があります。しかし色々編集しているとまたinternalエラーが出てしまい、エラーが出ていなかった時の状態に戻したのですが何故かエラーは消えませんでした。Firebase上のCloudFuntionを削除してDeployしても改善できませんでした。
もし何か知っている方がいらっしゃれば、ご教示いただければ幸いです。
よろしくお願いいたします。
Cloud Funtionのコード
const functions = require(‘firebase-functions’);
const admin = require(‘firebase-admin’);
const https = require(‘https’); // この行を追加
exports.createQuiz = functions.region(‘us-central1’)
.runWith({
timeoutSeconds: 100,
memory: ‘512MB’
})
.https.onCall((data, context) => {
const input = data.input;
return new Promise((resolve, reject) => { // 新しい Promise を返す
// Write your code below!
const options = {
hostname: 'api.openai.com',
path: '/v1/chat/completions',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer sk-xxxxxxxxxxxxxxxxxxxxxx',
}
};
const requestBody = JSON.stringify({
"model": "gpt-3.5-turbo",
"messages": [{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": input}],
"stream": false,
"temperature": 0.8,
"top_p": 0.8,
"presence_penalty": 0.2
});
const req = https.request(options, (res) => {
let responseData = '';
res.on('data', (chunk) => { responseData += chunk; });
res.on('end', () => {
console.log('test:1');
console.log(responseData); // 追加: レスポンスデータをログに出力
try {
console.log('test:2');
const parsedResponse = JSON.parse(responseData);
resolve(parsedResponse.choices ? parsedResponse.choices[0].text.trim() : ''); // スコープ内で resolve を使用する
} catch (error) {
console.error('Error parsing response:', error);
reject('Internal error'); // スコープ内で reject を使用する
}
});
});
req.on('error', (error) => {
console.error(`Error: ${error.message}`);
reject('エラーが発生しました'); // 正しいスコープ内で reject を使用します
});
req.write(requestBody);
req.end();
// ここまでコードを書く
// Write your code above!
});
});