45 lines
1.4 KiB
JavaScript
45 lines
1.4 KiB
JavaScript
|
const OpenAI = require('openai');
|
|||
|
|
|||
|
class OpenAIClient {
|
|||
|
constructor(apiKey) {
|
|||
|
this.api = new OpenAI({
|
|||
|
apiKey
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
// 過去のメッセージとシステムプロンプトを使って回答を生成
|
|||
|
async generateResponse(conversationHistory, systemPrompt) {
|
|||
|
try {
|
|||
|
const messages = [
|
|||
|
{
|
|||
|
role: 'system',
|
|||
|
content: systemPrompt // システムプロンプトを最初に追加
|
|||
|
},
|
|||
|
...conversationHistory // その後に会話履歴を追加
|
|||
|
];
|
|||
|
|
|||
|
const response = await this.api.chat.completions.create({
|
|||
|
model: process.env.OPENAI_MODEL, // 使用するモデルは環境変数で定義
|
|||
|
messages: messages // システムプロンプトと会話履歴を渡す
|
|||
|
});
|
|||
|
|
|||
|
const reply = response.choices[0].message.content;
|
|||
|
const interval = this.calculateInterval(reply);
|
|||
|
|
|||
|
return { reply, interval }; // 返答とインターバルを返す
|
|||
|
} catch (error) {
|
|||
|
console.error('Error generating response:', error);
|
|||
|
throw new Error('Failed to generate response from OpenAI');
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// インターバルの計算(例: 1文字につき100ミリ秒)
|
|||
|
calculateInterval(reply) {
|
|||
|
const length = reply.length;
|
|||
|
const baseInterval = 100; // 1文字あたり100ms
|
|||
|
return Math.min(length * baseInterval, 5000); // 最大5秒までの遅延
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
module.exports = OpenAIClient;
|