更新记录

2.1.46(2025-08-27) 下载此版本

  1. 商品样式修复

2.1.45(2025-08-27) 下载此版本

  1. 样式修复

2.1.44(2025-08-27) 下载此版本

  1. 商品样式修复
查看更多

平台兼容性

uni-app

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - - - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 快应用-华为 快应用-联盟
-

其他

多语言 暗黑模式 宽屏模式
× ×

🤖 AI智能对话插件使用手册

byt-ai-agent-uni - 基于uni-app的AI智能对话插件,支持H5、小程序、APP等多端部署

📋 目录

✨ 功能特色

🔥 核心功能

  • 🚀 多端支持: H5、微信小程序、APP等全端适配
  • 💬 智能对话: 支持文本、图片、图表等多种消息类型
  • 🧠 深度思考: 集成深度思考模式,提供更准确的回答
  • 🔍 联网搜索: 实时获取最新信息
  • 🎨 主题定制: 完全可定制的UI主题和样式
  • 📱 响应式设计: 自适应大屏和移动端显示

🛠 技术特性

  • ⚡ 实时通信: WebSocket实时消息推送
  • 🔄 Mock模式: 支持离线演示和开发调试
  • 🔐 安全认证: 完整的token鉴权机制
  • 💾 历史记录: 自动保存对话历史
  • 🔃 断线重连: 智能重连机制保证稳定性
  • 📦 直接导入: 组件内部直接导入API,无需外部配置文件

✨ 技术交流

扫码入群

🚀 快速开始

第一步:插件安装

点击右上角"下载插件并导入HBuilderX"到项目中,或手动将插件文件放置到 uni_modules 目录下。

第二步:引入样式

⚠️ 重要:此步骤为必需,组件依赖BEM样式工具函数

选择以下任一方式引入插件样式:

方式一:在 uni.scss 中引入(推荐)

@import "@/uni_modules/byt-ai-agent-uni/index.scss";

方式二:在 App.vue 中引入

<style lang="scss">
@import "@/uni_modules/byt-ai-agent-uni/index.scss";
</style>

验证引入是否成功:

  • 组件能正常显示样式
  • 控制台无SCSS编译错误
  • 如出现 Undefined mixin 'b' 错误,请检查引入路径

第三步:环境变量配置

⚠️ 重要:Mock模式需要配置环境变量控制

创建配置文件

AI智能体插件支持Mock模式,无需真实API即可体验完整功能。通过环境变量控制:

1. 在项目根目录创建环境配置文件 envConfig.js

// envConfig.js - 环境配置文件
export const envConfig = {
  // 基础配置
  NODE_ENV: process.env.NODE_ENV || 'development',

  // API配置 - 根据你的项目需求配置
  API_BASE_URL: process.env.NODE_ENV === 'development' 
    ? '/api'  // 开发环境使用代理
    : 'https://api.yummall.cn', // 生产环境使用直接地址

  // Mock配置
  MOCK_URL: 'http://localhost:3000',
  USE_MOCK: false, // 关闭Mock模式,使用真实API
  OPEN_MOKE: false, // 关闭Mock模式

  // WebSocket配置
  WEBSOCKET_URL: process.env.NODE_ENV === 'development'
    ? '/ws'  // 开发环境使用代理
    : 'wss://api.yummall.cn', // 生产环境使用直接地址
  WS_CHAT_PATH: '/ws-anno/chat.ws',
};

// 导出配置对象
export default envConfig;

2. 配置模版:

⚠️ 重要:根据你的项目类型选择对应的环境变量获取方式

方式A: uni-app项目(使用 process.env)

// envConfig.js - uni-app项目配置
export const envConfig = {
  // 基础配置
  NODE_ENV: process.env.NODE_ENV || 'development',

  // API配置 - 根据你的项目需求修改
  API_BASE_URL: process.env.NODE_ENV === 'development' 
    ? '/api'  // 开发环境:使用代理或本地地址
    : 'https://api.yummall.cn', // 生产环境:使用正式地址

  // WebSocket配置
  WEBSOCKET_URL: process.env.NODE_ENV === 'development'
    ? '/ws'  // 开发环境:使用代理或本地地址
    : 'wss://api.yummall.cn', // 生产环境:使用正式地址
  WS_CHAT_PATH: '/ws-anno/chat.ws',

  // Mock模式配置
  OPEN_MOKE: false, // true=Mock模式,false=正式模式
  USE_MOCK: false,
  MOCK_URL: 'http://localhost:3000',
};

export default envConfig;

方式B: Vite项目(使用 import.meta.env)

// envConfig.js - Vite项目配置
export const envConfig = {
  // 基础配置
  NODE_ENV: import.meta.env?.NODE_ENV || 'development',

  // API配置 - 根据你的项目需求修改
  API_BASE_URL: import.meta.env?.NODE_ENV === 'development' 
    ? '/api'  // 开发环境:使用代理或本地地址
    : 'https://api.yummall.cn', // 生产环境:使用正式地址

  // WebSocket配置
  WEBSOCKET_URL: import.meta.env?.NODE_ENV === 'development'
    ? '/ws'  // 开发环境:使用代理或本地地址
    : 'wss://api.yummall.cn', // 生产环境:使用正式地址
  WS_CHAT_PATH: '/ws-anno/chat.ws',

  // Mock模式配置
  OPEN_MOKE: import.meta.env?.VITE_OPEN_MOKE === 'true', // 从环境变量读取
  USE_MOCK: import.meta.env?.VITE_USE_MOCK === 'true',
  MOCK_URL: 'http://localhost:3000',
};

export default envConfig;

3. 配置项说明:

配置项 说明 示例值 必填 获取方式
NODE_ENV 环境标识 'development' / 'production' process.env.NODE_ENVimport.meta.env?.NODE_ENV
API_BASE_URL API基础地址 '/api' / 'https://api.example.com' 根据NODE_ENV动态设置
WEBSOCKET_URL WebSocket地址 '/ws' / 'wss://api.example.com' 根据NODE_ENV动态设置
OPEN_MOKE Mock模式开关 true / false 直接设置或从环境变量读取
WS_CHAT_PATH WebSocket路径 '/ws-anno/chat.ws' 直接设置
USE_MOCK 是否使用Mock数据 true / false 直接设置或从环境变量读取

4. 环境变量获取方式说明:

项目类型 推荐方式 环境变量获取 适用场景
uni-app项目 方式A process.env.NODE_ENV 使用webpack构建的项目
Vite项目 方式B import.meta.env?.NODE_ENV 使用Vite构建的项目
混合项目 方式C 兼容两种方式 需要跨平台兼容的项目

5. Mock模式特性:

完整功能体验

  • 模拟真实的AI对话流程
  • 支持流式消息回复
  • 包含深度思考功能演示
  • 支持多种消息类型(文本、图表、商品等)

离线可用

  • 无需网络连接
  • 无需配置真实API
  • 无需智能体服务

开发友好

  • 快速原型验证
  • UI/UX测试
  • 功能演示

6. 使用示例:

<template>
  <view class="container">
    <!-- 组件会自动根据envConfig判断是否启用Mock模式 -->
    <byt-dialogue
      :config="dialogueConfig"
      :agentId="agentId"
      :agentName="agentName"
    />
  </view>
</template>

<script>
import { envConfig } from './envConfig.js';

export default {
  data() {
    return {
      // Mock模式下agentId可以是任意值
      agentId: "demo-agent-id", 
      agentName: "AI演示助手",
      dialogueConfig: {
        userInfo: {
          userId: "demo-user-123"
        },
        // Mock模式下的推荐问题
        promptItems: [
          { btnName: '功能', text: '展示图表' },
          { btnName: '功能', text: '商品推荐' },
          { btnName: '功能', text: '优惠券' },
          { btnName: '功能', text: '活动信息' }
        ]
      }
    }
  },
  computed: {
    // 可以通过计算属性获取当前Mock模式状态
    isMockMode() {
      return envConfig.OPEN_MOKE === true;
    }
  }
}
</script>

7. 调试和验证:

// 在控制台查看当前配置状态
import { envConfig } from './envConfig.js';

console.log('当前环境:', envConfig.NODE_ENV);
console.log('API地址:', envConfig.API_BASE_URL);
console.log('Mock模式状态:', envConfig.OPEN_MOKE);

// 在组件中动态判断
if (envConfig.OPEN_MOKE) {
  console.log('🎭 当前运行在Mock模式');
} else {
  console.log('🚀 当前运行在正式模式');
}

8. 注意事项:

⚠️ 环境变量获取方式

  • uni-app项目使用 process.env.NODE_ENV
  • Vite项目使用 import.meta.env?.NODE_ENV
  • 混合项目可使用兼容配置

⚠️ 配置灵活性

  • 支持多种环境变量获取方式
  • 可根据项目需求自定义配置
  • 支持代理配置解决跨域问题

⚠️ Mock模式安全

  • Mock模式仅用于开发和演示
  • 生产环境建议设置为 false
  • 不要在Mock模式下处理敏感数据

完整项目结构示例

配置完成后,你的项目结构应该如下:

your-project/
├── envConfig.js              # 环境配置文件(必需)
├── vue.config.js             # 代理配置(可选)
├── manifest.json             # uni-app配置
├── src/
│   ├── uni.scss             # 已引入插件样式
│   ├── main.js              # 应用入口文件
│   ├── service/
│   │   └── api/
│   │       └── ai-agent.js  # AI对话API接口文件(正式模式需要)
│   └── uni_modules/
│       └── byt-ai-agent-uni/  # AI智能体插件

说明:

  • envConfig.js: 必需的环境配置文件,支持多种配置方式
  • Mock模式: 配置 OPEN_MOKE: true,无需API配置文件
  • 正式模式: 配置 OPEN_MOKE: false,需要创建API接口文件
  • 代理配置: 开发环境建议配置代理避免跨域问题

模式选择建议

🎭 推荐使用Mock模式的场景:

  • 🚀 项目初期原型验证
  • 🎨 UI/UX设计验证
  • 📱 前端开发和调试
  • 🎪 产品演示和展示
  • 📋 功能测试和验收
  • 🔧 没有后端API环境

🚀 推荐使用正式模式的场景:

  • 🏭 生产环境部署
  • 🔗 有真实AI服务
  • 📊 需要真实数据处理
  • 🔐 需要用户认证
  • 📈 需要数据统计分析
  • 📱 小程序开发(配置简单,组件自动处理)

第四步:配置API文件

💡 提示:如果使用Mock模式(VITE_OPEN_MOKE=true),可以跳过此步骤直接使用组件

如果你选择正式模式或需要连接真实的AI服务,需要配置API接口:

创建API服务文件

src/service/api/ 目录下创建 ai-agent.js 文件:

import request from '../request';

/**
 * AI对话相关API接口
 */

// 获取历史对话消息
export const fetchChatHistoryList = (data, config = {}) => {
  return request.post('/cms/aiDialogueRecord/getPageList', data, {
    timeout: 60000,
    custom: {
      showErrorToast: true,
      ...config.custom
    },
    ...config
  });
};

// 获取语音识别的token
export const fetchChatAudioToken = (data, config = {}) => {
  return request.post('/cms/aiDialogueHistory/getBaiduToken', data, {
    timeout: 60000,
    custom: {
      showErrorToast: true,
      ...config.custom
    },
    ...config
  });
};

// 清除chatGPT的上下文内容
export const fetchChatClearMessage = (data, config = {}) => {
  return request.post('/cms/aiDialogueHistory/delMessage', data, {
    timeout: 60000,
    custom: {
      showErrorToast: true,
      ...config.custom
    },
    ...config
  });
};

// 获取打开一个新的对话的historyId
export const fetchChatOpenNewHistory = (data, config = {}) => {
  return request.post('/cms/aiDialogueHistory/add', data, {
    timeout: 60000,
    custom: {
      showErrorToast: true,
      ...config.custom
    },
    ...config
  });
};

// 获取所有常问问题
export const fetchChatGuessProblem = (data, config = {}) => {
  return request.post('/digitalPortal/manage/problem/all', data, {
    timeout: 60000,
    custom: {
      showErrorToast: true,
      ...config.custom
    },
    ...config
  });
};

// 对话列表
export const fetchChatSessionList = (data, config = {}) => {
  return request.post('/cms/aiDialogueHistory/getPageList', data, {
    timeout: 60000,
    custom: {
      showErrorToast: true,
      ...config.custom
    },
    ...config
  });
};

// 新智能体列表
export const fetchChatTechnologyList = (data, config = {}) => {
  return request.post('/cms/aiAgent/list', data, {
    timeout: 60000,
    custom: {
      showErrorToast: true,
      ...config.custom
    },
    ...config
  });
};

// 获取智能体列表详情
export const fetchChatTechnologyDetail = (data, config = {}) => {
  return request.post('/cms/aiAgent/detail', data, {
    timeout: 60000,
    custom: {
      showErrorToast: true,
      ...config.custom
    },
    ...config
  });
};

// 获取默认智能体
export const fetchGetDefaultAgent = (data, config = {}) => {
  return request.post('/cms/aiAgent/getDefaultAgent', data, {
    timeout: 60000,
    custom: {
      showErrorToast: true,
      ...config.custom
    },
    ...config
  });
};

/**
 * 获取智能体详情
 * @param {Object} data 查询参数
 * @param {Object} config 配置参数
 * @returns {Promise}
 */
export const fetchGetAgentDetail = (data, config = {}) => {
  return request.post('/cms/aiAgent/detail', data, {
    timeout: 60000,
    custom: {
      showErrorToast: true,
      ...config.custom
    },
    ...config
  });
};

// 百度语音识别接口
export const fetchBaiduAudioRecognition = (data, config = {}) => {
  return request.post('/cms/aiDialogueHistory/VoiceToText', data, {
    timeout: 60000,
    custom: {
      showErrorToast: true,
      ...config.custom
    },
    ...config
  });
};

/**
 * 创建对话会话
 * @param {Object} data 创建参数
 * @param {Object} config 配置参数
 * @returns {Promise}
 */
export const fetchChatCreateSession = (data, config = {}) => {
  return request.post('/appAgent/conversation/create', data, {
    timeout: 60000,
    custom: {
      showErrorToast: true,
      ...config.custom
    },
    ...config
  });
};

说明:

  1. 文件位置: 必须放在 src/service/api/ai-agent.js
  2. 导入方式: 使用项目现有的request工具
  3. 接口格式: 所有接口都使用POST方法,统一配置超时和错误处理
  4. 参数结构: 支持data参数和config配置对象
  5. 错误处理: 统一启用错误提示 showErrorToast: true

API接口说明:

接口名称 路径 说明 必需
fetchChatHistoryList /cms/aiDialogueRecord/getPageList 获取历史消息列表
fetchChatAudioToken /cms/aiDialogueHistory/getBaiduToken 获取语音识别token
fetchChatClearMessage /cms/aiDialogueHistory/delMessage 清除对话上下文
fetchChatOpenNewHistory /cms/aiDialogueHistory/add 创建新对话历史
fetchChatGuessProblem /digitalPortal/manage/problem/all 获取推荐问题
fetchChatSessionList /cms/aiDialogueHistory/getPageList 获取会话列表
fetchChatTechnologyList /cms/aiAgent/list 获取智能体列表
fetchChatTechnologyDetail /cms/aiAgent/detail 获取智能体详情
fetchGetDefaultAgent /cms/aiAgent/getDefaultAgent 获取默认智能体
fetchGetAgentDetail /cms/aiAgent/detail 获取智能体详情
fetchChatCreateSession /appAgent/conversation/create 创建对话会话
fetchBaiduAudioRecognition /cms/aiDialogueHistory/VoiceToText 百度语音识别

✅ 必需 ⭕ 可选(不影响基础功能)

第五步:基础使用

现在可以开始使用AI智能体组件了!

基础示例

<template>
  <view class="container">
    <!-- AI对话组件 -->
    <byt-dialogue
      :config="dialogueConfig"
      :agentId="agentId"
      :agentName="agentName"
    />
  </view>
</template>

<script>
export default {
  data() {
    return {
      // 智能体ID(必填)
      agentId: "your-agent-id", 
      // 智能体名称
      agentName: "AI助手",
      // 基础配置
      dialogueConfig: {
        userInfo: {
          userId: "user-123" // 用户ID(必填)
        }
      }
    }
  },
  computed: {
    // 当前是否为Mock模式(自动根据环境变量判断)
    isMockMode() {
      return import.meta.env.VITE_OPEN_MOKE === 'true' || import.meta.env.VITE_OPEN_MOKE === true;
    }
  },
  created() {
    // 启动时显示当前模式
    if (this.isMockMode) {
      console.log('🎭 AI助手运行在Mock模式 - 无需配置真实API');
    } else {
      console.log('🚀 AI助手运行在正式模式 - 请确保API已正确配置');
    }
  }
}
</script>

高级配置示例

<template>
  <view class="ai-chat-page">
    <!-- 带完整配置的AI对话组件 -->
    <byt-dialogue
      :config="advancedConfig"
      :agentId="selectedAgentId"
      :agentName="selectedAgentName"
      :width="'100%'"
      :height="'100vh'"
      :backShow="true"
    />
  </view>
</template>

<script>
export default {
  data() {
    return {
      // 动态智能体配置
      selectedAgentId: "agent-001",
      selectedAgentName: "专业AI助手",

      // 高级配置
      advancedConfig: {
        // 用户信息(必填)
        userInfo: {
          userId: "user-12345"
        },

        // 自定义主题色
        colorIcon: {
          mainColor: '#007aff',
          assistColor: '#5ac8fa',
          textMainColor: '#007aff',
          userTextColor: '#FFFFFF',
          userBgColor: '#007aff'
        },

        // 欢迎语配置
        startup: {
          welcomeShow: true,
          tip: this.isMockMode 
            ? '我是AI演示助手,您可以体验各种功能!' 
            : '我是您的专属AI助手,有什么可以帮您的吗?',
          avatar: 'https://example.com/avatar.png',
          backgroundColor: 'linear-gradient(90deg, #E7FCF6 0%, #F7FFEE 50%, #DFF8FF 100%)'
        },

        // 功能开关
        guess: true,        // 显示推荐问题
        audio: true,        // 语音输入
        quickShow: true,    // 快速提问
        moreListShow: true, // 更多工具

        // 工具栏配置
        toolList: [
          {
            id: 1,
            icon: 'https://example.com/deep-think.svg',
            activeiIcon: 'https://example.com/deep-think-active.svg',
            name: '深度思考'
          },
          {
            id: 2,
            icon: 'https://example.com/web-search.svg',
            activeiIcon: 'https://example.com/web-search-active.svg',
            name: '联网搜索'
          }
        ],

        // Mock模式下的推荐问题(正式模式下会从API获取)
        promptItems: this.isMockMode ? [
          { btnName: '功能演示', text: '展示图表功能' },
          { btnName: '功能演示', text: '商品推荐展示' },
          { btnName: '功能演示', text: '优惠券功能' },
          { btnName: '功能演示', text: '活动信息展示' },
          { btnName: '深度思考', text: '复杂问题分析' },
          { btnName: '深度思考', text: '多步骤推理' }
        ] : [],

        // 消息配置
        message: {
          answerWait: this.isMockMode ? 'AI演示助手思考中...' : 'AI助手正在思考...',
          greeting: this.isMockMode ? '欢迎体验AI助手演示!' : '您好!有什么可以帮助您的?'
        },

        // 支持的消息类型
        typeWhiteList: ['text', 'chart', 'image', 'activity', 'coupon', 'goods', 'tables'],

        // 角色配置
        roles: {
          ai: {
            name: this.selectedAgentName,
            avatar: 'https://example.com/ai-avatar.png',
            placement: 'start'
          },
          user: {
            name: '我',
            avatar: 'https://example.com/user-avatar.png',
            placement: 'end'
          }
        }
      }
    }
  },
  computed: {
    // Mock模式判断
    isMockMode() {
      return import.meta.env.VITE_OPEN_MOKE === 'true' || import.meta.env.VITE_OPEN_MOKE === true;
    },

    // 动态页面标题
    pageTitle() {
      return this.isMockMode ? 'AI助手演示' : 'AI智能助手';
    }
  },
  created() {
    // 根据模式进行初始化
    this.initializeByMode();
  },
  methods: {
    // 根据模式初始化
    initializeByMode() {
      if (this.isMockMode) {
        console.log('🎭 Mock模式初始化');
        // Mock模式下可以使用任意配置
        this.selectedAgentId = 'demo-agent';
        this.selectedAgentName = 'AI演示助手';
      } else {
        console.log('🚀 正式模式初始化');
        // 正式模式下可能需要从API获取智能体列表
        this.loadAvailableAgents();
      }
    },

    // 加载可用的智能体(正式模式)
    async loadAvailableAgents() {
      try {
        // 这里可以调用API获取智能体列表
        // const agents = await fetchAgentList();
        // this.selectedAgentId = agents[0].id;
        // this.selectedAgentName = agents[0].name;
        console.log('智能体列表加载完成');
      } catch (error) {
        console.error('加载智能体列表失败:', error);
      }
    }
  }
}
</script>

<style lang="scss" scoped>
.ai-chat-page {
  width: 100%;
  height: 100vh;
  background: #f5f5f5;
}
</style>

快速测试

配置完成后,你可以通过以下方式快速测试:

1. Mock模式测试(推荐新手):

# 设置环境变量
echo "VITE_OPEN_MOKE=true" > .env.development

# 启动开发服务器
npm run dev

2. 正式模式测试:

# 设置环境变量
echo "VITE_OPEN_MOKE=false" > .env.development

# 确保API配置已完成,然后启动
npm run dev

3. 功能验证清单:

基础功能

  • [ ] 组件正常渲染
  • [ ] 欢迎语显示
  • [ ] 可以发送消息
  • [ ] 收到AI回复

Mock模式专项

  • [ ] 推荐问题显示
  • [ ] 点击推荐问题有回复
  • [ ] 深度思考功能演示
  • [ ] 多种消息类型展示(图表、商品等)

样式和交互

  • [ ] 主题色配置生效
  • [ ] 消息气泡样式正确
  • [ ] 滚动和动画流畅
  • [ ] 移动端适配良好

⚙️ 详细配置

组件Props

参数 类型 必填 默认值 说明
config Object {} 详细配置对象
agentId String - AI智能体ID(Mock模式下可任意值)
agentName String 'AI助手' 智能体显示名称
width String '100%' 组件宽度
height String '100vh' 组件高度
backShow Boolean true 是否显示返回按钮

📝 注意:Mock模式通过环境变量 VITE_OPEN_MOKE 自动控制,无需传入props

Config配置详解

const dialogueConfig = {
  // 👤 用户信息配置(必填)
  userInfo: {
    userId: "user-123" // 用户唯一标识
  },

  // 🎨 主题颜色和图标配置
  colorIcon: {
    mainColor: '#448ef7',        // 主题色
    assistColor: '#a8ecff',      // 辅助色  
    textMainColor: '#1890ff',    // 字体主色
    userTextColor: '#FFFFFF',    // 用户消息字体色
    userBgColor: '#448ef7',      // 用户消息背景色
    // 图标配置
    actionIcon: 'icon-url',      // 操作按钮图标
    copyIcon: 'icon-url',        // 复制图标
    refreshIcon: 'icon-url',     // 刷新图标
    // 更多图标配置...
  },

  // 🏠 启动欢迎配置
  startup: {
    welcomeShow: true,           // 是否显示欢迎栏
    tip: '我是AI助手,有什么可以帮您的?', // 欢迎语
    avatar: 'avatar-url',        // 头像
    backgroundColor: 'linear-gradient(90deg, #E7FCF6 0%, #F7FFEE 50%, #DFF8FF 100%)'
  },

  // 🖼️ 主体背景配置
  main: {
    background: 1,               // 预设背景(1-4)
    // 或自定义背景
    // background: {
    //   type: 'image',           // image|linear|color
    //   url: 'background-url'
    // },
    role: 1                      // 角色装饰图(1-4)
  },

  // 🛠️ 工具栏配置
  toolList: [
    {
      id: 1,
      icon: 'tool-icon-url',
      activeiIcon: 'active-icon-url', 
      name: '深度思考'
    }
  ],

  // ➕ 更多工具配置
  moreList: [
    { id: 1, icon: 'icon-url', name: '拍摄' },
    { id: 2, icon: 'icon-url', name: '录音' }
  ],

  // 🔧 功能开关
  moreListShow: true,            // 显示更多工具
  quickShow: true,               // 显示快速提问
  guess: false,                  // 显示推荐问题
  audio: true,                   // 语音输入功能

  // 💬 消息配置
  message: {
    answerWait: 'AI助手思考中',   // 等待回复提示
    greeting: '您好!有什么可以帮助您的?' // 问候语
  },

  // 📋 支持的消息类型
  typeWhiteList: ['text', 'chart', 'image', 'activity'],

  // 👥 角色配置
  roles: {
    ai: {
      name: 'AI助手',
      avatar: 'ai-avatar-url',
      placement: 'start'
    },
    user: {
      name: '用户',
      avatar: 'user-avatar-url', 
      placement: 'end'
    }
  }
};

🔗 API接口配置

主项目API服务配置

首先需要在主项目中实现所需的API服务,在 src/service/api/ai-agent.js 中:

// src/service/api/ai-agent.js
import request from '../request'; // 您的请求工具

/**
 * 获取历史对话消息
 * @param {Object} data 查询参数
 * @param {Object} config 配置参数
 * @returns {Promise}
 */
export const fetchChatHistoryList = (data, config = {}) => {
  return request.post('/cms/aiDialogueRecord/getPageList', data, {
    timeout: 60000,
    custom: {
      showErrorToast: true,
      ...config.custom
    },
    ...config
  });
};

/**
 * 获取语音识别的token
 * @param {Object} data 请求参数
 * @param {Object} config 配置参数
 * @returns {Promise}
 */
export const fetchChatAudioToken = (data, config = {}) => {
  return request.post('/cms/aiDialogueHistory/getBaiduToken', data, {
    timeout: 60000,
    custom: {
      showErrorToast: true,
      ...config.custom
    },
    ...config
  });
};

/**
 * 清除chatGPT的上下文内容
 * @param {Object} data 清除参数
 * @param {Object} config 配置参数
 * @returns {Promise}
 */
export const fetchChatClearMessage = (data, config = {}) => {
  return request.post('/cms/aiDialogueHistory/delMessage', data, {
    timeout: 60000,
    custom: {
      showErrorToast: true,
      ...config.custom
    },
    ...config
  });
};

/**
 * 获取打开一个新的对话的historyId
 * @param {Object} data 创建参数
 * @param {Object} config 配置参数
 * @returns {Promise}
 */
export const fetchChatOpenNewHistory = (data, config = {}) => {
  return request.post('/cms/aiDialogueHistory/add', data, {
    timeout: 60000,
    custom: {
      showErrorToast: true,
      ...config.custom
    },
    ...config
  });
};

/**
 * 获取所有常问问题
 * @param {Object} data 查询参数
 * @param {Object} config 配置参数
 * @returns {Promise}
 */
export const fetchChatGuessProblem = (data, config = {}) => {
  return request.post('/digitalPortal/manage/problem/all', data, {
    timeout: 60000,
    custom: {
      showErrorToast: true,
      ...config.custom
    },
    ...config
  });
};

/**
 * 对话列表
 * @param {Object} data 查询参数
 * @param {Object} config 配置参数
 * @returns {Promise}
 */
export const fetchChatSessionList = (data, config = {}) => {
  return request.post('/cms/aiDialogueHistory/getPageList', data, {
    timeout: 60000,
    custom: {
      showErrorToast: true,
      ...config.custom
    },
    ...config
  });
};

/**
 * 新智能体列表
 * @param {Object} data 查询参数
 * @param {Object} config 配置参数
 * @returns {Promise}
 */
export const fetchChatTechnologyList = (data, config = {}) => {
  return request.post('/cms/aiAgent/list', data, {
    timeout: 60000,
    custom: {
      showErrorToast: true,
      ...config.custom
    },
    ...config
  });
};

/**
 * 获取智能体列表详情
 * @param {Object} data 查询参数
 * @param {Object} config 配置参数
 * @returns {Promise}
 */
export const fetchChatTechnologyDetail = (data, config = {}) => {
  return request.post('/cms/aiAgent/detail', data, {
    timeout: 60000,
    custom: {
      showErrorToast: true,
      ...config.custom
    },
    ...config
  });
};

/**
 * 获取默认智能体
 * @param {Object} data 查询参数
 * @param {Object} config 配置参数
 * @returns {Promise}
 */
export const fetchGetDefaultAgent = (data, config = {}) => {
  return request.post('/cms/aiAgent/getDefaultAgent', data, {
    timeout: 60000,
    custom: {
      showErrorToast: true,
      ...config.custom
    },
    ...config
  });
};

/**
 * 获取智能体详情
 * @param {Object} data 查询参数
 * @param {Object} config 配置参数
 * @returns {Promise}
 */
export const fetchGetAgentDetail = (data, config = {}) => {
  return request.post('/cms/aiAgent/detail', data, {
    timeout: 60000,
    custom: {
      showErrorToast: true,
      ...config.custom
    },
    ...config
  });
};

/**
 * 百度语音识别接口
 * @param {Object} data 语音数据
 * @param {Object} config 配置参数
 * @returns {Promise}
 */
export const fetchBaiduAudioRecognition = (data, config = {}) => {
  return request.post('/cms/aiDialogueHistory/VoiceToText', data, {
    timeout: 60000,
    custom: {
      showErrorToast: true,
      ...config.custom
    },
    ...config
  });
};

/**
 * 创建对话会话
 * @param {Object} data 创建参数
 * @param {Object} config 配置参数
 * @returns {Promise}
 */
export const fetchChatCreateSession = (data, config = {}) => {
  return request.post('/appAgent/conversation/create', data, {
    timeout: 60000,
    custom: {
      showErrorToast: true,
      ...config.custom
    },
    ...config
  });
};

WebSocket配置

插件内部的WebSocket配置在 common/config.js 中:

import envConfig from '../../../envConfig'; //这里需要换成你自己的配置文件路径
// common/config.js (插件内部)
const serviceEnv = {
  development: {
    apiUrl: "http://localhost:9195",
    wsUrl: "ws://localhost:9195", 
    wsChartPath: "/ws-hello/chat.ws"
  },
  production: {
    apiUrl: "https://api.yourcompany.com",
    wsUrl: "wss://api.yourcompany.com",
    wsChartPath: "/ws-anno/chat.ws"
  }
};

const baseConfig = {
  apiUrl: serviceEnv[process.env.NODE_ENV].apiUrl,
  wsUrl: serviceEnv[process.env.NODE_ENV].wsUrl,
  wsChartPath: serviceEnv[process.env.NODE_ENV].wsChartPath,
  // 百度语音识别接口
  baiduAudioUrl: serviceEnv[process.env.NODE_ENV].apiUrl + '/cms/aiDialogueHistory/VoiceToText',
  // token获取方法(需要在主项目中提供)
  getToken: () => uni.getStorageSync("bytToken")
};

必需的API接口

插件依赖以下核心接口,主项目必须实现:

接口名称 HTTP方法 路径 说明 必需
fetchChatHistoryList POST /cms/aiDialogueRecord/getPageList 获取历史消息列表
fetchChatClearMessage POST /cms/aiDialogueHistory/delMessage 清除对话上下文
fetchChatOpenNewHistory POST /cms/aiDialogueHistory/add 创建新对话历史
fetchGetDefaultAgent POST /cms/aiAgent/getDefaultAgent 获取默认智能体
fetchGetAgentDetail POST /cms/aiAgent/detail 获取智能体详情
fetchChatCreateSession POST /appAgent/conversation/create 创建对话会话
fetchChatGuessProblem POST /digitalPortal/manage/problem/all 获取推荐问题
fetchChatAudioToken POST /cms/aiDialogueHistory/getBaiduToken 语音识别token
fetchBaiduAudioRecognition POST /cms/aiDialogueHistory/VoiceToText 语音识别服务
WebSocket - /ws-chat/chat.ws 实时消息推送

✅ 必需 ⭕ 可选(不影响基础功能)

API响应格式

所有API接口应遵循统一的响应格式:

// 成功响应
{
  "code": 200,
  "message": "success",
  "data": { /* 具体数据 */ }
}

// 错误响应
{
  "code": 400,
  "message": "error message",
  "data": null
}

📱 使用示例

基础对话页面

<template>
  <view class="chat-page">
    <byt-dialogue
      :config="config"
      :agentId="agentId" 
      :agentName="agentName"
      :backShow="true"
    />
  </view>
</template>

<script>
export default {
  data() {
    return {
      agentId: '',
      agentName: 'AI助手',
      config: {
        userInfo: { userId: 'user123' },
        guess: true,    // 开启推荐问题
        audio: true,    // 开启语音功能
        toolList: [     // 工具栏配置
          { id: 1, name: '深度思考', icon: 'icon-url' },
          { id: 2, name: '联网搜索', icon: 'icon-url' }
        ]
      }
    }
  },

  onLoad(options) {
    // 从路由参数获取智能体信息
    this.agentId = options.agentId;
    this.agentName = options.agentName || 'AI助手';
  }
}
</script>

<style scoped>
.chat-page {
  height: 100vh;
  background: #f5f5f5;
}
</style>

Mock模式演示

<template>
  <view class="demo-page">
    <!-- Mock模式,无需真实API -->
    <byt-dialogue
      :config="demoConfig"
      agentId="demo-agent"
      agentName="演示助手"
    />
  </view>
</template>

<script>
export default {
  data() {
    return {
      demoConfig: {
        userInfo: { userId: 'demo-user' },
        guess: true,
        startup: {
          tip: '这是演示模式,您可以体验对话功能'
        },
        main: { background: 2 }
      }
    }
  }
}
</script>

悬浮窗模式(仅H5/APP)

<template>
  <view class="main-page">
    <!-- 主页面内容 -->
    <view class="content">
      <button @click="openChat">打开AI助手</button>
    </view>

    <!-- 悬浮对话窗 -->
    <!-- #ifndef MP-WEIXIN -->
    <byt-dialogueFloating
      v-model:show="showFloating"
      v-model:type="floatingType"
      :typeButton="true"
    />
    <!-- #endif -->
  </view>
</template>

<script>
export default {
  data() {
    return {
      showFloating: false,
      floatingType: 1 // 1:悬浮 2:吸附 3:全屏
    }
  },

  methods: {
    openChat() {
      this.showFloating = true;
    }
  }
}
</script>

🚀 高级功能

1. 深度思考模式

// 在config.toolList中配置深度思考工具
toolList: [
  {
    id: 1, // 深度思考必须使用ID=1
    icon: 'deep-think-icon',
    activeiIcon: 'deep-think-active-icon',
    name: '深度思考'
  }
]

2. 图表数据展示

插件支持多种图表类型:

// 消息类型配置
typeWhiteList: [
  'text',      // 文本消息
  'chart',     // 图表数据
  'tables',    // 表格数据
  'image',     // 图片消息
  'activity',  // 活动卡片
  'coupon',    // 优惠券卡片
  'goods'      // 商品卡片
]

3. 自定义主题

// 完全自定义主题色彩
colorIcon: {
  mainColor: '#your-brand-color',
  assistColor: '#your-assist-color',
  textMainColor: '#your-text-color',
  userBgColor: '#your-user-bg-color',
  userTextColor: '#your-user-text-color',

  // 自定义图标
  sendRightIcon: 'your-send-icon-url',
  copyIcon: 'your-copy-icon-url',
  refreshIcon: 'your-refresh-icon-url'
}

4. 响应式适配

// 组件自动适配不同屏幕尺寸
// 大屏(>=700px)和小屏会使用不同的背景图
main: {
  background: 1, // 自动选择对应尺寸的背景图
  role: 1       // 角色装饰图也会自适应
}

❓ 常见问题

Q: 如何获取智能体ID?

A:

  1. 有智能体列表:调用智能体列表接口,用户选择后传入ID
  2. 使用默认智能体:不传agentId,组件会自动获取默认智能体

Q: Mock模式和正式模式有什么区别?

A:

  • Mock模式: 使用模拟数据,无需真实API,适合演示和开发
  • 正式模式: 连接真实API,需要配置完整的接口地址和token

Q: 小程序如何配置API?

A: 小程序使用与H5/APP相同的API文件,组件会自动处理配置

Q: WebSocket连接失败怎么办?

A:

  1. 检查WebSocket地址配置是否正确
  2. 确认token是否有效
  3. 查看网络连接状态
  4. 组件提供自动重连和手动重连功能

Q: 如何自定义消息类型?

A:

  1. typeWhiteList 中添加新类型
  2. 在对应的组件中处理新类型的渲染逻辑

Q: 如何禁用某些功能?

A:

config: {
  audio: false,        // 禁用语音功能
  quickShow: false,    // 禁用快速提问
  moreListShow: false, // 禁用更多工具
  guess: false         // 禁用推荐问题
}

Q: 如何监听对话事件?

A: 组件内部处理所有对话逻辑,如需扩展可以通过修改对应的方法:

// 在组件的methods中可以监听各种事件
problemClick(name) {
  // 推荐问题点击
  console.log('用户点击推荐问题:', name);
  this.sendMessage();
},

sendMessage() {
  // 消息发送前的处理
  console.log('发送消息:', this.message);
  // ... 原有逻辑
}

Q: 为什么不需要外部配置文件?

A:

  • 组件内部直接导入API函数,无需外部配置文件
  • 简化了配置流程,减少了出错的可能性
  • 更好的类型支持和代码提示
  • 避免了动态导入在小程序环境下的兼容性问题

Q: 如何调试API调用?

A:

// 在浏览器控制台查看API调用
// 组件会在控制台输出详细的API调用信息
console.log('API调用日志:', apiCallInfo);

// 也可以在Network面板查看具体的请求

📞 技术支持

如有其他问题,请:

  1. 查看插件源码中的详细注释
  2. 参考 pages 目录下的示例页面
  3. 联系技术支持团队

🎉 享受与AI的智能对话吧!

隐私、权限声明

1. 本插件需要申请的系统权限列表:

开启语音识别输入框功能需要录音权限

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议