当前位置: 首页 > news >正文

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;
}

http://www.xdnf.cn/news/59401.html

相关文章:

  • 教育行业网络安全:守护学校终端安全,筑牢教育行业网络安全防线!
  • 数据结构——栈和队列
  • Debian GNU/Linux的新手入门介绍
  • 动态规划-零钱兑换
  • MCP 框架中,stdio 模式和 SSE(Server-Sent Events) 模式的区别是什么
  • 01_Flask快速入门教程介绍
  • 楼宇自控怎样推动能源高效利用与建筑设备的科学管理
  • 玩转Docker | 使用Docker部署nullboard任务管理工具
  • 介绍XML
  • 【C#】.net core 6.0调用MVC API接口时,提示Unsupported Media Type,状态码415
  • 多源异构网络安全数据(CAPEC、CPE、CVE、CVSS、CWE)的作用、数据内容及其相互联系的详细分析
  • 学习笔记二十二—— 并发五大常见陷阱
  • windows传文件给mac, linux或者其他windows
  • 单例模式的使用场景 以及 饿汉式写法(智能指针)
  • 批量替换多个 Word 文档中的指定图片
  • Vue的模板编译过程
  • QT写的exe嵌入到wpf中
  • 4.21 从0开始配置spark-local模式
  • django入门
  • 基于 FFmpeg 的音视频处理基础原理与实验探究
  • RocketMQ CommitLog 核心恢复机制解析:recoverNormally 如何守护消息可靠性
  • 45.[前端开发-JavaScript高级]Day10-迭代器-生成器
  • 深度学习中的归一化技术:从原理到实战全解析
  • 论文速报《Being-0:结合视觉语言模型与模块化技能的人形机器人智能体》
  • web worker
  • Spark-SQL4
  • B实验-12
  • Android(java) 接口(interface)的简单使用
  • Kotlin安卓算法总结
  • 使用谷歌浏览器自带功能将网页转换为PDF文件