大模型应用概述¶
✅ 2026-03-26 核验:本总览章只保留稳定概念,不再维护实时排行榜。OpenAI 示例默认已收紧为
gpt-5.4/gpt-5-mini;为了与 DeepSeek、Ollama 等兼容接口对照,部分代码仍使用 Chat Completions 风格,新建 OpenAI 原生项目应优先考虑Responses API。
📖 章节导读¶
大语言模型(LLM)是当前 AI 领域最热门的技术之一,正在改变我们构建应用的方式。本章将介绍大模型的发展历程、主流模型和应用场景。
🎯 学习目标¶
- 理解大模型的发展历程
- 了解主流大模型的特点
- 掌握大模型的应用场景
- 能够搭建大模型开发环境
1.1 大模型发展历程¶
1.1.1 早期阶段(2017-2019)¶
Transformer 诞生(2017): - Google 提出 Transformer 架构 - Attention 机制解决长距离依赖 - 为后续大模型奠定基础
BERT(2018): - Google 提出双向预训练模型 - 引入 Masked Language Model - 在 NLP 任务上取得突破
GPT-1(2018): - OpenAI 提出生成式预训练模型 - 使用 Transformer 解码器 - 展示了生成式模型的潜力
1.1.2 快速发展(2020-2022)¶
GPT-3(2020): - 1750 亿参数的超大模型 - 展示了惊人的 Few-shot 能力 - 推动了 AI 应用的新浪潮
CLIP(2021): - OpenAI 提出多模态模型 - 连接文本和图像 - 开启多模态应用新方向
ChatGPT(2022): - OpenAI 发布对话式 AI - 展示了强大的对话能力 - 引爆全球 AI 热潮
1.1.3 开源时代(2023-至今)¶
LLaMA(2023): - Meta 开源大模型 - 提供了强大的开源选择 - 推动了开源社区发展
Mistral(2023): - 高效的开源模型 - 性能接近闭源模型 - 推动了开源模型优化
Qwen(2023): - 阿里巴巴开源中文大模型 - 中文能力强 - 推动了中文大模型发展
1.2 主流大模型¶
1.2.1 闭源模型¶
GPT 系列(OpenAI): - GPT-5.4:面向专业工作与复杂任务的当前旗舰模型 - GPT-5 mini:当前更稳妥的低延迟、高性价比选择 - o 系列(o1/o3):推理系列模型 - 特点:推理能力强,多语言支持好
Claude 系列(Anthropic): - Claude Opus 4:最强大的推理模型 - Claude Sonnet 4:平衡性能与速度 - 特点:长文本、安全性高、编程能力强
文心一言(百度): - 百度自研大模型 - 中文理解能力强 - 特点:中文优化、知识丰富
1.2.2 开源模型¶
LLaMA 系列(Meta): - LLaMA-3/3.1:强大的开源基座 - LLaMA-4:最新版本,支持 MoE 架构 - 特点:开源、可私有部署
Qwen 系列(阿里): - Qwen3:最新版本,中文能力强 - Qwen2.5-72B:超大参数版本 - 特点:中文优化、多模态
Mistral 系列(Mistral AI): - Mistral-7B:高效的小模型 - Mixtral-8x7B:MoE 架构 - 特点:效率高、性能好
DeepSeek 系列(深度求索): - DeepSeek-V3.2:671B MoE 架构 - DeepSeek-R1:强推理模型 - 特点:开源、推理能力出色
1.2.3 模型量化对比¶
选择模型时,需要综合考虑性能、成本、延迟和部署方式。由于价格、上下文窗口、基准成绩和可用模型都会快速变化,本总览章不再维护静态实时排行榜;最新的官方核验结果请参考:
这里保留一张稳定的选型维度表,帮助你先做架构判断:
| 模型类别 | 常见代表路线 | 典型优势 | 典型代价 | 适合场景 |
|---|---|---|---|---|
| 通用云 API 模型 | OpenAI / Anthropic / Google | 接入快、效果稳定、工具生态成熟 | 持续 API 成本、受地区/权限影响 | 产品验证、企业应用、复杂工作流 |
| 推理模型 | o 系列 / DeepSeek-R1 类路线 | 更强的多步推理与规划能力 | 延迟更高、成本更高或更难控 | 数学、规划、复杂决策 |
| 开源通用模型 | Qwen / Llama / Mistral / DeepSeek 开源线 | 可私有化、可微调、成本可控 | 运维复杂、效果依赖部署栈 | 数据敏感、本地部署、二次开发 |
| 多模态前沿模型 | GPT-5.4 / Gemini 2.5 / Claude 4.6 视觉路线 | 文本+图像+音频/工具联合能力 | API 变化快、价格和权限波动大 | OCR、视觉问答、桌面/浏览器 Agent |
| 小模型/经济型模型 | mini / flash / 小尺寸开源模型 | 成本低、延迟低、适合大规模调用 | 上限较低、复杂任务容易退化 | 分类、抽取、路由、Judge、预处理 |
注意:如果某个项目对“价格、上下文、具体 benchmark”高度敏感,不要直接抄总览章里的旧表,应该在立项时重新核一次官方价格页和模型文档。
1.2.4 如何选择模型¶
模型选择应基于四个维度做决策:
┌─────────────────────────────────────────────────────────┐
│ 模型选择决策框架 │
├──────────────┬──────────────────────────────────────────┤
│ 维度 │ 考虑因素 │
├──────────────┼──────────────────────────────────────────┤
│ ① 任务类型 │ 通用对话 → GPT-5.4 / Claude Sonnet 4.6 │
│ │ 复杂推理 → o3 / DeepSeek-R1 │
│ │ 中文特化 → Qwen3.5 / DeepSeek-V3.2 │
│ │ 代码生成 → Claude Opus 4.6 / DeepSeek-R1 │
├──────────────┼──────────────────────────────────────────┤
│ ② 部署方式 │ 快速验证 → 云API(OpenAI/Anthropic) │
│ │ 数据敏感 → 本地部署(Ollama/vLLM) │
│ │ 大规模 → 自建推理集群 │
├──────────────┼──────────────────────────────────────────┤
│ ③ 成本预算 │ 低预算 → GPT-5 mini / 小尺寸开源模型 │
│ │ 中预算 → GPT-5.4 / Claude Sonnet 4.6 │
│ │ 零API成本 → 本地部署开源模型 │
├──────────────┼──────────────────────────────────────────┤
│ ④ 性能需求 │ 低延迟 → 小模型(7-14B) 或 GPT-5 mini │
│ │ 高质量 → 大模型(70B+) 或 o3 │
│ │ 长文本 → Claude 4.6(1M) / Llama 4 Scout / Maverick │
└──────────────┴──────────────────────────────────────────┘
实用建议:先用 API 验证产品可行性(成本低、速度快),确认效果后再评估是否迁移到开源本地部署。
1.3 LLM 核心概念¶
在开始编程之前,理解以下核心概念至关重要:
1.3.1 Token 与计费¶
LLM 不是按"字"或"词"处理文本,而是按 token 处理。Token 是模型词表中的最小单元——可以理解为一个"子词片段"。例如 "hamburger" 可能被拆分为 ["ham", "burger"] 两个 token,而常用词 "the" 本身就是一个 token。
为什么理解 Token 很重要?
- 计费依据:所有主流 API 都按 token 数量收费,而非字符数或字数。同样的内容,不同语言消耗的 token 差异很大。
- 上下文窗口:每个模型有最大上下文长度(如 128K tokens),超出部分会被截断。理解 token 计数才能合理规划输入输出。
- 中英文差异:英文平均约 1 token ≈ 4 个字符;中文平均约 1 token ≈ 1.5-2 个汉字。这意味着同样的内容,中文消耗的 token 约为英文的 2-3 倍,成本也相应更高。
"""Token 计数示例"""
import tiktoken
# GPT-5 / GPT-5.4 家族当前可用 o200k_base 编码族做示例估算
enc = tiktoken.get_encoding("o200k_base")
texts = [
"Hello, world!",
"大语言模型应用开发",
"The quick brown fox jumps over the lazy dog.",
"def fibonacci(n): return n if n <= 1 else fibonacci(n-1) + fibonacci(n-2)",
]
for text in texts:
tokens = enc.encode(text)
print(f"文本: {text}")
print(f" Token数: {len(tokens)}")
print(f" Token列表: {[enc.decode([t]) for t in tokens[:10]]}")
print()
# 成本估算函数
def estimate_cost(
input_tokens: int,
output_tokens: int,
model: str = "gpt-5-mini"
) -> dict:
"""估算预算消耗(示例预算单位)"""
# 以下仅演示“按输入/输出分别计费”的计算逻辑;
# 真实项目应从官方 pricing 页面或配置中心同步实时价格
pricing = {
"gpt-5.4": {"input": 1.00, "cached_input": 0.10, "output": 6.00},
"gpt-5-mini": {"input": 0.30, "cached_input": 0.03, "output": 1.80},
"gpt-5-nano": {"input": 0.08, "cached_input": 0.008, "output": 0.50},
}
if model not in pricing:
return {"error": f"未知模型: {model}"}
p = pricing[model]
input_cost = input_tokens / 1_000_000 * p["input"]
output_cost = output_tokens / 1_000_000 * p["output"]
return {
"model": model,
"input_tokens": input_tokens,
"output_tokens": output_tokens,
"input_cost": f"{input_cost:.6f} budget_units",
"output_cost": f"{output_cost:.6f} budget_units",
"total_cost": f"{input_cost + output_cost:.6f} budget_units",
}
# 示例:一次典型对话(500输入 + 1000输出)
print(estimate_cost(500, 1000, "gpt-5-mini"))
# {'model': 'gpt-5-mini', 'input_tokens': 500, 'output_tokens': 1000,
# 'input_cost': '0.000150 budget_units', 'output_cost': '0.001800 budget_units',
# 'total_cost': '0.001950 budget_units'}
print(estimate_cost(500, 1000, "gpt-5.4"))
# {'model': 'gpt-5.4', 'total_cost': '0.006500 budget_units'} —— 明显高于轻量模型
1.3.2 Temperature 与生成控制¶
Temperature 控制生成的随机性,是最重要的生成参数。其底层原理是对模型输出的 logits(原始分数) 进行缩放后再做 softmax 归一化:
- temperature → 0:logits 被无限放大,最高概率的 token 几乎必被选中 → 输出确定、重复
- temperature = 1:保持模型原始概率分布 → "正常"风格
- temperature → 2:logits 被压缩,各 token 概率趋于均匀 → 输出多样、不可预测
简单类比:temperature 就像水龙头的"温度旋钮"——往左拧(低值)输出稳定冰冷的事实,往右拧(高值)输出天马行空的创意。
| 参数 | 范围 | 作用 | 推荐场景 |
|---|---|---|---|
temperature | 0.0 ~ 2.0 | 控制随机性,越高越随机 | 事实类任务 0.0-0.3 ,创意任务 0.7-1.0 |
top_p | 0.0 ~ 1.0 | 核采样,与 temperature 二选一 | 通常保持 1.0 |
max_tokens | 1 ~ 模型上限 | 最大输出 token 数 | 按需设置,避免浪费 |
frequency_penalty | -2.0 ~ 2.0 | 降低重复词频 | 长文本设 0.3-0.5 |
presence_penalty | -2.0 ~ 2.0 | 鼓励新话题 | 创意写作设 0.3-0.6 |
"""不同 temperature 的效果对比"""
from openai import OpenAI
import os
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
prompt = "用一句话描述人工智能的未来"
for temp in [0.0, 0.5, 1.0, 1.5]:
responses = []
for _ in range(3): # 每个temperature生成3次
resp = client.chat.completions.create(
model="gpt-5-mini",
messages=[{"role": "user", "content": prompt}],
temperature=temp,
max_tokens=100,
)
responses.append(resp.choices[0].message.content)
print(f"\n--- temperature={temp} ---")
for i, r in enumerate(responses, 1): # enumerate同时获取索引和元素
print(f" [{i}] {r}")
# temperature=0.0 时三次结果几乎相同
# temperature=1.5 时三次结果差异很大
1.3.3 消息格式与角色¶
LLM API 采用消息列表格式,每条消息有明确角色:
messages = [
# system: 设定AI的行为和角色(只需一条,放在最前)
{
"role": "system",
"content": "你是一位资深Python工程师,回答简洁、准确,必要时给出代码示例。"
},
# user: 用户输入
{
"role": "user",
"content": "如何实现一个线程安全的单例模式?"
},
# assistant: AI的历史回复(用于多轮对话)
{
"role": "assistant",
"content": "可以使用 `threading.Lock` 配合双重检查锁定..."
},
# user: 用户的后续问题
{
"role": "user",
"content": "能给一个完整的代码示例吗?"
},
]
关键理解: LLM 本身是无状态的。每次 API 调用都是独立的。"多轮对话"是通过把历史消息全部发送给模型实现的。这意味着对话越长,消耗的 token 越多,成本越高。
1.4 大模型应用场景¶
1.4.1 文本生成¶
场景: - 内容创作:文章、故事、诗歌 - 代码生成:编程辅助、代码补全 - 翻译:多语言互译 - 摘要:长文本摘要
案例: - ChatGPT:对话式 AI 助手 - Claude:长文本处理 - 文心一言:中文内容生成
1.4.2 对话系统¶
场景: - 智能客服:自动回答用户问题 - 虚拟助手:个人 AI 助手 - 教育辅导:个性化学习辅导 - 医疗咨询:健康咨询(需谨慎)
案例: - ChatGPT:通用对话 AI - Character.AI:角色扮演对话 - Replika:AI 伴侣
1.4.3 知识问答¶
场景: - 文档问答:基于文档回答问题 - 知识库查询:企业知识问答 - 技术支持:技术问题解答 - 学习辅助:学习问题解答
案例: - Perplexity.AI:文档问答 - ChatPDF:PDF 文档问答 - 企业知识库:内部知识问答
1.4.4 Agent 应用¶
场景: - 任务自动化:自动执行复杂任务 - 工具调用:调用 API 和工具 - 决策支持:辅助决策制定 - 流程自动化:自动化业务流程
案例: - AutoGPT:自主 Agent - BabyAGI:任务规划 Agent - LangChain Agent:可编程 Agent
1.5 环境搭建¶
1.5.1 Python 环境¶
# 创建虚拟环境
python -m venv llm_env
source llm_env/bin/activate # Linux/Mac
# llm_env\Scripts\activate # Windows
# 安装核心依赖
pip install openai anthropic # 云端API客户端
pip install tiktoken # Token计数
pip install python-dotenv # 环境变量管理
pip install rich # 美化终端输出(可选)
# 安装本地模型依赖(可选)
pip install "transformers>=4.45,<5" torch # Hugging Face
pip install ollama # Ollama Python客户端
1.5.2 API Key 安全管理¶
⚠️ 绝对不要将 API Key 硬编码在代码中或提交到 Git 仓库。
推荐使用 .env 文件 + python-dotenv:
# .env 文件(加入 .gitignore 中)
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxx
ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxxxxx
DEEPSEEK_API_KEY=sk-xxxxxxxxxxxxxxxx
"""安全加载 API Key 的标准做法"""
import os
from dotenv import load_dotenv
load_dotenv() # 自动读取 .env 文件
# 封装为统一的配置获取函数
def get_api_key(provider: str) -> str:
"""获取指定提供商的 API Key,缺失时给出清晰错误"""
key_map = {
"openai": "OPENAI_API_KEY",
"anthropic": "ANTHROPIC_API_KEY",
"deepseek": "DEEPSEEK_API_KEY",
}
env_var = key_map.get(provider.lower())
if not env_var:
raise ValueError(f"不支持的提供商: {provider}")
key = os.environ.get(env_var)
if not key:
raise EnvironmentError(
f"缺少环境变量 {env_var},请在 .env 文件中配置"
)
return key
1.5.3 多提供商统一客户端¶
实际项目中通常需要支持多个模型提供商。以下是一个统一封装:
"""统一的多提供商LLM客户端"""
from openai import OpenAI
from anthropic import Anthropic
import os
from dotenv import load_dotenv
from dataclasses import dataclass
load_dotenv()
@dataclass # @dataclass自动生成__init__等方法
class LLMResponse:
"""统一的响应格式"""
content: str
model: str
input_tokens: int
output_tokens: int
total_tokens: int
@property # @property将方法变为属性访问
def cost_estimate(self) -> float:
"""粗略成本估算(示例预算单位)"""
pricing = {
"gpt-5.4": (1.00, 6.00),
"gpt-5-mini": (0.30, 1.80),
"gpt-5-nano": (0.08, 0.50),
}
if self.model in pricing:
ip, op = pricing[self.model] # 元组解包:pricing的值是(输入价, 输出价)元组,一行赋值给ip和op两个变量
return (self.input_tokens * ip + self.output_tokens * op) / 1_000_000
return 0.0
class UnifiedLLM:
"""支持 OpenAI / Anthropic / DeepSeek 的统一客户端"""
def __init__(self):
# OpenAI
if os.environ.get("OPENAI_API_KEY"):
self.openai = OpenAI()
else:
self.openai = None
# Anthropic
if os.environ.get("ANTHROPIC_API_KEY"):
self.anthropic = Anthropic()
else:
self.anthropic = None
# DeepSeek (兼容OpenAI接口)
if os.environ.get("DEEPSEEK_API_KEY"):
self.deepseek = OpenAI(
api_key=os.environ["DEEPSEEK_API_KEY"],
base_url="https://api.deepseek.com"
)
else:
self.deepseek = None
def chat(
self,
message: str,
model: str = "gpt-5-mini",
system: str = "You are a helpful assistant.",
temperature: float = 0.7,
max_tokens: int = 1024,
) -> LLMResponse:
"""统一的对话接口"""
# Anthropic Claude
if model.startswith("claude"):
if not self.anthropic:
raise RuntimeError("未配置 ANTHROPIC_API_KEY")
resp = self.anthropic.messages.create(
model=model,
max_tokens=max_tokens,
system=system,
messages=[{"role": "user", "content": message}],
temperature=temperature,
)
return LLMResponse(
content=resp.content[0].text,
model=model,
input_tokens=resp.usage.input_tokens,
output_tokens=resp.usage.output_tokens,
total_tokens=resp.usage.input_tokens + resp.usage.output_tokens,
)
# DeepSeek
elif model.startswith("deepseek"):
if not self.deepseek:
raise RuntimeError("未配置 DEEPSEEK_API_KEY")
client = self.deepseek
# OpenAI (默认)
else:
if not self.openai:
raise RuntimeError("未配置 OPENAI_API_KEY")
client = self.openai
# OpenAI 兼容接口(OpenAI / DeepSeek)
resp = client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": system},
{"role": "user", "content": message},
],
temperature=temperature,
max_tokens=max_tokens,
)
usage = resp.usage
return LLMResponse(
content=resp.choices[0].message.content,
model=model,
input_tokens=usage.prompt_tokens,
output_tokens=usage.completion_tokens,
total_tokens=usage.total_tokens,
)
# ---------- 使用示例 ----------
llm = UnifiedLLM()
# OpenAI
r1 = llm.chat("什么是Transformer?", model="gpt-5-mini")
print(f"[gpt-5-mini] {r1.content[:100]}...")
print(f" Tokens: {r1.total_tokens}, 成本单位: {r1.cost_estimate:.6f}")
# DeepSeek (如果配置了key)
# r2 = llm.chat("什么是Transformer?", model="deepseek-chat")
1.5.4 本地模型部署( Ollama )¶
对于数据敏感场景或零 API 成本需求,推荐使用 Ollama 在本地运行开源模型:
# 1. 安装 Ollama (https://ollama.com)
# 2. 下载模型
ollama pull qwen3:8b # 阿里通义千问 8B
ollama pull deepseek-r1:8b # DeepSeek推理模型 8B
ollama pull llama3.1:8b # Meta LLaMA 3.1 8B
"""使用 Ollama 本地模型 —— 兼容 OpenAI 接口"""
from openai import OpenAI
# Ollama 默认在 localhost:11434 提供 OpenAI 兼容接口
local_client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama", # Ollama 不需要真实key,但字段必须提供
)
# 与云端API完全相同的调用方式
response = local_client.chat.completions.create(
model="qwen3:8b",
messages=[
{"role": "system", "content": "你是一位AI助手,用中文回答。"},
{"role": "user", "content": "什么是注意力机制?请简要说明。"}
],
temperature=0.7,
)
print(response.choices[0].message.content)
# 优势:零成本、数据不出本地、无网络延迟
# 劣势:需要GPU(8B模型约需6GB显存)、质量低于顶级闭源模型
1.6 实战:第一个 LLM 应用¶
1.6.1 基础对话(带错误处理)¶
"""生产级的基础对话函数"""
from openai import OpenAI, APIError, RateLimitError, APIConnectionError
import os
import time
from dotenv import load_dotenv
load_dotenv()
client = OpenAI()
def chat(
message: str,
system: str = "You are a helpful assistant.",
model: str = "gpt-5-mini",
temperature: float = 0.7,
max_retries: int = 3,
) -> str:
"""
带重试和错误处理的对话函数
Args:
message: 用户消息
system: 系统提示词
model: 模型名称
temperature: 生成温度
max_retries: 最大重试次数
Returns:
模型回复文本
"""
for attempt in range(max_retries):
try: # try/except捕获异常,防止程序崩溃
response = client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": system},
{"role": "user", "content": message},
],
temperature=temperature,
)
return response.choices[0].message.content
except RateLimitError:
wait = 2 ** attempt # 指数退避: 1s, 2s, 4s
print(f"[Rate limit] 等待 {wait}s 后重试...")
time.sleep(wait)
except APIConnectionError:
print(f"[连接错误] 第 {attempt+1}/{max_retries} 次重试...")
time.sleep(1)
except APIError as e:
print(f"[API错误] {e.status_code}: {e.message}")
raise # 非临时性错误,直接抛出
raise RuntimeError(f"API调用失败,已重试 {max_retries} 次")
# 使用
print(chat("用三句话解释什么是大语言模型"))
1.6.2 流式输出( Streaming )¶
流式输出让用户无需等待完整响应,显著改善体验( ChatGPT 的打字机效果):
"""流式输出示例 —— 实现打字机效果"""
from openai import OpenAI
import os
from dotenv import load_dotenv
load_dotenv()
client = OpenAI()
def stream_chat(
message: str,
system: str = "You are a helpful assistant.",
model: str = "gpt-5-mini",
) -> str:
"""流式对话,实时打印每个token"""
stream = client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": system},
{"role": "user", "content": message},
],
stream=True, # 开启流式输出
)
full_response = []
for chunk in stream:
delta = chunk.choices[0].delta
if delta.content:
print(delta.content, end="", flush=True)
full_response.append(delta.content)
print() # 换行
return "".join(full_response)
# 效果:文字逐字出现,而非等待数秒后一次性显示
response = stream_chat("写一首关于编程的五言绝句")
1.6.3 多轮对话管理器¶
实际应用中需要管理对话历史,以下是一个完整的多轮对话实现:
"""多轮对话管理器 —— 支持历史管理和token限制"""
from openai import OpenAI
import tiktoken
import os
from dotenv import load_dotenv
load_dotenv()
class ChatSession:
"""多轮对话会话管理"""
def __init__(
self,
model: str = "gpt-5-mini",
system: str = "You are a helpful assistant.",
max_history_tokens: int = 4000,
):
self.client = OpenAI()
self.model = model
self.system = system
self.max_history_tokens = max_history_tokens
self.history: list[dict] = []
self.enc = tiktoken.get_encoding("o200k_base")
def _count_tokens(self, messages: list[dict]) -> int:
"""估算消息列表的token数"""
total = 0
for msg in messages:
total += len(self.enc.encode(msg["content"])) + 4 # 角色标记开销
return total
def _trim_history(self):
"""当历史超出token限制时,移除最早的对话轮次"""
while (
len(self.history) > 2 # 至少保留最近一轮
and self._count_tokens(self.history) > self.max_history_tokens
):
# 移除最早的一轮(user + assistant)
self.history.pop(0)
if self.history and self.history[0]["role"] == "assistant":
self.history.pop(0)
def send(self, message: str, temperature: float = 0.7) -> str:
"""发送消息并获取回复"""
self.history.append({"role": "user", "content": message})
self._trim_history()
messages = [
{"role": "system", "content": self.system},
*self.history,
]
response = self.client.chat.completions.create(
model=self.model,
messages=messages,
temperature=temperature,
)
reply = response.choices[0].message.content
self.history.append({"role": "assistant", "content": reply})
return reply
def reset(self):
"""清空对话历史"""
self.history.clear()
@property
def total_tokens_used(self) -> int:
"""当前历史的总token数"""
return self._count_tokens(self.history)
# ---------- 使用示例 ----------
session = ChatSession(
model="gpt-5-mini",
system="你是一位Python编程导师,用简洁易懂的方式教学。",
max_history_tokens=4000,
)
# 多轮对话
print("Q1:", r1 := session.send("什么是装饰器?"))
print(f"[历史token: {session.total_tokens_used}]\n")
print("Q2:", r2 := session.send("能给个实际的例子吗?"))
print(f"[历史token: {session.total_tokens_used}]\n")
print("Q3:", r3 := session.send("如何用装饰器实现缓存?"))
print(f"[历史token: {session.total_tokens_used}]\n")
# 模型能理解上下文:第3个问题不需要重新解释"装饰器"是什么
1.6.4 实用工具:文本摘要器¶
将以上知识组合成一个实用的文本摘要应用:
"""LLM驱动的智能文本摘要器"""
from openai import OpenAI
import tiktoken
import os
from dotenv import load_dotenv
load_dotenv()
client = OpenAI()
def summarize(
text: str,
style: str = "brief",
model: str = "gpt-5-mini",
language: str = "中文",
) -> str:
"""
智能文本摘要
Args:
text: 要摘要的文本
style: 摘要风格 - "brief"(简要), "detailed"(详细), "bullets"(要点)
model: 使用的模型
language: 输出语言
"""
style_prompts = {
"brief": f"用{language}写一段简要摘要(50-100字)",
"detailed": f"用{language}写一段详细摘要(200-300字),保留关键细节",
"bullets": f"用{language}列出5-7个关键要点,每个要点一句话",
}
# Token 检查
enc = tiktoken.encoding_for_model(model)
input_tokens = len(enc.encode(text))
if input_tokens > 100000:
return "错误:文本过长,请分段处理"
prompt = f"""{style_prompts.get(style, style_prompts['brief'])}
原文:
{text}"""
response = client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": "你是一个专业的文本摘要助手。"},
{"role": "user", "content": prompt},
],
temperature=0.3, # 摘要任务用低temperature保证准确性
)
return response.choices[0].message.content
# 测试
sample_text = """
大语言模型(Large Language Model, LLM)是一种基于深度学习的自然语言处理模型,
通常具有数十亿甚至数千亿个参数。这些模型通过在海量文本数据上进行预训练,
学习了语言的统计规律和语义知识。LLM的核心架构通常基于Transformer,
利用自注意力机制来捕捉文本中的长距离依赖关系。
近年来,GPT系列、Claude系列和开源的LLaMA、Qwen系列等模型不断刷新各项基准测试的记录,
展示了在文本生成、推理、编程、翻译等任务上的卓越能力。
LLM的应用已经从学术研究扩展到了商业领域,包括智能客服、内容创作、
代码辅助、数据分析等场景,正在深刻改变各行各业的工作方式。
"""
print("=== 简要摘要 ===")
print(summarize(sample_text, style="brief"))
print("\n=== 要点摘要 ===")
print(summarize(sample_text, style="bullets"))
📝 本章小结¶
本章全面介绍了大模型应用开发的基础知识:
- ✅ 发展历程:从 Transformer(2017) 到 GPT-4/开源生态(2025) 的完整脉络
- ✅ 主流模型对比:闭源(GPT/Claude) vs 开源(LLaMA/Qwen/DeepSeek),含量化指标和定价
- ✅ 核心概念: Token 计费、 Temperature 控制、消息角色体系
- ✅ 环境搭建:多提供商 API 配置、.env 安全管理、 Ollama 本地部署
- ✅ 实战代码:错误处理、流式输出、多轮对话管理器、文本摘要器
关键代码模式(后续章节会反复用到): - UnifiedLLM:多提供商统一客户端 - ChatSession:带 token 限制的多轮对话管理 - 指数退避重试:生产环境必备的错误处理 - stream=True:流式输出改善用户体验
通过本章学习,你应该能够: - 根据任务需求选择合适的模型(参考 1.2.3 对比表) - 安全配置多个模型提供商的 API - 实现带错误处理和流式输出的对话应用 - 构建多轮对话管理器(含历史裁剪) - 估算 API 调用成本
🔗 下一步¶
下一章我们将深入学习Prompt 工程,掌握如何设计有效的 Prompt 。
继续学习: 02-Prompt 工程.md
💡 思考题¶
-
大模型的发展有哪些关键节点?
Transformer(2017) → GPT-1(2018) → BERT(2018) → GPT-3(2020,Few-shot 涌现) → ChatGPT(2022,RLHF 对齐) → GPT-4(2023,多模态) → 开源爆发(Llama/Qwen/DeepSeek,2023-2025)。核心转折:规模定律的发现使"大力出奇迹"成为共识。
-
闭源模型和开源模型各有什么优缺点?
闭源(GPT-5.4/Claude 4.6):性能天花板高、 API 开箱即用、持续更新,但成本高、数据隐私风险、供应商锁定。开源(Llama/Qwen/DeepSeek):可私有化部署、可微调定制、无 API 成本,但需自行运维、性能略低于最强闭源、硬件门槛高。
-
如何选择合适的大模型?
4 维决策:①任务类型(通用对话选 GPT-5.4/Claude 4.6 ,中文特化选 Qwen3.5/DeepSeek-V3.2) ②部署方式(云 API vs 私有化) ③预算(API 按 token 计费 vs GPU 自建) ④数据安全(敏感数据必须私有化)。建议先用 API 验证可行性,再考虑自建。
-
大模型在哪些场景下表现最好?
生成类(文案/代码/翻译)、理解类(摘要/分类/情感分析)、推理类(数学/逻辑/规划)、对话类(客服/助手)。不适合:实时计算、精确数值运算、需要最新知识(需 RAG 增强)。
-
如何评估大模型的效果?
自动指标: BLEU/ROUGE(生成)、准确率/F1(分类)、 Pass@k(代码)。人工评估:相关性、流畅性、有害性。综合基准: MMLU(知识)、 HumanEval(代码)、 GSM8K(数学)。生产环境还需评估延迟、成本、一致性。
📚 参考资料¶
- "Attention Is All You Need" - Vaswani et al., 2017
- "Language Models are Few-Shot Learners" - Brown et al., 2020
- OpenAI API Documentation
- Anthropic API Documentation
- DeepSeek API Documentation
- Ollama 官方文档
- tiktoken - OpenAI Tokenizer
- Chatbot Arena Leaderboard — 模型排名参考
最后更新日期: 2026-03-26 适用版本: LLM 应用指南 v2026
⚠️ 核验说明(2026-03-26):本页已纳入 2026-03-26 全站统一复核批次。若文中涉及外部模型、API、版本号、价格或第三方产品名称,请以官方文档和实际运行环境为准。