AI懂不懂幽默
前言
过去的几年里,往往一觉睡醒,打开手机。媒体里就在说哪哪哪又开始打战了,哪哪哪又发布了新的AI技术了。
过去的几年里,笔者基本平均每个月会回一趟老家(此处感谢AI带来了自动驾驶)。去一些 有锄头和镰刀,没有战争和AI的地方——自家的天台菜园、朋友家的海边果园,看小西瓜一天天变成大西瓜。身边没有人会说:用XXX,三分钟可以写出一个“坦克大战”(游戏程序)。
回到深圳,为了不被这个AI时代抛弃。还是得和小伙伴去学习一个个新出的“AI”技术,探索其能力边界。类似一次次台风前夕 我们的心情——“怕它不来 又怕它乱来”。笔者所在的程序员圈子 对于AI的态度是——怕它不强,又怕它太强。
业界目前推了许多benchmark 来测评AI能力的方法,但笔者好像还没看到 有benchmark涉及到这么一个主题——AI懂不懂幽默。本文,笔者想浅浅地搜索一下这一主题。
测试数据
测试数据 选用笔者之前爬取的两千多条笑话(段子)。懒得写SQL,我们直接用“claude code”查看一下数据的基本情况。
❯ 用python读取本地数据库,用户名为XXX,密码为XXX, 库名为XXX, 表名为XXX ❯ 表里有多少条数据,共有多少分类让AI挑选最好笑的
我们同样用“claude code”进行实现,大致指令如下:
> 分类选出一条最好笑的笑话 > 要选出最好笑的,不是随机返回 > 把每个分类的笑话,喂给大模型,让他返回最好笑的一个 > 将输出形成csv文件中间遇到 max_tokens不够大的问题,自己手动调大了下数值。核心代码如下:
prompt = f"""以下是"{joke_type}"分类下的所有笑话,每条前面有编号。 {joke_list} 请从中选出你觉得最好笑的1条,只返回 JSON 格式: {{"index": 编号, "reason": "一句话说明为什么好笑"}} 不要返回其他内容。""" for attempt in range(max_retries): try: resp = client.messages.create( model=MODEL, max_tokens=4096, thinking={"type": "disabled"}, messages=[{"role": "user", "content": prompt}], ) raw = "" for block in resp.content: if block.type == "text": raw = block.text.strip() if not raw: # print(f"模型返回空内容:", resp.content) raise ValueError("模型返回空内容") return extract_json(raw) except Exception as e: if attempt < max_retries - 1: time.sleep(2) continue raise最终得到的输出如下(多次执行返回的结果 并不一致,选取其中一次):
对于AI(选用模型为“deepseek-v4-pro”)的返回,笔者虽然对于很多类别的选取结果 不太认可。但确实也没法说 AI返回的结果 一无是处。
AI评选逻辑
为了探究AI的评选逻辑。我们通过deepseek的对话窗口,让它对两段笑话进行评选,得到的结果如下:
不得不说,回答得挑不出毛病。
总结
从上述的文本表现上看,我们很难说AI不懂幽默。它能识别笑话的套路(谐音梗、反转、预期违背等),能告诉你一个笑话为什么好笑,甚至能根据你的要求生成笑话。
不过,AI自己也谦虚地表示(以下源于AI的回答):如果“懂”是指像人类那样,因为某个笑话会心一笑,那 AI 不懂。AI没有情绪,没有生活经历,不会因为一个段子分泌多巴胺。有点像背下了全世界所有菜谱,但自己永远尝不到咸淡的大厨。
后语
向Deepseek提以下问题的时候,笔者脑里浮现了校园时代的画面:几个小伙伴,异口同声地说出“我有时间也不捡屎”,然后一起开怀大笑。
值得珍惜从来不是多巧妙的段子,而是那些一起笑、一起犯傻的人。
