向 GPT-3.5 灌入新知识
Published on Nov 07, 2025, with 3 view(s) and 0 comment(s)
Ai 摘要:文章探讨了企业级大模型应用的核心问题:如何在不重新训练GPT-3.5的情况下,使其掌握私有知识。主要介绍了两种方法:微调(需训练模型)和RAG检索增强生成(无需训练)。RAG通过实时检索外部知识库,将相关信息注入提示词,再让模型生成答案,有效解决了模型知识过时和私有数据缺失的问题,成为当前最实用、高效的知识增强技术。

向 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 等在训练时掌握了大量通用知识,但它们存在两个关键限制:

  1. 知识过时:模型训练数据的截止时间固定(比如 GPT-4 截止 2023 年)。
  2. 私有知识缺失:模型不知道你的企业内部文档、数据库、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(知识 + 实时性)