LLM 核心技术说明
1. 提示词(Prompt)的应用
核心元素与设计方法
提示词是用户与 LLM 交互的核心媒介,其核心元素包括:
- 指令(Instruction):明确任务目标(如“生成摘要”、“分类情感”)。
- 上下文(Context):提供背景信息(如“根据以下法律条款回答”)。
- 示例(Examples):通过少量示例(Few-Shot)引导模型输出格式。
- 约束(Constraints):限制输出长度、格式或内容(如“输出 JSON 格式”)。
高效提示词设计案例
- 场景:智能客服
你是一名客服助手,根据用户问题提供专业回复。 用户问题:{query} 知识库上下文:{context} 要求:回答不超过 100 字,分点列出解决方案。 示例: 用户问:“订单未送达怎么办?” 回答:“1. 检查物流信息。2. 联系客服补发。3. 申请退款。”
- 优化技巧:
- 角色设定:明确模型身份(如“你是一名医生”)。
- 格式约束:强制 JSON/XML 输出,便于后续解析。
- 温度调节:高温度(如 0.8)用于创造性任务,低温度(如 0.2)用于确定性任务。
2. 检索增强生成(RAG)的应用
RAG 的定义与原理
RAG 通过外部知识库动态检索相关信息,将其作为上下文输入生成模型,解决 LLM 的静态知识局限。
实现步骤与场景案例
- 数据准备:构建领域知识库(如企业文档、最新新闻)。
- 检索器选择:
- 稠密检索:使用 Sentence-BERT 生成向量,存入向量数据库(如 Pinecone)。
- 混合检索:结合 BM25(关键词匹配)和向量检索提升召回率。
- 生成器集成:将检索结果输入 LLM 生成最终答案。
场景案例:法律文档问答
- 实现代码:
from langchain.retrievers import BM25Retriever, EnsembleRetriever from langchain.vectorstores import FAISS # 混合检索 bm25_retriever = BM25Retriever.from_texts(legal_docs) vector_retriever = FAISS.from_texts(legal_docs, embeddings).as_retriever() ensemble_retriever = EnsembleRetriever( retrievers=[bm25_retriever, vector_retriever], weights=[0.4, 0.6] ) # RAG 生成 qa_chain = RetrievalQA.from_chain_type( llm=Llama-2-13b, retriever=ensemble_retriever, chain_type="stuff" ) answer = qa_chain.run("劳动合同解除的赔偿标准是什么?")
3. 微调(Fine-Tuning)的应用
微调的定义与价值
微调通过在领域数据上继续训练预训练模型,使其适应特定任务(如医疗诊断、法律咨询)。
实现方法与场景案例
- 数据要求:数百至数千条标注数据(如问答对、分类标签)。
- 微调方法:
- 全量微调:更新所有参数,适合数据充足场景。
- 参数高效微调(PEFT):如 LoRA(低秩适配),仅训练少量参数。
场景案例:医疗诊断辅助
- 数据:脱敏的医患对话记录,标注疾病标签。
- LoRA 微调代码:
from peft import LoraConfig, get_peft_model from transformers import AutoModelForCausalLM # 加载模型 model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b") # 添加 LoRA 适配器 lora_config = LoraConfig( r=8, lora_alpha=32, target_modules=["q_proj", "v_proj"] ) model = get_peft_model(model, lora_config) # 微调训练 trainer = Trainer(model, args, train_dataset=medical_data) trainer.train()
4. 预训练(Pre-training)的应用
预训练的定义与流程
预训练通过自监督学习(如掩码语言建模、下一句预测)在大规模无标注数据上训练模型,构建通用语言理解能力。
领域预训练的价值与挑战
- 价值:
- 生物医学:学习专业术语(如“EGFR 突变”)和文献逻辑。
- 金融:理解财报结构、市场趋势描述。
- 挑战:
- 数据清洗:去除噪声(如 OCR 错误、非专业内容)。
- 领域适应:平衡通用能力和专业术语理解。
场景案例:金融领域预训练
- 数据:海量财报、新闻、分析师报告(10TB 级)。
- 训练策略:
- 分词优化:扩展词表加入金融术语(如“EBITDA”)。
- 渐进式训练:先通用语料(Wikipedia),后领域数据。
- 硬件需求:千卡 A100 集群,训练周期 1-3 个月。
总结与选型建议
技术 | 适用场景 | 优势 | 局限性 |
---|---|---|---|
提示词 | 简单任务、快速原型开发 | 零样本/少样本即可生效 | 对复杂任务效果有限 |
RAG | 动态知识需求 | 实时更新、无需重新训练 | 依赖检索质量 |
微调 | 领域高精度任务 | 显著提升任务表现 | 需标注数据、计算成本高 |
预训练 | 领域数据垄断场景 | 构建领域专属模型 | 成本极高、周期长 |
选型策略:
- 通用问答:提示词 + RAG(如 ChatGPT + Pinecone)。
- 高精度私有场景:LoRA 微调(如医疗诊断)。
- 领域垄断数据:领域预训练(如金融风险模型)。