首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-03-02 12:02
  • 2249
  • 10669
blog.csdn.net

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

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

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

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

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

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

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

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

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

效果咋样?

不多说了,上实操!

1. 接收表情包

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

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

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

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


  • 1

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

接下来,我们可以从 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("&", "&")
  • 1
  • 2
  • 3
  • 4
  • 5

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}"},
        }
    ]}
]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

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

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

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

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

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

这样,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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

4. 效果展示

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

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

def handle_emoji(content='', from_name=''):
    emoji = ET.fromstring(content).find('emoji')
    image_url = emoji.get('cdnurl').replace("&", "&")
    reply_url = reply_emoji(image_url)
    send_message(to=from_name, content=reply_url, isRoom=False, message_type='file', base=base_url)
  • 1
  • 2
  • 3
  • 4
  • 5

来一波斗图试试吧~

咋样?

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

来,我们看看日志:

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

写在最后

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

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

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


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

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

猴哥的AI知识库
微信公众号
AI全栈工程师,帮助零基础编程小白入门AI
注:本文转载自blog.csdn.net的AI码上来的文章"https://blog.csdn.net/u010522887/article/details/142038164"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top