[+] 早安机器人
@@ -0,0 +1,67 @@
|
||||
---
|
||||
title: GPT5 早安机器人
|
||||
subtitle:
|
||||
title_image: title.png
|
||||
tags:
|
||||
- 技术
|
||||
- LLM
|
||||
- NLP
|
||||
category: 技术
|
||||
---
|
||||
给 one-among-us 的后端机器人加了一个 gpt5 早安 bot!有逝者或者动画角色的生日庆祝、有什么の日的提示、还有创意御神籤和无厘头的忌宜消息 qwq
|
||||
|
||||
实现起来比预想要难,感觉想开启 gpt5 的脑洞让它输出随机的东西饶了好多圈圈。
|
||||
|
||||
## 1. 随机数?42!
|
||||
|
||||
想要一些无限脑洞的无厘头句子伴随今日御神籤,但是众所周知 LLM 和我们一样没法凭空想出随机的东西——让它说一个随机数它大概率会说 42... 想让它说一段随机无厘头文学也大概率会随机得很固定。
|
||||
|
||||
![[2025-08-24 06-58.png|至少没有深思七百五十万年]]
|
||||
|
||||
以及发现 GPT5 API 似乎已经不支持调温度和 top-p 之类的参数了,但是即使回到 GPT4 把温度拉高也没好多少。
|
||||
|
||||
所以觉得还是需要一些真随机,决定在生成 prompt 的时候喂给它一些真正随机的关键词,用这些词造句!手动想了几个「书架 企鹅 比利时 黑板报 雨伞」喂给它发现效果还很不错 qwq
|
||||
|
||||
但是怎样自动生成这些随机关键词呢?第一反应是找一个大词库选出高出现频率的名词。找到最合适的也许是结巴词库,既有出现频率又有词性,简单过滤一下之后... 发现随机出来的词都不太适合日常使用的样子,让它随机了十个给我了下面这些:
|
||||
|
||||
> 运量,细胞膜,型谱,危险性,军火,差点,膳食,蒜,游历,蠹
|
||||
|
||||
怎么说呢,感觉都太死板了,我想要更可爱一点的词,比如毛绒猫咪订书机抹茶召唤兽之类的... 试试用脚本过滤出可爱的词好了。
|
||||
|
||||
## 2. 可爱相关的词完全不可爱!
|
||||
|
||||
想找到可爱的词的话,首先试了用谷歌开源 gemma3 1b 的 embedding 相似度。Input embedding 是一个向量,代表了大模型对某个输入的理解,大概可以理解为「你听到一个词的时候哪些脑细胞会亮」之类的测量吧。因此只要两个输入向量更相似,它们在某个层面上就会更接近。比如猫与狗的距离比公司或者订书机更接近:
|
||||
|
||||
![[2025-08-24 07-36.png|聪明猫咪会梦见会社订书机吗]]
|
||||
|
||||
所以我在想,如果找到和「可爱」向量距离最接近的词是不是就能找到可爱的词了呢?就把整个结巴数据集用这个脚本跑了一遍,感谢 H100 不到十分钟就跑完了,但是发现和想象不太一样... 和可爱接近的大部分是形容词,接近的名词也不那么可爱:
|
||||
|
||||
![[2025-08-24 07-41.png|你告诉我和可爱最接近的名词是性感,下一个是时尚...]]
|
||||
|
||||
经群友 Etaoin 推荐试了一下中文表现更好的 bge-m3 embedding 效果好很多,相似度最高的有「美女 笑容 小朋友 样子 女孩 粉色 迷人」之类的,但是依然不是我想要的... 我想要的是可爱的名词而不是「可爱」的同义词。
|
||||
|
||||
然后和群友聊怎么办的时候突然想到,可以直接用 emoji 呀!大部分 emoji 代表的东西都是公认很日常的东西而且都比较可爱。下载了一个 emoji 数据库,过滤掉肤色和性别变种的重复项,再忽略掉包含「人」的就差不多了。过滤掉的这些总共占 67%,奇妙。
|
||||
|
||||
![[2025-08-24 08-03.png|emoji 大杂烩]]
|
||||
|
||||
然后效果就很不错啦,再随机一次就是「棕色方块, 卷轴, 冈比亚, 爆炸, 五点, 按键 8, 左下箭头, 蒙特塞拉特, 秘鲁, 世界地图」又随机又常用也很开脑洞 qwq
|
||||
|
||||
## 3. 小泉花阳生日是什么时候来着?
|
||||
|
||||
原本觉得 gpt5 这种参数多到数不清的模型肯定有记住一些动画角色的生日的,就让它自由发挥了,然后发现一个都没答对(悲)
|
||||
|
||||
![[Screenshot 2025-08-24 081819 (1).jpg|原来你是缪斯厨]]
|
||||
|
||||
看来生日也要让我的程序写在 prompt 里面了。首先找了一下二次元生日数据库发现同一天的角色生日实在是太多太多了,最多的一天总共有 1885 个生日(在 7 月 7 日)
|
||||
|
||||
有这么多生日的话全都喂给 llm 让它选就太贵了,毕竟每个输入字符都是要钱的。而且这里面大部分都是没人听说过的配角,也没有太大意义。怎么办呢?
|
||||
|
||||
查了查找到了 https://bd.fan-web.jp/ 这个网站,不仅有每天的角色生日还有投票功能!投票多的大概率是人气角色,正好是我需要的!所以就爬下来了,然后发布了一个[动态更新的 JSON 数据集](https://github.com/hykilpikonna/AnimeBirthdaysDataset)。除了角色生日还有声优、花语、什么の日、历史事件之类的,正好一起喂进去了,生日选了投票最多的五个让模型自由发挥选一个最有趣最可写的人写祝福效果还不错。
|
||||
|
||||
## 4. 总结
|
||||
|
||||
然后就有了这个每天早上的早安消息!感觉真的达到了想要的效果
|
||||
|
||||
![[Screenshot 2025-08-24 062639.png|部署之后的第一条自动生成的早安消息]]
|
||||
|
||||
不过想让模型打开脑洞随机写点什么真的不容易呀,原本想一个下午做完的小彩蛋变成了两天的项目(悲),明明 one-among-us 还有其他代码更需要我付出精力的... 不过学到了好多,花的时间也不后悔啦
|
||||
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 144 KiB |
|
After Width: | Height: | Size: 55 KiB |
|
After Width: | Height: | Size: 324 KiB |
|
After Width: | Height: | Size: 435 KiB |
|
After Width: | Height: | Size: 134 KiB |
|
After Width: | Height: | Size: 113 KiB |