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;
|