原本以为现在头部 AI 模型的幻觉已经很低了,而且觉得我挺能辨别 AI 幻觉的,结果今天还是被摆了一道

144 天前
 heliumjt

用 Django ORM 写了个函数查询 Postgres 数据库,发现 ORM 的速度比原生 SQL 语句慢了好几倍,于是去问 Gemini 2.5 。

Gemini 让我打印出生成的 SQL 语句看看是怎么一回事,我一看,ORM 查询条件是大小写不敏感的,使用了icontains算符;但是 Django 在把查询条件翻译成 SQL 语句的时候没用上 Postgres 特有的不区分大小写的ILIKE算符,而是将式子两边都转换成了大写,用了UPPER() LIKE UPPER()。这下知道原因了,这种情况下字段的索引根本没用上。

那就改嘛。然后 Gemini 信誓旦旦地告诉我,这是非常不同寻常的,Django ORM 肯定能自动将 icontains 翻译成ILIKE。我觉得也很有道理,Django 这么老牌的框架,Postgres 也不是什么冷门数据库,怎么会处理不好适配呢,肯定是我自己的问题。

然后我就照着 Gemini 给的方案一步一步调试,是不是你的 Django 配置有问题?是不是 Django / psycopg / Postgres 版本哪里冲突了?做个最小化测试试试?每一步都没有问题,我跟 Gemini 都感到非常困惑。

两个小时之后我才意识到有哪里不太对劲,于是新开了一个对话让他联网搜一下有没有人遇到过类似情况。然后他哐哐搜出来好几篇网页,网页里的人类全都明确地指出 Django 会把icontains转换成UPPER()。但是就算是在包含了这些信息的新对话里,Gemini 还是嘴硬地声称:

标准行为是 ILIKE: 多个来源(包括 Django 官方讨论、Stack Overflow 、博客文章)都明确指出,对于 PostgreSQL ,Django 的 icontains 应该被翻译成 ILIKE 。这是 Django 利用 PostgreSQL 对大小写不敏感的 LIKE 查询的原生支持的方式。

最后我只能去翻了翻 Django 的源码,发现源码里确确实实是将icontains翻译成了UPPER() LIKE UPPER(),没有用上ILIKE,原来整个大前提都是 AI 的幻觉。又问了问几个头部模型,每一个都热心地指点我应该如何排查问题,要怎样怎样解决,没有一个指出来这确实就是 Django 应有的行为。反思了一下,我现在写代码似乎有点太过于依赖 AI 了……

3039 次点击
所在节点    程序员
11 条回复
yiqiao
144 天前
AI 的数据源不就是从互联网上拉下来的吗,这种情况你只能缩小范围,甩一个文档或者源码地址,让它阅读后再问。不过有时候他依然回答的结果还是一样的。
billccn
144 天前
你可以据此到 Django 那开一个 ticket:连 AI 都觉得你们应该用 ilike 。

不过我得说,除非你这个索引是专门的 trigram 等搜索优化类型的,普通的字符串索引碰到 ILIKE 还是要从头到尾扫描的,最多数据量比扫全表少,但是不再是索引应该有的 O(log(n))。你还不如专门建一个 UPPER()索引。
billlee
144 天前
我也在 Gemini 2.5 Pro 上遇到过类似的问题,纠正它的时候,它还会反驳你。但是在 aistudio 里调用又不会有问题,不知道 gemini.google.com 上的版本是加了什么 system prompt.
xuanbg
144 天前
专门建一个 UPPER()索引这个真的赛博削足适履
drymonfidelia
144 天前
Gemini 就是所有模型里最能张口就来的 甚至还不如国产模型
/t/1110486
laikick
144 天前
建议问库的各种东西用 context7 mcp
heliumjt
144 天前
@billccn #2 @xuanbg #4 最后的解决方案确实是建了个 UPPER 索引完事,因为我的数据更新频率很低,大部分操作都是纯查询,加一条索引也能接受(虽然确实看起来不够优雅
kneo
144 天前
你要是能分辨就不会问 AI 了。
rrZ2C
144 天前
Gemini 特点就是盲目自信
viking602
144 天前
gemini 不是出了名的头铁加上嘴硬 代码能力还得是 Claude 3.7s 吧
snitfk
144 天前
代码肯定得用 Claude 3.7 啊,就算用不了用 deepseek 也好过 gemini 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1125691

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX