大语言模型导论
"LLM 不仅仅是文本预测器;它们是世界知识的压缩表示,通过自然语言即可访问。"
大语言模型(LLM)代表了人工智能的范式转变,从特定任务模型转向通用推理引擎。对于软件工程师和 AI 从业者来说,理解 LLM 需要看透炒作,把握驱动它们的底层统计和架构原理。
什么是 LLM?
从本质上讲,LLM 是一个基于先前上下文预测下一个 token 的概率引擎。虽然数学公式涉及条件概率,但对工程师来说,理解 LLM 能做什么 比理解底层数学更有用。
现代 LLM 能力
LLM 已经从简单的文本补全演变为精密的推理引擎:
- 代码生成:跨多种语言编写、调试和解释代码
- 文档分析:从技术文档、研究论文和合同中提取洞察
- 对话系统:在多轮对话中保持上下文和记忆
- 工具使用:与 API、数据库和外部系统交互
- 多步推理:将复杂问题分解为中间步骤
工程视角
对于生产系统,可以将 LLM 视为 文本到文本的转换器:
// 概念视图:LLM 作为文本处理器
Input: "Summarize this document: [content]"
Processing: Model traverses layers of attention and feed-forward networks
Output: "[summary]"
关键洞察:LLM 从训练数据中学习模式并在推理时应用。它们并非人类意义上的"知道"事实——它们看到了能够复现的统计相关性。
Spring AI 集成配置
Spring AI 提供了在 Spring Boot 应用中使用 LLM 的统一抽象层。这简化了在模型和提供商之间切换,同时保持一致的 API。
基本 ChatClient 配置
// application.properties(使用 Doppler 管理环境变量)
spring.ai.openai.api-key=${OPENAI_API_KEY}
spring.ai.anthropic.api-key=${ANTHROPIC_API_KEY}
// 或使用推荐的 Doppler 注入模式:
// spring.ai.openai.api-key=${doppler.OPENAI_API_KEY}
// LLM 交互的服务层
@Service
public class LLMChatService {
private final ChatClient chatClient;
public LLMChatService(ChatModel chatModel) {
this.chatClient = ChatClient.builder(chatModel).build();
}
public String chat(String userMessage) {
return chatClient.prompt()
.user(userMessage)
.call()
.content();
}
// 实时应用的流式响应
public Flux<String> chatStream(String userMessage) {
return chatClient.prompt()
.user(userMessage)
.stream()
.content();
}
}
模型选择指南
选择合适的模型取决于你的使用场景、预算和性能需求:
| 使用场景 | 推荐模型 | 原因 |
|---|---|---|
| 代码生成与调试 | Claude 3.5/4 Sonnet | SWE-Bench 最高分(72.5%),擅长重构 |
| 通用对话 | GPT-4o 或 Llama 3.1 405B | 性能均衡,推理能力好 |
| 长文档分析 | Gemini 2.5 Pro | 1M-2M token 上下文窗口 |
| 成本敏感应用 | GPT-4o-mini 或 Llama 3.1 8B | 便宜 10-20 倍,简单任务足够 |
| 本地部署 | Llama 3.1 405B 或 Mixtral 8x22B | 开源,与闭源模型性能相当 |
| 多语言应用 | Qwen2.5 72B | 非英语表现强劲 |
| 复杂推理 | OpenAI o1 或 Claude 3.5 Sonnet | 显式推理链,数学/科学任务 |
配置示例
@Configuration
public class LLMConfiguration {
@Bean
public ChatModel chatModel(OpenAiApi openAiApi) {
return OpenAiChatModel.builder()
.openAiApi(openAiApi)
.options(OpenAiChatOptions.builder()
.model("gpt-4")
.temperature(0.7)
.maxTokens(2000)
// 理解这些参数:
// - temperature: 控制随机性(0.0 = 确定性,1.0 = 创造性)
// - maxTokens: 限制响应长度
// - topP: 核采样(0.9 = 保留 90% 概率质量)
// - presencePenalty: 减少重复
.build())
.build();
}
// 长上下文使用场景
@Bean
public ChatModel longContextModel() {
return OpenAiChatModel.builder()
.options(OpenAiChatOptions.builder()
.model("gpt-4-turbo") // 128K 上下文
.maxTokens(4000)
.build())
.build();
}
}
模型架构:"三大" + 现代演进
2017 年,"Attention Is All You Need" 论文引入了 Transformer。此后,架构分化为三个不同的家族和混合变体。面试中你 必须 知道它们之间的区别。
1. 仅编码器(自编码)
- 机制:破坏输入(遮盖词语),使用双向上下文(同时查看左右上下文)尝试重建。
- 核心能力:"理解"和分类。这些模型创建丰富的文本向量表示。
- 使用场景:情感分析、命名实体识别(NER)、搜索/嵌入。
- 示例:BERT、RoBERTa、DistilBERT。