AI通识

一、人工智能

1.发展历程

image-20260331121322055

2.AI核心制约因素

image-20260331121434995

二、神经网络

image-20260331131701111

1.AI神经网络

image-20260331124651620

2.深度神经网络

深度神经网络(DNN)的核心在于层——数据在层与层之间流动,每一层都在做一件事:提取更抽象的特征

image-20260331125044039

“深度”指的就是隐藏层的层数多。传统神经网络可能只有 1 层,而深度神经网络有几十甚至几百层。层数越多,能学到的特征越抽象:

1
2
输入层     →  隐藏层1      →  隐藏层2       →  输出层
原始像素 检测边缘 识别形状 "这是猫"

2.1、单独的神经元

image-20260331125228545

也就是这个公式

image-20260331125302352

具体场景

image-20260331130331704

权重就是模型对世界的认知——它编码了”哪个特征重要、重要多少”。负权重意味着”这个信号反而让我不激活”

2.2、反向传播

反向传播——它就是在回答一个问题:权重差在哪儿,往哪个方向改?

无数神经元的权重参数那么多,手动调整一定不可能实现,于是出现反向传播

流程如下

1
2
3
4
5
6
7
8
9
10
11
12
13
① 正向传播:输入数据 → 按当前权重逐层计算 → 得到预测值

② 计算损失:预测值 vs 真实值 → Loss(差多少)

③ 反向传播(Backprop):
从输出层开始,用链式法则逐层算出:
"这个权重增大一点点,Loss 会怎么变?" → 梯度

④ 梯度下降:
w = w - η × 梯度
(沿着让 Loss 减小的方向,走一小步)

⑤ 回到①,循环几十万次

反向传播的核心数学是链式法则——一个复合函数求导的规则。因为网络是层层嵌套的函数,所以最终的梯度可以从输出往输入”一层一层乘回来”,而不需要对每个权重单独重算,极大地节省了计算量

三、大语言模型

1.词向量

计算机只认识数字,不认识”猫”、”狗”这些字。最原始的做法是给每个词分配一个编号(one-hot 编码),比如”猫”= [1,0,0,...],”狗”= [0,1,0,...] 但这种表示有个致命问题:所有词之间的距离都一样,计算机无法感知”猫”和”狗”比”猫”和”汽车”更相似

image-20260331141336389

词向量解决了这个问题:把每个词映射到一个高维空间中的实数向量(比如 300 维),语义相似的词,向量也相近

image-20260331141359163

空间可视化

image-20260331141503030

向量运算 = 语义运算

image-20260331141528337

2.Transformer

Transformer 是 2017 年 Google 论文《Attention Is All You Need》提出的模型

image-20260331142855657

注意力机制

image-20260331150811497

向量加减实现注意力

image-20260331150928366

四、大模型与大模型应用

1.GPT

image-20260331151846134

2.ChatGPT

大模型与传统web应用相结合

image-20260331152125441

具体实现

image-20260331152208265

五、大模型服务

1.云服务api开放平台

image-20260331163542663

注册即送大量额度,但是有过期时间

1
创建apikey
image-20260331163957558

更多使用api在代码中实现

image-20260331164142030

2.api服务

1
2
3
https://platform.deepseek.com/usage


image-20260331152857535

调用时兼容 openAI 格式

image-20260331153711308

3.私有部署

1
https://ollama.com/

image-20260331164436948

六、大模型API

1.接口规范

image-20260331174902591

model — 指定要调用的模型名称,比如 gpt-4ogpt-4o-minideepseek-chat 等,不同提供商字段名相同,只是值不同,这也是”OpenAI 兼容格式”能通用的原因

messages — 对话历史数组,每条消息是一个对象,包含两个字段:

  • role:身份,固定三种值——system(系统提示词)、user(用户输入)、assistant(模型历史回复)

  • content:消息内容字符串

    1
    2
    3
    4
    5
    6
    "messages": [
    { "role": "system", "content": "你是一个专业的 Java 开发助手" },
    { "role": "user", "content": "什么是缓存雪崩?" },
    { "role": "assistant", "content": "缓存雪崩是指..." },
    { "role": "user", "content": "怎么解决?" }
    ]

    多轮对话靠的就是把完整历史塞进 messages,模型本身没有记忆,每次请求都要带完整上下文

其他参数

image-20260331175030097
1
2
3
4
5
6
7
8
9
10
{
"model": "gpt-4o",
"messages": [
{ "role": "system", "content": "你是资深 Java 后端工程师" },
{ "role": "user", "content": "用 Redis 解决缓存雪崩" }
],
"temperature": 0.3,
"max_tokens": 1024,
"stream": true
}

image-20260331175936989

请求头设置如上

2.会话记忆

模型本身无状态,”会话记忆”完全靠客户端维护 messages 数组来实现

image-20260331223155352

每轮都把完整历史带上,模型才能”记住”前面说了什么

常见策略

image-20260331223511222

3.开发环境

UV包管理工具

1
https://uv.doczh.com/getting-started/installation/

创建uv项目

1
pip install uv

添加镜像源

1
setx UV_DEFAULT_INDEX "https://pypi.tuna.tsinghua.edu.cn/simple"

pyproject.toml 文件

image-20260331224133217
1
2
3
4
5
6
7
8
9
10
11
name = "agent": 项目的名称。当你之后运行项目或将其打包时,这就是它的标识。
version = "0.1.0": 项目版本号。遵循语义化版本 (SemVer),代表这是初始开发阶段。
description = "Add your description here": 项目的简短描述。建议修改为更有意义的内容,比如 "An AI agent powered by OpenAI"。
readme = "README.md": 指定项目的说明文件。uv 会读取这个文件作为项目在仓库(如 GitHub)或 PyPI 上的长描述。
requires-python = ">=3.13": 这是一个非常关键的设置。它告诉 uv 这个项目至少需要 Python 3.13 才能运行。

依赖管理 (dependencies)
这是你最常改动的地方。
dependencies = ["openai>=2.30.0"]: 列出了运行该项目所必需的第三方库。
这里指定了 openai 库,且版本必须大于或等于 2.30.0。
当你执行 uv sync 或 uv run 时,uv 会自动下载并安装这些库到虚拟环境中。

结合 pycharm 工具创建项目

image-20260331224452301

4.原生调用大模型api

用 OpenAI SDK 兼容接口调用 Claude / 其他模型

很多平台(Claude、DeepSeek、千问等)都提供 OpenAI 兼容接口,只需改 base_urlapi_key

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from openai import OpenAI

# 以 Claude 兼容接口为例(AnyRouter 等中转)
client = OpenAI(
api_key="你的key",
base_url="https://api.anyrouter.top/v1" # 兼容接口地址
)

response = client.chat.completions.create(
model="claude-sonnet-4-20250514",
messages=[
{"role": "user", "content": "帮我写一段冒泡排序"}
]
)

print(response.choices[0].message.content)
image-20260401112402617

流式输出(Streaming)方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from openai import OpenAI

client = OpenAI(api_key="sk-xxx")

stream = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "讲一个故事"}],
stream=True, # 关键参数
)

for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
image-20260401111033412

环境变量获取依赖

读取环境变量需要用到python-dotenv,先安装依赖
安装命令:

1
uv add python-dotenv

再创建.env文件,并写入api_key

1
DEEPSEEK_API_KEY=sk-f36d

接着就可以可以从环境变量中获取api_key了

1
2
3
4
5
6
7
8
9
10
11
12
from dotenv import load_dotenv
import os

load_dotenv()

api_key = os.getenv("DEEPSEEK_API_KEY")
print(api_key)

client = OpenAI(
api_key=api_key,
base_url="https://api.deepseek.com"
)
image-20260401113305822