实战教程:将AI大模型接入微信小程序,打造智能客服系统
本文介绍如何将微调后的AI大模型(基于Ollama和Dify)接入微信小程序,实现一个功能完整的智能客服系统。通过本文,你将学习到微信小程序开发、AI接口对接、UI设计等实用技能。
前言
在人工智能快速发展的今天,将AI大模型应用到实际业务场景中已经成为一种趋势。本文将带领大家完成一个完整的项目:将微调后的AI大模型接入微信小程序,打造一个智能客服系统。这个系统不仅界面美观,而且功能完整,可以直接用于实际业务场景。
技术栈
- 微信小程序开发
- AI大模型(基于Ollama和Dify)
- RESTful API
- 前端UI设计
一、项目概述
1.1 功能特点
- 美观的聊天界面
- 实时对话功能
- 自动滚动到最新消息
- 加载状态提示
- 错误处理机制
- 与AI大模型的无缝集成
1.2 技术难点
- 微信小程序与AI接口的对接
- 实时对话的实现
- 良好的用户体验设计
- 错误处理和异常情况的处理
二、项目结构
首先,让我们创建项目的基本结构:
project/
├── project.config.json // 项目配置文件
├── miniprogram/
│ ├── app.json // 应用配置文件
│ │ └── chat/
│ │ ├── chat.wxml // 聊天页面结构
│ │ ├── chat.wxss // 聊天页面样式
│ │ └── chat.js // 聊天页面逻辑
三、具体实现
3.1 项目配置
首先创建项目配置文件 project.config.json
:
{
"description": "项目配置文件",
"packOptions": {
"ignore": []
},
"miniprogramRoot": "miniprogram/",
"compileType": "miniprogram",
"projectname": "ai-customer-service",
"setting": {
"urlCheck": true,
"es6": true,
"enhance": true,
"postcss": true,
"minified": true
},
"appid": "你的小程序appid",
"libVersion": "2.30.2"
}
3.2 应用配置
在 app.json
中配置页面路由和窗口样式:
{
"pages": [
"pages/index/index",
"pages/chat/chat"
],
"window": {
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "AI智能客服",
"navigationBarTextStyle": "black"
}
}
3.3 聊天界面实现
3.3.1 页面结构 (chat.wxml)
<view class="chat-container">
<scroll-view scroll-y="true" class="chat-list" scroll-into-view="{{scrollToMessage}}">
<block wx:for="{{messages}}" wx:key="index">
<view class="message {{item.type === 'user' ? 'user-message' : 'ai-message'}}" id="msg-{{index}}">
<view class="message-content">
<text>{{item.content}}</text>
</view>
</view>
</block>
</scroll-view>
<view class="input-area">
<input class="message-input"
value="{{inputMessage}}"
bindinput="onInputChange"
placeholder="请输入您的问题..."
confirm-type="send"
bindconfirm="sendMessage"/>
<button class="send-btn" bindtap="sendMessage">发送</button>
</view>
</view>
3.3.2 页面样式 (chat.wxss)
.chat-container {
display: flex;
flex-direction: column;
height: 100vh;
background-color: #f5f5f5;
}
.chat-list {
flex: 1;
padding: 20rpx;
overflow-y: auto;
}
.message {
margin-bottom: 20rpx;
display: flex;
flex-direction: column;
}
.user-message {
align-items: flex-end;
}
.ai-message {
align-items: flex-start;
}
.message-content {
max-width: 70%;
padding: 20rpx;
border-radius: 10rpx;
word-wrap: break-word;
}
.user-message .message-content {
background-color: #007AFF;
color: white;
}
.ai-message .message-content {
background-color: white;
color: #333;
}
.input-area {
padding: 20rpx;
background-color: white;
border-top: 1rpx solid #e5e5e5;
display: flex;
align-items: center;
}
.message-input {
flex: 1;
height: 80rpx;
background-color: #f5f5f5;
border-radius: 40rpx;
padding: 0 30rpx;
margin-right: 20rpx;
}
.send-btn {
width: 120rpx;
height: 80rpx;
line-height: 80rpx;
text-align: center;
background-color: #007AFF;
color: white;
border-radius: 40rpx;
padding: 0;
font-size: 28rpx;
}
3.3.3 页面逻辑 (chat.js)
const app = getApp()
Page({
data: {
messages: [],
inputMessage: '',
scrollToMessage: '',
apiUrl: '你的API地址', // 替换为你的Dify API地址
apiKey: '你的API密钥' // 替换为你的Dify API密钥
},
onLoad: function() {
// 添加欢迎消息
this.setData({
messages: [{
type: 'ai',
content: '您好!我是AI智能客服,很高兴为您服务。请问有什么可以帮您?'
}]
})
},
onInputChange: function(e) {
this.setData({
inputMessage: e.detail.value
})
},
sendMessage: function() {
if (!this.data.inputMessage.trim()) return
const userMessage = this.data.inputMessage
const messages = this.data.messages
// 添加用户消息
messages.push({
type: 'user',
content: userMessage
})
this.setData({
messages: messages,
inputMessage: '',
scrollToMessage: `msg-${messages.length - 1}`
})
// 调用API获取AI回复
this.getAIResponse(userMessage)
},
getAIResponse: function(userMessage) {
wx.showLoading({
title: '正在思考...',
})
wx.request({
url: this.data.apiUrl,
method: 'POST',
header: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${this.data.apiKey}`
},
data: {
query: userMessage,
response_mode: "streaming",
conversation_id: "", // 如果需要保持对话上下文,需要保存并传递conversation_id
user: "user_" + Date.now() // 用户标识
},
success: (res) => {
const messages = this.data.messages
messages.push({
type: 'ai',
content: res.data.answer || '抱歉,我现在无法回答这个问题。'
})
this.setData({
messages: messages,
scrollToMessage: `msg-${messages.length - 1}`
})
},
fail: (error) => {
console.error('API请求失败:', error)
wx.showToast({
title: '网络错误,请重试',
icon: 'none'
})
},
complete: () => {
wx.hideLoading()
}
})
}
})
四、使用说明
- 在微信开发者工具中导入项目
- 在
project.config.json
中替换你的小程序 appid - 在
chat.js
中配置你的 Dify API 地址和 API 密钥 - 编译运行项目
五、进阶功能
如果你想要进一步完善这个项目,可以考虑添加以下功能:
- 聊天历史记录保存
- 支持图片或语音消息
- 添加更多的UI交互效果
- 实现对话上下文保持
- 添加用户认证功能
- 实现消息推送功能
六、注意事项
- API密钥的安全性:建议将API密钥存储在服务器端,通过自己的服务器中转请求
- 错误处理:确保所有可能的错误情况都得到妥善处理
- 性能优化:注意消息列表的性能,避免消息过多导致卡顿
- 用户体验:添加适当的加载提示和错误提示
七、总结
通过本文,我们完成了一个功能完整的AI智能客服小程序。这个项目不仅展示了如何将AI大模型应用到实际场景中,也展示了微信小程序开发的基本流程。希望这个项目能够帮助到你,如果你有任何问题,欢迎在评论区留言讨论。
八、参考资料
如果你觉得这篇文章对你有帮助,欢迎点赞、收藏和分享!你的支持是我持续创作的动力。
关注我,获取更多AI应用开发相关的技术文章!