|
@@ -945,36 +945,35 @@ const generate = async (message: ChatMessage) => {
|
|
|
console.log('图片', result)
|
|
console.log('图片', result)
|
|
|
const content = await result.promise
|
|
const content = await result.promise
|
|
|
console.log('event.data', content)
|
|
console.log('event.data', content)
|
|
|
- // 从content中提取图片链接:依次尝试 1.整体就是链接 2.markdown链接格式 3.正文中任意URL(兼容反引号/文字包裹的情况)
|
|
|
|
|
- const trimmedContent = content.trim()
|
|
|
|
|
- const directUrlMatch = trimmedContent.match(/^(https?:\/\/\S+)$/)
|
|
|
|
|
- const mdUrlMatch = directUrlMatch
|
|
|
|
|
- ? null
|
|
|
|
|
- : trimmedContent.replace(/\n/g, '').match(/\[.*?\]\((https?:\/\/.*?)\)/)
|
|
|
|
|
- const anyUrlMatch = directUrlMatch || mdUrlMatch
|
|
|
|
|
- ? null
|
|
|
|
|
- : trimmedContent.match(/https?:\/\/[^\s'"`<>()【】,。;:!?]+/)
|
|
|
|
|
- const rawUrl = directUrlMatch
|
|
|
|
|
- ? directUrlMatch[1]
|
|
|
|
|
- : mdUrlMatch
|
|
|
|
|
- ? mdUrlMatch[1]
|
|
|
|
|
- : (anyUrlMatch ? anyUrlMatch[1] : '')
|
|
|
|
|
- // 去掉URL尾部可能带的标点
|
|
|
|
|
- const imageUrl = rawUrl.replace(/[.,;:!?)'"`。,;:!?)]+$/, '')
|
|
|
|
|
-
|
|
|
|
|
- // 判断当前页面是否是工具页(含frame元素)
|
|
|
|
|
- const isToolPage = (currentSlide.value?.elements || []).some((el: any) => el.type === 'frame')
|
|
|
|
|
- // 如果当前页不是工具页则直接加图片,是工具页则新建页面再加图片
|
|
|
|
|
- if (!isToolPage) {
|
|
|
|
|
- createImageElement(imageUrl)
|
|
|
|
|
- }
|
|
|
|
|
- else {
|
|
|
|
|
- createSlide()
|
|
|
|
|
- createImageElement(imageUrl)
|
|
|
|
|
|
|
+ // content为空时结束loading并退出,避免后续处理报错
|
|
|
|
|
+ if (!content) {
|
|
|
|
|
+ message.gLoading = false
|
|
|
|
|
+ message.chatloading = false
|
|
|
|
|
+ chatLoading.value = false
|
|
|
|
|
+ stopMessage()
|
|
|
|
|
+ return
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- message.gLoading = false
|
|
|
|
|
- message.jsonData.isGenerate = true
|
|
|
|
|
|
|
+ // 让AI从返回内容中提取图片链接
|
|
|
|
|
+ chat_no_stream2([{
|
|
|
|
|
+ role: 'user',
|
|
|
|
|
+ content: `这是返回的内容:"${content}",从中提取图片链接。输出一个json格式的回复,格式如下:{"url":"图片链接"},如果没有图片链接则url为空字符串。`,
|
|
|
|
|
+ }], { type: 'json_object' }).then((res: any) => {
|
|
|
|
|
+ const imageUrl = JSON.parse(res).url || ''
|
|
|
|
|
+ if (imageUrl) {
|
|
|
|
|
+ // 判断当前页面是否是工具页(含frame元素)
|
|
|
|
|
+ const isToolPage = (currentSlide.value?.elements || []).some((el: any) => el.type === 'frame')
|
|
|
|
|
+ // 如果当前页不是工具页则直接加图片,是工具页则新建页面再加图片
|
|
|
|
|
+ if (!isToolPage) {
|
|
|
|
|
+ createImageElement(imageUrl)
|
|
|
|
|
+ }
|
|
|
|
|
+ else {
|
|
|
|
|
+ createSlide()
|
|
|
|
|
+ createImageElement(imageUrl)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ message.gLoading = false
|
|
|
|
|
+ message.jsonData.isGenerate = true
|
|
|
|
|
+ })
|
|
|
}
|
|
}
|
|
|
else if (message.jsonData?.gType === 'trigger_batch_tool') {
|
|
else if (message.jsonData?.gType === 'trigger_batch_tool') {
|
|
|
console.log(message.jsonData?.gType)
|
|
console.log(message.jsonData?.gType)
|