mirror of
https://github.com/Jerryplusy/crystelf-plugin.git
synced 2025-12-05 15:41:56 +00:00
🚀 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:
parent
f2de86d421
commit
875ca65ed9
11
apps/ai.js
11
apps/ai.js
@ -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
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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 = {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user