crystelf-plugin/models/openai/openaiChat.js
2025-04-24 17:37:22 +08:00

68 lines
1.4 KiB
JavaScript

import OpenAI from 'openai';
class OpenaiChat {
constructor() {
this.openai = null;
}
/**
* @param apiKey 密钥
* @param baseUrl openaiAPI地址
*/
init(apiKey, baseUrl) {
this.openai = new OpenAI({
apiKey: apiKey,
baseUrl: baseUrl,
});
}
/**
* @param prompt 主内容
* @param chatHistory 聊天历史记录
* @param model 模型
* @param temperature 温度
* @param customPrompt 提示词
* @returns {Promise<{success: boolean, aiResponse: string}|{}>}
*/
async callAi({ prompt, chatHistory = [], model, temperature, customPrompt }) {
if (!this.openai) {
logger.err('ai未初始化..');
return { success: false };
}
let systemMessage = {
role: 'system',
content: customPrompt || '',
};
const messages = [
systemMessage,
...chatHistory,
{
role: 'user',
content: prompt,
},
];
try {
const completion = await this.openai.chat.completions.create({
messages: messages,
model: model,
temperature: temperature,
frequency_penalty: 0.2,
presence_penalty: 0.2,
});
const aiResponse = completion.choices[0].message.content;
return {
success: true,
aiResponse: aiResponse,
};
} catch (err) {
logger.err(err);
return { success: false };
}
}
}
export default OpenaiChat;