大模型面试实战:从Agent、RAG到微调,100问构建核心知识体系
最近在准备大模型相关的面试,发现网上资料虽然多,但要么太零散不成体系,要么过于理论化,缺少与实际面试和项目结合的实战视角。很多同学在准备时,面对Agent、RAG、微调等概念,感觉学了很多,但被问到具体实现细节、技术选型对比或线上问题排查时,还是容易卡壳。
本文旨在解决这个痛点。我将结合近期的面试辅导和项目复盘经验,为你梳理一份覆盖Agent Skill、OpenClaw、LLM、RAG、LangChain和大模型微调六大核心领域的“面试必背”知识体系。这不仅仅是100个问题的罗列,更是一套从核心概念、技术原理到实战代码、避坑指南的闭环学习路径。无论你是即将踏入AI领域的校招生,还是寻求转型或晋升的工程师,都能从中找到系统性的准备方案,真正搞懂这些技术,在面试和项目中少走弯路。
1. 大模型技术全景与面试核心考察点
在深入每个技术细节之前,我们有必要先建立对当前大模型技术栈的全景认知。面试官的问题往往不是孤立的,他们希望考察你是否能理解技术之间的关联、演进脉络以及在实际业务中的落地逻辑。
1.1 大模型技术栈的层次划分
我们可以将大模型相关技术自上而下分为四个层次:
- 基础模型层 (Foundation Model Layer):这是技术的基石,主要指像GPT-4、Claude、LLaMA、通义千问这类拥有千亿甚至万亿参数的大型语言模型。面试常问其预训练原理、架构特点(如Transformer)、上下文长度、多模态能力等。
- 能力增强与接入层 (Capability Enhancement & Access Layer):为了让基础模型更好地完成特定任务,衍生出多种增强技术。这包括:
- 提示工程 (Prompt Engineering):通过设计高质量的指令、示例(Few-shot)、思维链(Chain-of-Thought)来激发模型潜能。
- 检索增强生成 (RAG, Retrieval-Augmented Generation):解决模型知识陈旧、幻觉问题,通过外部知识库提供实时、准确的参考信息。
- 大模型微调 (Fine-tuning):使用领域特定数据对模型参数进行针对性调整,使其更擅长某一类任务(如法律、医疗问答)。
- 智能体与框架层 (Agent & Framework Layer):当单个模型调用无法完成复杂任务时,需要引入“智能体”概念。智能体具备感知、规划、行动、反思的能力。LangChain、LlamaIndex等框架提供了构建此类应用的标准化工具链。Agent Skill和OpenClaw可以看作是这一层中,针对特定场景(如工具调用、复杂流程编排)的具体实现或设计模式。
- 应用与部署层 (Application & Deployment Layer):将上述技术整合,落地为具体的产品功能,如智能客服、代码助手、AI绘画提示词生成器等。此层关注工程化问题:模型服务化(API)、成本控制、流量治理、监控告警等。
理解这个层次关系,能帮助你在面试中清晰地定位问题,并展现你的系统化思考能力。
1.2 面试官到底在考察什么?
除了具体的技术点,面试官通常围绕以下几个维度进行考察:
- 深度理解 vs. 表面记忆:你是否真正理解Transformer中Self-Attention的数学原理和工作机制?还是仅仅背下了“注意力机制”这个词?
- 原理关联 vs. 孤立知识点:RAG如何缓解大模型的“幻觉”问题?微调和提示工程在解决领域适应性问题上有何优劣?
- 实战经验 vs. 纸上谈兵:是否遇到过RAG中检索精度不高的问题?你是如何通过调整检索器、重排序或提示工程来解决的?
- 技术选型与权衡:在资源有限的情况下,面对一个具体的业务需求(如构建一个公司内部知识库问答系统),你会选择RAG、微调,还是两者结合?依据是什么?
- 工程化与问题排查:如何监控一个上线的大模型服务的性能与效果?如果发现响应变慢或答案质量下降,你的排查思路是什么?
接下来,我们将按照技术层次,逐一拆解这“100问”中的核心精华部分,并辅以代码和场景分析。
2. 基础模型层 (LLM) 核心20问
这一部分是地基,必须扎实。
Q1: Transformer架构的核心是什么?Self-Attention机制如何工作?A1:Transformer摒弃了RNN/CNN,完全基于Attention。核心是Self-Attention(自注意力),它允许序列中的每个位置在编码时直接关注到序列的所有位置,捕获长距离依赖。
- 工作流程:对于输入序列的每个词向量,生成Query(Q)、Key(K)、Value(V)三个矩阵。计算Q与所有K的点积,经过缩放和Softmax得到注意力权重,再用此权重对V进行加权求和,得到该位置的输出。公式为:
Attention(Q, K, V) = softmax(QK^T / sqrt(d_k)) V。 - 面试延伸:为什么要除以
sqrt(d_k)?(防止点积过大导致Softmax梯度消失)。Multi-Head Attention有什么好处?(允许模型在不同表示子空间里学习相关信息,增强模型容量)。
Q2: 大模型训练中的“预训练”和“微调”分别是什么?A2:
- 预训练 (Pre-training):在海量无标注文本数据上,以自监督学习方式(如预测下一个词的Language Modeling目标)训练模型,使其学习通用的语言规律、世界知识和推理能力。成本极高,通常由大厂完成。
- 微调 (Fine-tuning):在预训练模型的基础上,使用特定领域或任务的有标注数据,继续对模型参数进行训练,使其适应下游任务。分为:
- 全量微调:更新所有参数,效果好但成本高。
- 参数高效微调 (PEFT):如LoRA、QLoRA,只更新少量新增参数,大幅降低资源消耗。
Q3: 如何评估一个大语言模型的好坏?除了准确率还看什么?A3:评估是多维度的:
- 基础能力:MMLU(大规模多任务语言理解)、BBH(BIG-Bench Hard)等学术基准测试。
- 实用性:
- 指令遵循 (Instruction Following):能否准确理解并执行复杂指令。
- 真实性 (Factuality):生成内容是否真实、准确,幻觉多少。
- 安全性 (Safety):是否会产生有害、偏见、歧视性内容。
- 推理能力 (Reasoning):在数学、代码、逻辑谜题上的表现。
- 工程指标:生成速度(Tokens/s)、吞吐量、显存占用、成本。
Q4: 解释一下大模型的“幻觉”问题及其成因。A4:“幻觉”指模型生成内容与输入无关或与已知事实不符。成因:
- 训练数据噪声:预训练数据本身包含错误或矛盾信息。
- 概率生成本质:模型基于概率生成下一个词,而非访问“事实数据库”。
- 知识截止:模型训练数据有截止日期,无法知晓新事件。
- 提示词误导:模糊或矛盾的提示可能导致模型“编造”。解决方案:RAG(提供真实依据)、提示工程(要求模型标明不确定性)、检索验证、模型自省(让模型检查自己答案的置信度)。
Q5: 上下文长度是什么?为什么长的上下文很重要且实现起来有挑战?A5:上下文长度指模型单次处理的最大token数量(如GPT-4 Turbo是128K)。
- 重要性:允许处理长文档、长对话历史、复杂代码库,是完成复杂任务的基础。
- 挑战:
- 计算复杂度:Self-Attention的复杂度是序列长度的平方(O(n²)),长度翻倍,计算量和显存消耗增至四倍。
- 注意力稀释:在超长上下文中,模型可能难以关注到最相关的信息。
- 位置编码:如何让模型理解超长序列中token的相对或绝对位置。
- 优化技术:FlashAttention(优化显存访问)、滑动窗口注意力、层次化注意力、外推或插值位置编码(如RoPE的NTK-aware插值)。
3. 能力增强层:RAG 深入解析25问
RAG是目前落地最火热的技术之一,面试必考。
3.1 RAG核心概念与流程
Q6: 请简述RAG的工作流程。A6:RAG = Retrieval + Augmentation + Generation。分为两阶段:
- 检索 (Retrieval):根据用户问题,从外部知识库(如向量数据库)中检索出最相关的文档片段。
- 增强生成 (Augmented Generation):将检索到的文档片段和原始问题一起组合成新的提示,提交给大模型,让模型基于这些“证据”生成最终答案。
# 一个简化的RAG流程代码示意 from langchain.vectorstores import Chroma from langchain.embeddings import OpenAIEmbeddings from langchain.chat_models import ChatOpenAI from langchain.chains import RetrievalQA # 1. 准备知识库和检索器 embeddings = OpenAIEmbeddings() vectorstore = Chroma(persist_directory="./chroma_db", embedding_function=embeddings) retriever = vectorstore.as_retriever(search_kwargs={"k": 3}) # 检索top3相关片段 # 2. 构建RAG链 llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0) qa_chain = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", # 简单地将所有检索内容塞入提示 retriever=retriever, return_source_documents=True ) # 3. 提问 question = "公司今年的年假政策有什么变化?" result = qa_chain({"query": question}) print("答案:", result["result"]) print("来源:", result["source_documents"])Q7: RAG相比直接微调模型有什么优势和劣势?A7:
- RAG优势:
- 知识实时更新:只需更新向量数据库,无需重新训练模型。
- 来源可追溯:答案有据可查,可解释性强,降低幻觉。
- 成本较低:无需昂贵的微调训练,推理成本可控。
- 保护私有数据:私有知识不进入模型参数,更安全。
- RAG劣势:
- 依赖检索质量:“垃圾进,垃圾出”,检索不准则生成必错。
- 上下文长度限制:检索到的内容可能挤占提示中其他指令的空间。
- 流程复杂:涉及文本分块、向量化、检索、重排序等多个环节,链路长,维护点增多。
- 如何选择:需要动态知识、强调事实准确性、有大量私有文档时选RAG;需要模型改变风格、学习复杂模式或任务、且数据稳定时考虑微调。两者也可结合(RAG提供知识,微调优化任务理解)。
3.2 检索质量优化:RAG的命门
检索环节是RAG效果的瓶颈,80%的问题出在这里。
Q8: 文本如何分块?有哪些策略?A8:分块策略直接影响检索粒度。
- 固定大小分块:简单,但可能割裂语义。
from langchain.text_splitter import CharacterTextSplitter splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50) chunks = splitter.split_text(long_document) - 按语义分块:利用句子边界、标题等。
from langchain.text_splitter import RecursiveCharacterTextSplitter splitter = RecursiveCharacterTextSplitter( chunk_size=500, chunk_overlap=50, separators=["\n\n", "\n", "。", "!", "?", ",", " ", ""] ) - 高级策略:滑动窗口、基于模型的分句、保留文档结构(如标题层级)。
Q9: 什么是嵌入模型?选择嵌入模型要考虑什么?A9:嵌入模型将文本转换为高维向量(嵌入),语义相似的文本向量距离近。
- 选择考虑:
- 维度:通常768或1024维,更高维可能表征能力更强但计算成本高。
- 上下文长度:模型能处理多长的文本输入。
- 语义匹配能力:在MTEB等基准测试上的表现。
- 多语言支持。
- 推理速度。
- 常用模型:OpenAI的
text-embedding-3系列、BGE(智源)、M3E(国产优等生)。
Q10: 除了简单的向量相似度检索,还有哪些提升检索精度的技术?A10:
- 重排序 (Re-ranking):先用向量检索出大量候选(如100个),再用一个更精细但更慢的交叉编码器模型对候选进行精排。
from langchain.retrievers import ContextualCompressionRetriever from langchain.retrievers.document_compressors import CrossEncoderReranker from sentence_transformers import CrossEncoder # 假设已有基础检索器 `base_retriever` cross_encoder = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2') compressor = CrossEncoderReranker(model=cross_encoder, top_n=3) # 精排后取top3 compression_retriever = ContextualCompressionRetriever(base_compressor=compressor, base_retriever=base_retriever) - 混合检索 (Hybrid Search):结合稠密检索(向量相似度)和稀疏检索(如BM25,关键词匹配)。两者优势互补,能同时捕获语义和精确关键词匹配。
- 查询转换 (Query Transformation):对原始查询进行改写、扩展或生成假设答案,再用其检索。
- 查询扩展:使用大模型生成与原始问题相关的多个问题。
- HyDE:让大模型根据问题生成一个假设性答案,然后用这个答案的向量去检索。因为假设答案和真实答案在语义空间更接近。
Q11: RAG中如何解决“多跳问题”?A11:“多跳问题”指回答一个问题需要综合多个文档片段的信息。例如“张三和李四谁的年薪高?”,需要先分别检索到张三和李四的薪资信息,再进行比较。
- 解决方案:
- 迭代检索 (Iterative Retrieval):先检索第一轮,根据初步答案或中间结果,生成新的查询进行第二轮检索,如此反复。
- 智能体模式 (Agentic RAG):将RAG过程交给一个智能体,由它来规划“需要检索什么”、“如何综合信息”。
- 图检索 (Graph RAG):将知识构建成图结构(实体-关系),检索时沿着图关系进行多跳遍历。
4. 智能体与框架层:Agent、LangChain与OpenClaw 30问
这是构建复杂AI应用的关键。
4.1 LangChain框架核心概念
Q12: LangChain中的Chain、Agent、Tool是什么关系?A12:这是LangChain的三个核心抽象。
- Chain:将多个组件(LLM、提示模板、工具等)按预定顺序链接起来,完成一个确定性的任务流程。例如
LLMChain、SequentialChain。 - Tool:赋予LLM与现实世界交互的能力。一个Tool就是一个函数,有名称、描述和参数。LLM可以决定在何时调用哪个Tool。例如搜索、计算器、数据库查询。
- Agent:一个具备自主决策能力的实体。它拥有LLM作为“大脑”,一组Tools作为“手脚”,以及一个决定何时、使用哪个Tool的“决策逻辑”(如ReAct范式)。Agent可以根据目标动态地调用Tools,处理更开放、多步骤的任务。
from langchain.agents import initialize_agent, Tool from langchain.agents import AgentType from langchain.llms import OpenAI def search_api(query): # 模拟一个搜索工具 return f"关于'{query}'的搜索结果..." tools = [ Tool( name="Search", func=search_api, description="用于搜索最新信息" ), ] llm = OpenAI(temperature=0) agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True) # Agent会自主决定是否需要调用Search工具 agent.run("查一下今天北京的天气,然后告诉我适不适合出门跑步?")Q13: 什么是ReAct范式?A13:ReAct =Reasoning+Acting。一种让Agent通过交错进行“思考”和“行动”来解决问题的范式。
- Thought:Agent分析当前情况,思考下一步该做什么。
- Action:根据Thought,决定调用哪个Tool,并传入参数。
- Observation:Tool执行的结果返回给Agent。
- 重复1-3步,直到问题解决。 这种范式让Agent的行动过程可解释,并且能处理需要多步工具调用的复杂任务。
4.2 Agent Skill 与 OpenClaw 解析
Q14: 什么是Agent Skill?它与普通的Tool有何不同?A14:Agent Skill可以理解为更高级、更复杂、更面向业务的Tool。一个Skill可能内部封装了多个步骤、条件判断甚至子Agent的协作。
- 普通Tool:功能单一,如“获取天气”、“计算器”。
- Agent Skill:面向一个完整的业务场景,例如“预订机票”Skill,它内部可能需要:查询航班、比价、检查用户偏好、调用支付接口、生成行程单等多个步骤的协作。
- 区别:Skill更强调组合性、状态管理和业务闭环。它是构建复杂Agent应用的基本模块。
Q15: 解释一下OpenClaw的概念。它解决了什么问题?A15:OpenClaw(开放爪)不是一个具体的库,而是一种设计模式或架构理念,尤其在阿里云等平台的AI Agent框架中被提及。它核心思想是构建一个开放、可扩展的“工具调用”生态。
- 解决的问题:
- 工具生态封闭:传统Agent的工具集是预定义、封闭的。
- 开发门槛高:为Agent新增一个工具需要修改核心代码,理解复杂框架。
- 难以复用:不同团队开发的工具难以共享和组合。
- OpenClaw的思路:
- 标准化接口:定义统一的工具描述、注册、发现和调用协议。
- 动态加载:Agent在运行时可以动态发现和加载新上线的工具/Skill,无需重启。
- 开放注册:第三方开发者可以按照标准,将自己的服务封装成Skill,注册到平台,供所有Agent使用。
- 安全沙箱:对第三方Skill的执行进行隔离和权限控制。
- 类比:就像智能手机的“应用商店”,Agent是手机操作系统,各种Skill就是上架的应用,用户可以按需安装使用。
Q16: 如何设计一个健壮的Agent Skill?A16:设计时需考虑:
- 清晰的输入输出:定义明确的API接口和数据结构。
- 幂等性与容错:多次调用结果一致,能处理异常和边界情况。
- 状态管理:对于多步骤Skill,需要维护会话状态或工作流状态。
- 可观测性:包含详细的日志、指标和追踪信息,便于调试和监控。
- 安全性:对输入进行验证和清理,防止注入攻击;管理好权限和密钥。
- 描述准确:提供给LLM的Skill描述必须精准,否则LLM无法正确调用。
4.3 智能体应用架构
Q17: 在多Agent系统中,Agent之间如何协作?A17:协作模式主要有:
- 主从模式:一个主管Agent接收任务,将其分解并分配给多个专家Agent(如写作Agent、检索Agent、审核Agent),最后汇总结果。
- 平等协作模式:多个Agent地位平等,通过共享工作区或消息传递进行协商和协作,共同完成任务。
- 竞争模式:多个Agent提出不同方案,再由一个评审Agent或投票机制选出最佳方案。
- 框架支持:LangGraph、CrewAI、AutoGen等框架专门用于编排多Agent工作流。
Q18: 如何评估一个AI Agent的效果?A18:比评估单一模型更复杂,需多维度考量:
- 任务完成度:是否最终完成了用户指定的目标?
- 步骤效率:完成任务的步骤数是否合理?有无冗余操作?
- 工具调用准确率:调用的工具和参数是否正确?
- 成本与耗时:整个流程消耗的Token数和时间。
- 鲁棒性:面对异常输入、工具失败等情况,能否优雅处理或恢复?
- 人工评估:仍然是黄金标准,但成本高。
5. 大模型微调实战20问
当RAG不足以满足需求时,微调是必经之路。
5.1 微调基础与策略
Q19: 什么时候应该考虑对模型进行微调?A19:考虑微调当:
- 任务风格固定:需要模型输出特定格式(如JSON、SQL、特定报告模板)。
- 领域知识深:通用模型在垂直领域(法律、医疗、金融)表现不佳,且该领域知识难以通过RAG完全覆盖。
- 纠正模型行为:需要持续、稳定地改变模型的某种行为或倾向(如更简洁、更安全)。
- 私有数据敏感:数据无法用于RAG的检索(即使向量化也有泄露风险),必须内化到模型中。
Q20: 全量微调 vs. 参数高效微调,如何选择?A20:
- 全量微调:更新模型所有参数。
- 优点:潜力大,可能达到最佳性能。
- 缺点:需要大量GPU资源,可能灾难性遗忘,存储成本高(每个任务一个完整模型)。
- 参数高效微调:如LoRA,在原始模型旁添加小型适配层,只训练这些新参数。
- 优点:训练快,显存占用低(可在一张消费级显卡上微调大模型),多个任务适配器可共享一个基座模型,减轻遗忘。
- 缺点:性能可能略低于全量微调(但差距通常很小)。
- 选择:绝大多数情况首选PEFT(尤其是LoRA)。除非你有海量领域数据、充足算力,并且对性能有极致追求,才考虑全量微调。
5.2 LoRA 微调实战详解
Q21: 请解释LoRA的原理。A21:LoRA假设模型在下游任务适配过程中,权重变化是低秩的。它不直接更新原始的大权重矩阵W(维度d x k),而是用两个更小的矩阵A(维度d x r) 和B(维度r x k) 的乘积来近似这个变化。其中r(秩) << min(d, k)。
- 前向传播时:
h = Wx + BAx。W被冻结,只训练A和B。 - 优势:
A和B的参数总量远小于W,极大减少了训练参数量和显存。训练后,只需保存很小的A和B适配器,推理时将其与原始权重合并即可。
Q22: 使用Hugging Face Transformers库进行LoRA微调的基本步骤是什么?A22:以下是使用PEFT库微调一个文本分类模型的核心步骤:
# 1. 导入必要的库 from transformers import AutoModelForSequenceClassification, AutoTokenizer, TrainingArguments, Trainer from datasets import load_dataset import torch from peft import LoraConfig, get_peft_model, TaskType # 2. 加载模型和分词器 model_name = "bert-base-uncased" model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2) tokenizer = AutoTokenizer.from_pretrained(model_name) # 3. 配置LoRA lora_config = LoraConfig( task_type=TaskType.SEQ_CLS, # 序列分类任务 r=8, # LoRA秩 lora_alpha=32, # 缩放参数 lora_dropout=0.1, target_modules=["query", "value"] # 对Transformer中的query和value层应用LoRA ) model = get_peft_model(model, lora_config) model.print_trainable_parameters() # 查看可训练参数占比,会发现只有很小一部分 # 4. 准备数据 dataset = load_dataset("imdb", split="train[:1000]") # 示例数据 def tokenize_function(examples): return tokenizer(examples["text"], padding="max_length", truncation=True) tokenized_datasets = dataset.map(tokenize_function, batched=True) # 5. 配置训练参数 training_args = TrainingArguments( output_dir="./lora_finetuned_model", per_device_train_batch_size=4, num_train_epochs=3, logging_dir='./logs', ) # 6. 创建Trainer并训练 trainer = Trainer( model=model, args=training_args, train_dataset=tokenized_datasets, ) trainer.train() # 7. 保存适配器 model.save_pretrained("./my_lora_adapter") # 推理时,可以加载原始模型和适配器进行合并Q23: QLoRA又是什么?它比LoRA好在哪里?A23:QLoRA =Quantized LoRA。它在LoRA的基础上引入了量化技术。
- 将预训练模型的权重量化为4-bit(而不是通常的16-bit或32-bit)。
- 在训练过程中,使用一种叫NF4的高效4-bit数据类型存储权重。
- 前向和反向传播时,将4-bit权重反量化为16-bit进行计算,以保持精度。
- 梯度更新仍然只作用于LoRA适配器。
- 优势:显存占用进一步大幅降低。使得在单张24GB显存的消费级显卡上微调650亿参数模型成为可能,而LoRA通常只能应对百亿级模型。
5.3 微调数据与评估
Q24: 如何准备高质量的微调数据?A24:数据质量决定微调上限。
- 格式:通常为指令-响应对。例如:
[ {"instruction": "将以下中文翻译成英文。", "input": "今天天气真好。", "output": "The weather is nice today."}, {"instruction": "总结下面文章。", "input": "长篇文章...", "output": "文章摘要..."} ] - 规模:从几百到几万条不等,取决于任务复杂度。简单的风格调整可能只需几百条,复杂的推理任务可能需要数万条。
- 质量要求:
- 多样性:覆盖任务的各种场景和表达方式。
- 一致性:相同指令的响应格式和标准应统一。
- 准确性:输出必须正确无误。
- 清洗:去除噪音、错误和无关数据。
- 数据来源:人工撰写、从现有数据中构造、利用大模型生成后人工审核。
Q25: 如何评估微调后的模型?A25:不能只看训练损失。
- 保留验证集:在训练时监控验证集上的损失和任务特定指标(如准确率、F1分数)。
- 人工评估:抽样检查模型在真实场景下的输出质量,这是最可靠的方法。
- 对比基准:与未微调的基座模型、以及使用不同方法(如提示工程、RAG)的效果进行对比。
- A/B测试:如果条件允许,在线上进行小流量A/B测试,看业务指标(如用户满意度、任务完成率)是否有提升。
6. 工程化与最佳实践5问
技术最终要落地,工程化能力是关键。
Q26: 如何设计一个高可用的生产级大模型服务?A26:
- 服务化:通过API(如OpenAI格式、Triton Inference Server)暴露模型。
- 负载均衡与弹性伸缩:根据请求量动态调整后端实例。
- 缓存:对相同或相似的请求结果进行缓存,减少模型调用和成本。
- 限流与降级:防止突发流量打垮服务,在模型服务异常时提供降级方案(如返回兜底答案)。
- 监控与告警:监控QPS、延迟、错误率、Token消耗、成本;设置关键指标告警。
- 版本管理与回滚:模型版本化,支持快速回滚。
Q27: 如何降低大模型应用的推理成本?A27:
- 模型选型:在满足效果的前提下,选择更小、更快的模型。
- 提示优化:精简提示词,减少不必要的上下文。
- 缓存:如前所述。
- 批处理:将多个请求合并为一个批次进行推理,提高GPU利用率。
- 量化与蒸馏:使用量化后的模型进行推理(如GPTQ、AWQ),或使用大模型蒸馏出的小模型。
- 异步与流式:对于长文本生成,使用流式响应改善用户体验,同时后端可以优化生成过程。
Q28: 在大模型应用中,如何保证数据安全与隐私?A28:这是企业级应用的生命线。
- 数据不上云:对于敏感数据,使用私有化部署的模型。
- API审计与过滤:对所有出入模型的请求和响应进行审计和内容安全过滤。
- Prompt注入防御:对用户输入进行清洗,防止其覆盖系统指令。
- RAG权限控制:在检索阶段,根据用户身份对知识库进行行级/列级的数据权限过滤。
- 模型微调数据脱敏:训练数据必须经过严格的脱敏处理。
Q29: 描述一下大模型应用的典型技术架构。A29:一个完整的架构可能包含以下层次:
- 接入层:API网关,负责鉴权、限流、路由。
- 应用层:
- Orchestration Layer:使用LangChain等框架编排工作流,处理复杂的逻辑(如多步工具调用、RAG流程)。
- Agent/Skill Layer:具体的智能体和技能实现。
- 核心服务层:
- LLM Service:模型推理服务,可能对接多个模型提供商(OpenAI、Azure、本地模型)。
- Embedding Service:向量化服务。
- RAG Service:封装检索、重排序、提示组装等逻辑。
- 数据层:
- 向量数据库:Chroma、Weaviate、Pinecone、Milvus。
- 传统数据库:存储业务数据、会话状态等。
- 对象存储:存储文档、图片等原始文件。
- 支撑层:监控、日志、配置中心、密钥管理。
Q30: 面对一个全新的业务需求,你的技术选型思路是什么?A30:这是一个综合考察题,可以按以下步骤回答:
- 需求分析:明确要解决什么问题?是问答、创作、总结、分类还是复杂规划?对准确性、实时性、成本、安全性的要求是什么?
- 方案预选:
- 如果任务简单、定义明确,首先尝试提示工程。
- 如果需要结合实时、外部或私有知识,优先考虑RAG。
- 如果需要改变模型风格、学习复杂模式、且数据稳定,考虑微调。
- 对于需要多步骤、动态决策的复杂任务,考虑Agent。
- 可行性验证:
- 用少量数据或原型快速验证核心想法(Proof of Concept)。
- 评估不同方案的效果、成本和开发复杂度。
- 迭代优化:很少有一个方案能解决所有问题。通常是组合拳,例如:
RAG + 提示工程提供知识,微调优化模型对任务的理解,Agent来协调复杂流程。 - 工程化考量:根据团队技术栈、运维能力和资源,选择最合适、最可控的技术栈进行落地。
这份“100问”精华指南,从底层原理到上层应用,从代码实操到架构设计,为你构建了一个立体的大模型知识网络。真正的掌握不在于背诵答案,而在于理解背后的“为什么”,并能在实际场景中灵活运用和组合这些技术。建议你按照这个框架,针对每个部分进行更深入的代码实践和项目练习,将知识内化为解决问题的能力。面试时,结合你自己的项目经验,清晰地阐述你的技术选型、实践细节和复盘思考,这远比罗列概念更能打动面试官。
