Q1、大模型微调过程,模型参数调整经验;
如何降低幻觉,项目里agent的具体工程流程,
数据预处理,和dify使用,qwen等国内主流模型了解,vllm模型部署经验。
A1:
(1)大模型微调:参数调整经验
LoRA 策略: 我通常将 rrr (Rank) 设定在 8 到 64 之间。经验表明,对于特定任务(如提取信息),r=8r=8r=8 足够;但对于复杂逻辑任务(如代码生成),我会提升至 r=64r=64r=64。同时,α\alphaα (Scaling) 通常设为 2r2r2r
学习率(LR): * 全量微调:通常设为很小,如 1e−51e-51e−5 或 2e−52e-52e−5 LoRA/QLoRA:可以稍大,如 1e−41e-41e−4 或 2e−42e-42e−4
关键经验: 我会使用 Cosine 学习率调度器 配合 Warmup(通常占总步数的 5%-10%),防止模型在初期梯度爆炸
训练目标: 监控 Train Loss 和 Eval Loss 的鸿沟。如果 Eval Loss 开始回升,立即通过 Early Stopping 或降低学习率来防止过拟合
(2)降低幻觉
RAG(检索增强): 这是最立竿见影的工程手段。通过将外部可信知识库向量化,在 Prompt 中强制要求模型"仅根据以下上下文回答"。
SFT 数据治理: 在微调数据中加入"诚实性样本"。即对于无法回答的问题,训练模型说"对不起,根据已有信息我无法回答",而不是强行预测下一个 token。
验证环节(Self-Reflection): 在 Agent 流程中加入一步"自审",让模型检查自己的答案是否与检索到的事实冲突。
(3)Agent具体的工作流程
规划 (Planning): 将复杂目标拆解为子任务(子目标)
记忆 (Memory): * 短期: 通过 ChatHistory 维持上下文。长期: 将历史交互存入向量数据库,按需召回。
工具调用 (Tool Use): LLM 输出结构化 JSON 或特定格式(如 Python 代码),由后端 Executor 执行 API 请求或数据库查询
迭代反馈: 获取工具执行结果后,重新输入模型进行下一步决策
(4)数据预处理
清洗: 正则过滤 HTML 标签、特殊符号、去敏感信息 (PII)。
去重: 使用 MinHash + LSH 算法进行语料库级别的大规模去重,防止模型复读机。
质量筛选: 使用小模型(如 Qwen-1.8B)或规则对语料进行打分,剔除逻辑不通或回复过短的低质数据。
构造 Instruction: 针对 GRPO 或 SFT 任务,将原始文本转化为"User: {Instruction} \n Assistant: {Response}"的多轮对话格式。
(5)Dify使用与国内主流模型
Dify: 我在项目中利用 Dify 快速搭建 RAG 原型。它的优势在于 Prompt 编排的可视化 和 内置的数据切片优化。我会通过 Dify 调用后端 API,实现业务逻辑的解耦。
(6)vLLM模型部署经验
PagedAttention: 这是 vLLM 的核心。它模仿操作系统内存管理,将 KV Cache 存储在非连续的物理空间,彻底解决了显存碎片化问题,支持更高的并发量。
Continuous Batching: 允许在旧请求结束前插入新请求,极大提升了 GPU 利用率。
Q2:Dify
Dify 的作用: Dify 不仅仅是 UI,它是 Prompt IDE 和 RAG 工作流引擎
Q3:P-tuning、LoRA 与 DPO
P-tuning: 只训练插入在输入端的 可学习 Embedding(Virtual Tokens)
LoRA:通过低秩分解 W=W0+ΔW=W0+BAW = W_0 + \Delta W = W_0 + BAW=W0+ΔW=W0+BA,只训练 BBB 和 AAA 两个小矩阵。
DPO:直接偏好优化。跳过奖励模型(RM),直接在偏好对上计算 Loss,使模型更倾向于选好的答案。
Q4:微调的关键趋势:现在更强调数据多样性和质量(Synthetic Data)。我们通常会剔除低质量回复,并利用模型自我生成(Self-Instruct)来扩充推理类数据。
关于 DPO (Direct Preference Optimization): 我经常使用 DPO。相比传统的 RLHF(PPO 算法),DPO 不需要训练奖励模型 (Reward Model),直接在偏好数据(Chosen/Rejected)上优化。它训练更稳定、显存占用更小,且在对齐模型价值观和减少幻觉方面表现极其出色。
Q4:RAG的技术路线
RAG(检索增强生成)目前已经从朴素架构进化到了高级架构:
数据处理(Ingestion):文档清洗 -> 语义分块(Chunking)-> 向量化(Embedding)-> 存入向量数据库。
检索(Retrieval):根据 Query 搜索最相关的 Top-k 文本块。
增强(Augmentation):将检索到的上下文与原始 Query 拼接,构建 Prompt。
生成(Generation):送入 LLM 生成回答。
前沿演进:GraphRAG(结合知识图谱)、Modular RAG(加入重排序 Rerank 和查询重写 Rewrite)。
RAG 过程中的影响因素与评价
影响阶段:
检索前:Query 解析是否准确(Query Expansion)。
检索中:索引质量、向量相似度计算、召回率。
检索后:**Rerank(重排序)**至关重要,决定了输入给 LLM 的上下文相关度。
生成阶段:LLM 的上下文窗口大小及其处理长文本的能力(是否存在"Lost in the Middle"现象)。
评价体系 (RAGAS 框架):
忠实度 (Faithfulness):回答是否来自于检索到的文档。
答案相关性 (Answer Relevance):回答是否解决了用户问题。
上下文精确度 (Context Precision):检索到的文档是否真的有用。
在 RAG 项目中,我通常做以下优化:
微调 Embedding 模型:使用业务领域的语料进行对比学习(Contrastive Learning),如使用 BGE 或 m3e 并在垂直数据上 Fine-tune。
多尺度表征:使用 Matryoshka Embedding(俄罗斯套娃嵌入),支持动态调整向量维度以兼顾检索速度与精度。
混合检索(Hybrid Search):向量检索(语义)+ BM25(关键词)进行加权融合。
指令化 Embedding:在 Embedding 前加入指令前缀(Instruction),区分是检索文档还是检索代码。
Q5:RAG框架
LangChain:生态最丰富,但封装过深,调试比较困难(Debug 像开盲盒)。
LlamaIndex:专为 RAG 设计,数据连接器(Data Connectors)和索引结构(Index Structures)非常强大,适合处理复杂异构数据。
Haystack:流水线(Pipeline)设计非常优雅,适合生产环境部署,模块化程度高。
Q6:DS、Qwen、ChatGLM
DeepSeek:MoE 架构做得极好(DeepSeek-V3),独创 MLA(多头潜在注意力) 大幅降低推理成本。
Qwen:预训练数据量极大且干净,在 代码(Coding)和数学 领域处于第一梯队,对中文语境理解极深。
ChatGLM:自研 GLM 架构(非纯 Decoder-only),在长文本处理、工具调用(Function Call)上积累深厚。
Q7:MCP
是的,我保持着高度关注并已有实践。 MCP (Model Context Protocol) 是由 Anthropic 发布的开放标准。它解决了 Agent 开发中最大的痛点:数据源/工具集成标准不统一。
应用价值:通过 MCP,我可以一次性为模型连接 Google Drive、GitHub、本地数据库,而不需要为每个工具写冗长的连接代码。
实战感悟:它极大地简化了 "上下文提取" 的复杂性,让模型能以标准化的方式安全地访问私有数据,是未来 Agent 生态标准化的核心。