fix(AI-new):修复产品推荐和知识问答场景下智能小助手未结束的问题- 在 chat-new.vue 中添加 messageEnd 标志来标识消息是否结束- 在 message.vue 中仅在消息结束时显示点赞和踩按钮- 在产品知识和推荐场景的初始消息中设置 messageEnd为 true-修复了智能小助手未结束导致的后续智能推荐场景异常

This commit is contained in:
陈昱达
2025-08-12 09:25:57 +08:00
parent ac32a02e71
commit f238835850
5 changed files with 36 additions and 28 deletions

View File

@@ -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>

View File

@@ -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>

View File

@@ -119,6 +119,7 @@ export default {
showProduct() {
this.messages = []
this.$refs.chatMessage.requestSingle.abort()
this.conversationId = ''
},
getIsThink(e) {

View File

@@ -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,
})
},
},

View File

@@ -153,6 +153,7 @@ export default {
\n\n2.如果您需要推荐理财储蓄类产品,您可以告诉我以下信息:
\n\n• 客户主要目标是什么?(财富升值/子女教育/资产传承/养老保障)
\n\n• 客户的年龄、性别、年收入、风险承受能力`,
messageEnd: true,
})
},
},