前言过去的几年里往往一觉睡醒打开手机。媒体里就在说哪哪哪又开始打战了哪哪哪又发布了新的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( modelMODEL, max_tokens4096, 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提以下问题的时候笔者脑里浮现了校园时代的画面几个小伙伴异口同声地说出“我有时间也不捡屎”然后一起开怀大笑。值得珍惜从来不是多巧妙的段子而是那些一起笑、一起犯傻的人。
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( modelMODEL, max_tokens4096, 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提以下问题的时候笔者脑里浮现了校园时代的画面几个小伙伴异口同声地说出“我有时间也不捡屎”然后一起开怀大笑。值得珍惜从来不是多巧妙的段子而是那些一起笑、一起犯傻的人。