向 GPT-3.5 灌入新知识是 企业级大模型应用落地 的核心之一:如何让 GPT-3.5 “懂你自己的知识”,即在不重新训练模型的前提下,让它回答基于私有数据的问题。
目前实现“向 GPT-3.5 灌入新知识”主要有两种方式:
| 方法 | 是否训练模型 | 说明 | 适用场景 |
|---|---|---|---|
| 微调(Fine-tuning) | ✅ 是 | 上传训练数据,对模型进行再训练 | 格式标准、任务固定的场景(如客服对话、文案风格) |
| RAG 检索增强生成(Retrieval-Augmented Generation) | ❌ 否 | 不改模型,通过外部知识库实时检索补充上下文 | 大规模知识库问答、动态知识场景(如企业知识问答) |
RAG 技术
RAG(Retrieval-Augmented Generation,检索增强生成) 是目前大模型中最实用、最主流的“知识增强”技术之一。它的核心思想是:
不给模型“灌知识”,而是在生成时动态地“检索”外部知识,再让模型结合这些知识生成答案。
一、RAG 的核心问题:为什么要用它?
大语言模型(LLM)如 GPT、Claude、Gemini 等在训练时掌握了大量通用知识,但它们存在两个关键限制:
- 知识过时:模型训练数据的截止时间固定(比如 GPT-4 截止 2023 年)。
- 私有知识缺失:模型不知道你的企业内部文档、数据库、PDF 手册等内容。
传统做法是“微调(Fine-tune)”模型,但那:
- 成本高;
- 需要 GPU;
- 更新困难;
- 还容易造成模型“遗忘原有能力”。
👉 因此,更高效的做法就是 RAG:不改模型参数,而是在问答时动态补充知识。
二、RAG 的基本流程
RAG 系统一般包括以下 5 个步骤:
用户问题 → 向量化 → 检索相似内容 → 构造提示(Prompt) → 模型生成答案
下面逐步解析:
1. 用户提问
例如:
“公司的退货政策是怎样的?”
2. 向量化(Embedding)
使用嵌入模型(如 text-embedding-3-large 或 bge-large-zh)将用户问题转成一个高维向量。
例如:
[0.12, -0.03, 0.44, ...]
这个向量代表了问题的语义特征。
3. 检索(Retrieval)
在一个 向量数据库(如 Pinecone、Milvus、Faiss、Chroma)中查找最相似的文档段落。
这些段落通常是预处理时:
- 将公司文档分块;
- 为每个块计算 embedding;
- 存储到向量库。
输出结果可能是:
【命中文档】
1. 退货须在30天内凭订单号申请;
2. 特价商品不支持退货;
4. 构造 Prompt(Augment)
将这些检索到的知识插入到模型提示中,形成一个完整上下文,例如:
你是一名客户支持机器人。
以下是公司的退货政策:
1. 退货须在30天内凭订单号申请;
2. 特价商品不支持退货。
问题:客户问“我上周买的折扣商品可以退吗?”
5. 模型生成答案(Generation)
模型根据检索的知识和上下文生成答案,例如:
抱歉,折扣商品属于特价商品,暂不支持退货。
三、RAG 系统的架构示意
┌─────────────────────┐
│ 企业知识库(文档、FAQ)│
└─────────┬───────────┘
│分块 + 向量化
▼
向量数据库(如 Pinecone)
▲
│相似度检索
┌──────────┴──────────┐
│ 用户问题 → 向量化 │
└──────────┬──────────┘
▼
模型生成答案(GPT)
四、RAG 的主要优势
| 优势 | 说明 |
|---|---|
| ⚡ 实时可更新 | 文档变更后,重新索引即可 |
| 🧠 不修改模型 | 无需重新训练,使用原生模型 |
| 🧩 私有知识融合 | 支持企业知识、数据库、API 等 |
| 💰 成本低 | 无需 GPU 微调,云端即可运行 |
五、RAG 的关键技术组件
| 组件 | 常用方案 | 说明 |
|---|---|---|
| Embedding 模型 | text-embedding-3-large, bge-large-zh | 用于文本向量化 |
| 向量数据库 | Pinecone, Milvus, FAISS, Chroma | 用于存储与检索 |
| 分块算法 | RecursiveTextSplitter, SemanticChunk | 控制检索粒度 |
| 检索增强策略 | HyDE, ReRank, Multi-query | 提升召回与精度 |
| 生成模型 | GPT-4, Claude 3, Qwen2.5 | 最终回答输出 |
六、RAG 的代码示例(Python + OpenAI + Chroma)
“微调(Fine-tuning)”是让大模型(如 GPT-3.5、Llama、通义千问等)更符合你业务需求的核心手段之一。
下面我将从原理、类型、流程、数据格式、最佳实践与局限性六个方面,详细介绍微调机制。
from openai import OpenAI
from chromadb import Client
from chromadb.config import Settings
import numpy as np
client = OpenAI(api_key="your-api-key")
# 初始化向量数据库
chroma = Client(Settings(persist_directory="./chroma_db"))
collection = chroma.create_collection("docs")
# 向量化并入库
texts = [
"退货须在30天内凭订单号申请",
"特价商品不支持退货"
]
for t in texts:
emb = client.embeddings.create(model="text-embedding-3-large", input=t).data[0].embedding
collection.add(documents=[t], embeddings=[emb])
# 用户提问
query = "我买的折扣商品可以退货吗?"
query_emb = client.embeddings.create(model="text-embedding-3-large", input=query).data[0].embedding
# 检索相似内容
results = collection.query(query_embeddings=[query_emb], n_results=2)
context = "\n".join(results["documents"][0])
# 拼接 Prompt
prompt = f"根据以下信息回答:\n{context}\n\n问题:{query}"
# 生成答案
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}]
)
print(response.choices[0].message.content)微调
一、什么是微调(Fine-tuning)
定义:
微调是指在预训练大模型的基础上,用自定义的数据对模型进行二次训练,使模型在特定领域或任务上表现更好。
简单说,就是让大模型“带着你的知识和风格再学一遍”,从而更懂你、说你想要的内容。
🌰 举个例子
原始 GPT-3.5 是通用模型,它知道很多知识,但不知道你的公司政策或品牌语气。
通过微调后,它可能变成:
- 一名客服助理,始终使用礼貌语气;
- 一名法律顾问,严格基于法规回答问题;
- 一名技术支持机器人,优先引用产品手册内容。
二、微调的核心原理
在预训练阶段,大模型学会了语言规律、语义关系、推理方式。
微调阶段只是让模型在你的数据上“再学习一点点”。
形式上:
- 微调不是重新训练;
- 只调整模型最后几层的参数(或低秩适配层,如 LoRA);
- 成本远低于从头训练。
三、微调的类型
| 类型 | 简介 | 适用场景 |
|---|---|---|
| 全量微调 (Full Fine-tuning) | 更新所有参数,效果最佳但成本高 | 模型较小或计算资源充足 |
| 部分微调 (Partial Fine-tuning) | 只训练部分层参数(如 LoRA) | 轻量化部署,成本低 |
| 指令微调 (Instruction Fine-tuning) | 让模型更好地理解指令格式 | 通用任务优化 |
| 领域微调 (Domain Fine-tuning) | 注入特定领域知识(如医疗、法律) | 行业专用模型 |
| 风格微调 (Style Fine-tuning) | 统一模型语气和表达风格 | 品牌客服、角色设定 |
四、微调的典型流程(以 GPT-3.5 为例)
Step 1:准备训练数据(JSONL 格式)
每一行是一条对话样本,格式如下:
{"messages":[
{"role":"system","content":"你是公司客服,语气礼貌。"},
{"role":"user","content":"我能退货吗?"},
{"role":"assistant","content":"您可以在购买后30天内退货,请提供订单号以便处理。"} ]
} 示例训练集(data.jsonl)可包含上百条类似记录。
Step 2:上传训练数据
openai files create -p fine-tune -f data.jsonl
Step 3:启动微调任务
openai api fine_tunes.create -t "file-xxxxxxxxxxxx" -m "gpt-3.5-turbo" 等待任务完成后,你会得到一个新的模型 ID:
ft:gpt-3.5-turbo:your-org:custom-model-2025-11-07
Step 4:使用微调后的模型
from openai import OpenAI
client = OpenAI(api_key="YOUR_API_KEY")
response = client.chat.completions.create(
model="ft:gpt-3.5-turbo:your-org:custom-model-2025-11-07",
messages=[
{"role": "user", "content": "我想了解退货政策"}
]
)
print(response.choices[0].message.content)
Step 5:评估与调优
- 检查输出是否符合预期;
- 如输出偏差大,可能需要:
- 增加数据量;
- 调整样本平衡;
- 增加系统提示;
- 再次微调。
五、数据构造最佳实践
| 项目 | 建议 |
|---|---|
| 数量 | 50~10,000 条均可,小任务几百条已见成效 |
| 多样性 | 覆盖多种问法与场景 |
| 一致性 | 确保回复风格统一 |
| 对话结构 | 使用 role + content 明确语义 |
| 上下文关联 | 可使用多轮对话结构 |
| 清洗 | 去掉敏感信息与冗余标点 |
示例(多轮对话):
{"messages":[
{"role":"system","content":"你是客服助手。"},
{"role":"user","content":"我上次买的耳机坏了"},
{"role":"assistant","content":"很抱歉听到这个消息,请问是无法开机还是无声?"},
{"role":"user","content":"没声音"},
{"role":"assistant","content":"请尝试重新连接,如果仍无声音,可申请免费更换。"} ]
} 六、微调与其他方式的区别
| 方法 | 是否训练模型 | 优点 | 缺点 | 典型用途 |
|---|---|---|---|---|
| 微调 (Fine-tuning) | ✅ 是 | 高精度、固化风格 | 成本高、更新慢 | 固定客服、行业专用模型 |
| RAG 检索增强生成 | ❌ 否 | 实时更新、低成本 | 依赖检索质量 | 知识问答、文档助理 |
| 系统提示(System Prompt) | ❌ 否 | 快速简单 | 容易被覆盖 | 轻量角色设定 |
七、微调的实际效果
✅ 能实现:
- 固化语气、风格;
- 在封闭任务上显著提高准确率;
- 减少提示词复杂度;
- 提升一致性和鲁棒性。
🚫 不能实现:
- “长时记忆”或无限知识注入;
- 完全替代向量检索(RAG);
- 动态知识更新(需重新微调)。
八、微调 + RAG 的组合(最佳实践)
现代企业大多采用 Hybrid 方案:
┌──────────────┐
│ 微调模型 │ ← 固化语气、格式、逻辑
└──────┬───────┘
↓
┌───────────────────────────┐
│ RAG 检索层(企业知识库) │ ← 实时注入最新知识
└──────────────┬───────────┘
↓
用户对话应用层
即:
- 微调控制 “怎么说”;
- RAG 控制 “说什么”。
九、总结
| 项目 | 内容 |
|---|---|
| 核心目的 | 让模型更懂你的业务、保持统一风格 |
| 成本 | 有一定训练费用(按 token 计费) |
| 数据量 | 几十到几千条均可 |
| 更新方式 | 每次更新需重新微调 |
| 最佳方案 | 微调(风格 + 格式) + RAG(知识 + 实时性) |