🚀 fix(openaiChat): simplify messages handling by removing unnecessary checks and defaults

 feat(aiCaller): enhance multimodal messages formatting for better processing of user content

 feat(ai): update image URL references for consistency across message handling
This commit is contained in:
Jerry 2025-11-30 13:02:22 +08:00
parent f2de86d421
commit 875ca65ed9
3 changed files with 35 additions and 16 deletions

View File

@ -130,7 +130,7 @@ async function extractUserMessage(msg, nickname, e) {
originalMessages.push({ originalMessages.push({
type: 'image_url', type: 'image_url',
image_url: { image_url: {
url: message.image url: message.url
} }
}); });
} }
@ -142,7 +142,12 @@ async function extractUserMessage(msg, nickname, e) {
text.forEach((message) => { text.forEach((message) => {
if(message === '') { if(message === '') {
} else { } else {
returnMessage += `[${e.sender?.nickname},id:${e.user_id},seq:${e.message_id}]说:${message}\n`; const tempMessage = `[${e.sender?.nickname},id:${e.user_id},seq:${e.message_id}]说:${message}\n`
returnMessage += tempMessage;
originalMessages.push({
type: 'text',
content: tempMessage
});
} }
}); });
} }
@ -187,7 +192,7 @@ async function extractUserMessage(msg, nickname, e) {
originalMessages.push({ originalMessages.push({
type: 'image_url', type: 'image_url',
image_url: { image_url: {
url: msg.image url: msg.url
} }
}); });
} }

View File

@ -107,7 +107,7 @@ class AiCaller {
*/ */
async callMultimodalAi(originalMessages, chatHistory = [], memories = [], e) { async callMultimodalAi(originalMessages, chatHistory = [], memories = [], e) {
try { try {
const messages = this.formatMultimodalMessages(originalMessages, chatHistory, memories, e); const messages = await this.formatMultimodalMessages(originalMessages, chatHistory, memories, e);
const apiCaller = this.openaiChat; const apiCaller = this.openaiChat;
const result = await apiCaller.callAi({ const result = await apiCaller.callAi({
messages: messages, messages: messages,
@ -145,31 +145,45 @@ class AiCaller {
const systemPrompt = await this.getSystemPrompt(e, memories); const systemPrompt = await this.getSystemPrompt(e, memories);
messages.push({ messages.push({
role: 'system', role: 'system',
content: [{ type: 'text', text: systemPrompt }] content: [
{ type: 'text', text: systemPrompt }
]
}); });
for (const history of chatHistory) { for (const history of chatHistory) {
const role = history.role === 'user' ? 'user' : 'assistant'; const role = history.role === 'user' ? 'user' : 'assistant';
messages.push({ messages.push({
role: role, role,
content: [{ type: 'text', text: history.content }] content: [
{ type: 'text', text: history.content }
]
}); });
} }
const mergedUserContent = [];
for (const msg of originalMessages) { for (const msg of originalMessages) {
if (msg.type === 'text' && msg.content) { if (msg.type === 'text' && msg.content) {
messages.push({ mergedUserContent.push({
role: 'user', type: 'text',
content: [{ type: 'text', text: msg.content }] text: msg.content
}); });
} else if (msg.type === 'image_url' && msg.image_url) { }
messages.push({
role: 'user', if (msg.type === 'image_url' && msg.image_url?.url) {
content: [{ type: 'image_url', image_url: { url: msg.image_url.url } }] mergedUserContent.push({
type: 'image_url',
image_url: { url: msg.image_url.url }
}); });
} }
} }
if (mergedUserContent.length > 0) {
messages.push({
role: 'user',
content: mergedUserContent
});
}
return messages; return messages;
} }
/** /**
* 构造完整的prompt * 构造完整的prompt
* @param prompt * @param prompt

View File

@ -25,13 +25,13 @@ class OpenaiChat {
* @param messages 多模态消息数组 * @param messages 多模态消息数组
* @returns {Promise<{success: boolean, aiResponse: string}|{}>} * @returns {Promise<{success: boolean, aiResponse: string}|{}>}
*/ */
async callAi({ prompt, chatHistory = [], model, temperature, customPrompt, messages }) { async callAi({ prompt, chatHistory = [], model, temperature, customPrompt, messages = [] }) {
if (!this.openai) { if (!this.openai) {
logger.error('[crystelf-ai] ai未初始化..'); logger.error('[crystelf-ai] ai未初始化..');
return { success: false }; return { success: false };
} }
let finalMessages; let finalMessages;
if (messages && messages.length > 0) { if (messages.length > 0) {
finalMessages = messages; finalMessages = messages;
} else { } else {
let systemMessage = { let systemMessage = {