AI问答Bug修改
一、修改目标
1.AI问答的地方在新建对话的地方点击新建对话按钮后就自动先变成空白对话界面,然后发了第一个问题之后再调用后端新建对话的方法,就是能变成和网上AI开启新对话的效果一样就行
2.我希望我发送一个问题后就显示到对话框里面,现在是等AI恢复后他们一起出现,改成发送后等AI回复,也是改成和网上AI问答一样
二、修改代码
1.前端修改
// 修改后的方法
const startNewSession = async () => {
// 清空当前会话和消息
currentSessionId.value = null
currentMessages.value = []
newMessage.value = ''
};
const sendMessage = async () => {
if (!newMessage.value.trim()) return;
// 创建临时用户消息(立即显示)
const userMessage = {
id: Date.now(), // 临时ID
content: newMessage.value,
role: 'user',
createdAt: new Date().toISOString(),
editing: false
};
currentMessages.value.push(userMessage);
// 真实发送逻辑
try {
// 延迟创建会话(首次发送时)
if (!currentSessionId.value) {
const response = await axios.post('/api/qa/sessions', null, {
params: {
classicId: classicId.value,
userId: 1,
firstQuestion: newMessage.value.trim()
}
});
currentSessionId.value = response.data.id;
await fetchSessions(); // 刷新会话列表
}
// 发送真实消息
const messageRequest = {
sessionId: currentSessionId.value,
content: newMessage.value,
role: 'user',
parentId: null
};
const userResponse = await axios.post('/api/qa/messages', messageRequest);
// 获取AI回复
const aiResponse = await axios.get(`/api/qa/messages`, {
params: { sessionId: currentSessionId.value }
});
// 替换临时消息并添加AI回复
currentMessages.value = currentMessages.value
.filter(m => m.id !== userMessage.id)
.concat(aiResponse.data);
scrollToBottom();
} catch (error) {
// 失败时回滚临时消息
currentMessages.value = currentMessages.value.filter(m => m.id !== userMessage.id);
alert('发送失败,请重试');
}
newMessage.value = '';
};
2.后端修改
@Transactional
public QaMessage createMessageWithSession(Long userId, Long classicId, String content) {
// 自动创建会话
QaSession session = createNewSession(userId, classicId, content);
// 创建用户消息
QaMessage userMessage = addMessageToSession(session.getId(), content, "user", null);
// 生成AI回复
String aiResponse = aiService.getAIResponse(content);
QaMessage aiMessage = addMessageToSession(session.getId(), aiResponse, "assistant", userMessage.getId());
return aiMessage;
}