Skip to content

Commit

Permalink
优化降低传文件上下文混淆问题
Browse files Browse the repository at this point in the history
  • Loading branch information
Yanyutin753 committed Apr 2, 2024
1 parent 1e09d80 commit 6853087
Showing 1 changed file with 15 additions and 19 deletions.
34 changes: 15 additions & 19 deletions src/api/controllers/chat.ts
Original file line number Diff line number Diff line change
Expand Up @@ -362,30 +362,26 @@ function extractRefFileUrls(messages: any[]) {
* @param messages 参考gpt系列消息格式,多轮对话请完整提供上下文
*/
function messagesPrepare(messages: any[]) {
// 只保留最新消息以及不包含"type": "image_url"或"type": "file"的消息
let validMessages = messages.filter((message, index) => {
if (index === messages.length - 1) return true;
if (!Array.isArray(message.content)) return true;
// 不含"type": "image_url"或"type": "file"的消息保留
return !message.content.some(v => (typeof v === 'object' && ['file', 'image_url'].includes(v['type'])));
// 先剔除所有的 base64 数据
let validMessages = messages.map((message) => {
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)
&& latestMessage.content.some(v => (typeof v === 'object' && ['file', 'image_url'].includes(v['type'])));
if (hasFileOrImage) {

// 对 latestMessage.content 进行过滤,只保留"type": "text"的内容
// latestMessage.content = latestMessage.content.filter(v => typeof v === 'object' && v['type'] === 'text');

// 对 latestMessage.content 进行过滤,只保留不含base64的内容
latestMessage.content = latestMessage.content.filter(v => {
if (typeof v === 'object' && ['file', 'image_url'].includes(v['type'])) {
return !util.isBASE64Data(v['image_url']['url']);
}
return true;
});
let newFileMessage = {
"content": "关注用户最新发送文件和消息结尾",
"role": "system"
Expand All @@ -406,13 +402,13 @@ function messagesPrepare(messages: any[]) {
return message.content.reduce((_content, v) => {
if (!_.isObject(v) || v['type'] != 'text')
return _content;
return _content + (v['text'] || '');
return _content + ('user:' + v['text'] || '') + "\n";
}, content);
}
return content += `${message.role || 'user'}:${wrapUrlsToTags(message.content)}\n`;
}, '');

logger.info("本次上传消息:" + { role: 'user', content });
logger.info("上传消息:" + content);
return [
{ role: 'user', content }
]
Expand Down

0 comments on commit 6853087

Please sign in to comment.