给小程序接入AI服务之后,我的睡后收入又增加了

自从本人写了《[从零开始三天学会微信小程序开发]》教程以来,不断有人加我,一起交流微信小程序开发的事情,很让人开心。

也有一些人和我说,现在已经是AI时代了,怎么还用这种固定内容的模式呢?确实是的,自从上线《学生评语大全》这个小程序以来,陆陆续续不断收到老师们提的各种需求,如下图,都是这种固定内容模式无法满足的。

dc10ff33964a1d30ea8d57a77742988.jpg

于是,我就做了一个A/B测试,在原来的学生评语大全小程序中引入了AI生成评语的功能,上线之后,我在里面放置的激励视频广告每天都在不断增长,很多用户都是通过朋友圈分享介绍过来的。

image.png

其实接入AI非常简单,这个课程就给大家讲讲如何快速给小程序接入AI服务。

先看看最终的演示界面效果:

image.png

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

之所以要用到mp-html富文本组件组件,是因为很多时候,AI会返回markdown格式的富文本内容给我们,我们要对内容进行格式化显示。

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

npm install mp-html

如果在这过程中出现任何问题,比如提示缺少npm命令等,

安装并构建好mp-html富文本组件之后,你可以在项目文件中看到如下的目录文件:

image.png

接着,我们打开Index/index.json文件,添加如下的代码,表示设置页面的标题为“微信小程序接入AI示例”和在这个页面中用到mp-html组件:

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

二、引入Bmob AI组件

1、设置并获取API安全码

打开Bmob后端云,进入应用,点击 设置 -> 应用密钥,设置你这个应用的API安全码,并获取 Secret Key。这两个值会在接下来初始化的时候使用到。

image.png

2、下载和引入Bmob SDK

打开网址 [gitee.com/bmober/hydr…],下载最新的Bmob SDK,到目前为止最新的版本是Bmob-2.5.30.min.js,如下图:

image.png

下载完成之后,把文件拷贝到小程序utils文件夹下面,如下图所示:

image.png

打开app.js文件,在最前面添加如下的代码:

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

image.png

三、初始化AI

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

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

    // 返回消息处理,因为是以流的形式返回AI生成的结果,所以这里处理稍微复杂一些
    let msg = ''
    let isStart = true
    this.ChatAi.onMessage((res) => {
      if (isStart) {
        isStart = false
      }
      if (res == "done") {
        //  完成
        if (msg != "") {
          isStart = true
        } 
        msg = '';
      } else {
        msg = msg + res
        this.amendMessage(createUserMessage(msg, false))
      }
    })

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

这里解释几点:

  • wx.Bmob.ChatAI()表示我们这个小程序和Bmob AI服务开始建立长连接服务,为接下来持续的AI流服务提供基础保障。
  • this.ChatAi.onMessage方法表示对Bmob AI服务返回的内容进行处理,这里稍微有点复杂,因为我们更多的是希望用户可以实时感知到AI的内容服务,而不是等完成之后,再一次性返回,所以res会不断以流的形式返回生成的内容,我们接收到之后进行组装(msg = msg + res),this.amendMessage(createUserMessage(msg, false))方法把内容呈现给用户。等这次问答完成之后,res会返回done的标记下来。
  • this.ChatAi.onClose方法表示AI长连接中断,我们这里执行再次连接(this.ChatAi.connect())的工作就好了。

四、发送对话内容给AI服务

我们给发送按钮绑定sendMessage方法,并添加代码如下:

sendMessage(e) {
    var content = this.data.inputContent
    if (!content) {
      return false
    }

    // 设置发送给服务器的信息
    let datas = {
      "messages": [{
        "content": content,
        "role": "user"
      }],
      "session": "bmobchat"
    }
    //执行发送
    this.ChatAi.send(JSON.stringify(datas))
    //在UI中显示对话内容
    this.pushMessage(createUserMessage(content, true))
    this.pushMessage(createUserMessage("AI思考中...",false))
    //设置输入框内容为空
    this.setData({
      inputContent: ''
    })
  },
})

不知道如何给按钮绑定事件的朋友,可以直接去看源码(最后面),或者看本人之前写的教程。

这里需要解释几点:

  • 执行this.ChatAi.send方法发送问题给Bmob AI服务。
  • 注意发送给AI的数据格式,content表示发送的内容,提问者的role角色固定为user,session表示这次的会话标记(可以改为其他的)。这里的数据只有一条,也就是说,并不携带上下文,所以本案例中,AI会表现的有点傻傻的。

五、构造前端界面

修改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" wx:key="{{message.isMe?'bmob':'ai'}}"
          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>

样式文件比较长,这里就不再贴出来了,有兴趣的朋友可以直接查看源码。

如何学习AI大模型?

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/763950.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

K8S 集群节点缩容

环境说明&#xff1a; 主机名IP地址CPU/内存角色K8S版本Docker版本k8s231192.168.99.2312C4Gmaster1.23.1720.10.24k8s232192.168.99.2322C4Gwoker1.23.1720.10.24k8s233&#xff08;需下线&#xff09;192.168.99.2332C4Gwoker1.23.1720.10.24 1. K8S 集群节点缩容 当集群中有…

ROS2使用Python开发动作通信

1.创建接口节点 cd chapt4_ws/ ros2 pkg create robot_control_interfaces --build-type ament_cmake --destination-directory src --maintainer-name "joe" --maintainer-email "1027038527qq.com" mkdir -p src/robot_control_interfaces/action touch…

【微服务】微服务之Feign 与 Ribbon

文章目录 强烈推荐引言优点Feign示例什么是Ribbon&#xff1f;Ribbon 的优点Netflix Feign 和 Ribbon整合Feign 与 Ribbon 的关系Feign 与 Ribbon 结合使用的示例配置文件&#xff08;application.yml&#xff09;说明&#xff1a; Feign 与 Ribbon 结合使用的应用场景1. 动态服…

XD3C03P1G、XD3C01N3F比例方向控制阀放大板

XD3A01N2G、XD3A03N2G、XD3C03N1F、XD3C03P1G、XD3C01N3F、XD3C03N2F、XD3C01P4G、XD3C03P3G、XD3C03N2F、XD3C03N2G、XDP3A01P1F、XDP3C03N2G、XDP3A03P3G、XDP3C01NAF、XDP3C03P6G、XDP3A03PAG、XDP3A03N3F液压比例方向阀是液压系统中的关键元件&#xff0c;用于实现对流量、…

C#/WPF 自制截图工具

在日常使用电脑办公时&#xff0c;我们经常遇到需要截图然后保存图片&#xff0c;我们往往需要借助安装截图工具才能实现&#xff0c;现在我们通过C#自制截图工具&#xff0c;也能够轻松进行截图。 我们可以通过C#调用WindousAPI来实现截图&#xff0c;实例代码如下&#xff1a…

Three.js 中的光照模型

Three.js 中的光照模型 Three.js 的一个伟大抽象就是统一了所有材质的光照模型, 无论 PBR 或者 Phong。都只用两个函数给全部囊括了。 就是 RE_Direct(直接反射) 和 RE_IndirectDiffuse(间接反射)。真正做到了大一统。下面以Phong为例,具体看一下如何落地。 省流版本: // 直接…

CSF视频文件格式转换WMV格式(2024年可用)

如果大家看过一些高校教学讲解视频的话&#xff0c;很可能见过这样一个难得的格式&#xff0c;".csf "&#xff0c;非常漂亮 。 用暴风影音都可以打开观看&#xff0c;会自动下载解码。 但是一旦我们想要利用或者上传视频的时候就麻烦了&#xff0c;一般网站不认这…

开放式耳机哪个品牌质量最好最耐用?2024热门红榜耳机真实测评

随着人们生活质量的提高&#xff0c;喜爱运动的小伙伴也越来越多了&#xff0c;开放式蓝牙耳机的佩戴舒适度与稳定性这两个优势在很多运动场景中可以为用户带来更好的使用体验。此外&#xff0c;我们的音频使用、通话、游戏等应用场景在不断拓宽&#xff0c;蓝牙耳机的使用时间…

qt可点击的QLabel

需求——问题与思路 使用wpf实现一个可点击的超链接label相当简单&#xff08;如下图&#xff09;&#xff0c;但是qt的QLabel不会响应点击事件&#xff0c;那就从QLabel继承一个类&#xff0c;然后在该类中重写mousePressEvent函数&#xff0c;并在该函数中对左键点击事件做响…

FPGA工程师有前途吗 ?FPGA崛起之路

全球 FPGA 市场规模犹如滚雪球般逐年扩大。 根据Gartner Group预测&#xff0c;2020-2026年全球FPGA市场规模从55.85亿美元增至96.9亿美元&#xff0c;年均复合增长率为9.6%。 众多国际知名科技企业&#xff0c;如赛灵思、Lattice等&#xff0c;纷纷加大在 FPGA 研发和应用方…

linux操作系统数据盘挂载目录home改到www

云服务器开通后安装宝塔面板&#xff0c;数据盘默认挂载在 /home目录&#xff0c;通常这个目录不是我们需要的&#xff0c;数据盘需要挂载更换到/www目录。 如图所示数据盘/dev/mapper/ao-home 挂载到/home目录 但是我们需要它挂载到/www目录 以下操作是将数据盘/dev/mapper/…

希尔排序的实现

引言 排序在我们生活中十分常见&#xff0c;无论是购物软件中的商品推荐还是名次、排名都与排序算法息息相关。希尔排序是排序中较快的一种&#xff0c;而希尔排序实现的基础是插入排序。 排序的实现 插入排序&#xff08;以升序为例&#xff09; 插入排序的原理是从第二个数…

非静压模型SWASH学习(8)——三维孤立波在锥形岛屿上的爬坡过程(Runup of solitary waves on a conical island)

三维孤立波在锥形岛屿上的爬坡过程&#xff08;Runup of solitary waves on a conical island&#xff09; 算例简介模型配置网格及参数设置网格与地形初始条件与边界条件数值求解方法输出设置模拟时间 波浪&#xff08;孤立波&#xff09;入射边界的时间序列.bnd文件模拟结果注…

基于OpenCV与Keras的停车场车位自动识别系统

本项目旨在利用计算机视觉技术和深度学习算法&#xff0c;实现对停车场车位状态的实时自动识别。通过摄像头监控停车场内部&#xff0c;系统能够高效准确地辨认车位是否被占用&#xff0c;为车主提供实时的空闲车位信息&#xff0c;同时为停车场管理者提供智能化的车位管理工具…

Python基础小知识问答系列-记录最后N个元素

1. 问题&#xff1a; 怎么复制变量内容&#xff1f; 进行可迭代的操作过程中&#xff0c;如何记录最后几次操作的内容&#xff1f; 2. 解决方式&#xff1a; 对于非数值类型的变量&#xff0c;复制变量内容时&#xff0c;使用"*"。 记录最后n个元素&#xff…

重大丨深中通道今通车!继港珠澳大桥后,三思再度点亮世界工程

6月30日下午3时&#xff0c;国家重大工程深中通道正式通车试运营&#xff0c;向世界再次展示中国智慧和基建实力。已承接过包括港珠澳大桥海底隧道在内2500多条隧道照明工程的上海三思电子工程有限公司&#xff0c;为这座超级工程提供了LED隧道照明、东西人工岛照明及显示、管理…

【力扣】赎金信

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 ​ 给你两个字符串…

私有云统一多云管理平台主要服务内容

私有云统一多云管理平台&#xff0c;作为企业IT架构现代化的关键组成部分&#xff0c;旨在为企业提供高效、灵活、安全的云计算资源管理解决方案。这类平台通过整合和优化不同云环境(包括私有云、公有云、混合云)的管理&#xff0c;帮助企业打破云孤岛&#xff0c;实现资源的统…

【MySQL备份】Percona XtraBackup增量备份实战篇

目录 1.前言 2.准备工作 2.1.环境信息 2.2.创建备份目录 2.3.配置/etc/my.cnf文件 2.4.授予root用户BACKUP_ADMIN权限 3.增量备份 3.1.第一步&#xff1a;全量备份 3.2.第二步&#xff1a;增量备份 3.3.第三步&#xff1a;再次增量备份 4.准备备份 4.1.准备全量备…

秋招Java后端开发冲刺——基础篇5(String集合)

一、String String类是Java中字符串操作类&#xff0c;位于java.lang包下String类型对象的底层使用字符数组char[]存储字符串&#xff0c;由final修饰且没有提供公共的修改方法&#xff0c;因此String对象是不可变的。常见方法 方法名作用trim()去掉字符串首尾空字符split(分…