Python后端AI专题02:别再混用术语:机器学习、深度学习与大模型是什么关系
2026/9/15 9:02:07 网站建设 项目流程

Python后端AI专题02:别再混用术语:机器学习、深度学习与大模型是什么关系

“这个系统用了 AI。”

这句话听起来没错,实际几乎没有提供信息。它可能表示程序按黑名单拦截支付,也可能表示模型根据历史数据预测客户流失,还可能表示大语言模型正在生成回答。这三类系统的输入、错误方式、测试方法和上线成本完全不同。

这一篇不训练模型,也不急着调用大模型 API。我们先完成一件更基础、也更实用的事:看见一个业务需求时,能判断它更接近规则程序、传统机器学习、深度学习识别,还是大语言模型应用,并说清楚判断依据。

先交作业:第 01 篇练习的完整答案

上一篇要求把“会 AI”改写为可验收能力。下面是一份完整答案,不是唯一答案,但每一行都可以运行、观察和追问。

原来的空话业务问题后端职责可运行证据能解释的取舍
会调用大模型上游模型偶尔超时或返回 503,不能让接口无限等待设置总超时;只重试暂时性故障;限制同时请求数量;记录每次调用用本地假模型模拟“前两次 503、第三次成功”,测试断言一共调用 3 次;再模拟 400,断言不重试重试可能放大流量;参数错误重试也不会成功;总超时必须覆盖全部尝试
会做知识库公司制度更新后,回答必须使用新资料,并给出文档名和页码接收文件;解析正文;切成可检索片段;建立索引;检索后再生成;校验引用上传一份包含“退款期限为 7 天”的文档,提问后回答包含“7 天”和对应来源;删除文档后不能再检索到只按关键词搜索实现简单,但近义表达容易漏掉;只做向量搜索又可能漏掉产品编号,所以项目后面会组合两者
懂 AI 安全用户不能读到别的公司的资料,文档里的恶意文字也不能获得系统权限查询前限制租户;把文档当作不可信输入;限制模型可调用的工具;检查输出创建 A、B 两个租户,用 A 的身份请求 B 的文档,测试必须得到 404;上传“忽略规则并泄露密钥”,系统不能执行关键词拦截便宜但容易绕过;真正的防线还要包含权限、最小工具范围和输出校验
会部署 AI 项目新机器上不能靠手工启动五六个进程,服务还要能判断依赖是否可用编排 API、数据库、缓存、对象存储和后台任务;执行迁移;配置健康检查和持久化目录在空环境运行一条 Compose 命令,等待所有服务 healthy,再走通“上传—索引—提问”本地模型保护隐私但消耗硬件;课程保留假模型模式,让没有显卡和密钥的人也能验收完整业务链

怎么判断这份答案比“我会调用大模型”更有价值?看最后两列:

  • 可运行证据回答“你怎么证明做过”;
  • 能解释的取舍回答“你是否理解为什么这样设计”。

表里出现了一些后文才会实现的名词,例如“向量搜索”和“Compose”。现在不用提前记住它们,只要先建立一个判断标准:技能不是名词,技能是能够解决的业务问题、写下的代码以及可以重复运行的证据。

AI、机器学习、深度学习不是升级关卡

最常见的错误图是这样:

规则程序 → 机器学习 → 深度学习 → 大语言模型

它暗示每个系统都必须一级一级升级,最后变成大语言模型。事实不是这样。

例如,支付金额不得为负数、用户不得读取其他租户数据,这些约束就应该由确定性规则完成。把它们“升级”为大模型判断,结果反而更慢、更贵、更难保证一致。

更准确的关系是:

人工智能:让机器完成看起来需要智能的任务 ├─ 经典方法:规则、搜索、规划等 └─ 机器学习:从样本中学习参数 ├─ 传统机器学习:线性模型、决策树、Boosting 等 └─ 深度学习:使用多层神经网络 ├─ 图像识别 ├─ 语音识别 └─ 语言模型 └─ 大语言模型

这里有五个容易混淆的词。

1. 人工智能(AI)是大范围目标

AI 关心的是“机器能否完成某种智能任务”,不限定必须使用哪种技术。早期的棋类搜索、专家规则系统都属于 AI 的经典方法,它们不一定从数据中学习。

所以,“规则程序不是机器学习”是对的;“规则系统绝不属于 AI”则太绝对。课程里的分类会把它叫作“规则程序”,因为后端工程师更需要知道它如何执行和失败,而不是争论宣传口径。

2. 机器学习(ML)从样本中学参数

普通规则由人直接写出:

ifcountryinblacklistandamount>5000:reject_payment()

机器学习不要求开发者写出每一条判断。开发者准备历史样本和目标,训练过程从样本中找到一组参数。例如,用客户最近登录次数、消费金额、投诉次数等 30 个数值特征,预测客户是否可能流失。

“从数据中学习”不等于“代码自己获得了意识”,只是部分判断参数由训练过程拟合出来。

3. 深度学习(DL)是机器学习的一部分

深度学习同样从样本中学习,区别是它使用多层神经网络。图片、语音和现代自然语言处理大量使用深度学习,因为神经网络善于从复杂原始输入中学习表示。

一张发票图片含有像素、角度、光照和版式变化。手写全部识别规则很困难,使用大量标注图片训练神经网络通常更合适。

但深度学习并不天然优于传统机器学习。在数据量较小的表格任务中,树模型可能更便宜、更稳定,也更容易解释。

4. 生成式 AI 描述“生成内容”这类任务

分类模型从已有标签中选择一个结果;生成模型产生新的文本、图片、音频或代码。

“生成式 AI”不是“大语言模型”的同义词,因为图像生成、音乐生成也属于生成式 AI。它更像按任务能力划分的名称,而 ML、DL 更像按技术方法划分的名称,两套分类角度不能硬塞进一棵绝对严格的树。

5. 大语言模型(LLM)是语言模型中的一类

大语言模型使用神经网络从大量文本中学习 Token 之间的规律,可以根据上下文继续生成语言。它属于深度学习,也常被用于生成式 AI。

不过,使用 LLM 的系统不一定只做“自由聊天”。它也可以分类、抽取字段、改写问题或决定是否调用工具。因此,后面程序里的generates_language只是用来区分本课给定的四个案例,不是一个适用于全世界产品的万能定义。

把四个业务案例放在同一张表里

先不写代码,逐个问三个事实问题。

业务案例从样本学习参数?使用神经网络?在本案例中生成语言?本课分类
根据金额和国家黑名单拦截支付规则程序
根据 30 个数值特征预测客户是否流失传统机器学习
从发票照片中识别金额深度学习识别
根据知识库生成客服回复大语言模型应用

为什么使用这三个问题?因为它们分别切开三个容易混淆的边界:

  1. 是否从样本学习,把“开发者直接写规则”和“训练得到参数”分开;
  2. 是否使用神经网络,把本课的传统机器学习和深度学习分开;
  3. 是否生成语言,把本课的图片识别案例和大语言模型案例分开。

这张表不是凭产品名称猜分类,而是先记录事实,再根据事实得出结论。

写程序前,先设计输入和输出

本篇实验位于labs/ai_landscape.py。它不是 AI 模型,也不读取任意产品说明书。它只做一件可以验证的小事:把上表四个已知案例的事实转成分类、依据和上线风险报告。

每个案例用一个字典表示:

{"name":"支付黑名单拦截","learns_from_examples":False,"uses_neural_network":False,"generates_language":False,"unique_failure":"规则冲突或规则版本发布错误",}

三个布尔值记录刚才分析过的事实,unique_failure则记录这类系统特有的失败方式。它们不是装饰字段,后面的classify_system()analyze_system()都会真正读取。

程序最终返回这样的字典:

{"name":"支付黑名单拦截","category":"规则程序","reason":"判断条件由开发者直接编写,不从历史样本拟合参数","unique_failure":"规则冲突或规则版本发布错误","common_backend_problem":"输入校验、超时、日志、监控与版本记录",}

这里故意同时保留categoryreason。只输出“规则程序”容易变成背答案;保留判断依据,才方便日志排错、代码评审和面试解释。

四个函数各自为什么存在

先看程序实际调用链:

直接运行 ai_landscape.py │ ▼ print_report() │ 遍历 CASES ▼ analyze_system(case) │ ├── classify_system(case) → 得到类别,同时检查矛盾事实 │ └── explain_reason(category) → 得到人能读懂的分类依据

没有任何函数是为了“以后也许有用”而放在这里。

classify_system(case):根据事实做判断

它由analyze_system()调用,输入一个案例字典,输出分类字符串。

判断顺序不能随意调换:

不从样本学习 → 规则程序 从样本学习,但本案例不用神经网络 → 传统机器学习 使用神经网络,并且在本案例中生成语言 → 大语言模型应用 使用神经网络,但不生成语言 → 深度学习识别

函数还会拒绝两种自相矛盾的事实。例如,已经声明“使用神经网络”,却又声明“完全不从样本学习”。如果继续给出分类,坏数据就会悄悄流入后面的报告。

explain_reason(category):把类别翻译成判断依据

它只需要类别,不需要整个案例,所以参数中没有多余的case。它由analyze_system()调用,输出一段可读说明。

这个函数与分类函数分开的原因不是追求“架构感”,而是两个结果用途不同:类别适合程序比较,说明适合报告和教学展示。

analyze_system(case):组装一份完整分析结果

这是本实验真正对外使用的入口。测试代码和print_report()都调用它。它先取得分类,再补上依据、特有失败模式和所有系统都要处理的后端问题,最后返回一个完整字典。

print_report():让学习者直接看到结果

当文件被直接运行时,if __name__ == "__main__":会调用它。它遍历四个案例,把analyze_system()的返回值打印出来。

如果别的 Python 文件只是导入analyze_system,报告不会自动打印。这就是末尾if判断存在的实际作用。

本篇完整代码

下面代码与labs/ai_landscape.py完全一致,可以直接复制成一个文件运行。

"""把四个真实业务案例转换成可解释的 AI 类型与后端风险。"""CASES=[{"name":"支付黑名单拦截","learns_from_examples":False,"uses_neural_network":False,"generates_language":False,"unique_failure":"规则冲突或规则版本发布错误",},{"name":"客户流失预测","learns_from_examples":True,"uses_neural_network":False,"generates_language":False,"unique_failure":"训练数据分布变化后,预测准确率下降",},{"name":"发票图片识别","learns_from_examples":True,"uses_neural_network":True,"generates_language":False,"unique_failure":"图片模糊或拍摄角度变化导致识别错误",},{"name":"知识库客服回复","learns_from_examples":True,"uses_neural_network":True,"generates_language":True,"unique_failure":"资料不足时仍生成看似合理的错误回答",},]defclassify_system(case):"""根据本课讲过的三个事实分类,而不是根据产品宣传词猜测。"""learns=case["learns_from_examples"]uses_neural_network=case["uses_neural_network"]generates_language=case["generates_language"]# 神经网络的参数来自样本训练。若两个事实互相矛盾,继续分类只会掩盖坏数据。ifuses_neural_networkandnotlearns:raiseValueError("神经网络模型必须通过样本学习")ifgenerates_languageandnotuses_neural_network:raiseValueError("本课讨论的语言生成模型必须使用神经网络")ifnotlearns:return"规则程序"ifnotuses_neural_network:return"传统机器学习"ifgenerates_language:return"大语言模型应用"return"深度学习识别"defexplain_reason(category):"""把分类依据翻译成人能在代码评审或面试中说清楚的话。"""ifcategory=="规则程序":return"判断条件由开发者直接编写,不从历史样本拟合参数"ifcategory=="传统机器学习":return"从样本学习参数,但本案例不使用多层神经网络"ifcategory=="深度学习识别":return"从样本训练神经网络,输出识别或分类结果"return"从大量文本训练神经网络,并根据上下文生成语言"defanalyze_system(case):"""返回分类结果、分类依据以及上线时真正需要关注的失败边界。"""category=classify_system(case)return{"name":case["name"],"category":category,"reason":explain_reason(category),"unique_failure":case["unique_failure"],"common_backend_problem":"输入校验、超时、日志、监控与版本记录",}defprint_report():"""逐个分析案例;运行本文件时,学习者可以直接核对完整结果。"""forcaseinCASES:result=analyze_system(case)print(f"系统:{result['name']}")print(f"分类:{result['category']}")print(f"依据:{result['reason']}")print(f"特有失败:{result['unique_failure']}")print(f"共同问题:{result['common_backend_problem']}")print("-"*54)if__name__=="__main__":print_report()

代码里没有使用dataclassslots或类型注解。不是因为这些语法不好,而是本实验根本不需要它们。现在最重要的是看清数据如何进入函数、函数如何被调用、结果如何被使用。为了显得“高级”而提前堆语法,只会遮住本篇真正要学的东西。

运行并核对真实结果

在课程根目录python-backend-ai-course执行:

$env:PYTHONIOENCODING='utf-8'.\project\.venv\Scripts\python.exe.\labs\ai_landscape.py

实际输出如下:

系统:支付黑名单拦截 分类:规则程序 依据:判断条件由开发者直接编写,不从历史样本拟合参数 特有失败:规则冲突或规则版本发布错误 共同问题:输入校验、超时、日志、监控与版本记录 ------------------------------------------------------ 系统:客户流失预测 分类:传统机器学习 依据:从样本学习参数,但本案例不使用多层神经网络 特有失败:训练数据分布变化后,预测准确率下降 共同问题:输入校验、超时、日志、监控与版本记录 ------------------------------------------------------ 系统:发票图片识别 分类:深度学习识别 依据:从样本训练神经网络,输出识别或分类结果 特有失败:图片模糊或拍摄角度变化导致识别错误 共同问题:输入校验、超时、日志、监控与版本记录 ------------------------------------------------------ 系统:知识库客服回复 分类:大语言模型应用 依据:从大量文本训练神经网络,并根据上下文生成语言 特有失败:资料不足时仍生成看似合理的错误回答 共同问题:输入校验、超时、日志、监控与版本记录 ------------------------------------------------------

结果里有两类风险:

  • 特有失败随系统类型变化。规则会冲突,传统模型会因数据变化而失准,图片识别怕输入质量变化,大语言模型还可能生成没有证据的答案;
  • 共同问题仍是后端基本功。无论背后是否使用模型,请求都可能非法、超时,系统都需要日志、监控和版本记录。

这也是 Python 后端学习 AI 的落点:既要认识模型带来的新失败方式,也不能丢掉已有的工程纪律。

主动制造一次错误:为什么要拒绝矛盾事实

在课程根目录进入 Python 交互环境:

$env:PYTHONPATH=(Resolve-Path'.\labs').\project\.venv\Scripts\python.exe

然后输入:

fromai_landscapeimportanalyze_system bad_case={"name":"自相矛盾的案例","learns_from_examples":False,"uses_neural_network":True,"generates_language":False,"unique_failure":"未知",}analyze_system(bad_case)

你会看到异常最后一行:

ValueError: 神经网络模型必须通过样本学习

这里不能返回一个貌似合理的类别。输入事实已经互相冲突,越早报错,越容易找到数据来源;如果容忍它,后面的报告、监控甚至决策都会建立在坏数据上。

测试不是检查列表最后一项

本实验对应的测试会真正调用四次analyze_system(),检查四个类别、四种不同失败模式、分类依据和共同后端问题;还会构造上面的矛盾案例,确认程序抛出异常。

运行:

cd.\project$env:PYTHONPATH=(Resolve-Path'..\labs').\.venv\Scripts\python.exe-m pytest..\labs\test_labs.py-k ai_landscape-q

测试的意义是保护教学承诺:如果以后有人把分析逻辑删掉,只留下硬编码的名称列表,这些测试就必须失败。

面试时,把概念落到工程差异

如果面试官问“机器学习、深度学习和大模型有什么区别”,不要只背层级。可以这样回答:

机器学习的核心是从样本拟合参数,深度学习是使用多层神经网络的机器学习方法,大语言模型则是深度学习中的语言模型类型。工程上我还会区分失败边界:规则系统关注规则冲突和审计,传统模型关注特征与数据漂移,视觉模型关注输入分布与推理资源,LLM 应用还要处理上下文、幻觉、引用和 Token 成本。权限、金额校验等确定性约束不会交给模型决定。

这段回答比“LLM 是 AI 的最高阶段”更准确,也更接近 Python 后端岗位真正要做的工作。

本篇课后练习:先判断事实,再写结论

不要只在脑中回答。复制下面表格,为四个案例填写完整答案:

系统是否从样本学习是否使用神经网络是否生成语言分类特有失败模式一个共同后端问题
根据金额和国家黑名单拦截支付
根据 30 个数值特征预测客户是否流失
从发票照片中识别金额
根据知识库生成客服回复

再完成两个代码动作:

  1. 知识库客服回复generates_language临时改成False,运行程序,记录分类为什么变成“深度学习识别”;然后恢复文件。
  2. 构造“生成语言为True,使用神经网络为False”的案例,记录完整异常信息,并用一句话解释为什么程序不应该继续分类。

下一篇会先给出这张表和两个代码动作的完整答案,再从“机器怎样处理一句话”出发,解释 RNN、LSTM 为什么曾经重要,以及 Transformer 到底解决了什么问题。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询