Upload chat.js
Browse files- src/router/chat.js +43 -12
src/router/chat.js
CHANGED
|
@@ -81,7 +81,26 @@ async function convertOpenAIToMammouth(openaiRequest, requestId = null) {
|
|
| 81 |
})
|
| 82 |
|
| 83 |
// 将所有system消息组合为preprompt
|
| 84 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 85 |
form.append('preprompt', preprompt)
|
| 86 |
|
| 87 |
// 处理非system角色的消息
|
|
@@ -183,23 +202,35 @@ async function convertOpenAIToMammouth(openaiRequest, requestId = null) {
|
|
| 183 |
}
|
| 184 |
|
| 185 |
uploadedUrls.forEach((url, segmentIndex) => {
|
| 186 |
-
//
|
| 187 |
-
|
| 188 |
-
|
| 189 |
-
|
| 190 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 191 |
|
| 192 |
processedMessages.push({
|
| 193 |
-
content: segmentText
|
| 194 |
imagesData: [url],
|
| 195 |
documentsData: []
|
| 196 |
})
|
| 197 |
|
| 198 |
-
console.log(`[消息生成] 长图片段${segmentIndex + 1}: "${segmentText.substring(0,
|
| 199 |
-
|
| 200 |
-
if (includeOriginalText) {
|
| 201 |
-
hasProcessedText = true
|
| 202 |
-
}
|
| 203 |
})
|
| 204 |
} else {
|
| 205 |
// 普通图片,严格按顺序存储到结果数组中
|
|
|
|
| 81 |
})
|
| 82 |
|
| 83 |
// 将所有system消息组合为preprompt
|
| 84 |
+
let preprompt = systemMessages.join('\n\n')
|
| 85 |
+
|
| 86 |
+
// 检查是否有长图需要处理,如果有则添加长图处理说明
|
| 87 |
+
const hasLongImages = regularMessages.some(message =>
|
| 88 |
+
Array.isArray(message.content) &&
|
| 89 |
+
message.content.some(part => part.type === 'image_url')
|
| 90 |
+
)
|
| 91 |
+
|
| 92 |
+
if (hasLongImages) {
|
| 93 |
+
const longImagePrompt = `
|
| 94 |
+
|
| 95 |
+
重要说明:本次对话可能包含长图片段。当你看到标记为"[长图片段 X/Y]"的图片时:
|
| 96 |
+
1. 这些是同一张长图的不同部分,按顺序排列
|
| 97 |
+
2. 请分析每个片段的内容,记住之前片段的信息
|
| 98 |
+
3. 在处理最后一个片段时,请提供基于所有片段的完整分析
|
| 99 |
+
4. 确保回答涵盖整张长图的所有重要内容,不要遗漏任何部分`
|
| 100 |
+
|
| 101 |
+
preprompt = preprompt ? `${preprompt}${longImagePrompt}` : longImagePrompt.trim()
|
| 102 |
+
}
|
| 103 |
+
|
| 104 |
form.append('preprompt', preprompt)
|
| 105 |
|
| 106 |
// 处理非system角色的消息
|
|
|
|
| 202 |
}
|
| 203 |
|
| 204 |
uploadedUrls.forEach((url, segmentIndex) => {
|
| 205 |
+
// 为每个片段生成更详细的提示文本
|
| 206 |
+
let segmentText = ''
|
| 207 |
+
|
| 208 |
+
if (segmentIndex === 0) {
|
| 209 |
+
// 第一个片段:包含原始文本和长图说明
|
| 210 |
+
const originalText = combinedText || '请分析这张长图的内容'
|
| 211 |
+
segmentText = `${originalText}
|
| 212 |
+
|
| 213 |
+
注意:这是一张长图,已被切割为${uploadedUrls.length}个片段。请分析每个片段的内容,并在最后一个片段时提供完整的总结。
|
| 214 |
+
|
| 215 |
+
[长图片段 ${segmentIndex + 1}/${uploadedUrls.length}] - 这是长图的开始部分`
|
| 216 |
+
hasProcessedText = true
|
| 217 |
+
} else if (segmentIndex === uploadedUrls.length - 1) {
|
| 218 |
+
// 最后一个片段:要求提供完整总结
|
| 219 |
+
segmentText = `[长图片段 ${segmentIndex + 1}/${uploadedUrls.length}] - 这是长图的结束部分
|
| 220 |
+
|
| 221 |
+
请基于所有${uploadedUrls.length}个片段的内容,提供这张长图的完整分析和总结。`
|
| 222 |
+
} else {
|
| 223 |
+
// 中间片段:说明这是连续内容
|
| 224 |
+
segmentText = `[长图片段 ${segmentIndex + 1}/${uploadedUrls.length}] - 这是长图的中间部分,请继续分析内容`
|
| 225 |
+
}
|
| 226 |
|
| 227 |
processedMessages.push({
|
| 228 |
+
content: segmentText,
|
| 229 |
imagesData: [url],
|
| 230 |
documentsData: []
|
| 231 |
})
|
| 232 |
|
| 233 |
+
console.log(`[消息生成] 长图片段${segmentIndex + 1}: "${segmentText.substring(0, 80)}..."`)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 234 |
})
|
| 235 |
} else {
|
| 236 |
// 普通图片,严格按顺序存储到结果数组中
|