微调 GPT-4 与 Claude:何时选择微调 vs RAG(2026版)
做出正确的架构决策:为您的 LLM 应用选择微调还是 RAG
微调 GPT-4 与 Claude:何时选择微调 vs RAG(2026版)
做出正确的架构决策:为您的 LLM 应用选择微调还是 RAG
关于 LLM 应用中选择微调还是 RAG 的全面指南。涵盖 GPT-4o mini 微调、使用 Hugging Face 进行 LoRA 训练、成本对比以及用例决策框架。
微调 vs RAG:2026 决策指南
AI 应用中最常见的架构决策之一:应该微调模型还是使用 RAG?以下是一个包含真实示例的框架。
核心区别
RAG — 在查询时检索相关文档,注入到上下文中 微调 — 将知识和行为直接嵌入模型权重
决策框架
使用 RAG 当:
✅ 知识频繁更新(每日/每周)
✅ 需要引用来源
✅ 数据是机密的(不希望嵌入模型权重)
✅ 需要快速实现和迭代
✅ 知识库很大(超过 1M tokens)使用微调当:
✅ 需要一致的特定输出格式/风格
✅ 知识是稳定的(法律条文、产品目录)
✅ 需要减少提示长度(需要更少的示例)
✅ 想要移除/减少模型的默认行为
✅ 延迟是关键(无需检索步骤)
微调 GPT-4o Mini
python
from openai import OpenAI
import jsonclient = OpenAI()
准备训练数据(JSONL 格式)
training_examples = [
{
'messages': [
{'role': 'system', 'content': '你是一名 TechCorp 的客户支持代理。始终保持简洁。'},
{'role': 'user', 'content': '如何重置我的密码?'},
{'role': 'assistant', 'content': '前往 设置 > 安全 > 重置密码。输入你的邮箱,检查收件箱中的重置链接。链接 24 小时内有效。'}
]
},
{
'messages': [
{'role': 'system', 'content': '你是一名 TechCorp 的客户支持代理。始终保持简洁。'},
{'role': 'user', 'content': '你们的退款政策是什么?'},
{'role': 'assistant', 'content': '我们为所有套餐提供 30 天退款。请将订单号发送至 support@techcorp.com。退款处理时间为 3-5 个工作日。'}
]
}
# ... 至少 50-100 个示例
]保存训练数据
with open('training_data.jsonl', 'w') as f:
for example in training_examples:
f.write(json.dumps(example) + '\n')上传训练文件
with open('training_data.jsonl', 'rb') as f:
response = client.files.create(file=f, purpose='fine-tune')
file_id = response.idprint(f'文件已上传:{file_id}')
创建微调任务
job = client.fine_tuning.jobs.create(
training_file=file_id,
model='gpt-4o-mini',
hyperparameters={
'n_epochs': 3,
'batch_size': 4,
'learning_rate_multiplier': 1.8
},
suffix='customer-support-v1'
)print(f'任务已创建:{job.id}')
监控训练
import time
while True:
status = client.fine_tuning.jobs.retrieve(job.id)
print(f'状态:{status.status}')
if status.status in ['succeeded', 'failed']:
break
time.sleep(30)if status.status == 'succeeded':
print(f'模型 ID:{status.fine_tuned_model}')
# 使用微调后的模型
response = client.chat.completions.create(
model=status.fine_tuned_model,
messages=[{'role': 'user', 'content': '如何取消我的订阅?'}]
)
print(response.choices[0].message.content)
使用 Hugging Face 进行 LoRA 微调
python
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments
from peft import LoraConfig, get_peft_model, TaskType
from trl import SFTTrainer
from datasets import Dataset
import torch加载基础模型
MODEL = 'meta-llama/Meta-Llama-3.1-8B-Instruct'
tokenizer = AutoTokenizer.from_pretrained(MODEL)
model = AutoModelForCausalLM.from_pretrained(
MODEL,
torch_dtype=torch.bfloat16,
device_map='auto'
)LoRA 配置
lora_config = LoraConfig(
r=16, # 秩 - 越高参数越多
lora_alpha=32, # 缩放因子
target_modules=['q_proj', 'k_proj', 'v_proj', 'o_proj'],
lora_dropout=0.05,
bias='none',
task_type=TaskType.CAUSAL_LM
)model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
可训练参数:83M || 全部参数:8B || 可训练比例:1.03%
准备数据集
def format_prompt(example):
return {'text': f"""<|begin_of_text|><|start_header_id|>system<|end_header_id|>
{example['system']}<|eot_id|><|start_header_id|>user<|end_header_id|>
{example['input']}<|eot_id|><|start_header_id|>assistant<|end_header_id|>
{example['output']}<|eot_id|>"""}dataset = Dataset.from_list(training_examples).map(format_prompt)
训练
trainer = SFTTrainer(
model=model,
tokenizer=tokenizer,
train_dataset=dataset,
dataset_text_field='text',
args=TrainingArguments(
output_dir='./lora-model',
num_train_epochs=3,
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
learning_rate=2e-4,
bf16=True,
save_strategy='epoch'
)
)trainer.train()
保存并合并
model.save_pretrained('./lora-adapter')
推理时,加载基础模型 + 适配器
成本对比
混合方法(2026 最佳实践)
python
class HybridRAGFinetuned:
"""
微调模型用于风格/格式 + RAG 用于动态知识
两全其美:一致的输出风格 + 最新信息
"""
def __init__(self, fine_tuned_model_id: str):
self.model = fine_tuned_model_id # 微调用于输出风格
self.vector_store = VectorStore() # 用于动态知识
def query(self, question: str) -> str:
# 检索相关上下文(RAG)
context = self.vector_store.search(question, k=5)
# 使用微调后的模型(一致的输出格式)
return call_openai(
model=self.model, # 微调后的模型
system='你是一名 TechCorp 的支持代理。',
user=f'上下文:{context}\n\n问题:{question}'
)
结论
对于大多数 2026 年的应用,从 RAG 开始——它实现和更新更快。当你需要一致的输出格式、语气,或者已经确定了需要强化的特定行为时,再添加微调。混合方法可以让你两全其美。
相关工具
相关教程
使用参数高效微调技术,将基础模型高效适配到你的领域
构建生产级检索增强生成系统,实现大规模向量搜索
LangChain与LlamaIndex构建检索增强生成应用的诚实技术对比,含基准测试、用例及迁移指南
通过 LlamaIndex 摄取管道和查询引擎将 LLM 连接到您的文档
使用现代 Python AI 栈构建生产级 AI 应用
简单链、RAG、智能体与多智能体模式及决策框架