更新记录
2.1.46(2025-08-27) 下载此版本
- 商品样式修复
2.1.45(2025-08-27) 下载此版本
- 样式修复
2.1.44(2025-08-27) 下载此版本
- 商品样式修复
平台兼容性
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_ENV 或 import.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
});
};
说明:
- 文件位置: 必须放在
src/service/api/ai-agent.js
- 导入方式: 使用项目现有的request工具
- 接口格式: 所有接口都使用POST方法,统一配置超时和错误处理
- 参数结构: 支持data参数和config配置对象
- 错误处理: 统一启用错误提示
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:
- 有智能体列表:调用智能体列表接口,用户选择后传入ID
- 使用默认智能体:不传agentId,组件会自动获取默认智能体
Q: Mock模式和正式模式有什么区别?
A:
- Mock模式: 使用模拟数据,无需真实API,适合演示和开发
- 正式模式: 连接真实API,需要配置完整的接口地址和token
Q: 小程序如何配置API?
A: 小程序使用与H5/APP相同的API文件,组件会自动处理配置
Q: WebSocket连接失败怎么办?
A:
- 检查WebSocket地址配置是否正确
- 确认token是否有效
- 查看网络连接状态
- 组件提供自动重连和手动重连功能
Q: 如何自定义消息类型?
A:
- 在
typeWhiteList
中添加新类型 - 在对应的组件中处理新类型的渲染逻辑
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面板查看具体的请求
📞 技术支持
如有其他问题,请:
- 查看插件源码中的详细注释
- 参考
pages
目录下的示例页面 - 联系技术支持团队
🎉 享受与AI的智能对话吧!