imaginar/services/OpenAIClient.js

45 lines
1.4 KiB
JavaScript
Raw Normal View History

2024-10-19 11:24:54 +00:00
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;