若依项目AI 助手代码解析

基于 Vue.js 和 Element UI 的 AI 助手组件

一、组件整体结构

这个 AI 助手组件由三部分组成:

  1. 悬浮按钮:点击后展开 / 收起对话窗口
  2. 对话窗口:显示历史消息和输入框
  3. API 调用逻辑:与 AI 服务通信并处理响应
html 复制代码
<template>
  <div class="ai-assistant">
    <!-- 悬浮按钮 -->
    <div class="chat-icon" @click="toggleChat">
      <i class="el-icon-chat-dot-round"></i>
    </div>

    <!-- 对话框 -->
    <el-dialog title="AI 助手" :visible.sync="dialogVisible">
      <div class="chat-container">
        <!-- 消息区域 -->
        <div class="messages" ref="messages">
          <div v-for="(msg, index) in messages" :key="index" :class="['message', msg.role]">
            <div class="content">{{ msg.content }}</div>
          </div>
          <div v-if="loading" class="loading">思考中...</div>
        </div>

        <!-- 输入区域 -->
        <div class="input-area">
          <el-input v-model="inputMessage" @keyup.enter.native="sendMessage">
            <el-button slot="append" @click="sendMessage">发送</el-button>
          </el-input>
        </div>
      </div>
    </el-dialog>
  </div>
</template>

二、AI 功能实现流程

1. 用户交互阶段

当用户点击悬浮按钮时:

  • 调用toggleChat()方法切换对话框显示状态
  • 对话框使用 Element UI 的el-dialog组件实现

当用户输入内容并点击发送按钮(或按 Enter 键)时:

  • 触发sendMessage()方法
  • 检查输入内容是否为空,避免无效请求
2. 消息处理阶段
javascript 复制代码
async sendMessage() {
  if (!this.inputMessage.trim()) return;

  // 1. 添加用户消息到对话历史
  const userMsg = { role: "user", content: this.inputMessage };
  this.messages.push(userMsg);
  this.inputMessage = ""; // 清空输入框
  this.loading = true; // 显示"思考中..."状态

  try {
    // 2. 调用AI API
    const response = await fetch("https://api.siliconflow.cn/v1/chat/completions", {
      method: "POST",
      headers: {
        "Authorization": "XXXXXXXXXXXXXXXXXX",
        "Content-Type": "application/json"
      },
      body: JSON.stringify({
        model: "Qwen/QwQ-32B",
        messages: this.messages, // 传递完整对话历史
        temperature: 0.7,
        max_tokens: 512
      })
    });

    // 3. 处理API响应
    const data = await response.json();
    if (data.choices && data.choices.length > 0) {
      const aiMsg = {
        role: "assistant",
        content: data.choices[0].message.content
      };
      this.messages.push(aiMsg); // 添加AI回复到对话历史
    }
  } catch (error) {
    console.error("API Error:", error);
    this.$message.error("请求失败,请稍后重试");
  } finally {
    this.loading = false; // 隐藏加载状态
    // 滚动到底部显示最新消息
    this.$nextTick(() => {
      this.$refs.messages.scrollTop = this.$refs.messages.scrollHeight;
    });
  }
}
3. API 请求解析

这个 AI 助手使用了一个第三方 API(https://api.siliconflow.cn),该 API 兼容 OpenAI ChatCompletion 接口规范,主要参数包括:

  • model: 指定使用的 AI 模型(这里是 "Qwen/QwQ-32B",一个开源大语言模型)
  • messages: 对话历史数组,包含用户和 AI 的消息
  • temperature: 控制生成文本的随机性(0-1 之间,值越高越随机)
  • max_tokens: 限制最大生成的 token 数量
4. 消息渲染与样式
html 复制代码
.message {
  margin: 10px 0;
  &.user {
    text-align: right;
    .content {
      background: #409EFF;
      color: white;
    }
  }
  &.assistant {
    text-align: left;
    .content {
      background: #f0f2f5;
    }
  }
  .content {
    display: inline-block;
    max-width: 80%;
    padding: 8px 12px;
    border-radius: 12px;
    word-break: break-word;
  }
}

通过 CSS 类区分用户消息和 AI 回复:

  • 用户消息右对齐,使用蓝色背景
  • AI 回复左对齐,使用灰色背景
  • 都使用圆角矩形和最大宽度限制
相关推荐
weisian1511 分钟前
进阶篇-8-数学篇-7--特征值与特征向量:AI特征提取的核心逻辑
人工智能·pca·特征值·特征向量·降维
Java程序员 拥抱ai4 分钟前
撰写「从0到1构建下一代游戏AI客服」系列技术博客的初衷
人工智能
186******205318 分钟前
AI重构项目开发全流程:效率革命与实践指南
人工智能·重构
森之鸟16 分钟前
多智能体系统开发入门:用鸿蒙实现设备间的AI协同决策
人工智能·harmonyos·m
铁蛋AI编程实战23 分钟前
大模型本地轻量化微调+端侧部署实战(免高端GPU/16G PC可运行)
人工智能·架构·开源
铁蛋AI编程实战24 分钟前
最新版 Kimi K2.5 完整使用教程:从入门到实战(开源部署+API接入+多模态核心功能)
人工智能·开源
我有医保我先冲28 分钟前
AI 时代 “任务完成“ 与 “专业能力“ 的区分:理论基础、行业影响与个人发展策略
人工智能·python·机器学习
Bamtone202536 分钟前
PCB切片分析新方案:Bamtone MS90集成AI的智能测量解决方案
人工智能
Warren2Lynch37 分钟前
2026年专业软件工程与企业架构的智能化演进
人工智能·架构·软件工程
_waylau1 小时前
【HarmonyOS NEXT+AI】问答08:仓颉编程语言是中文编程语言吗?
人工智能·华为·harmonyos·鸿蒙·仓颉编程语言·鸿蒙生态·鸿蒙6