{"repo":"Lumenocturne/ai-sticker-pack","free":true,"listed":false,"github":"https://github.com/Lumenocturne/ai-sticker-pack","clone":"git clone https://github.com/Lumenocturne/ai-sticker-pack.git","description":"上传表情包 → AI 自动写描述 → 聊天机器人按场景自己挑着发（含双向发送 / 多端渲染 / 踩坑思路）","language":null,"stars":18,"topics":["ai","chatbot","llm","stickers","telegram-bot","vision"],"license":"MIT","category":"ai-agents","readme_excerpt":"ai-sticker-pack · 让聊天机器人「自己会挑表情包发」 给任意聊天机器人（bot / AI 助手 / 自动回复）加一套 会按场景自己挑、自己发 的表情包能力。 核心只有一句： 上传那一刻让视觉模型看一眼图、自动写好「名字 + 描述」存起来；之后机器人只读这段文字来挑表情，永远不再看图。 这样\"挑表情\"几乎不花 token（不走视觉），而你扩充表情库 无痛 ——传张图、AI 自动配描述、入库，完事。 ⚡ 这是一份「思路」教程，不是即插即用的成品。 能搬走的是 这套架构 和 踩过的坑 。你的后端用什么语言、机器人在哪个平台（网页 / Telegram / Discord…）、用哪个视觉模型——都按你自己的来。下面的代码片段全是 示例 ，照着改成你自己的就行。当灵感看，别当模板。 --- 为什么这么做 想让机器人会发表情包，有两个天然难点： 1. 机器人\"看不懂\"图。 一堆抽象梗图（尤其带文字的中文表情包），机器人不知道每张啥意思、啥时候该发。 2. 每次都让它\"看图\"太贵也太慢。 如果每条消息都把候选表情图喂给视觉模型判断，token 烧得飞起，还慢。 这个项目的办法 ：把\"理解图\"和\"使用图\"拆开—— - 理解只做一次 ：上传时，视觉模型看一眼，写出「短名 + 一句话描述（图上文字 / 情绪 / 啥场景发）」，连同图 URL 存进库。 - 使用零成本 ：之后把库里的「名字 + 描述」（纯文字、很短）注进机器人的 prompt；它想发就在回复里写个标记 [sticker:名字] ；后端拦下标记 → 换成图发出去。机器人 从不重新看图 。 --- 四块拼图 1) 表情库（一张表就够） 2) 上传即「自动描述」（一次性视觉） 上传后，把图（base64 data URL）发给任意 OpenAI 兼容的视觉模型 ，让它返回「名字｜描述」： 关键： 这步只在上传时跑一次 ，结果存库。日常发表情完全不碰它。 3) 把库注进机器人 prompt + 约定标记 只注入「名字 + 描述」，不注入 URL（URL 长、费 token）： 机器人于是会自然产出： 好啊 [sticker:得意] 4) 后端拦标记 → 渲染 / 发送 --- 踩过的坑（这才是精华） - 视觉只在上传时跑一次，绝不每条消息跑。 机器人靠\"描述文字\"挑表情，从不重看图——这是省钱省时间的全部秘密。 - Telegram 发图要\"公开可访问\"的 URL。 sendPhoto 是 Telegram 服务器去拉你那个 URL；如果你的图床/路径带鉴权（cookie / key），Telegram 拉不到 → 图发不出。把表情图放一个 不需要鉴权的公开路径 。 - 想让\"文字 + 表情\"算一条消息 ：前端别让\"点表情\"立刻发出去——做成 先挂着 （像发图片附件那样），等用户打完字一起发。否则机器人按顺序读时，文字和表情拆成两条、语境会乱。 - 表情图别塞进聊天气泡框 ：纯表情就让它单独飘一张图（去掉气泡背景）；有文字时，文字留气泡、图飘在气泡下面。塞一起中间容易空一大截。 - 渲染限个尺寸 （如 max 150–160px），不然一张大图糊一屏。 - 读 HTTP 响应体含中文时，别 d += chunk 逐块拼字符串 ——多字节字符会在网络分块边界被切成乱码（�）。要么 Buffer.concat 后再 toString('utf8') ，要么用 StringDecoder 。 - 让用户也能发 ：同一个库，前端给个表情面板让用户挑着发；机器人那头把用户发的表情转成「[表情:名字（描述","default_branch":null,"files":null,"tree":[],"storefront":"/r/Lumenocturne","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/Lumenocturne/ai-sticker-pack/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}