一、人工智能到底在解决什么问题?
人工智能(AI)的核心目标,是让计算机具备某种"看懂、听懂、判断、生成、决策"的能力。
如果用传统编程解决问题,我们通常要先写好明确规则,再让程序严格执行。例如计算加班工资:
def calculate_salary(hours_worked, hourly_rate): if hours_worked <= 40: return hours_worked * hourly_rate overtime_hours = hours_worked - 40 overtime_pay = overtime_hours * hourly_rate * 1.5 return 40 * hourly_rate + overtime_pay
这个例子很适合传统编程,因为规则非常明确:40 小时以内按正常工资算,超过部分按 1.5 倍算。只要输入一样,结果就一定一样。
但很多现实问题没有这么清晰的规则。比如:
- 如何判断一封邮件是不是垃圾邮件?
- 如何识别图片里是不是一只猫?
- 如何根据用户历史行为推荐商品?
- 如何让模型回答"我的订单在哪里"这种自然语言问题?
这些问题很难靠程序员手写所有规则。机器学习的思路是:不用把规则全部写死,而是准备数据,让模型从数据中学习规律。
二、传统编程 vs 机器学习
传统编程的流程可以概括为:
规则 + 数据 -> 程序输出
机器学习的流程则更像:
数据 + 答案 -> 训练出模型 新数据 + 模型 -> 预测结果
举个垃圾邮件识别的例子。传统编程可能会写一堆规则:
- 标题包含"中奖"就判为垃圾邮件
- 正文包含"免费领取"就判为垃圾邮件
- 发件人域名异常就判为垃圾邮件
这种方式能解决一部分问题,但规则越写越多,维护成本也会越来越高。而机器学习会收集大量已标注邮件,例如"垃圾邮件"和"正常邮件",再提取文本词频、标题关键词、发件人信息等特征,让模型学习哪些特征更容易对应垃圾邮件。
它的优点是能处理规则复杂、不容易手写的问题;缺点是依赖数据质量,并且模型为什么这样判断,有时候不如传统代码直观。
三、机器学习的三种常见类型
1. 监督学习
监督学习就是训练数据里既有输入,也有正确答案。模型通过这些"题目 + 标准答案"学习映射关系。
常见任务包括:
- 分类:输出离散类别,例如垃圾邮件 / 正常邮件、猫 / 狗 / 鸟。
- 回归:输出连续数值,例如房价预测、销量预测。
- 关联规则:发现数据项之间的关系,例如买了面包和黄油的人可能也会买牛奶。
下面是一个经典的鸢尾花分类案例,使用 sklearn 中的 SVM 分类器:
from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC from sklearn.metrics import accuracy_score # 1. 加载鸢尾花数据集 iris = datasets.load_iris() X = iris.data y = iris.target # 2. 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.3, random_state=42 ) # 3. 特征标准化 scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) # 4. 创建并训练 SVM 分类器 model = SVC(kernel="rbf", C=1.0, gamma="scale") model.fit(X_train, y_train) # 5. 预测并评估 y_pred = model.predict(X_test) accuracy = accuracy_score(y_test, y_pred) print(f"Accuracy: {accuracy:.2f}")
这段代码的逻辑是:先把数据分成训练集和测试集,再用训练集训练模型,最后用测试集检查模型是否真的学会了规律。
2. 无监督学习
无监督学习的数据没有标准答案,模型需要自己发现数据内部结构。
典型例子是客户分群。假设电商平台有很多用户购买数据,但没有人提前告诉模型"这个用户属于哪一类"。模型可以根据购买频率、客单价、品类偏好等特征,把用户分成高价值用户、偶尔购买用户、价格敏感用户等不同群体。
这种方法常用于聚类、异常检测、用户画像等场景。
3. 强化学习
强化学习强调"智能体"和"环境"的互动。智能体采取动作,环境给出奖励或惩罚,智能体不断试错,最终学到更优策略。
以迷宫为例:
- 状态:小车当前在迷宫中的位置。
- 动作:上、下、左、右移动。
- 奖励:靠近出口加分,撞墙扣分。
- 目标:尽快走出迷宫,并尽量少犯错。
强化学习常见于游戏 AI、机器人控制、自动驾驶、策略优化等领域。
四、模型效果:欠拟合、最佳拟合、过拟合
训练模型不是越复杂越好。常见情况有三种:
- 欠拟合:模型太简单,连训练数据里的规律都没学好。例如用一条直线去拟合明显弯曲的数据。
- 最佳拟合:模型复杂度适中,既能学到规律,也能在新数据上表现稳定。
- 过拟合:模型太复杂,把训练数据里的噪声都记住了,训练集效果很好,但新数据效果差。
以房价预测为例,只用"面积"一个特征可能欠拟合,因为位置、房龄、装修也很重要;如果加入"前几天是否下雨"这类无关特征,模型可能在训练集上表现很好,但泛化能力变差。
实际建模时,我们通常会通过训练集、验证集、测试集,结合准确率、精确率、召回率、F1 值等指标来评估模型。
五、NLP、NLU、NLG:让机器处理人类语言
自然语言处理(NLP)是 AI 里非常重要的方向,目标是让计算机理解、分析和生成人类语言。
NLP 可以拆成几个常见概念:
- NLP:自然语言处理,是总称,包含文本分类、情感分析、语音识别、机器翻译等任务。
- NLU:自然语言理解,重点是理解用户表达了什么意图,里面有哪些实体。
- NLG:自然语言生成,重点是生成自然、可读的文本。
以"明天的天气怎么样?"为例:
- 语音识别把用户语音转成文字。
- NLU 判断用户意图是查询天气,并识别出"明天"这个时间实体。
- 系统查询天气接口。
- NLG 生成回答:"明天是晴天,最高气温 25 度,最低气温 15 度。"
- 语音合成把文字播放出来。
现在的大语言模型,本质上就是 NLP、深度学习和大规模数据训练结合后的结果。
六、深度学习与神经网络
深度学习是机器学习的一个分支,它使用多层神经网络来提取复杂特征。
一个基础神经网络通常包含三类层:
- 输入层:接收原始数据。例如 28x28 的灰度图片有 784 个像素,可以对应 784 个输入节点。
- 隐藏层:提取和转换特征。例如第一层识别边缘,第二层识别形状,后面再组合成更复杂的模式。
- 输出层:给出最终结果。例如手写数字识别输出 10 个概率,分别表示数字 0 到 9 的可能性。
浅层神经网络通常只有少量隐藏层,适合简单任务;深度神经网络有更多隐藏层,能处理图像识别、语音识别、自然语言处理等复杂任务。
CNN、RNN、Transformer 的区别
CNN(卷积神经网络)擅长处理图像。它通过卷积层提取局部特征,通过池化层降低维度,在图像分类、医学影像、视频分析中应用广泛。
RNN(循环神经网络)擅长处理序列数据,例如文本、语音、时间序列。它能把前面的信息带到后面的计算中,但长序列训练效率和长期依赖处理存在限制。LSTM 和 GRU 是为缓解这些问题而出现的改进结构。
Transformer 是近几年大模型的核心架构。2017 年的论文《Attention Is All You Need》提出了完全基于注意力机制的架构,不再依赖传统 RNN 的逐步计算,因此更容易并行训练,也更适合处理长文本。
Transformer 的四个核心组件可以这样理解:
- 自注意力机制:模型在理解一个词时,会同时关注句子里的其他词。
- 多头注意力:从多个角度理解同一句话,比如语法关系、语义关系、指代关系。
- 位置编码:告诉模型词语在句子中的位置顺序。
- 前馈网络:对每个位置的表示进一步加工和转换。
七、BERT 与 GPT:一个偏理解,一个偏生成
BERT 和 GPT 都基于 Transformer,但侧重点不同。
BERT 的全称是 Bidirectional Encoder Representations from Transformers,它使用 Transformer 的编码器部分,特点是双向理解上下文。比如理解"苹果"这个词时,模型会同时看它左边和右边的上下文,从而判断它是水果还是公司。
BERT 的训练通常包含两个阶段:
- 预训练:在大规模文本上学习语言规律,经典任务包括 Masked Language Model(遮蔽语言模型)和 Next Sentence Prediction(下一句预测)。
- 微调:在具体任务数据上继续训练,例如情感分析、问答、文本分类等。
GPT 的全称是 Generative Pre-trained Transformer,重点是生成。给它一个开头,它会根据上下文继续生成后面的内容,例如写文章、回答问题、翻译、生成代码等。
可以简单记:
- BERT 更像阅读理解高手,擅长"看懂一句话"。
- GPT 更像写作和对话助手,擅长"接着往下说"。
八、大语言模型为什么强?
大语言模型(LLM,Large Language Model)通常有三个特点:
- 参数规模大:参数可以理解为模型内部可调节的权重,参数越多,模型容量通常越大。
- 训练数据大:模型从大量书籍、网页、文章、代码中学习语言规律。
- 任务能力广:可以做问答、摘要、翻译、写作、代码生成、信息抽取等任务。
但参数多并不等于一定好。大模型训练和部署成本高,对算力、数据质量、安全控制、推理速度都有较高要求。实际业务中,还需要结合成本、响应速度、准确率、隐私安全等因素来选型。
九、Embedding 和向量数据库
Embedding 可以理解为"把文本、图片、音频等数据转换成一串数字向量"。这些数字不是随机的,而是表示语义特征。
例如"猫"和"狗"都是宠物,它们在向量空间里的距离可能比较近;"汽车"和"猫"的语义差异更大,距离可能更远。
Embedding 常见用途包括:
- 语义搜索:用户搜"订单到哪里了",能匹配"物流查询"相关文档。
- 推荐系统:根据用户喜欢的内容,找相似内容。
- 聚类分析:把相似文本自动分组。
- 知识库问答:先检索相关资料,再交给大模型生成回答。
向量数据库就是专门用来存储、管理、检索这些向量的数据库。传统数据库擅长精确查询,比如 id = 1001;向量数据库擅长相似度查询,比如"找出和这个问题最相似的 5 段文档"。
下面用纯 Python 写一个简化版"向量检索",帮助理解原理:
import math from collections import Counter def char_vector(text): """把文本转换成简单的字频向量。真实项目中通常使用 embedding 模型。""" return Counter(ch for ch in text if not ch.isspace()) def cosine_similarity(vec_a, vec_b): common_chars = set(vec_a) & set(vec_b) numerator = sum(vec_a[ch] * vec_b[ch] for ch in common_chars) denominator = math.sqrt(sum(v * v for v in vec_a.values())) * math.sqrt( sum(v * v for v in vec_b.values()) ) return 0.0 if denominator == 0 else numerator / denominator docs = [ "退货政策:签收后7天内可以申请无理由退货。", "物流查询:订单发货后可以在订单详情页查看物流单号。", "发票规则:企业用户可以申请增值税普通发票。", ] query = "我的订单物流到哪里了" query_vec = char_vector(query) scores = [] for doc in docs: doc_vec = char_vector(doc) score = cosine_similarity(query_vec, doc_vec) scores.append((score, doc)) for score, doc in sorted(scores, reverse=True): print(round(score, 3), doc)
输出结果类似:
0.456 物流查询:订单发货后可以在订单详情页查看物流单号。 0.0 退货政策:签收后7天内可以申请无理由退货。 0.0 发票规则:企业用户可以申请增值税普通发票。
这个案例只是演示原理。真实项目中会用专业 embedding 模型生成高维向量,再把向量存入 Milvus、FAISS、pgvector 等工具中进行高效检索。
十、大模型 API 参数怎么理解?
下面是一个智能客服回答订单问题的示例:
import os from openai import OpenAI client = OpenAI(api_key=os.environ["OPENAI_API_KEY"]) user_question = "我的订单在哪里?我已经等了很长时间了。" response = client.responses.create( model=os.environ["OPENAI_MODEL"], instructions=( "你是电商平台的智能客服。回答要礼貌、简洁、可执行;" "如果缺少订单号,就引导用户补充订单号。" ), input=user_question, max_output_tokens=200, temperature=0.7, top_p=0.9, ) print("智能客服回答:") print(response.output_text)
几个常用参数可以这样理解:
- max_output_tokens:限制模型最多生成多少 token,避免回答太长。
- temperature:控制随机性。值越低越稳定,值越高越有创造性。
- top_p:控制候选词范围。通常和 temperature 二选一重点调整,不建议两个都大幅调整。
- stream:如果开启流式输出,内容可以边生成边显示,适合聊天窗口。
实际业务建议:
- 客服、法律、财务等场景:降低 temperature,追求稳定。
- 文案、创意、故事生成:适当提高 temperature,追求多样性。
- 长文本总结:增加 max_output_tokens,同时明确要求结构。
- 前端聊天页面:使用 stream=True 提升实时体验。
如果使用百度千帆等平台,也可以通过对应 SDK 或兼容 OpenAI 风格的接口调用。关键思路一样:准备模型名称、API Key、用户输入、参数配置,然后读取模型返回结果。
十一、从大模型到 RAG:一个实际应用链路
学完 Embedding、向量数据库和 GPT 后,可以理解现在常见的 RAG(Retrieval-Augmented Generation,检索增强生成)架构。
一个企业知识库问答系统大致流程如下:
1. 文档切分:把 PDF、Word、网页切成小段 2. 向量化:用 embedding 模型把每段文本转成向量 3. 入库:把文本和向量存入向量数据库 4. 用户提问:把问题也转成向量 5. 相似度检索:找出最相关的几段资料 6. 大模型生成:把资料和问题一起交给大模型回答
这比直接让大模型回答更可靠,因为模型可以基于企业自己的资料生成答案,减少胡编乱造,也更方便更新知识。
十二、总结
传统编程 -> 机器学习 -> 深度学习 -> 神经网络 -> Transformer -> BERT / GPT -> Embedding -> 向量数据库 -> 大模型应用开发
如果你已经会 Python,下一步建议按这个顺序实践:
- 用 sklearn 跑通分类、回归、聚类案例。
- 理解神经网络的输入层、隐藏层、输出层。
- 重点学习 Transformer 的注意力机制。
- 学会调用大模型 API。
- 使用 Embedding + 向量数据库做一个简单知识库问答系统。
AI 不只是"会聊天的模型",它背后是一整套从数据、模型、训练、检索到应用落地的技术体系。把这些概念串起来,再结合 Python 做几个小案例,就能真正进入大模型应用开发的大门。
参考资料
- 《Attention Is All You Need》Transformer 论文:1706.03762 Attention Is All You Need
- 《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》论文:1810.04805 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
- OpenAI Text Generation 文档:https://platform.openai.com/docs/guides/text
- OpenAI Responses API 文档:https://platform.openai.com/docs/api-reference/responses/create
- OpenAI Embeddings 文档:https://platform.openai.com/docs/guides/embeddings
- Milvus 向量数据库文档:https://milvus.io/docs/overview.md