跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScriptWeChatAI大前端

微信小程序接入 AI 服务实战:基于 Bmob SDK 实现智能对话

详细讲解了在微信小程序中集成 AI 聊天功能的完整流程。内容包括安装 mp-html 组件以支持 Markdown 渲染,配置 Bmob 后端云密钥并初始化 SDK,建立 WebSocket 长连接以接收流式文本响应,以及构建包含滚动视图和输入框的前端界面。通过补充缺失的消息处理辅助函数,实现了用户消息发送、AI 流式输出显示及会话管理的闭环,帮助开发者快速搭建具备智能对话能力的小程序应用。

ArchDesign发布于 2025/2/6更新于 2026/10/22105 浏览
微信小程序接入 AI 服务实战:基于 Bmob SDK 实现智能对话

微信小程序接入 AI 服务实战:基于 Bmob SDK 实现智能对话

在微信小程序开发中,集成人工智能服务可以显著提升用户体验。本文将详细介绍如何快速为小程序接入 AI 聊天功能,实现流式文本输出和 Markdown 渲染。

一、引入 mp-html 富文本组件

AI 模型通常返回 Markdown 格式的文本内容。为了在小程序中正确显示格式化后的文本(如标题、列表、代码块等),我们需要使用 mp-html 组件。

1. 安装组件

在小程序开发工具的命令行中执行以下命令:

npm install mp-html

如果提示缺少 npm 命令,请确保已配置好小程序的 npm 环境。

2. 配置页面

安装完成后,项目根目录会生成 miniprogram_npm 文件夹。打开 Index/index.json 文件,注册组件并设置页面标题:

{
  "navigationBarTitleText": "微信小程序接入 AI 示例",
  "usingComponents": {
    "mp-html": "mp-html"
  }
}

二、引入 Bmob AI 组件

Bmob 提供了便捷的 AI 接口封装,适合快速集成。

1. 设置 API 密钥

登录 Bmob 后端云平台,进入应用管理页面。点击 设置 -> 应用密钥,获取 Secret Key 和 API 安全码。这两个值将在初始化时用于身份验证。

2. 下载并引入 SDK

访问 Bmob 官方文档或资源页下载最新的 SDK 文件(例如 Bmob-2.5.30.min.js)。将文件复制到小程序项目的 utils 目录下。

在 app.js 文件中添加初始化代码:

const Bmob = require('/utils/Bmob-2.5.30.min.js');
// 替换为你的实际密钥
Bmob.initialize('你的 Secret Key', '你设置的 API 安全码');
wx.Bmob = Bmob;

三、初始化 AI 连接

为了实现流式对话体验,需要建立长连接并处理实时返回的数据。

打开 Index/index.js 文件,添加 initChat 方法:

initChat() {
  // 初始化 AI 链接
  this.ChatAi = wx.Bmob.ChatAI();

  let msg = '';
  let isStart = true;

  // 处理消息流
  this.ChatAi.onMessage((res) => {
    if (isStart) {
      isStart = false;
    }
    if (res === 'done') {
      // 完成标记
      if (msg !== '') {
        isStart = true;
      }
      msg = '';
    } else {
      // 拼接流式内容
      msg += res;
      this.amendMessage(this.createUserMessage(msg, false));
    }
  });

  // 处理连接关闭
  this.ChatAi.onClose(() => {
    console.log('连接被关闭,准备重新连接 Bmob AI 服务');
    this.ChatAi.connect();
  });
},

关键点说明:

  • wx.Bmob.ChatAI():建立与服务端的长连接。
  • onMessage:接收流式数据。由于是流式传输,内容会分多次到达,需进行拼接。
  • onClose:监听连接断开事件,自动重连以保证稳定性。

四、发送对话内容

绑定发送按钮事件,构建请求数据并发送给服务端。

sendMessage(e) {
  const content = this.data.inputContent;
  if (!content) return false;

  // 构造请求体
  const datas = {
    messages: [{
      content: content,
      role: 'user'
    }],
    session: 'bmobchat'
  };

  // 发送请求
  this.ChatAi.send(JSON.stringify(datas));

  // UI 更新
  this.pushMessage(this.createUserMessage(content, true));
  this.pushMessage(this.createUserMessage('AI 思考中...', false));
  this.setData({ inputContent: '' });
},

注意:

  • 当前示例仅发送单条消息,未携带历史上下文,因此 AI 表现可能较为独立。
  • role 固定为 user,标识提问者身份。

五、构造前端界面

修改 Index/index.wxml 文件,构建聊天容器和输入区域。

<view class="page-wrap">
  <scroll-view 
    class="chat-container" 
    scroll-y 
    scroll-into-view="{{lastMessageId}}" 
    scroll-top="9999999999">
    <view wx:for="{{messages}}" wx:for-item="message" wx:key="id" id="{{message.id}}" class="message {{message.type}}">
      <!-- 用户消息 -->
      <view wx:if="{{message.type == 'speak'}}" class="user-message {{message.isMe ? 'me' : 'other'}}">
        <image class="avatar" src="/images/{{message.isMe?'bmob':'ai'}}.png" mode="aspectFill"></image>
        <view class="text">
          <view class="content">
            <mp-html markdown content="{{message.content}}" />
          </view>
        </view>
      </view>
      <!-- 系统消息 -->
      <view wx:if="{{message.type == 'system'}}" class="system-message">
        {{message.content}}
      </view>
    </view>
    <view class="v-fake"></view>
  </scroll-view>

  <!-- 输入面板 -->
  <view class="input-panel">
    <button class="pic-icon"></button>
    <view class="send-input-box">
      <textarea 
        auto-height 
        type="text" 
        value="{{inputContent}}" 
        bindinput="changeInputContent"
        bindconfirm="sendMessage" 
        style="max-height: 300rpx !important;" 
        cursor-spacing='12'></textarea>
    </view>
    <button bindtap="sendMessage" class="send-btn" hover-class="hover">发送</button>
  </view>
</view>

样式文件较长,建议参考官方示例或根据需求自行调整 CSS,重点保证 scroll-view 的滚动行为和输入框的高度自适应。

六、补充辅助函数

为了使上述逻辑完整运行,需要在 Index/index.js 中补充缺失的消息处理函数。

// 创建消息对象
createUserMessage(content, isMe) {
  return {
    id: Date.now(),
    type: 'speak',
    content: content,
    isMe: isMe
  };
},

// 推送消息到列表
pushMessage(message) {
  const messages = this.data.messages || [];
  messages.push(message);
  this.setData({
    messages: messages,
    lastMessageId: message.id
  });
},

// 更新消息内容(用于流式输出)
amendMessage(newMessage) {
  const messages = this.data.messages;
  const index = messages.length - 1;
  if (index >= 0 && messages[index].type === 'speak') {
    messages[index].content = newMessage.content;
    this.setData({ messages: messages });
  }
},

// 输入框变化处理
changeInputContent(e) {
  this.setData({ inputContent: e.detail.value });
},

七、总结与优化建议

通过上述步骤,我们成功实现了微信小程序与 AI 服务的对接。以下是进一步优化建议:

  1. 上下文管理:在实际应用中,应维护一个会话历史数组,每次发送时将最近 N 条记录一并传给 AI,以保持对话连贯性。
  2. 错误处理:增加网络异常捕获机制,当连接失败时给予用户明确提示。
  3. 性能优化:对于长文本流式输出,避免频繁调用 setData,可考虑节流处理或仅在关键节点更新 UI。
  4. 安全性:切勿在前端硬编码 Secret Key,生产环境建议通过自有后端代理转发请求,保护密钥安全。

此方案可作为基础模板,开发者可根据业务需求扩展语音识别、图片上传等多模态功能。

目录

  1. 微信小程序接入 AI 服务实战:基于 Bmob SDK 实现智能对话
  2. 一、引入 mp-html 富文本组件
  3. 1. 安装组件
  4. 2. 配置页面
  5. 二、引入 Bmob AI 组件
  6. 1. 设置 API 密钥
  7. 2. 下载并引入 SDK
  8. 三、初始化 AI 连接
  9. 四、发送对话内容
  10. 五、构造前端界面
  11. 六、补充辅助函数
  12. 七、总结与优化建议

更多推荐文章

查看全部
  • 哈希算法基础:原理、函数与哈希表实现
  • AI 写作工具深度测评:主流模型与垂直软件对比
  • 本地部署 Llama3 大模型与 Open WebUI 界面教程
  • Neo4j 5.26 安装、配置与启动指南
  • C++ 继承机制:同名成员隐藏规则与派生类默认函数
  • 基于 Trae 与 Vizro 的低代码数据可视化仪表板构建方案
  • Linux 下 libwebkit2gtk-4.1-0 安装与依赖解析
  • 基于 AI 辅助的在线图书借阅平台设计与实现
  • 大模型常用架构及优缺点分析
  • LLaMA-2 与 Mixtral 提示词调优实战指南
  • Linux 进程控制:创建、退出、等待与替换
  • 纯 Verilog FPGA 双线性插值视频缩放设计与实现
  • Presentation AI:开源 AI 演示文稿生成工具
  • 老板电器发布全球首个 AI 烹饪大模型「食神」
  • Python 与前端集成:构建全栈应用
  • 提示词工程师:AI 大模型时代的新兴职业与技术解析
  • Java 一次性导出一千万条数据:从内存控制到性能优化
  • C++ STL 关联容器:set 与 map 核心用法详解
  • ωK 算法原理及推导
  • 基于FPGA的毕业设计效率提升:从串行仿真到并行硬件加速

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online