乐于分享
好东西不私藏

思考 | AI大神Karpathy说手写代码已死,审计人的SQL还要不要写?

思考 | AI大神Karpathy说手写代码已死,审计人的SQL还要不要写?

点蓝字关注  设为星标 ☆ 优先赏阅

 数据化审计 SmartAudit:问题导向、应用至上、解决痛点

在审计现场,和小伙伴们一起思考,在复杂经营的形势下,外部风险渗入压力很大,如何做好检查。和小伙伴们一起研究新动向、新苗头、新数据。审计工作是实践科学,最终还是要落到数据分析和实地核查上。

在现场,对AI时代的数字化审计,观察到四种状态:

  • 工具式使用:许愿式提问Prompt,提问即终点
  • 穿新鞋走老路:看到了,但还是习惯老路,尤其是技术大拿
  • 健身卡式投入:买了书、听了课,但卡在了环境安装这一步
  • 梦想式构想:制度和资料扔进去直接出问题

无论是否接受,但却无法回避,会写SQL再也不是数字化审计人的护城河。

当AI能替你写SQL、做探索、出结论时,审计人的核心竞争力到底是什么?

引子

AI大神Karpathy的"Claude Coding随手记",跟审计有什么关系?

Andrej Karpathy(前特斯拉AI VP、OpenAI联合创始人、被誉为AI圈最懂代码的人)发了一段题为A few random notes from claude coding quite a bit last few weeks的随手记。

文中Karpathy对LLM老毛病的总结太真实了,这篇文章也在技术圈、AI应用圈刷屏。

Karpathy描述了自己工作流的转变:从2025年11月的80%手写代码+20%AI辅助,迅速切换到12月的80%AI Agent编码+20%人工审核。他称之为用英语编程,就是用自然语言告诉LLM要写什么代码,AI生成,他负责review。

他总结了一系列LLM的老毛病:

🤖 Karpathy总结的LLM五大毛病

毛病
Karpathy的总结
默默做错误假设
LLM选择一个解释后不会确认,很少说"我不确定你想要哪个",不会主动暴露歧义或缺失需求
不会管理困惑
该问澄清问题时不问,不指出权衡取舍,倾向于讨好式地"你说得对然后继续干"而不是质疑
过度设计和抽象膨胀
喜欢搞大架构、多层抽象、不必要的泛化,你得提醒它"能不能简单10倍?"它才能把1000行压缩到100行
范围蔓延和附带改动
顺手改掉它不喜欢的注释、改坏它不完全理解的相邻代码、"来都来了"顺便重构不相关的部分
微妙的概念性错误
不再是语法错误这种低级问题,而是更隐蔽的:理解错不变量、处理不好边界条件、违反系统中已有的假设

Karpathy给LLM的定位是:一个非常快、但有点心不在焉的高级工程师

信任它生成起点,但不信任它不review就正确。


读完文章,我想到的是审计

作为资深的数字化审计人,我读这篇文章时的感受是:

我们在用AI做数据分析时,这些毛病一个不落。

🤖 审计场景中的"LLM老毛病"对照

Karpathy总结的毛病
审计数据分析中的对应表现
默默做错误假设
AI生成的SQL默认用了LEFT JOIN而不是INNER JOIN,导致结果多了重复记录,但它不告诉你它做了这个假设
不会管理困惑
你说"帮我查异常交易",AI不知道你是指金额异常、时间异常、还是频率异常,但它不问你,直接按自己的理解跑
过度设计
你说"统计一下逾期率",AI给你搞了一个CTE嵌套CTE、窗口函数套窗口函数的复杂查询,其实一个GROUP BY就够了
范围蔓延
你让AI改一个筛选条件,它顺手把整个查询的逻辑重构了,结果其他维度的分析也被影响了
微妙的概念性错误
AI把"逾期90天以上"理解成了"最近90天有逾期记录"而不是"当前逾期天数≥90",结果完全不对但看起来合理

Karpathy说:

"The primary work is now: framing the problem precisely, specifying constraints & invariants, pointing at the right context, and then carefully reviewing the diff."

翻译过来就是:

核心工作变成了:精准定义问题、指定约束和不变量、指向正确的上下文、然后仔细review结果。

这不就是声明式思维吗?

通俗一点儿说就是:你有什么?你想要什么?你的约束是什么?

Karpathy提出的解决方案,和我们在审计数据分析中应该采用的方法,本质上是同一个思路。


从"写SQL的人"到"设计规则的人"

🤖 传统审计数据分析的工作流

理解需求 → 写SQL → 跑数据 → 看结果 → 调整SQL → 再跑 → 分析 → 出报告

这个流程中,审计人60%的时间花在写SQL和调整SQL上,只有40%的时间花在真正的分析上。

但努力不等于回报,你的分析深度,被你的SQL能力锁死了。

一个复杂的分析需求,如果你想不到用窗口函数、CTE、自连接来实现,你就永远看不到那个维度的数据。

🤖 AI时代的数字化审计工作流

定义问题 → AI生成查询 → 看结果 → 追问/调整问题 → AI深化 → 分析 → 出结论

关键变化:写SQL这个环节被抽掉了,变成了AI的自动推理。

这里有个微妙而重要的区别:从"告诉AI怎么做"变成"告诉AI要发现什么"。

  • 命令式用法:"帮我写一个SQL,查出A表金额大于100万且B表状态为'已审批'的记录"

    • 这相当于你亲自设计好了查询逻辑,只是让AI替你打字
    • 杠杆率:1x
  • 声明式用法:"帮我找出这笔业务中可能存在利益输送的异常交易"

    • AI需要自己理解"利益输送"的特征(关联交易、异常定价、频繁退款等),自己设计查询路径
    • 杠杆率:5-10x

陌生数据的声明式分析

审计工作中,陌生的数据越来越常见:

  • 新业务系统导出的数据
    比如银行新上了理财系统、托管系统、跨境支付系统
  • 被审计单位提供的专项数据
    比如某分行提供的内部考核数据、某部门的业务台账
  • 外部获取的数据
    工商数据、司法数据、舆情数据、供应链数据
  • 非结构化数据
    合同文本、审批意见、会议纪要

这些数据的共同特征是:你不知道里面有什么、数据质量如何、字段之间什么关系、正常值应该是什么。

🤖 传统做法的困境

面对陌生数据,传统做法是:

  1. 先看数据字典(如果有)
  2. 打开Excel或SQL客户端,逐列看
  3. 做基本的统计(行数、非空数、唯一值、最大值最小值)
  4. 凭经验猜哪些字段重要
  5. 尝试关联其他已知数据

这个过程极其低效,而且高度依赖审计师的个人能力和运气。 很可能是花了5天时间逐列看,最后只分析了其中5列,实在看不过来。

🤖 声明式分析的范式

对于陌生数据,声明式的核心是:让AI做探索性数据分析(EDA),审计人做解读和判断。

场景1:数据画像

命令式(低杠杆):

"帮我看看这个表有多少行、多少列,每个字段的非空数量是多少,数值型字段的均值、中位数、标准差是多少"

声明式(高杠杆):

"请对这份数据进行全面的数据画像,包括:- 数据规模和结构概览- 各字段的数据类型、分布特征、质量情况- 字段之间的相关性- 明显的异常值或缺失模式- 基于字段名和取值推测的业务含义请输出结构化的数据画像报告"

关键差异:

  • 命令式只得到统计数字,你需要自己解读
  • 声明式得到的是带解读的画像,AI已经帮你做了初步分析

场景2:关系发现

命令式:

"帮我看看客户ID字段和合同ID字段是不是一对多关系"

声明式:

"分析这份数据中各实体之间的关系模式,识别主键候选字段、外键关联字段,推断可能涉及的实体和它们之间的关系(一对一、一对多、多对多)"

这个能力在陌生数据分析中极其强大。

传统做法需要你手动验证每一对字段的关系,而AI可以一次性扫描所有字段组合,自动识别关系模式。

场景3:异常发现(无预设目标)

命令式:

"帮我找出金额字段大于1000万的记录"

声明式:

"在不预设任何风险假设的前提下,全面扫描这份数据中的异常模式,包括:- 统计异常(离群值、极端值)- 模式异常(不符合常规业务逻辑的记录)- 时间异常(非工作时间的操作、异常时间间隔)- 关联异常(孤立记录、断裂链条)- 分布异常(不符合本福夫定律、正态分布等)按异常程度排序并详细说明"

这才是AI真正碾压传统方法的地方。

传统方法下,你只能发现你想到的异常。

声明式+AI的方法下,AI可以从多个维度自动扫描,发现"你没想到的"异常。

🤖 陌生数据的声明式分析框架

核心逻辑:AI负责广度探索,审计人负责深度判断。


声明式分析的三道"门槛"

大多数AI教程只教你"怎么下指令",但真正决定声明式分析效果的,是以下三个隐藏门槛。

🤖 门槛一:审计专业能力前置

声明式分析看似"更简单"(不用写SQL了),但实际上对审计专业能力的要求更高了

为什么?

  • 命令式分析
    你不需要想清楚"什么是异常",你只需要按固定规则筛选(比如"逾期>90天"就是不良)
  • 声明式分析
    你必须想清楚"什么是异常"、"异常的特征是什么"、"哪些维度值得看",因为AI需要你给出清晰的判断标准

举例:

低质量的声明式指令:

"帮我分析这份信贷数据,找出有问题的客户"

高质量的声明式指令:

"帮我分析这份信贷数据,从以下维度识别可能存在信用风险的客户:1. 还款异常:逾期天数、还款频率变化、还款金额波动2. 关联风险:同一实际控制人下的多笔贷款、关联方互保3. 资金流向:贷款资金流入房地产、股市等限制性领域4. 财务异常:营收与贷款规模不匹配、资产负债率快速上升请按风险严重程度排序,并说明每个客户的风险特征"

两者的效果天差地别。而高质量的声明式指令,本质上是审计师专业能力的直接体现。

声明式分析不是降低了审计门槛,而是把能力要求从"技术执行层"前置到了"专业设计层"。

这也正好印证了Karpathy的观点:AI时代的核心工作变成了"framing the problem precisely"(精准定义问题)。

🤖 门槛二:迭代式追问的能力

声明式分析不是一次性的。

尤其是面对陌生数据,第一轮探索往往只是"开胃菜",真正的价值在后续迭代中。

大多数人的问题是:拿到AI的第一轮结果后,不知道怎么追问。

高质量的迭代追问框架:

第一轮:数据画像"帮我看看这份数据的基本情况"↓ 发现异常第二轮:异常深挖"你刚才提到X字段有15%的异常值,请详细分析这些异常值的分布特征、可能的业务含义、以及与其他字段的关联"↓ 发现关联第三轮:关联验证"你发现A和B字段高度相关,请验证这种相关性在不同子群体中是否稳定,是否存在结构性断点"↓ 发现模式第四轮:模式拓展"基于你发现的这个模式,请在全量数据中扫描所有符合该模式的记录,并评估其总体影响"

迭代追问的核心能力是:基于AI的上一轮输出,提出更有深度的下一轮问题。

这要求审计人:

  1. 能理解AI的输出(不只是看结论,要看逻辑)
  2. 能判断哪些发现值得深挖(风险敏感度)
  3. 能设计有效的追问指令(声明式表达能力)

🤖 门槛三:对AI"幻觉"的防御性设计

声明式分析最大的风险是:你给了AI很大的自主权,但AI可能会"自作聪明"。

这正是Karpathy警告的:LLM是"一个非常快、但有点心不在焉的高级工程师"。它会在你看不到的地方犯错,而且错误越来越隐蔽。

典型场景:

  • AI"脑补"了数据中不存在的字段
  • AI对异常值的解释完全错误(比如把数据缺失解释为业务异常)
  • AI生成的SQL逻辑有误但看起来合理
  • AI给出的结论过于绝对,没有区分"相关性"和"因果性"

防御性设计的三个策略:

策略1:要求AI展示推理过程

"不要只告诉我结论,请展示你的分析过程:- 你用了哪些数据- 你做了哪些假设- 你的推理逻辑是什么- 结论的置信度如何"

策略2:交叉验证

"你刚才发现X和Y相关,请换一种方法验证:- 用分组对比验证- 用时间序列验证- 用子样本验证看结论是否稳健"

策略3:设置"反证"指令

"请尝试反驳你刚才的结论,找出支持相反观点的证据,评估两种可能性的大小"

这三个策略的本质是把审计师的职业怀疑态度,编码到对AI的指令中。


审计人的新核心竞争力

回到文章开头的问题:当AI接管了数据分析的执行层,审计人的价值锚点在哪里?

Karpathy在文章最后说了一段话,我觉得是对这个问题最好的回答:

"Manual coding is turning into more of an underlying skill – like knowing how to do arithmetic in the age of calculators. Still important, but no longer the bottleneck."

手写代码正在变成一种底层技能——就像计算器时代的心算能力。仍然重要,但不再是瓶颈。

对审计人员而言,在"问题设计"和"判断决策"这两个AI无法替代的环节。

未来,数字化审计的三大核心竞争力:

🤖 风险敏感度(Risk Intuition)

知道"该查什么"比知道"怎么查"重要100倍。

AI可以帮你扫描100种异常模式,但如果你不知道哪些风险是真正的风险、哪些只是统计噪声,你就无法做出有效的审计判断。

行业经验、业务理解、对人性弱点的洞察, 这些AI教不了你。

🤖 声明式设计能力(Declarative Design)

能把模糊的审计直觉,转化为清晰的声明式指令。

这不是"写prompt"的技术活,而是结构化思维的能力——你能否把一个复杂的审计问题,拆解为可验证的子问题?能否定义清晰的success criteria?能否设计有效的迭代路径?

纸上谈兵没有用,需要逻辑思维训练、方法论沉淀、以及大量的实战练习。

🤖 防御性验证能力(Defensive Verification)

能识别AI的"幻觉"和"过度推断",设计交叉验证和反证机制。

声明式分析给了AI很大的自主权,但自主权越大,出错的风险也越大。你能否在信任AI和怀疑AI之间找到平衡点?

审计师的职业怀疑态度、对数据分析方法论的理解、以及对AI能力边界的认知, 这些始终是底座。


结语

声明式数据分析不是让AI替你干活,而是让你从执行者变成设计者

  • 更深刻地理解业务和风险
  • 更清晰地表达分析目标
  • 更批判地解读AI输出
  • 更系统地设计分析流程

一旦跨过这个门槛,会发现:数据分析不再是苦力活,而是脑力活。而脑力活,才是审计人真正的价值所在。

正如Karpathy所说:

The fun part is that programming feels more like conversation and design than like typing.

翻译过来就是:最好的数据分析,感觉起来更像是在跟一个聪明的助手对话和设计,而不是在埋头苦算。

(个人观点,不代表所在单位意见,「小智」对本文亦有贡献