nomid2 commited on
Commit
89082f1
·
verified ·
1 Parent(s): fb4d4aa

Upload chat.js

Browse files
Files changed (1) hide show
  1. 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
- const preprompt = systemMessages.join('\n\n')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- const includeOriginalText = !hasProcessedText && segmentIndex === 0 && combinedText
188
- const segmentText = includeOriginalText
189
- ? `${combinedText}\n\n[长图片段 ${segmentIndex + 1}/${uploadedUrls.length}]`
190
- : `[长图片段 ${segmentIndex + 1}/${uploadedUrls.length}]`
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
191
 
192
  processedMessages.push({
193
- content: segmentText || '.',
194
  imagesData: [url],
195
  documentsData: []
196
  })
197
 
198
- console.log(`[消息生成] 长图片段${segmentIndex + 1}: "${segmentText.substring(0, 50)}..."`)
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
  // 普通图片,严格按顺序存储到结果数组中