mirror of
http://112.124.100.131/ebiz-ai/ebiz-base-ai.git
synced 2025-12-09 10:56:50 +08:00
fix(AI-new):修复产品推荐和知识问答场景下智能小助手未结束的问题- 在 chat-new.vue 中添加 messageEnd 标志来标识消息是否结束- 在 message.vue 中仅在消息结束时显示点赞和踩按钮- 在产品知识和推荐场景的初始消息中设置 messageEnd为 true-修复了智能小助手未结束导致的后续智能推荐场景异常
This commit is contained in:
@@ -56,54 +56,54 @@ import { audioToText, gwcsChat } from '@/api/generatedApi'
|
||||
|
||||
const MESSAGE_STATUS = {
|
||||
processing: 1,
|
||||
end: 0
|
||||
end: 0,
|
||||
}
|
||||
|
||||
export default {
|
||||
components: {
|
||||
SvgIcon
|
||||
SvgIcon,
|
||||
},
|
||||
props: {
|
||||
messages: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
default: () => [],
|
||||
},
|
||||
messageStatus: {
|
||||
type: String,
|
||||
default: 'stop'
|
||||
default: 'stop',
|
||||
},
|
||||
isDeep: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
default: false,
|
||||
},
|
||||
isSearching: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
default: false,
|
||||
},
|
||||
conversationId: {
|
||||
type: String,
|
||||
default: ''
|
||||
default: '',
|
||||
},
|
||||
productName: {
|
||||
type: String,
|
||||
default: ''
|
||||
default: '',
|
||||
},
|
||||
autoScrollEnabled: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
default: false,
|
||||
},
|
||||
chatData: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
default: () => ({}),
|
||||
},
|
||||
appType: {
|
||||
type: String,
|
||||
default: 'gwcsHelper'
|
||||
default: 'gwcsHelper',
|
||||
},
|
||||
action: {
|
||||
type: String,
|
||||
default: 'normal_chat'
|
||||
}
|
||||
default: 'normal_chat',
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
@@ -124,7 +124,7 @@ export default {
|
||||
genMessage: null,
|
||||
messageInfo: {
|
||||
is_complete: false.toString(),
|
||||
information: ''
|
||||
information: '',
|
||||
},
|
||||
currentMessageID: '',
|
||||
// 打字机相关
|
||||
@@ -154,7 +154,7 @@ export default {
|
||||
this.genMessage.status = MESSAGE_STATUS.processing
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
deepInternet() {
|
||||
@@ -178,7 +178,7 @@ export default {
|
||||
const stream = await navigator.mediaDevices.getUserMedia({ audio: true })
|
||||
this.mediaRecorder = new MediaRecorder(stream)
|
||||
this.audioChunks = []
|
||||
this.mediaRecorder.ondataavailable = event => {
|
||||
this.mediaRecorder.ondataavailable = (event) => {
|
||||
if (event.data.size > 0) {
|
||||
this.audioChunks.push(event.data)
|
||||
}
|
||||
@@ -222,12 +222,12 @@ export default {
|
||||
formData.append('appType', 'haslBigHelper')
|
||||
formData.append('user', 'chenyuda')
|
||||
audioToText(formData)
|
||||
.then(res => {
|
||||
.then((res) => {
|
||||
if (res) {
|
||||
resolve(res.content)
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
.catch((err) => {
|
||||
reject(err)
|
||||
})
|
||||
})
|
||||
@@ -259,7 +259,7 @@ export default {
|
||||
conversationId: this.conversationId,
|
||||
message: this.action === 'normal_chat' ? this.newMessage : JSON.stringify(this.messageInfo),
|
||||
user: 'gwcs-test',
|
||||
inputs: {}
|
||||
inputs: {},
|
||||
}
|
||||
|
||||
this.currentMessage = {
|
||||
@@ -271,7 +271,7 @@ export default {
|
||||
isThink: false,
|
||||
showThink: false,
|
||||
isLike: false,
|
||||
isDisLike: false
|
||||
isDisLike: false,
|
||||
}
|
||||
if (this.single) {
|
||||
// this.$set(this.messages, this.messages.length - 1, { ...this.currentMessage })
|
||||
@@ -291,13 +291,13 @@ export default {
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
signal: abortController.signal,
|
||||
body: JSON.stringify(params),
|
||||
timeout: 60000
|
||||
timeout: 60000,
|
||||
})
|
||||
.then(async res => {
|
||||
.then(async (res) => {
|
||||
await this.processStreamResponse(res, requestIndex)
|
||||
this.single = false
|
||||
})
|
||||
.catch(err => {
|
||||
.catch((err) => {
|
||||
// debugger
|
||||
this.$emit('update:messageStatus', 'stop')
|
||||
})
|
||||
@@ -316,7 +316,7 @@ export default {
|
||||
if (done) break
|
||||
buffer += new TextDecoder().decode(value)
|
||||
const lines = buffer.split('\n')
|
||||
lines.slice(0, -1).forEach(line => {
|
||||
lines.slice(0, -1).forEach((line) => {
|
||||
const parsed = this.parseStreamLine(line)
|
||||
if (parsed) this.updateMessageContent(parsed, requestIndex)
|
||||
})
|
||||
@@ -385,6 +385,11 @@ export default {
|
||||
updateMessageContent(parse, requestIndex) {
|
||||
let { event, answer, isThink, message_id } = parse
|
||||
this.currentMessageID = message_id
|
||||
|
||||
if (event === 'message_end' || event === 'workflow_finished') {
|
||||
this.$set(this.currentMessage, 'messageEnd', true)
|
||||
// this.currentMessage.messageEnd = true
|
||||
}
|
||||
if (!this.currentMessage || !answer) return
|
||||
if (event !== 'message') return
|
||||
|
||||
@@ -392,7 +397,7 @@ export default {
|
||||
const chars = {
|
||||
answer: answer,
|
||||
isThink: isThink,
|
||||
message_id
|
||||
message_id,
|
||||
}
|
||||
|
||||
this.typingQueue.push(chars)
|
||||
@@ -467,8 +472,8 @@ export default {
|
||||
|
||||
cancelSend() {
|
||||
this.requestSingle.abort()
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
</span>
|
||||
<div class="text-right fs12 mb5 mr10" style="font-size: 10px; color: #f6aa21">
|
||||
<!-- 新增点赞和踩按钮 -->
|
||||
<div class="reaction-buttons mb10" v-if="message.type !== 'user' && !message.status">
|
||||
<div class="reaction-buttons mb10" v-if="message.type !== 'user' && !message.status && message.messageEnd">
|
||||
<button @click="handleReaction(message, 'like')" class="like">
|
||||
<svg-icon :icon-class="message.isLike ? 'fillLike' : 'like'" class-name="chat-icon"></svg-icon>
|
||||
</button>
|
||||
|
||||
@@ -119,6 +119,7 @@ export default {
|
||||
showProduct() {
|
||||
this.messages = []
|
||||
this.$refs.chatMessage.requestSingle.abort()
|
||||
this.conversationId = ''
|
||||
},
|
||||
|
||||
getIsThink(e) {
|
||||
|
||||
@@ -147,6 +147,7 @@ export default {
|
||||
this.messages.splice(0, this.messages.length, {
|
||||
type: 'bot',
|
||||
text: `这里是产品知识小助手,请告诉我您想要了解哪个产品?也可以输入以下信息,我帮您进行精准查询:\n\n1.投保规则\n\n2.保障责任\n\n3.增值服务\n\n您可以直接向我提问~`,
|
||||
messageEnd: true,
|
||||
})
|
||||
},
|
||||
},
|
||||
|
||||
@@ -153,6 +153,7 @@ export default {
|
||||
\n\n2.如果您需要推荐理财储蓄类产品,您可以告诉我以下信息:
|
||||
\n\n• 客户主要目标是什么?(财富升值/子女教育/资产传承/养老保障)
|
||||
\n\n• 客户的年龄、性别、年收入、风险承受能力`,
|
||||
messageEnd: true,
|
||||
})
|
||||
},
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user