75 lines
1.6 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.error('[crystelf-ai] ai未初始化..');
return { success: false };
}
let systemMessage = {
role: 'system',
content: customPrompt || '',
};
const messages = [
systemMessage,
...chatHistory,
{
role: 'user',
content: prompt,
},
];
try {
//logger.info("[DEBUG] 请求体:", {
//model: model,
//messages,
//});
const completion = await this.openai.chat.completions.create({
messages: messages,
model: model,
temperature: temperature,
frequency_penalty: 0.2,
presence_penalty: 0.2,
response_format:{type: "json_object"},
stream:false
});
const aiResponse = completion.choices[0].message.content;
logger.info(aiResponse);
return {
success: true,
aiResponse: aiResponse,
};
} catch (err) {
logger.error(err);
return { success: false };
}
}
}
export default OpenaiChat;