LangChain 与大语言模型:从原理到 Prompt 工程实战
目录
- 大语言模型基础
- 神经网络与语言模型的演进
- 自监督与半监督学习
- [LangChain 模型介绍](#LangChain 模型介绍)
- [Prompt 编写技巧](#Prompt 编写技巧)
- 总结
1. 大语言模型基础
大语言模型(Large Language Model, LLM)是一类基于深度学习的自然语言处理模型,通过在海量文本数据上训练,能够理解和生成人类语言。
核心特点:
- 规模巨大:参数量通常在数十亿到数千亿级别
- 通用能力强:一个模型可以完成翻译、摘要、问答、代码生成等多种任务
- 涌现能力:当模型规模超过一定阈值后,会表现出训练阶段未明确优化的能力(如推理、思维链)
常见的大语言模型包括 GPT 系列、Claude 系列、LLaMA、Qwen 等。
2. 神经网络与语言模型的演进
2.1 从神经网络说起
神经网络是大语言模型的底层架构。其发展经历了几个关键阶段:
| 阶段 | 代表技术 | 特点 |
|---|---|---|
| 早期 | 感知机、BP 网络 | 层数少,能力有限 |
| 序列建模 | RNN、LSTM | 能处理序列数据,但长距离依赖建模困难 |
| 注意力革命 | Transformer | 自注意力机制,并行计算,成为现代 LLM 的基石 |
| 预训练时代 | BERT、GPT | 大规模预训练 + 微调范式 |
2.2 Transformer 架构
Transformer 是当前大语言模型的核心架构,由 Vaswani 等人在 2017 年提出("Attention Is All You Need")。
关键组件:
- 自注意力机制(Self-Attention):让模型在处理每个词时,能够关注输入序列中的所有其他词,捕捉全局依赖关系
- 多头注意力(Multi-Head Attention):多个注意力头并行工作,从不同角度捕捉信息
- 前馈网络(FFN):对注意力输出进行非线性变换
- 位置编码(Positional Encoding):为序列中的每个位置注入位置信息
2.3 语言模型的两种范式
- 自回归模型(GPT 系列):从左到右逐词生成,适合文本生成任务
- 自编码模型(BERT 系列):通过掩码语言模型(MLM)双向理解上下文,适合理解类任务
3. 自监督与半监督学习
3.1 自监督学习(Self-Supervised Learning)
自监督学习是大语言模型训练的核心范式。它不需要人工标注数据,而是从数据本身构造监督信号。
常见方式:
-
因果语言模型(Causal LM) :给定前文预测下一个词(GPT 采用)
输入: "今天天气" 目标: "真好" -
掩码语言模型(Masked LM) :遮盖部分词让模型预测(BERT 采用)
输入: "今天天气[MASK]好" 目标: "真"
优势:可以利用互联网上海量的无标注文本进行训练,成本远低于人工标注。
3.2 半监督学习(Semi-Supervised Learning)
半监督学习结合少量标注数据和大量无标注数据进行训练。
在大语言模型的语境下,常见的半监督实践包括:
- 自训练(Self-Training):用模型对无标注数据生成伪标签,再加入训练
- 一致性正则化:要求模型对同一输入的不同扰动给出一致的输出
实际上,现代 LLM 的训练流程通常是:
- 预训练阶段:自监督学习,在海量无标注文本上训练
- 微调阶段:有监督学习,在少量高质量标注数据上微调
- RLHF 阶段:基于人类反馈的强化学习,对齐人类偏好
4. LangChain 模型介绍
LangChain 是一个用于构建 LLM 应用的开发框架,它将大语言模型的能力封装为模块化的组件,方便开发者快速构建复杂的 AI 应用。
4.1 核心概念
┌─────────────────────────────────────────┐
│ LangChain 架构 │
├─────────────────────────────────────────┤
│ Models(模型层) │
│ ├── LLMs(通用文本生成) │
│ ├── Chat Models(对话模型) │
│ └── Text Embedding Models(文本嵌入) │
├─────────────────────────────────────────┤
│ Prompts(提示模板) │
│ Chains(链式调用) │
│ Agents(智能代理) │
│ Memory(记忆管理) │
├─────────────────────────────────────────┤
│ Document Loaders │ Vector Stores │
│ Retrievers │ Tools │
└─────────────────────────────────────────┘
4.2 模型类型
LLMs(文本补全模型)
输入纯文本字符串,返回纯文本字符串:
python
from langchain_openai import OpenAI
llm = OpenAI(model="gpt-3.5-turbo-instruct")
result = llm.invoke("解释什么是机器学习")
Chat Models(对话模型)
接收消息列表作为输入,返回消息对象,更适合多轮对话:
python
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
chat = ChatOpenAI(model="gpt-4")
messages = [
SystemMessage(content="你是一个友好的助手"),
HumanMessage(content="什么是LangChain?"),
]
response = chat.invoke(messages)
Text Embedding Models(嵌入模型)
将文本转换为向量表示,用于语义搜索、相似度计算等:
python
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()
vector = embeddings.embed_query("LangChain 是什么")
# 返回一个浮点数列表,如 [0.0023, -0.0091, ...]
4.3 LangChain 的典型应用
- RAG(检索增强生成):结合外部知识库回答问题
- 对话机器人:带记忆的多轮对话
- 文档分析:加载、分割、检索和总结文档
- Agent 系统:让 LLM 自主选择工具完成复杂任务
5. Prompt 编写技巧
Prompt(提示词)是与大语言模型交互的关键。好的 Prompt 能显著提升模型输出的质量和可控性。
5.1 CO-STAR 框架
CO-STAR 是一个结构化的 Prompt 编写框架,帮助你组织提示词的各个要素:
| 要素 | 含义 | 示例 |
|---|---|---|
| C - Context(背景) | 提供任务的背景信息 | "我正在开发一个电商网站" |
| O - Objective(目标) | 明确你想要什么 | "帮我写一个商品搜索功能" |
| S - Style(风格) | 指定输出风格 | "使用简洁专业的代码风格" |
| T - Tone(语气) | 指定语气 | "技术文档式的语气" |
| A - Audience(受众) | 指定目标读者 | "面向有 Python 基础的开发者" |
| R - Response(格式) | 指定输出格式 | "输出带注释的 Python 代码" |
示例 Prompt:
Context:我正在用 Python Flask 开发一个博客系统,需要实现用户注册功能。
Objective:编写一个安全的用户注册接口。
Style:遵循 PEP 8 规范,使用类型注解。
Tone:专业、严谨。
Audience:团队中的初级 Python 开发者也能看懂。
Response:完整的代码文件,包含必要的注释和错误处理。
5.2 样本提示(Few-Shot Prompting)
通过提供输入-输出示例,让模型理解任务模式:
请将以下句子分类为"正面"或"负面"情感:
示例:
输入:这部电影太精彩了,演员的表演非常到位!
输出:正面
输入:等了两个小时才上菜,而且食物还是冷的。
输出:负面
输入:虽然价格有点贵,但质量确实不错,用起来很舒服。
输出:
要点:
- 示例数量:通常 2-5 个即可
- 示例多样性:覆盖不同情况和边界
- 示例质量:确保示例的输出是正确的
5.3 思维链(Chain of Thought, CoT)
思维链通过要求模型"逐步思考",显著提升推理类任务的表现。
标准 CoT:
问题:一个商店有 15 个苹果,卖掉了 3 篮,每篮 4 个,又进了 2 箱,每箱 6 个。现在有多少个苹果?
请逐步思考:
1. 初始数量:15 个苹果
2. 卖掉的数量:3 篮 × 4 个 = 12 个
3. 卖掉后剩余:15 - 12 = 3 个
4. 进货数量:2 箱 × 6 个 = 12 个
5. 最终数量:3 + 12 = 15 个
答案:15 个苹果
Zero-Shot CoT(零样本思维链):
只需在 Prompt 末尾加上 "Let's think step by step",就能触发模型的推理能力:
问题:如果一个数的三倍加上 7 等于 22,这个数是多少?
Let's think step by step.
5.4 其他实用技巧
角色设定(System Prompt)
你是一位资深的 Python 后端工程师,擅长设计 RESTful API。
请用专业的视角回答以下问题。
输出格式控制
请以 JSON 格式输出结果:
{
"name": "姓名",
"age": 年龄,
"skills": ["技能1", "技能2"]
}
分步指令
对于复杂任务,将其拆解为明确的步骤:
请按以下步骤分析这段代码:
1. 首先,说明代码的整体功能
2. 然后,逐行解释关键逻辑
3. 接着,指出潜在的 bug 或优化点
4. 最后,给出改进后的代码
约束条件
明确告诉模型什么该做、什么不该做:
请回答以下问题,注意:
- 只使用中文回答
- 不要编造不存在的信息
- 如果不确定,直接说"我不确定"
- 回答控制在 200 字以内
6. 总结
| 主题 | 核心要点 |
|---|---|
| 大语言模型 | 基于 Transformer 的大规模预训练模型,具备通用语言能力 |
| 自监督学习 | 从数据本身构造监督信号,无需人工标注 |
| 半监督学习 | 结合少量标注 + 大量无标注数据 |
| LangChain | LLM 应用开发框架,模块化封装模型、提示、记忆、工具等能力 |
| CO-STAR | 结构化 Prompt 框架:背景、目标、风格、语气、受众、格式 |
| 样本提示 | 通过示例让模型理解任务模式 |
| 思维链 | 引导模型逐步推理,提升复杂任务表现 |
掌握这些基础知识和技巧,是构建高质量 LLM 应用的第一步。后续将继续深入学习 LangChain 的 Chain、Agent 和 RAG 等高级用法。