我把多模态大模型接入了「小爱」,痛快来一场「表情包斗图」!

前两天,搞了个微信 AI 小助理-小爱(AI),爸妈玩的不亦乐乎。

  • 零风险!零费用!我把AI接入微信群,爸妈玩嗨了,附教程(下)

最近一直在迭代中,挖掘小爱的无限潜力:

  • 链接丢给它,精华吐出来!微信AI小助理太强了,附完整提示词
  • 拥有一个能倾听你心声的「微信AI小助理」,是一种什么体验?

有朋友问:小爱能否理解发送的表情包?来一场表情包斗图?

小爱:害,表情包还得是我!不服来战!

今日分享,继续带大家实操:如何让小爱能够接收表情包,并用合适的表情包回复你,和小爱来一场斗图大战

要实现斗图功能,我们先来拆解下步骤:

  • 接收表情包:接收消息接口,成功获取表情包信息;
  • 理解表情包:利用多模态大模型,生成表情包的文字描述;
  • 回复表情包:原打算采用图片生成模型,生成合适的表情包,不过图片生成不可控,故采用公开的表情包接口,检索已有表情包。

效果咋样?

不多说了,上实操!

1. 接收表情包

微信消息中,表情包共分为两种:

  1. 官方提供的 emoji 表情,通常以 Unicode 字符的形式存在,因此能在各种设备之间正确显示;
  2. 社区制作的各种表情包,本质是一张图片。

如下图所示,如果是第一种表情包,Unicode 编码,本质上和文本没有区别,因此 LLM 是可以理解的,但是第二种表情包就需要特殊处理了。

微信消息中,第二种表情包都遵循 XML 文件格式:

<msg><emoji fromusername = "xxx" len = "16758" productid="" androidmd5="xx" androidlen="16758" cdnurl = "http://xxx;bizid=1023"></emoji></msg>

据此,我们就可以从消息中识别出表情包类型。

接下来,我们可以从 XML 文件中拿到url,进而获取表情包图片内容:

import xml.etree.ElementTree as ET
def handle_emoji(content=''):emoji = ET.fromstring(content).find('emoji')if emoji is not None:image_url = emoji.get('cdnurl').replace("&amp;", "&")

2. 理解表情包

拿到表情包图片后,我们把它发送给多模态大模型,来帮我们生成有关表情包的内容描述。

目前市面上有很多开源的 多模态大模型,不过大多模型参数两大,部署成本高。

如果你是 GPT 付费用户,建议直接上 GPT-4o 的接口。

有没有免费的?

当然,对于希望白嫖玩玩的你,Google 家的gemini-1.5-flash 绝对值得拥有!

还不知道如何接入的小伙伴,可以回看教程:盘点 9 家免费且靠谱的AI大模型 API,统一封装,任性调用!

因为我们已经把 gemini-1.5-flash 接入了 OneAPI,所以参考 OpenAI 接口文档:https://platform.openai.com/docs/guides/vision进行接入,接口支持多张图片的输入

请求结构体的示例代码如下:

注:可以直接传入图片的 url,如果是本地图片,需进行 base64 编码。

def encode_image(image_path):with open(image_path, "rb") as image_file:return base64.b64encode(image_file.read()).decode('utf-8')base64_image = encode_image('output/emoji.jpg')messages = [{'role': 'user', 'content': [{"type": "text", "text": "describe this emoji image"},{"type": "image_url","image_url": {"url": f"data:image/jpeg;base64,{base64_image}"},}]}
]

让我们看看 gemini-1.5-flash 给上图中表情包的返回结果:

有没有发现:表情包中的文字识别错了,谋闷台被识别成了求问台!哎,毕竟免费,凑合着用吧!

当然,我们希望gemini-1.5-flash也能用一个表情包回复我,不过gemini表示做不到啊。

为此,可以简单修改下提示词:

这是用户发送的一个表情包图片,请理解图片内容,给我回复表情包的一个关键词,无需任何标点符号。

这样,gemini就只会给我吐出一个关键词,而不是上面的一坨英文。

接下来,我们就可以拿着这个关键词,去请求表情包的接口,拿到相关的表情包。

3. 回复表情包

搜索了一番表情包接口,下面两个免费且靠谱的接口,分享给大家:

  • ALAPI:https://www.alapi.cn/api/view/97

  • 接口盒子:https://api.aa1.cn/doc/apihzbqbsougou.html

注:两个请求的接口非常类似,每天都有免费额度,尽情薅吧,你用不完的!

首先,注册申请一个 token,然后官网测试一下:

没问题,我们来写个请求代码:

# 注意 GET 请求不用 data,应该使用 params。
def get_api_doutu(keyword='哈哈'):params= {"keyword": keyword,"page": 1,"type": 7,"token": al_api_token}response = requests.get("https://v2.alapi.cn/api/doutu", params=params)return response.json()

4. 效果展示

准备工作一切就绪,接下来我们就把整个过程串联起来。

四行核心代码,分别对应上述流程:

def handle_emoji(content='', from_name=''):emoji = ET.fromstring(content).find('emoji')image_url = emoji.get('cdnurl').replace("&amp;", "&")reply_url = reply_emoji(image_url)send_message(to=from_name, content=reply_url, isRoom=False, message_type='file', base=base_url)

来一波斗图试试吧~

咋样?

小爱真的理解我发的表情包了么?

来,我们看看日志:

红色箭头是 gemini多模态大模型给的关键词,分别对应上面例子中的表情包,好像也没啥毛病吧。

写在最后

本文通过简单三步为小爱打造了表情包斗图功能,不爽的时候找小爱聊聊,一图胜千言!

大家有更好的想法,欢迎评论区交流。

如果本文对你有帮助,不妨点个免费的赞收藏备用。


为了方便大家交流,新建了一个 AI 交流群,欢迎感兴趣的小伙伴加入。

小爱也在群里,想进群体验的朋友,公众号后台「联系我」即可,拉你进群。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是点对点专线、SDH专线以及MSTP专线?

点对点专线&#xff08;Point-to-Point Circuit&#xff09;、SDH专线&#xff08;Synchronous Digital Hierarchy&#xff09;以及MSTP专线&#xff08;Multi-Service Transport Platform&#xff09;都是企业级通信服务中常见的网络连接类型&#xff0c;主要用于提供高带宽、…

【C语言】指针深入讲解(下)

目录 前言回调函数回调函数的概念回调函数的使用 qsort函数的使用和模拟实现qsort函数的介绍qsort函数的使用qsort函数模拟实现 前言 今天我们来学习指针最后一个知识点回调函数&#xff0c;这个知识点也很重要&#xff0c;希望大家能坚持学习下去。 没学习之前指针知识内容的…

通过FFmpeg和URL查看流的编码格式

FFmpeg下载后会有三个执行文件&#xff0c;跳转到FFmpeg所在文件夹 查看视频流URL地址的编码格式命令&#xff1a; // 在下载ffmpeg的文件夹中执行如下命令&#xff0c;可查看流的编码格式&#xff0c;这里的测试流是H264编码ffprobe http://devimages.apple.com/iphone/sample…

2024数学建模国赛选题建议+团队助攻资料(已更新完毕)

目录 一、题目特点和选题建议 二、模型选择 1、评价模型 2、预测模型 3、分类模型 4、优化模型 5、统计分析模型 三、white学长团队助攻资料 1、助攻代码 2、成品论文PDF版 3、成品论文word版 9月5日晚18&#xff1a;00就要公布题目了&#xff0c;根据历年竞赛题目…

激光二极管知识汇总

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言一、什么是激光二极管二、激光二极管的发光原理三、导电特性1、正向特性2、反向特性 四、激光二极管和LED的区别五…

云原生架构概念

云原生架构概念 云原生架构&#xff08;Cloud Native Architechtrue&#xff09;作为一种现代软件开发的革新力量&#xff0c;正在逐渐改变企业构建、部署和管理应用程序的方式。它的核心优势在于支持微服务架构&#xff0c;使得应用程序能够分解为独立、松耦合的服务&#xf…

【C++】windwos下vscode多文件项目创建、编译、运行

目录 &#x1f315;vscode多文件项目创建方法&#x1f319;具体案例⭐命令行创建项目名&#xff0c;并在vscode中打开项目⭐创建include目录和头文件⭐创建src目录和cpp文件⭐根目录下创建main.cpp &#x1f315;运行项目失败&#xff08;找不到include目录下的头文件和src目录…

笔试。牛客.C-消减整数力扣.最长上升子序列(dp)牛客.最长上升子序列(二) (贪心+二分)牛客.爱吃素

目录 牛客.C-消减整数 力扣.最长上升子序列(dp) 牛客.最长上升子序列(二) (贪心二分) 牛客.爱吃素 牛客.C-消减整数 开始的时候我还以为是什么&#xff0c;结果数学才是根本 import java.util.*; public class Main{public static void main(String[]args){Scanner innew Sc…

Linux网络编程2——多进程编程

一.进程 1.概念复习 程序&#xff1a;程序(program)是存放在磁盘文件中的可执行文件 进程&#xff1a;程序的执行实例被称为进程(process)。 进程具有独立的权限与职责。如果系统中某个进程崩溃&#xff0c;它不会影响到其余的进程。每个进程运行在其各自的虚拟地址空间中&a…

Docker打包镜像

Docker打包镜像 前置工作 1.虚拟机中配置好docker环境&#xff0c;并导入nginx&#xff0c;mysql&#xff0c;jdk的镜像 2.下载docker for windows 用idea打包镜像和创建容器需要这个东西支持 下载安装包后执行&#xff0c;无脑回车即可 3.idea中配置docker连接 完成配置后&…

WPS Office for Linux 12 个人版上线deepin 23商店:UI 视觉重构,新增多项 AI 功能

查看原文 全新WPS Office For Linux个人版&#xff08;12.1.0.17881&#xff09;与deepin 23的AI功能深度融合&#xff0c;正式上架在社区商店啦&#xff01; 这是 Linux 版本的一次里程碑式的重大更新。在产品能力层面上&#xff0c;在 deepin 23 上WPS Office 几乎实现了与 …

AMD MI300X vs Nvidia H100/H200:AI计算领域的新一轮较量

随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;计算引擎的性能竞赛也愈演愈烈。近期&#xff0c;MLCommons发布的最新AI训练和推理基准测试结果&#xff0c;他们构建了一套 MLPerf AI 训练和推理基准&#xff0c;将AMD的Instinct“Antares”MI300X GPU与Nv…

软件开发人员从0到1实现物联网项目:项目架构的思考

文章目录 前言单体应用足矣摒弃传统的微信对接后期的维护投入上真正的“云”&#xff1a;云托管0服务器免运维免费的CDN和DDoS防护 技术架构小结 前言 因为种种原因&#xff0c;《软件开发人员从0到1实现物联网项目》这个项目的进度停滞了将近一个月。 鉴于该项目的前期开发和…

【hot100篇-python刷题记录】【跳跃游戏 II】

R7-贪心算法 目录 方法1&#xff1a; 方法2&#xff1a; 很贪心啊&#xff0c;局部最优解就是全局最优解&#xff0c;要求到达nums[n-1]的最小步数&#xff0c;我们每一步都走最远。 方法1&#xff1a; class Solution:def jump(self, nums: List[int]) -> int:nlen(n…

【车载开发系列】ParaSoft入门介绍

【车载开发系列】ParaSoft入门介绍 【车载开发系列】ParaSoft入门介绍 【车载开发系列】ParaSoft入门介绍一. ParaSoft的背景二. 设计理念三. ParaSoft C/CTest简介四. 具备常用功能1&#xff09;静态代码分析2&#xff09;代码覆盖率分析3&#xff09;模糊测试4&#xff09;自…

AI边缘控制器:重塑工业自动化与控制的新篇章

在智能制造和工业4.0的浪潮下&#xff0c;AI边缘控制器作为新一代智能控制设备&#xff0c;正逐步成为推动工业自动化与数字化转型的关键力量。这类基于x86架构的高性能IPC&#xff08;工业个人计算机&#xff09;形态产品&#xff0c;不仅继承了传统PC的可扩展性、开放性和可视…

RPKI应急管控网络拓扑搭建

应急管控网络拓扑搭建 一、网络拓扑图 二、拓扑配置 1.资源库批量导入roas 在rpki.qcl.edu.cn服务器上的/usr/local/rpki/目录下执行脚本 sh roa_get.sh add#!/bin/dash# TODO Aadd Rremove start10000 sum254 run(){for i in seq 1 20dofor j in seq 1 250doas_numberexpr…

深度学习中常见的损失函数

关注B站可以观看更多实战教学视频&#xff1a;hallo128的个人空间 深度学习中常见的损失函数 损失函数的作用 损失函数是衡量神经网络输出与真实标签之间差距的指标。在训练过程中&#xff0c;神经网络的目标是最小化损失函数的值。常见的损失函数包括均方误差&#xff08;MS…

弗洛伊德(Floyd)算法(C/C++)

弗洛伊德算法&#xff08;Floyds algorithm&#xff09;&#xff0c;又称为弗洛伊德-沃尔什算法&#xff08;Floyd-Warshall algorithm&#xff09;&#xff0c;是一种用于在加权图中找到所有顶点对之间最短路径的算法。这个算法适用于有向图和无向图&#xff0c;并且可以处理负…

网络层 VIII(网络层设备——路由器)【★★★★★★】

一、冲突域与广播域 这里的“域”表示冲突或广播在其中发生并传播的区域。 1. 冲突域 冲突域是指连接到同一物理介质上的所有结点的集合&#xff0c;这些结点之间存在介质争用的现象&#xff08;能产生冲突的所有设备的集合&#xff09;。也就是说&#xff0c;若这些设备同时发…