optimize code in messagesPrepare

This commit is contained in:
Yanyutin753 2024-04-05 18:54:04 +08:00
parent 11a145924f
commit 70ea39591b

View File

@ -362,53 +362,37 @@ function extractRefFileUrls(messages: any[]) {
* @param messages gpt系列消息格式 * @param messages gpt系列消息格式
*/ */
function messagesPrepare(messages: any[]) { function messagesPrepare(messages: any[]) {
// 先剔除所有的 base64 数据 // 注入消息提升注意力
let validMessages = messages.map((message) => { let latestMessage = messages[messages.length - 1];
if (Array.isArray(message.content)) {
message.content = message.content.filter(v => {
if (typeof v === 'object' && ['file', 'image_url'].includes(v['type'])) {
// 如果内容是 base64 数据,就剔除
return !util.isBASE64Data(v['url']);
}
// 如果不是 base64 数据,就保留
return true;
});
}
return message;
});
// 检查最新消息是否含有"type": "image_url"或"type": "file",如果有则注入消息
let latestMessage = validMessages[validMessages.length - 1];
let hasFileOrImage = Array.isArray(latestMessage.content) let hasFileOrImage = Array.isArray(latestMessage.content)
&& latestMessage.content.some(v => (typeof v === 'object' && ['file', 'image_url'].includes(v['type']))); && latestMessage.content.some(v => (typeof v === 'object' && ['file', 'image_url'].includes(v['type'])));
if (hasFileOrImage) { if (hasFileOrImage) {
let newFileMessage = { let newFileMessage = {
"content": "关注用户最新发送文件和消息", "content": "关注用户最新发送文件和消息",
"role": "system" "role": "system"
}; };
validMessages.splice(validMessages.length - 1, 0, newFileMessage); messages.splice(messages.length - 1, 0, newFileMessage);
logger.info("注入提升尾部文件注意力system prompt"); logger.info("注入提升尾部文件注意力system prompt");
} else { } else {
let newTextMessage = { let newTextMessage = {
"content": "关注用户最新的消息", "content": "关注用户最新的消息",
"role": "system" "role": "system"
}; };
validMessages.splice(validMessages.length - 1, 0, newTextMessage); messages.splice(messages.length - 1, 0, newTextMessage);
logger.info("注入提升尾部消息注意力system prompt"); logger.info("注入提升尾部消息注意力system prompt");
} }
const content = validMessages.reduce((content, message) => { const content = messages.reduce((content, message) => {
if (Array.isArray(message.content)) { if (Array.isArray(message.content)) {
return message.content.reduce((_content, v) => { return message.content.reduce((_content, v) => {
if (!_.isObject(v) || v['type'] != 'text') if (!_.isObject(v) || v['type'] != 'text') return _content;
return _content; return _content + `\n${message.role || "user"}:${v["text"] || ""}`;
return _content + ('user:' + v['text'] || '') + "\n";
}, content); }, content);
} }
return content += `${message.role || 'user'}:${wrapUrlsToTags(message.content)}\n`; return content += `${message.role || 'user'}:${wrapUrlsToTags(message.content)}\n`;
}, ''); }, '');
logger.info("\n对话合并\n" + content); logger.info("\n对话合并" + content);
return [ return [
{ role: 'user', content } { role: 'user', content }
] ]