全网首发|AI x Data x Agent 面试专题总结系列【5.2万字,11个模块】
前言
本文整理了自2025年下半年以来,大数据提高班、知识星球、其他微信同学们面试过程中遇到的AI x Data x Agent等方向的AI相关面试题,涵盖RAG、Agent、向量数据库、框架、Skills、协议、生产工程、大模型微调、Promt Engineering、Data × AI融合等模块,共计100+道核心面试题。
本文内容来源于大厂真实面试复盘以及技术社区,适合AI应用开发、Agent工程师、AI数据架构师等岗位备战使用,本文是第一版简化版,后续内容会持续更新在知识星球AI专题部分。知识星球:


截至目前知识星球累计积累后端、大数据、AI相关面试相关真题200+万字,还在持续稳定输出。欢迎加入。
警告:本文全长约5.2万字,全文阅读预计需要2小时😄。另有笔误、格式错乱在所难免,大家自行理解即可。真的不打算点个关注吗?
目录
-
模块一:RAG核心技术篇
-
模块二:向量数据库与检索篇
-
模块三:AI Agent设计与实现篇
-
模块四:协议体系篇 MCP/A2A/AG-UI
-
模块五:Agent Skills技能体系篇
-
模块六:LLM应用框架篇LangChain/LangGraph
-
模块七:生产工程与可靠性篇
-
模块八:RAG系统幻觉治理专题
-
模块九:大模型微调与推理优化篇
-
模块十:Prompt Engineering高级篇
-
模块十一:Data×AI融合篇
模块一:RAG核心技术篇
Q1:RAG技术的本质是什么,它在工程层面解决了哪些痛点?
核心要点:RAG通过在生成前注入外部检索结果,弥补了大模型知识时效性不足和事实性幻觉两大缺陷。
大语言模型的参数中固化了训练截止日期之前的知识,面对时效性查询(如最新政策、实时数据)时会编造内容。RAG的技术本质是将信息检索与文本生成解耦为两阶段流水线:
-
检索阶段:将外部知识源编码为向量表示,基于语义相似度召回相关片段
-
生成阶段:将召回片段作为额外上下文注入Prompt,约束模型基于事实回答
工程价值体现在三方面:
-
知识可维护性:更新文档即可刷新模型"知识",无需重新训练
-
答案可溯源性:每个回答可追溯到具体文档段落
-
成本可控性:相比微调,RAG的迭代成本极低
面试加分提示:将RAG与Fine-tuning做对比-RAG适合知识频繁变动场景(如客服FAQ),Fine-tuning适合需要改变模型能力边界的场景(如领域术语理解)。两者可组合使用。
Q2:请完整描述RAG系统的数据处理链路与在线查询链路
核心要点:RAG链路分为离线索引构建和在线查询生成两条Pipeline,核心挑战在于检索质量。
离线索引Pipeline:
原始文档 → 格式解析 → 文本清洗 → 语义分块 → Embedding向量化 → 向量入库(附元数据)
-
格式解析:适配PDF(版式解析)、Word、HTML、Markdown等异构格式
-
文本清洗:去噪(页眉页脚、水印)、统一编码、去重
-
语义分块:按语义完整性切分,保留上下文连贯性
-
向量化:选用合适的Embedding模型将文本映射为稠密向量
-
入库:向量+原文+元数据(来源、时间、类别)存入向量数据库
在线查询Pipeline:
用户Query → 意图识别 → Query改写/扩展 → 向量检索 → 重排序 → 上下文组装 → LLM生成 → 输出校验
关键设计决策:
|
环节 |
技术选型 |
影响 |
|---|---|---|
|
分块 |
固定窗口/语义切分/递归切分 |
检索粒度与语义完整性 |
|
Embedding |
BGE/M3E/OpenAI |
语义表达能力 |
|
检索 |
纯向量/混合检索/多路召回 |
召回率与准确率 |
|
重排序 |
Cross-Encoder/Cohere Rerank |
精排准确度 |
面试加分提示:提及你在实际项目中如何根据文档类型选择不同的分块策略——FAQ类用小块(200字)保证精准匹配,技术文档用大块(500-800字)保留上下文。
Q3:Embedding模型选型时需要权衡哪些维度?
核心要点:Embedding选型需综合考虑语言适配性、向量维度、上下文窗口和领域匹配度四个维度。
|
维度 |
考量点 |
典型选择 |
|---|---|---|
|
语言适配 |
中文语义理解能力 |
中文:BGE-large-zh、M3E-large;英文:text-embedding-3-large |
|
向量维度 |
表达能力vs存储/计算成本 |
384维(轻量)→768维(均衡)→1536维(高精度) |
|
上下文窗口 |
需覆盖分块最大长度 |
512/1024/2048/8192 tokens |
|
领域匹配 |
通用模型vs领域微调 |
通用先行,不达标则在领域数据上对比微调 |
评估方法:
-
使用标准评测集(C-MTEB for中文、MTEB for英文)获取基线指标
-
构建业务测试集(50-100组Query-Document对),计算Recall@5和MRR
-
关注长尾case:专业术语、缩写、同义词的表现
面试加分提示:2026年趋势-多语言统一Embedding模型(如BGE-M3支持100+语言)逐渐成为主流,减少了多语言系统中维护多个模型的复杂度。
Q4:混合检索相比纯向量检索有哪些优势?工程上如何实现?
核心要点:混合检索结合关键词精确匹配和语义模糊匹配的互补优势,显著提升召回覆盖率。
纯向量检索的局限:
-
对专有名词、型号编码等精确匹配场景表现差
-
对短查询(1-2个关键词)语义表达不充分
混合检索方案:
# 混合检索伪代码
defhybrid_search(query, alpha=0.7):
# 语义检索:捕获意图相似性
vector_results = vector_db.search(embed(query), top_k=20)
# 关键词检索:捕获精确匹配
keyword_results = bm25_index.search(query, top_k=20)
# 融合排序:RRF(Reciprocal Rank Fusion)
final_results = rrf_merge(vector_results, keyword_results, alpha)
return final_results[:10]
RRF融合算法核心:对每个文档计算 score = Σ 1/(k + rank_i),其中k通常取60,rank_i为该文档在第i路检索中的排名。
|
检索方式 |
擅长场景 |
弱项 |
|---|---|---|
|
向量检索 |
语义相似、同义改写 |
精确匹配、专有名词 |
|
BM25关键词 |
精确术语、编码型号 |
语义理解、意图推断 |
|
混合融合 |
兼顾语义+精确 |
需要调优权重参数 |
面试加分提示:实际项目中alpha权重建议从0.7(偏向语义)开始,在业务测试集上做网格搜索,找到最优配比。Elasticsearch 8.x原生支持kNN+BM25混合查询。
Q5:重排序(Reranking)在RAG中扮演什么角色?为何不直接用精排模型做初始检索?
核心要点:重排序是"先广后精"策略的精排环节-初始检索追求高召回率,重排序追求高准确率。
为什么需要两阶段:
-
Bi-Encoder(向量检索):Query和Document独立编码,支持ANN索引加速,可在毫秒级完成百万级文档检索。缺点是Query-Doc交互信息有限,精度有天花板。
-
Cross-Encoder(重排序):Query和Document拼接输入,充分建模交互关系,精度远高于Bi-Encoder。缺点是计算复杂度O(N),无法直接用于全库检索。
所以工程最优解是:Bi-Encoder快速召回Top-K候选(如50条),再用Cross-Encoder对这50条精排取Top-5。
常用重排序方案:
|
方案 |
特点 |
|---|---|
|
bge-reranker-v2 |
开源,中英文效果好,本地部署 |
|
Cohere Rerank |
商用API,多语言,开箱即用 |
|
LLM-based Rerank |
用GPT/Claude做判定,效果最好但成本最高 |
面试加分提示:在延迟敏感场景,可以用轻量级Cross-Encoder(如MiniLM-based)做重排,推理延迟可控制在20ms内。
Q6:文档分块策略有哪些选择?各自适用什么场景?
核心要点:分块策略直接影响检索精度和语义完整性,需要根据文档类型和业务场景灵活选择。
主流分块方法:
|
方法 |
原理 |
适用场景 |
优缺点 |
|---|---|---|---|
|
固定窗口 |
按Token数切分+Overlap |
通用场景 |
简单但可能切断语义 |
|
递归字符切分 |
按分隔符层级递归切分 |
结构化文档 |
尊重段落边界 |
|
语义切分 |
相邻句子相似度低于阈值处切分 |
长文本 |
语义连贯但计算开销大 |
|
按文档结构 |
利用标题/章节天然分界 |
Markdown/HTML |
保留层级关系 |
|
小块索引大块返回 |
用句子级索引,召回时返回所在段落 |
精度要求高 |
检索精准+上下文完整 |
分块大小经验值:
-
FAQ/问答对:100-200 tokens,保证一问一答完整
-
技术文档:400-600 tokens,保留代码块+说明完整
-
法律/合同:300-500 tokens,保证条款完整
Overlap设置建议:通常取分块大小的10%-20%,确保跨块查询时不会遗漏关键信息。
面试加分提示:高级方案"Parent-Child Chunking"-用小块做检索索引(精确命中),实际返回其父块(完整上下文),兼顾精度与完整性。
Q7:什么是Agentic RAG?它与传统RAG的关键区别在哪里?
核心要点:Agentic RAG让AI Agent自主决定检索策略和执行流程,是从"单次被动检索"到"多轮主动探索"的范式升级。
传统RAG是"一次性检索+一次性生成"的固定流水线,无论问题复杂度如何,都走同样的路径。Agentic RAG则引入Agent的自主决策能力:
|
维度 |
传统RAG |
Agentic RAG |
|---|---|---|
|
检索次数 |
固定1次 |
动态多次,按需迭代 |
|
检索策略 |
固定 |
Agent自主选择(改写/分解/路由) |
|
质量判断 |
无 |
Agent评估结果是否充分 |
|
错误处理 |
无 |
发现不足自动补充检索 |
Agentic RAG的典型执行流程:
-
Agent分析用户问题,判断是否需要分解为子问题
-
对每个子问题选择最佳检索策略(直接检索/改写后检索/多知识源路由)
-
评估检索结果质量,不充分则调整策略重新检索
-
跨结果交叉验证,发现矛盾时进一步追溯
-
整合所有信息生成最终答案
代价:延迟增加2-5倍,Token消耗增加3-8倍。适合对准确率要求极高、可承受一定延迟的场景(如金融研报、法律咨询)。
面试加分提示:Agentic RAG是RAG技术的第三代演进路径(Naive RAG → Advanced RAG → Agentic RAG),面试时展示对这个演进脉络的理解会很加分。
Q8:GraphRAG的核心思路是什么?它解决了传统RAG的哪些局限?
核心要点:GraphRAG通过知识图谱建模实体间关系,解决了传统RAG在多跳推理和全局性问题上的短板。
传统RAG的两大局限:
-
多跳推理困难:回答"公司A的CEO毕业于哪所大学"需要两步推理,单次检索难以覆盖
-
全局性总结困难:如"本季度所有产品线的营收趋势"需要综合多个分散片段
GraphRAG的解决思路:
-
离线构建:用LLM从文档中抽取实体和关系,构建知识图谱
-
社区发现:对图谱做聚类(如Leiden算法),识别主题社区
-
社区摘要:为每个社区生成摘要,形成层级索引
-
查询路由:局部问题→图谱子图检索;全局问题→社区摘要检索
与传统RAG的互补关系:
-
结构化关系查询 → GraphRAG
-
非结构化文本匹配 → 传统向量RAG
-
最佳实践是两者融合,根据Query类型动态路由
面试加分提示:提及微软开源的GraphRAG框架(github.com/microsoft/graphrag),以及其在企业级知识管理中的应用案例,展示你对最新技术动态的跟踪。
Q9:如何设计RAG系统的评估体系?
核心要点:RAG评估需分别度量检索质量和生成质量,建立离线评测+在线监控的双轨机制。
评估指标体系:
|
评估维度 |
指标 |
含义 |
|---|---|---|
|
检索质量 |
Context Precision |
召回内容中相关片段的占比 |
|
检索质量 |
Context Recall |
回答所需信息被召回的完整度 |
|
生成质量 |
Faithfulness(忠实度) |
答案是否严格基于检索内容,无编造 |
|
生成质量 |
Answer Relevance |
答案与问题的相关程度 |
|
端到端 |
Answer Correctness |
答案与标准答案的一致性 |
RAGAS框架是当前最主流的自动化评估工具,核心理念是用LLM作为"判官"自动打分,无需人工标注:
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy, context_precision
result = evaluate(
dataset=eval_dataset,
metrics=[faithfulness, answer_relevancy, context_precision],
llm=evaluation_llm
)
评估闭环建设:
-
构建黄金测试集(100-200组标注数据)
-
CI/CD中自动运行评估,设置质量门禁
-
线上收集用户反馈(点赞/点踩)
-
定期从反馈中挖掘Bad Case补充测试集
面试加分提示:面试中展示你对"评估即工程"的认知-好的RAG团队花在评估体系上的时间不少于开发时间。
Q10:RAG系统中如何处理知识冲突问题?
核心要点:知识冲突是多源检索的常见挑战,需通过时效性优先、来源权重、置信度分层等策略综合应对。
冲突类型:
-
时效性冲突:旧文档说"政策A",新文档说"政策B"
-
来源权威性冲突:官方文档vs论坛帖子的说法不一致
-
表述粒度冲突:一个片段说"约100人",另一个说"98人"
处理策略矩阵:
|
策略 |
实现方式 |
适用场景 |
|---|---|---|
|
时效优先 |
元数据中标注文档时间戳,检索后按时间排序 |
政策类、新闻类 |
|
来源加权 |
为不同来源设定信任等级,加权融合 |
多源知识库 |
|
多源交叉验证 |
多个独立来源佐证才采信 |
高风险场景 |
|
不确定性表达 |
提示用户存在不同说法 |
开放性问题 |
|
冲突检测+人工裁决 |
LLM检测矛盾后标记待审 |
关键业务决策 |
Prompt层面的处理:在System Prompt中加入冲突处理指令,如"当检索内容存在矛盾时,优先采信最新文档;若无法判断时效性,列出不同说法供用户参考"。
面试加分提示:知识冲突的根本解法是知识库治理-建立文档版本管理、过期标注、来源分级机制,在入库环节就做好质量管控。
Q11:RAG中如何有效处理多轮对话场景?
核心要点:多轮对话中用户的后续问题常含指代和省略,需通过Query改写将上下文依赖问题转化为独立完整的检索Query。
核心挑战:用户第二轮问"那它的价格呢?"-如果直接用这句话做检索,几乎不会命中任何相关内容。
解决方案对比:
|
方案 |
原理 |
优缺点 |
|---|---|---|
|
历史拼接 |
将完整对话历史拼接作为查询 |
简单但噪声大,易超长 |
|
Query改写 |
LLM将当前问题结合历史改写为独立问题 |
效果最好,但增加一次LLM调用 |
|
对话摘要 |
维护动态摘要作为上下文 |
平衡信息保留与长度控制 |
|
独立检索+融合 |
当前问题和历史问题分别检索后合并 |
冗余检索但覆盖率高 |
Query改写示例:
rewrite_prompt = """
基于以下对话历史和当前问题,生成一个独立完整的检索查询。
对话历史:
用户:MacBook Pro M3的续航表现如何?
助手:MacBook Pro M3在正常使用下续航约为18小时...
当前问题:那它的价格呢?
请生成独立查询:
"""
# 改写结果:"MacBook Pro M3的价格是多少"
面试加分提示:在实际系统中,Query改写可以用小模型(如GPT-3.5级别)完成以控制成本,不需要使用最强模型。
Q12:RAG系统的性能优化有哪些关键手段?
核心要点:RAG性能优化需从索引构建、检索加速、生成提速三个环节分别优化,追求端到端延迟最小化。
索引层优化:
-
选择合适的向量索引:数据<10万用HNSW(高精度),>100万考虑IVF+PQ(节省内存)
-
索引分片:按业务维度分库,检索时只查相关分片
-
向量量化:PQ/SQ压缩向量维度,存储减少4-8倍,精度损失<3%
检索层优化:
-
热点缓存:对高频Query缓存检索结果,命中率30-50%
-
元数据预过滤:先按分类/时间标量过滤,再在子集上向量检索
-
并行多路召回:向量+BM25+知识图谱并行执行,取合集
生成层优化:
-
流式输出:首Token延迟200ms内用户即可感知响应
-
上下文压缩:只取最相关片段,避免塞入过多无关内容
-
模型路由:简单问题用小模型(7B/14B),复杂问题才用大模型
延迟预算分配(以P95<3s为目标):
|
环节 |
预算 |
|---|---|
|
Query改写 |
300ms |
|
向量检索 |
50ms |
|
重排序 |
200ms |
|
LLM生成 |
2000ms |
|
其他 |
450ms |
面试加分提示:提及你做过的具体优化数据,如"通过语义缓存将重复查询命中率从0提升到35%,整体P95延迟降低40%"。
Q13:如何设计面向10万+文档的企业级RAG系统?
核心要点:大规模企业RAG需要解决数据异构性、权限控制、增量更新、多租户隔离等工程挑战。
系统架构设计:
┌─────────────────────────────────────────┐
│ 接入层(多渠道统一) │
├─────────────────────────────────────────┤
│ 查询理解层(意图/改写/路由) │
├─────────────────────────────────────────┤
│ 检索层(多路召回+融合重排) │
├─────────────────────────────────────────┤
│ 知识库层(向量DB+全文索引+图谱) │
├─────────────────────────────────────────┤
│ 数据处理层(采集/解析/分块/入库) │
└─────────────────────────────────────────┘
关键设计决策:
-
数据解析:PDF用版式分析(如Docling),表格单独抽取为结构化数据
-
分块策略:按文档类型选择策略(FAQ小块、文档大块、代码按函数级)
-
权限控制:文档级打权限标签,检索后按用户角色过滤
-
增量更新:CDC(Change Data Capture)监听文档变更,增量更新索引
-
多租户:按业务线/部门做Collection隔离,共享底层基础设施
面试加分提示:企业级RAG的核心难点不在技术选型,而在数据治理-70%的时间花在处理数据质量、文档解析、权限映射上。
Q14:RAG与Fine-tuning如何选择?何时需要组合使用?
核心要点:RAG和Fine-tuning解决的是不同层面的问题-RAG补知识,Fine-tuning补能力。
|
维度 |
RAG |
Fine-tuning |
|---|---|---|
|
解决的问题 |
知识不够新/不够全 |
模型能力不够强/风格不对 |
|
更新成本 |
低(更新文档即可) |
高(需要重新训练) |
|
时效性 |
实时 |
依赖训练周期 |
|
适用场景 |
知识密集型QA |
特定领域/风格/格式 |
|
幻觉控制 |
强(有据可查) |
弱(仍可能编造) |
组合使用的场景:
-
先Fine-tune让模型理解领域术语,再RAG补充具体知识
-
Fine-tune优化模型遵循特定输出格式,RAG提供事实依据
-
例:医疗场景——Fine-tune让模型理解医学术语和回答规范,RAG提供最新诊疗指南内容
面试加分提示:2026年的新趋势是"RAG-aware Fine-tuning"-在微调时加入检索场景的训练数据,让模型学会更好地利用检索上下文。
Q15:RAG在企业落地时有哪些常见陷阱和应对之道?
核心要点:RAG落地的三大陷阱是数据质量被低估、评估体系缺失、用户预期管理不当。
陷阱一:数据质量被低估
-
表现:文档格式混乱、内容过时、重复冗余
-
应对:投入专项资源做数据清洗,建立文档质量评分机制,设立过期淘汰规则
陷阱二:评估体系缺失
-
表现:系统上线后无法量化效果,出问题后无法定位环节
-
应对:上线前建立测试集+自动化评估Pipeline,分环节(检索/生成)独立度量
陷阱三:用户预期过高
-
表现:用户期望RAG像人类专家一样100%准确
-
应对:明确系统能力边界,设计"不确定时拒答"机制,提供人工兜底通道
陷阱四:检索与生成割裂优化
-
表现:检索团队只看召回率,生成团队只看语言流畅度
-
应对:建立端到端评估指标,以最终答案正确率为北极星指标
面试加分提示:面试时讲一个你亲历的RAG落地问题及解决过程(如"发现检索召回率90%但最终答案准确率只有60%,排查发现是上下文太长导致模型注意力分散,通过限制输入片段数量解决"),远比背理论有说服力。
模块二:向量数据库与检索篇
Q1:向量数据库在AI系统中承担什么核心职责?
核心要点:向量数据库是AI系统的"语义记忆层",负责将非结构化数据的语义表示进行高效存储和相似性检索。
向量数据库解决的三个核心问题:
-
语义存储:将文本/图像等非结构化数据转化为高维向量后持久化
-
相似性检索:基于向量距离实现"找相似"而非"找相等"
-
大规模高效检索:通过ANN(近似最近邻)算法将检索复杂度从O(N)降至O(logN)
与传统数据库的本质区别:
|
维度 |
关系型数据库 |
向量数据库 |
|---|---|---|
|
数据形态 |
结构化行列 |
高维浮点向量 |
|
查询方式 |
精确匹配(WHERE =) |
近似匹配(TOP-K相似) |
|
索引结构 |
B+Tree/Hash |
HNSW/IVF/PQ |
|
典型应用 |
业务数据CRUD |
语义检索/推荐/去重 |
在AI Agent体系中的定位:向量数据库通常承载Agent的长期记忆(历史对话/经验)和知识库(RAG检索源),是Agent从"无状态对话"升级为"有记忆系统"的关键基础设施。
面试加分提示:面试中要强调向量数据库与关系型数据库是互补而非替代关系-结构化元数据存关系库,语义向量存向量库,查询时协同工作。
Q2:主流向量数据库如何选型?Milvus/Faiss/pgvector各自定位是什么?
核心要点:选型取决于数据规模、部署要求和团队技术栈-Milvus适合大规模生产,Faiss适合原型验证,pgvector适合PG生态集成。
|
数据库 |
定位 |
数据规模 |
部署方式 |
核心优势 |
|---|---|---|---|---|
|
Milvus |
专业向量数据库 |
十亿级 |
分布式/云原生 |
高性能、多索引、混合查询 |
|
Faiss |
向量检索库 |
千万级 |
单机嵌入式 |
算法丰富、零依赖、快速验证 |
|
pgvector |
PG扩展 |
百万级 |
随PG部署 |
复用PG生态、事务一致性 |
|
Qdrant |
云原生向量库 |
十亿级 |
单机/集群 |
Rust高性能、过滤友好 |
|
Weaviate |
AI原生数据库 |
亿级 |
集群 |
GraphQL接口、模块化 |
选型决策树:
-
数据<100万 + 已有PG → pgvector
-
原型验证/研究实验 → Faiss
-
生产环境 + 大规模 + 高并发 → Milvus/Qdrant
-
需要全文+向量混合检索 → Elasticsearch 8.x
面试加分提示:回答时要结合具体项目经验,如"我们项目用Milvus是因为数据量达到5000万向量且需要支持毫秒级查询,同时需要按部门做标量过滤"。
Q3:HNSW和IVF索引的原理和适用场景有什么区别?
核心要点:HNSW基于图导航实现高精度快查询,IVF基于聚类实现快构建快更新,二者在查询性能和数据动态性之间取舍。
HNSW(Hierarchical Navigable Small World):
-
原理:构建多层图结构,顶层稀疏用于快速定位区域,底层稠密用于精确查找
-
复杂度:构建O(N·logN),查询O(logN)
-
参数:
efConstruction(构建精度)、efSearch(查询精度)、M(最大连接数) -
特点:查询快且精度高,但内存开销大、构建慢、增量更新代价高
IVF(Inverted File Index):
-
原理:K-Means将向量空间聚类为nlist个Voronoi单元,查询时只搜索最近的nprobe个单元
-
复杂度:构建O(N·K·iter),查询O(N/nlist·nprobe)
-
参数:
nlist(聚类数)、nprobe(搜索单元数) -
特点:构建快、内存效率高、支持增量添加,但精度略低于HNSW
|
场景 |
推荐索引 |
原因 |
|---|---|---|
|
知识库RAG(数据相对固定) |
HNSW |
查询精度优先 |
|
用户行为向量(实时更新) |
IVF_FLAT/IVF_PQ |
需要频繁增量更新 |
|
超大规模(10亿+) |
IVF_PQ |
内存受限需要量化压缩 |
|
对精度要求极高(医疗/法律) |
FLAT(暴力搜索) |
精度100%,数据量<10万时可接受 |
面试加分提示:提及PQ(Product Quantization)量化可以配合IVF使用-将向量分段量化到码本,内存占用减少到原来的1/8-1/32。
Q4:向量相似度算法有哪些?如何选择?
核心要点:余弦相似度是文本语义检索的首选,欧氏距离适合已归一化的多模态场景,点积是归一化后余弦的等价加速版。
|
算法 |
公式 |
值域 |
特点 |
适用场景 |
|---|---|---|---|---|
|
余弦相似度 |
cos(θ) = A·B/(‖A‖·‖B‖) |
[-1, 1] |
对向量模长不敏感 |
文本语义匹配 |
|
欧氏距离 |
L2 = √Σ(ai-bi)² |
[0, +∞) |
受模长影响 |
图像特征、归一化向量 |
|
点积 |
IP = Σ(ai·bi) |
(-∞, +∞) |
最快,受模长影响 |
归一化向量的加速检索 |
|
曼哈顿距离 |
L1 = Σ |
ai-bi |
[0, +∞) |
关键洞察:当向量已经L2归一化时,余弦相似度 ≡ 点积 ≡ 欧氏距离的单调等价。所以工程实践中通常先对向量归一化,然后使用计算最快的IP(点积)作为度量。
面试加分提示:大部分Embedding模型(如OpenAI text-embedding-3)输出的向量已经做过归一化,此时直接用IP即可,无需额外计算cos分母。
Q5:如何利用元数据过滤提升检索效率和精度?
核心要点:元数据过滤通过在向量检索前/后施加标量条件,缩小搜索空间并提升结果相关性。
实现方式:
# Milvus示例:先过滤再向量检索
results = collection.search(
data=[query_vector],
anns_field="embedding",
param={"metric_type": "IP", "params": {"ef": 128}},
limit=10,
expr='category == "tech" and create_time > "2026-01-01"' # 元数据过滤
)
常用元数据字段设计:
|
字段 |
类型 |
用途 |
|---|---|---|
|
source |
string |
数据来源(官方/社区/第三方) |
|
category |
string |
文档分类 |
|
create_time |
timestamp |
创建时间,支持时效性过滤 |
|
access_level |
int |
权限等级 |
|
doc_id |
string |
关联原始文档 |
过滤策略:
-
Pre-filter(先过滤后检索):缩小向量检索范围,速度快,但过滤过严可能漏掉好结果
-
Post-filter(先检索后过滤):保证召回质量,但浪费计算资源在不合规结果上
面试加分提示:在权限敏感场景(如企业知识库),元数据过滤是必须的安全机制——确保用户只能检索到其权限范围内的文档。
Q6:向量数据库如何实现增量更新?有哪些策略保证服务不中断?
核心要点:增量更新需要平衡索引一致性、查询性能和服务可用性,常用双索引切换实现无缝过渡。
三种更新策略:
|
策略 |
实现方式 |
优缺点 |
|---|---|---|
|
全量重建 |
定期从头构建新索引 |
简单但耗时,适合数据量小/更新不频繁 |
|
增量追加 |
新数据直接append,删除做soft-delete |
快速但索引碎片化,需定期compaction |
|
双索引切换 |
后台构建新索引,完成后原子切换 |
零停机但需要双倍存储空间 |
工程最佳实践:
-
日常变更用增量追加(实时性好)
-
周末/低峰期做全量重建(消除碎片)
-
大批量数据导入时用双索引切换(服务不中断)
Milvus增量更新流程:
1. 新文档入库 → 自动分配到Growing Segment
2. Growing Segment满 → 自动Seal并构建索引
3. 删除文档 → 标记为Deleted,查询时自动跳过
4. 后台Compaction → 清理已删除数据,合并小Segment
面试加分提示:提及CDC(Change Data Capture)机制-通过监听数据源的binlog/oplog实现文档变更的实时感知和增量同步。
Q7:如何排查向量检索结果不相关的问题?
核心要点:检索质量问题通常出在Embedding模型不匹配、分块粒度不当、索引配置不合理三个环节。
系统化排查流程:
1. 复现问题:确定是个案还是普遍现象
↓
2. 检查Embedding:对比Query向量与期望文档向量的相似度
↓
3. 检查分块:期望答案所在段落是否被正确切分
↓
4. 检查索引:HNSW参数是否合理(efSearch太小?)
↓
5. 检查过滤:是否被元数据过滤错误排除
常见问题及解法:
|
问题 |
诊断方法 |
解法 |
|---|---|---|
|
Embedding不适配领域 |
在业务数据上测Recall@10 |
换用领域模型或微调 |
|
分块切断了答案 |
人工检查目标答案的分布 |
调整分块策略/增加overlap |
|
索引精度损失 |
对比暴力搜索结果 |
增大efSearch/nprobe |
|
Query与文档表述差异大 |
人工对比语义 |
引入Query改写/HyDE |
面试加分提示:建立一个"检索诊断工具"-输入Query后自动展示向量相似度分布、Top-K结果、与暴力搜索的差异,快速定位问题环节。
Q8:向量数据库的性能优化有哪些关键手段?
核心要点:性能优化需从索引参数调优、查询路径优化、架构层水平扩展三层递进。
层级一:索引参数调优
-
HNSW:增大M(连接数)提升精度但增加内存;增大efSearch提升召回但增加延迟
-
IVF:增大nlist减少每个簇的数据量;增大nprobe提升精度但增加计算
-
量化:PQ/SQ压缩向量减少IO,精度损失<5%
层级二:查询路径优化
-
热点缓存:LRU缓存高频Query结果
-
批量检索:合并相似Query减少IO次数
-
异步加载:Segment按需加载到内存
层级三:架构优化
-
读写分离:写入走Leader节点,查询走多个Replica
-
分片策略:按数据特征(时间/类别)分片,检索时只查相关分片
-
就近部署:向量数据库与应用服务同Region部署减少网络延迟
性能基准参考(Milvus,128维,100万向量):
|
配置 |
QPS |
P99延迟 |
|---|---|---|
|
HNSW, ef=64 |
3000+ |
<10ms |
|
IVF_FLAT, nprobe=16 |
5000+ |
<5ms |
|
IVF_PQ, nprobe=16 |
8000+ |
<3ms |
面试加分提示:性能优化前先做profiling-用Milvus的metrics接口或Prometheus监控定位瓶颈是CPU(向量计算)还是IO(数据加载)。
Q9:多Agent场景下,向量数据库如何设计共享与隔离?
核心要点:多Agent共享向量数据库需要在数据隔离、并发控制、权限管理三方面做好设计。
架构设计方案:
┌─────────────────────────────────┐
│ API Gateway(鉴权/限流) │
├────────────┬────────────────────┤
│ Agent A │ Agent B │ Agent C │
├────────────┴────────────────────┤
│ 向量数据库服务(多Collection) │
│ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │Col_A │ │Col_B │ │Shared│ │
│ └──────┘ └──────┘ └──────┘ │
└─────────────────────────────────┘
隔离策略:
-
Collection级隔离:每个Agent独立Collection,完全隔离
-
Partition级隔离:同Collection不同Partition,共享Schema
-
元数据标记隔离:同Collection用tenant_id字段区分
并发控制:
-
读多写少场景:无锁读 + 写入队列化
-
写入冲突:乐观锁 + 版本号
面试加分提示:企业场景推荐Collection级隔离-虽然管理复杂度高,但数据安全性最好,且不同Agent的负载不会互相影响。
Q10:向量数据库如何支持多模态数据的统一检索?
核心要点:通过多模态Embedding模型将不同类型数据映射到统一向量空间,实现跨模态语义检索。
实现路径:
-
统一Embedding空间:使用CLIP等对比学习模型,将文本和图像编码到同一向量空间
-
类型标记:元数据中标注数据模态(text/image/audio)
-
统一检索:Query向量在同一空间中检索,自然匹配跨模态结果
# 多模态统一检索示例
from transformers import CLIPModel, CLIPProcessor
model = CLIPModel.from_pretrained("openai/clip-vit-large-patch14")
# 文本查询 -> 向量
text_vec = model.get_text_features(text_inputs)
# 图片文档 -> 向量(入库时)
image_vec = model.get_image_features(image_inputs)
# 同一空间内相似度检索
挑战与解决:
-
不同模态向量质量不一致 → 加权融合或分模态检索后合并
-
维度不统一 → 投影层对齐到相同维度
面试加分提示:2026年趋势是"Any-to-Any"检索-用户可以用文本搜图片、用图片搜文本、用语音搜文档,底层都是统一向量空间内的相似性匹配。
模块三:AI Agent设计与实现篇
Q1:大语言模型(LLM)和AI Agent的本质区别是什么?
核心要点:LLM是"能思考的大脑",Agent是"有手有脚有记忆的完整体"-Agent = LLM + 工具调用 + 记忆管理 + 自主规划。
|
维度 |
纯LLM |
AI Agent |
|---|---|---|
|
能力边界 |
只能输出文本 |
可执行实际操作 |
|
知识时效 |
固化在参数中 |
可实时查询外部 |
|
状态管理 |
无状态/短期上下文 |
长短期记忆系统 |
|
决策方式 |
单次响应 |
循环推理决策 |
|
举例 |
"查天气试试XX App" |
调API获取天气→判断→修改日程→通知用户 |
LLM的四大天花板正好对应Agent四个模块的补位:
-
只会说不会做 → 工具调用(Tool Use)
-
没有记忆 → 记忆系统(Memory)
-
知识有截止 → 外部知识接入(RAG/Search)
-
不会规划 → 规划引擎(Planning)
面试加分提示:Anthropic官方建议"能用Workflow就别用Agent"-Agent的灵活性以可预测性和成本为代价,简单任务用确定性流程更稳定。
Q2:Agent和Workflow的边界在哪?实际系统中如何混合使用?
核心要点:Workflow的控制权在开发者编写的代码中,Agent的控制权交给LLM决策-前者确定性高成本低,后者灵活性强但不可预测。
|
维度 |
Workflow |
Agent |
|---|---|---|
|
控制权 |
代码确定 |
LLM动态决策 |
|
Token消耗 |
1x(基准) |
4-8x |
|
可预测性 |
高(路径确定) |
低(路径动态) |
|
调试难度 |
低 |
高 |
|
适用任务 |
流程固定、规则明确 |
开放式、需要推理判断 |
生产系统的混合架构:
用户请求 → 意图分类(简单规则/LLM)
├── 简单问题 → Workflow流程(确定性Pipeline)
├── 中等问题 → Workflow+单步Agent(局部灵活)
└── 复杂问题 → 全Agent模式(多步推理)
这种"分层路由"架构在实际系统中非常常见:80%的请求走Workflow即可处理(成本低),只有20%复杂请求才启动Agent(保证质量)。
面试加分提示:面试中讲出"我们系统中Agent和Workflow的流量比例是2:8"这种具体数据,比纯理论对比更有说服力。
Q3:ReAct模式的执行机制是什么?如何防止运行时死循环?
核心要点:ReAct是"思考→行动→观察"的交替循环模式,需通过最大步数、重复检测、超时三重保护防止失控。
ReAct执行流程:
Thought: 分析当前任务,决定下一步行动
Action: 选择工具并填入参数
Observation: 获取工具执行结果
Thought: 基于结果判断是否完成
...(循环直到输出Final Answer)
防死循环三重保护机制:
class ReActAgent:
def run(self, task, max_steps=15, max_time=120):
steps = 0
seen_actions = []
start_time = time.time()
while steps < max_steps:
# 超时保护
if time.time() - start_time > max_time:
return self.graceful_exit("超时终止")
thought, action = self.llm_reason(task, history)
# 重复检测:连续3次相同动作视为死循环
if action in seen_actions[-3:]:
return self.summarize_with_available_info()
seen_actions.append(action)
observation = self.execute_tool(action)
steps += 1
return self.graceful_exit("达到最大步数")
|
保护机制 |
参数建议 |
作用 |
|---|---|---|
|
最大步数 |
10-20步 |
防无限循环 |
|
重复检测 |
连续3次相同 |
识别震荡 |
|
超时控制 |
60-180秒 |
兜底保护 |
面试加分提示:高级做法是"指数退避+降级"-第1次重复时调整策略,第2次时切换工具,第3次直接基于已有信息生成最终回答。
Q4:Function Calling的底层实现原理是什么?
核心要点:LLM本身不执行函数,它只负责输出结构化的"调用意图"JSON指令,真正的执行由外部代码完成。
四步协作流程:
|
步骤 |
执行者 |
内容 |
|---|---|---|
|
1. 定义工具 |
开发者 |
用JSON Schema描述函数名、参数、返回类型 |
|
2. 生成调用指令 |
LLM |
根据用户意图输出结构化JSON(函数名+参数值) |
|
3. 解析并执行 |
应用代码 |
解析JSON,调用对应真实API/函数 |
|
4. 回传结果 |
应用代码 |
将执行结果作为新消息传回LLM |
# 工具定义示例
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取指定城市的天气信息",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名称"},
"date": {"type": "string", "description": "日期,格式YYYY-MM-DD"}
},
"required": ["city"]
}
}
}]
关键技术细节:
-
Parallel Function Call:新一代模型支持单次返回多个工具调用,并行执行后批量回传
-
Structured Output:通过JSON Schema约束模型输出格式,保证可解析
-
工具描述质量:描述越清晰准确,模型调用越正确-这本质上是"Prompt Engineering for Tools"
面试加分提示:强调工具描述是关键-模型选择调用哪个工具、传什么参数,完全依赖description字段的语义。
Q5:Agent的记忆系统如何架构设计?
核心要点:Agent记忆分为工作记忆(上下文窗口)、短期记忆(会话级)、长期记忆(跨会话持久化)三层,各层存储介质和管理策略不同。
三层记忆架构:
|
层级 |
存储 |
容量 |
生命周期 |
用途 |
|---|---|---|---|---|
|
工作记忆 |
LLM上下文窗口 |
128K tokens |
单次推理 |
当前对话+工具结果 |
|
短期记忆 |
Redis/内存 |
无限 |
单次会话 |
多轮对话历史、任务状态 |
|
长期记忆 |
向量DB+关系DB |
无限 |
永久 |
用户偏好、历史经验、知识 |
记忆管理策略:
-
滑动窗口:保留最近N轮对话,超出则丢弃最旧的
-
摘要压缩:用LLM将旧对话压缩为摘要,释放上下文空间
-
重要性过滤:只持久化关键信息(决策结果、用户偏好),过滤过程性细节
class AgentMemory:
def compress_if_needed(self):
if self.token_count > self.max_tokens * 0.8:
old_messages = self.messages[:-10] # 保留最近10条
summary = llm.summarize(old_messages)
self.long_term_store.add(summary) # 归档到长期记忆
self.messages = [{"role": "system", "content": summary}] + self.messages[-10:]
面试加分提示:提及记忆检索的核心挑战-长期记忆中什么时候检索、检索什么、检索多少,需要根据当前任务的语义相关性动态决定。
Q6:Multi-Agent系统有哪些典型协作模式?
核心要点:多Agent协作的三种基本范式是监督者模式(中心化调度)、流水线模式(顺序传递)、辩论模式(对等协商)。
|
模式 |
架构 |
适用场景 |
优缺点 |
|---|---|---|---|
|
监督者(Supervisor) |
1个协调者+N个Worker |
任务可分解、需统一决策 |
灵活但协调者是瓶颈 |
|
流水线(Pipeline) |
Agent1→Agent2→Agent3 |
处理有明确先后顺序 |
简单清晰但不灵活 |
|
辩论(Debate) |
多Agent平等讨论 |
需要多角度分析 |
质量高但Token消耗大 |
|
层级(Hierarchical) |
多级管理者+执行者 |
大型复杂系统 |
可扩展但延迟高 |
监督者模式实现:
# LangGraph实现Supervisor模式
class SupervisorAgent:
def route(self, state):
# 分析任务,决定分配给哪个Worker
decision = llm.decide(
task=state["task"],
workers=["researcher", "coder", "reviewer"]
)
return decision.next_worker
def aggregate(self, state):
# 汇总各Worker结果,生成最终回答
return llm.synthesize(state["worker_results"])
面试加分提示:实际生产中Multi-Agent最大的挑战不是技术实现,而是Agent间通信的token成本和总延迟-每增加一个Agent通常增加2-5秒延迟。
Q7:如何赋予Agent规划能力?Plan-and-Execute模式的优势是什么?
核心要点:Plan-and-Execute将规划和执行解耦-先生成完整计划再逐步执行,相比ReAct可节省约80%的重复推理Token。
ReAct vs Plan-and-Execute对比:
|
维度 |
ReAct |
Plan-and-Execute |
|---|---|---|
|
规划粒度 |
每步即时决策 |
预先生成完整计划 |
|
Token消耗 |
高(每步都传完整上下文) |
低(规划一次,执行复用) |
|
灵活性 |
高(随时调整) |
中(需要重新规划) |
|
适用任务 |
不确定性高的探索性任务 |
步骤可预见的多步任务 |
Plan-and-Execute流程:
1. Planner Agent:分析任务,生成有序步骤列表
2. Executor Agent:按顺序执行每个步骤
3. Replanner(可选):执行中遇到意外时重新规划
实际效果:在"撰写一份竞品分析报告"这类复杂任务上,Plan-and-Execute比纯ReAct节省60-80%的Token,同时保持相当的完成质量。
面试加分提示:最佳实践是混合模式-先Plan-and-Execute做宏观规划,每个子步骤内部用ReAct处理细节和意外情况。
Q8:Agent的反思(Reflection)机制如何实现?
核心要点:反思机制让Agent在生成初步结果后进行自我审查和迭代优化,形成"生成→评估→改进"的质量提升闭环。
Reflection流程:
初始生成 → 自我评估(发现问题) → 改进生成 → 再次评估 → ... → 满意则输出
实现方式:
def reflection_loop(task, max_iterations=3):
result = llm.generate(task)
for i in range(max_iterations):
critique = llm.evaluate(
task=task,
result=result,
prompt="审查以下输出,指出存在的问题和改进方向"
)
if critique.is_satisfactory:
return result
result = llm.improve(
task=task,
previous_result=result,
critique=critique.feedback
)
return result
Reflection与Reflexion的区别:
-
Reflection:单次任务内的自我改进循环
-
Reflexion:跨任务的经验学习-将失败经验存入记忆,下次避免重复错误
面试加分提示:Reflection最适合代码生成、写作优化等"输出质量可自评"的场景。关键是评估Prompt要足够具体(不能只说"检查有没有问题",要指明检查哪些方面)。
Q9:如何设计Agent的工具权限管理和安全边界?
核心要点:Agent工具安全需遵循最小权限原则,高危操作必须设置人工审批(Human-in-the-Loop)。
安全分级框架:
|
风险等级 |
操作类型 |
控制策略 |
|---|---|---|
|
低风险 |
只读查询(搜索、查数据库) |
自动执行 |
|
中风险 |
有限写入(创建草稿、发通知) |
自动执行+审计日志 |
|
高风险 |
重要写入(修改配置、发邮件) |
用户确认后执行 |
|
极高风险 |
不可逆操作(删数据、转账) |
多人审批 |
实现机制:
-
工具白名单:Agent只能调用预注册的工具
-
参数校验:工具执行前校验参数合法性
-
执行沙箱:代码执行类工具在隔离环境运行
-
操作审计:所有工具调用留痕可追溯
面试加分提示:在面试中提及"我们系统中删除操作需要用户二次确认,转账超过1000元需要主管审批"这类具体的安全策略设计。
Q10:你如何评估一个Agent系统的好坏?有哪些关键指标?
核心要点:Agent评估需覆盖任务完成度、效率指标、安全合规和用户体验四个维度。
|
维度 |
指标 |
目标值示例 |
|---|---|---|
|
任务完成 |
任务成功率 |
>85% |
|
任务完成 |
步骤正确率 |
>90% |
|
效率 |
平均完成步数 |
<理论最优的1.5倍 |
|
效率 |
平均Token消耗 |
可控范围内 |
|
安全 |
工具调用正确率 |
>99% |
|
安全 |
幻觉工具调用率 |
<1% |
|
体验 |
端到端延迟 |
<30s(P95) |
|
体验 |
用户满意度 |
>4.0/5.0 |
评估方法:
-
自动化测试集:构建100+标准化任务,自动执行并验证结果
-
Human Eval:定期抽样人工评审Agent的决策质量
-
A/B测试:新旧版本在真实流量上对比核心指标
面试加分提示:Agent评估最难的是"创意性任务"的自动化评测-对于"帮我做一份PPT"这类主观任务,目前最可靠的方法仍是LLM-as-Judge加上人工校验。
Q11:在实际项目中,你会"手搓"Agent还是使用框架?决策依据是什么?
核心要点:框架适合快速验证和标准场景,手搓适合对可控性/性能有极致要求的生产系统。
|
考虑因素 |
选择框架 |
选择手搓 |
|---|---|---|
|
开发速度 |
快速原型验证 |
可以接受较长开发周期 |
|
可控性 |
标准流程足够 |
需要精确控制每个决策点 |
|
性能要求 |
延迟要求宽松 |
极致延迟优化 |
|
团队技术栈 |
团队熟悉LangChain等 |
团队有能力自研 |
|
定制需求 |
标准功能满足 |
高度定制化Agent行为 |
实际做法:大多数团队采用"框架验证→核心自研"路径-先用LangChain/LangGraph快速验证方案可行性,确认可行后将核心链路(推理循环、工具调度)自研以获得更好的可控性和性能。
面试加分提示:答案不是非此即彼-"我们用LangGraph编排多Agent协作流程,但推理核心是自研的,因为需要精确控制Token预算和错误恢复逻辑"。
Q12:什么是Self-RAG?它相比普通Agentic RAG有什么改进?
核心要点:Self-RAG让模型自主判断何时需要检索、检索结果是否有用、生成内容是否忠实,实现检索增强的全自动化闭环。
Self-RAG的核心能力:
-
检索判断:模型自主决定当前是否需要检索(而非每次都检索)
-
相关性评估:判断检索到的内容是否与问题相关
-
忠实度自检:检查生成内容是否严格基于检索证据
-
有用性评估:评估最终答案对用户的有用程度
与普通Agentic RAG的区别:
-
普通Agentic RAG:Agent通过外部工具链决定检索策略
-
Self-RAG:模型内部通过特殊token直接输出判断结果,无需外部编排
Self-RAG的降级策略(防死循环):
检索 → 评估相关性
├── 相关 → 生成 → 自检忠实度 → 通过 → 输出
├── 相关 → 生成 → 自检忠实度 → 未通过 → 重新生成(max 2次)
└── 不相关 → 改写Query重新检索(max 2次) → 仍不相关 → 降级回答
面试加分提示:Self-RAG的论文发表于2023年底,2024-2025年逐步在生产系统中落地。面试时提及这一前沿技术体现你对最新研究的跟踪。
模块四:协议体系篇(MCP/A2A/AG-UI)
Q1:MCP(Model Context Protocol)的核心设计理念是什么?
核心要点:MCP是Anthropic提出的"AI的USB-C接口"-标准化AI模型与外部工具的连接协议,将N×M的集成复杂度降为N+M。
问题背景:
-
无MCP:10个AI应用 × 20个工具 = 200套集成代码
-
有MCP:10个应用适配MCP + 20个工具适配MCP = 30套代码
MCP三角色架构:
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Host │◄──►│ Client │◄──►│ Server │
│ (AI应用) │ │ (协议层) │ │ (工具方) │
└──────────┘ └──────────┘ └──────────┘
-
Host:AI应用(如Claude Desktop、IDE Agent)
-
Client:协议中间层,负责请求转发和协议翻译
-
Server:工具能力提供方(如GitHub API、数据库、文件系统)
MCP核心能力:
-
动态工具发现:Agent启动时发送
tools/list获取可用工具列表 -
资源访问:标准化的数据读取接口
-
Prompt模板:Server可提供预定义的Prompt模板
-
采样请求:Server可请求Host执行LLM推理
面试加分提示:截至2026年MCP生态已有3000+工具接入,成为事实标准。面试中要展示你对MCP实际使用(而非仅知道概念)的了解。
Q2:MCP在安全层面有哪些隐患?如何防范?
核心要点:MCP的开放性带来供应链攻击、权限越界、信息泄露三类安全风险,需通过白名单+沙箱+最小权限组合防御。
|
安全风险 |
攻击方式 |
防范措施 |
|---|---|---|
|
供应链攻击 |
恶意MCP Server伪装为正常工具 |
Server白名单+签名验证 |
|
权限越界 |
Server访问超出授权范围的数据 |
最小权限原则+能力声明 |
|
信息泄露 |
敏感数据通过工具调用被外传 |
数据脱敏+网络隔离 |
|
上下文污染 |
恶意Server返回注入指令 |
返回值消毒+隔离标记 |
|
资源耗尽 |
Server返回超大数据挤占上下文 |
返回长度限制+按需加载 |
企业级MCP安全最佳实践:
-
维护经审计的Server白名单
-
生产环境禁用未知来源的MCP Server
-
每个Server声明所需最小权限,Host端执行权限校验
-
所有工具调用记录审计日志
-
高危操作(写入/删除)要求二次确认
面试加分提示:提及"Prompt Injection via MCP"-恶意Server可能在返回结果中嵌入操纵LLM行为的指令,这是当前MCP安全的最前沿议题。
Q3:A2A(Agent-to-Agent)协议解决什么问题?与MCP有何本质不同?
核心要点:MCP解决Agent与工具的纵向连接,A2A解决Agent与Agent之间的横向协作-二者是互补关系而非替代。
A2A的核心设计:
-
Agent Card:每个Agent发布自描述卡片(能力、接口、认证方式)
-
Task生命周期:提交→处理中→完成/失败,支持长时间异步任务
-
Streaming Updates(2026年v1.1新增):任务进度实时推送
MCP vs A2A对比:
|
维度 |
MCP |
A2A |
|---|---|---|
|
连接方向 |
Agent ↔ 工具(纵向) |
Agent ↔ Agent(横向) |
|
发起方 |
Agent发起工具调用 |
Agent间对等协作 |
|
通信模式 |
请求-响应 |
任务提交-状态查询 |
|
典型场景 |
调API、查数据库 |
跨组织Agent协作 |
|
提出方 |
Anthropic |
|
|
生态规模 |
3000+ Tools |
100+ Agents |
A2A使用场景:企业A的"客户分析Agent"需要调用企业B的"信用评估Agent"-两个Agent无法共享底层工具,但可以通过A2A协议交换任务和结果。
面试加分提示:面试时的记忆口诀-"MCP管纵向连接(Agent调工具),A2A管横向连接(Agent间对话),AG-UI管前端呈现(Agent到界面)"。
Q4:AG-UI协议的定位和适用场景是什么?
核心要点:AG-UI(Agent-User Interface)解决AI Agent输出到用户界面的标准化渲染问题,让Agent能直接操控前端UI元素。
AG-UI的核心能力:
-
Agent可以声明性地描述UI状态变更
-
前端根据Agent输出自动渲染交互界面
-
支持流式UI更新(打字机效果、进度条、表格逐步填充)
-
标准化的用户输入回传机制
典型应用场景:
-
Agent生成图表时,不是返回文本描述,而是直接推送图表数据到前端渲染
-
Agent需要用户确认时,推送交互式确认按钮而非文字提问
-
多步骤任务进度实时展示
三大协议的分工定位:
用户界面 ←─[AG-UI]──── Agent ────[MCP]──→ 工具/数据
│
[A2A]
│
其他Agent
面试加分提示:AG-UI目前(2026年)成熟度相对MCP和A2A较低,但代表了未来Agent与用户交互的方向-从"纯文本对话"到"富交互应用"。
Q5:MCP的动态工具发现机制是如何工作的?
核心要点:Agent启动时通过tools/list接口自动扫描所有注册的MCP Server,运行时动态获取可用工具列表,无需重新部署即可获得新能力。
动态发现流程:
1. Agent启动 → 读取MCP Server配置列表
2. 向每个Server发送 tools/list 请求
3. Server返回:工具名称、描述、参数Schema
4. Agent将所有工具描述整合到System Prompt
5. 用户请求到达 → LLM基于工具描述选择合适工具
6. 新Server上线 → Agent下次刷新时自动发现
工程挑战与解决:
-
上下文爆炸:工具描述太多占满上下文 → 按需加载(只加载与当前任务相关的工具描述)
-
版本兼容:Server升级导致接口变化 → 版本锁定+兼容性声明
-
性能开销:启动时请求多个Server耗时 → 本地缓存+增量更新
面试加分提示:动态发现是MCP相比传统集成最大的优势-新增一个工具只需部署一个MCP Server,所有Agent自动获得该能力,无需修改Agent代码。
Q6:如何设计支持MCP的企业级工具网关?
核心要点:企业级MCP网关需在标准MCP协议基础上增加鉴权、限流、审计、版本管理等企业级能力。
网关架构:
Agent → MCP Gateway → MCP Server集群
│
┌─────┼─────┐
│ │ │
鉴权 限流 审计
核心能力:
|
能力 |
实现方式 |
|---|---|
|
鉴权 |
OAuth2/API Key + 工具级权限控制 |
|
限流 |
按Agent/按工具/按用户多维度限流 |
|
审计 |
全量调用日志 + 敏感操作告警 |
|
路由 |
相同工具多实例负载均衡 |
|
降级 |
Server不可用时自动切换备用 |
|
版本 |
多版本Server并存,灰度切换 |
面试加分提示:实际企业中MCP Server的管理和传统微服务治理类似-服务注册/发现/健康检查/灰度发布那套方法论都适用。
Q7:三大协议(MCP/A2A/AG-UI)在一个完整产品中如何协同?
核心要点:三大协议分别覆盖AI系统的工具层、协作层和展示层,完整产品需要三者协同配合。
以"智能客服系统"为例:
用户界面(Web/App)
│ [AG-UI: 流式消息推送、交互式表单]
▼
客服Agent
│ [MCP: 查订单数据库、调物流API]
│ [A2A: 转给专家Agent处理复杂问题]
▼
┌───────────────────────────┐
│ 订单Server 物流Server FAQ Server │ ← MCP Servers
│ 专家Agent 质检Agent │ ← A2A Partners
└───────────────────────────────────┘
协同模式:
-
用户通过AG-UI协议发送消息
-
客服Agent通过MCP调用业务工具(查订单、查物流)
-
遇到专业问题通过A2A转交给专家Agent
-
结果通过AG-UI实时流式推送给用户
面试加分提示:面试时画出这样的架构图并解释三层协议的分工,比单独解释每个协议更能展示架构设计能力。
Q8:2026年协议体系的发展趋势和挑战是什么?
核心要点:协议体系正从单一标准竞争走向互操作融合,核心挑战是安全性、互操作性和性能。
发展趋势:
-
MCP生态持续扩大:从Coding场景扩展到全行业(金融/医疗/教育)
-
A2A走向标准化:Google推动v1.1加入流式任务更新,与MCP互补而非竞争
-
协议间桥接:出现MCP-to-A2A Bridge,让工具Server也能以Agent身份被调用
-
安全标准制定:MCP安全审计框架、Server认证机制逐步完善
核心挑战:
-
互操作性:不同协议版本间的兼容
-
安全性:开放生态下的供应链安全
-
性能:协议层overhead对延迟的影响
-
治理:企业如何管理数百个MCP Server
面试加分提示:这个领域变化极快,面试时展示你对最新动态的了解(如"A2A 1.1的Streaming Task Updates")比记住所有细节更重要。
模块五:Agent Skills技能体系篇
Q1:什么是Agent Skills?它在AI应用体系中处于什么位置?
核心要点:Skills是为AI Agent定制的"标准操作手册"(SOP),让Agent从"通用助手"变为"领域专家",大幅提升特定任务的执行质量和一致性。
类比理解:
-
Prompt是顾客的临时点单-每次都得重新描述需求
-
Skills是厨师的秘制菜谱-固化了操作流程和质量标准,一触即用
-
MCP是厨房的工具和食材-提供了执行能力
-
Agent是厨师本人-有了菜谱和工具,才能高效稳定出品
Skills的本质价值:将重复性的工作流程、团队隐性知识、最佳实践固化为可复用的结构化指令,Agent加载后即可按标准化流程执行,不再依赖用户每次编写复杂Prompt。
2026年Skills已成为主流Agent产品(Claude Code、OpenClaw、Cursor等)的标配能力,被称为"Agent领域最重要的创新之一"。
面试加分提示:用一句话总结-"模型是大脑,Agent是躯体,Skills是肌肉记忆"。Skills让Agent从每次都需要培训的"实习生"变成了开箱即用的"老员工"。
Q2:SKILL.md的架构设计是怎样的?各部分的职责是什么?
核心要点:SKILL.md由YAML元数据(路由触发)+ Markdown指令(执行流程)两部分组成,是Skills的唯一必选文件。
标准文件结构:
skill-name/
├── SKILL.md # 必选:核心指令文件
├── scripts/ # 可选:可执行代码脚本
├── references/ # 可选:参考文档(API文档、规范等)
└── assets/ # 可选:资源素材(模板、图片等)
SKILL.md内部结构:
---
name: security-code-review
description: 审查代码的安全漏洞和最佳实践。当用户要求"审查代码"、"检查安全"、"分析漏洞"时使用。
---
# 安全代码审查
## 任务目标
[明确该Skill的核心功能和产出物]
## 执行步骤
[分步骤的具体操作指引]
## 输出规范
[输出格式、质量标准]
## 约束条件
[禁止事项、边界声明]
各部分职责:
|
部分 |
职责 |
加载时机 |
|---|---|---|
|
YAML name |
Skill唯一标识 |
始终在上下文 |
|
YAML description |
触发路由判断 |
始终在上下文 |
|
Markdown主体 |
核心执行指引 |
Skill被触发后加载 |
|
scripts/ |
可执行代码 |
按需调用 |
|
references/ |
参考知识 |
按需读取 |
面试加分提示:description字段是决定Skill能否被正确触发的关键-写法要覆盖用户可能的表达方式,如同搜索引擎的关键词优化。
Q3:渐进式披露(Progressive Disclosure)机制如何工作?为什么这个设计至关重要?
核心要点:渐进式披露将Skill信息分三层加载,避免一次性塞满上下文窗口,实现"平时不占脑容量,需要时才占用"的高效内存管理。
三层加载机制:
|
层级 |
内容 |
加载时机 |
占用预算 |
|---|---|---|---|
|
第一层 |
name + description |
始终常驻上下文 |
~100 tokens/skill |
|
第二层 |
SKILL.md主体 |
触发后加载 |
<5000 tokens |
|
第三层 |
scripts/references/assets |
执行中按需加载 |
无上限 |
为什么至关重要:
-
假设系统有50个Skills,每个SKILL.md平均3000 tokens
-
全部加载:50×3000 = 150,000 tokens(远超多数模型上下文)
-
渐进式:50×100 + 1×3000 = 8,000 tokens(仅触发1个Skill时)
这相当于从"把所有教材搬到桌上"优化为"书架上放着,需要时取一本翻看"。
面试加分提示:这个设计理念可以推广到所有AI系统的上下文管理-永远按需加载而非全量灌入,这是工程中平衡能力和效率的核心思想。
Q4:如何编写高质量的description字段确保Skill被准确触发?
核心要点:description是Skill的"搜索关键词",需覆盖功能定义+触发场景+关键词变体,让Agent路由机制能准确匹配用户意图。
"黄金结构"公式:[核心功能描述] + [具体执行动作] + [触发关键词/场景]
对比示例:
|
质量 |
description写法 |
|---|---|
|
❌ 差 |
"帮助处理文档" |
|
❌ 中 |
"PDF文档处理工具" |
|
✅ 好 |
"从PDF中提取文本、表格和元数据,支持合并拆分。当用户处理PDF文件、转换PDF为文本、填写表单、或上传PDF要求摘要/提取时使用。" |
核心策略:
-
模拟用户表达:想象用户会怎么提需求,把这些关键词都包含进去
-
使用祈使句:写成"从PDF中提取..."而非"你帮我从PDF中..."
-
明确触发条件:使用"当用户...时使用"的句式
-
控制长度:不超过500字,关键信息前置
面试加分提示:如果一个Skill从未被触发,90%的原因是description写得不够具体。调试时可以观察Agent的路由日志,看它为什么没选中你的Skill。
Q5:Skills与Prompt、MCP、Agent各自的职责边界是什么?
核心要点:四者形成完整的AI能力栈-Agent是执行主体,Skills提供流程知识,MCP提供工具能力,Prompt传达即时意图。
|
概念 |
角色比喻 |
核心作用 |
持久性 |
|---|---|---|---|
|
Prompt |
临时口头指令 |
传达当次需求 |
一次性 |
|
Skills |
员工操作手册 |
固化流程和标准 |
持久化 |
|
MCP |
工具箱和物料仓库 |
提供执行能力 |
持久化 |
|
Agent |
执行者本人 |
理解→规划→执行 |
运行时 |
协作关系:
用户发出Prompt → Agent理解意图 → 匹配合适的Skill → 按Skill流程执行 → 通过MCP调用工具 → 返回结果
一个SKILL.md实际上整合了:
-
精细化的Prompt(目标和约束)
-
工具使用规范(何时调什么工具)
-
执行顺序编排(步骤1-2-3-4)
-
质量检查标准(输出验证)
面试加分提示:面试时用"预制菜vs现炒"的比喻-Skills是提前调好味道的预制菜,Prompt是现场点的定制菜。预制菜出品稳定快速,定制菜灵活但品质不稳定。
Q6:创建一个生产级Skill的完整流程是什么?
核心要点:生产级Skill的创建遵循"明确边界→构建结构→编写指令→测试迭代"四阶段方法论。
阶段一:明确需求与边界
-
这个Skill解决什么具体问题?(单一职责原则)
-
什么场景触发?什么场景不该触发?
-
需要什么外部资源?(脚本、文档、素材)
阶段二:构建文件结构
mkdir -p my-skill/{scripts,references,assets}
touch my-skill/SKILL.md
存放位置选择:
|
类型 |
路径 |
使用范围 |
|---|---|---|
|
个人 |
~/.claude/skills/ |
仅自己使用 |
|
项目 |
.claude/skills/ |
团队共享 |
|
插件 |
通过市场安装 |
跨项目通用 |
阶段三:编写核心指令
-
使用编号列表描述执行步骤(Agent对结构化内容遵循度远高于段落文字)
-
包含至少3条硬性约束(使用"必须""严禁"等绝对化词汇)
-
提供1-2个输出示例(显著降低结果随机性)
阶段四:测试与迭代
-
路径检查:确认文件位置正确
-
触发测试:用自然语言提问,验证是否被识别
-
执行验证:检查输出是否符合预期
-
持续积累"常见陷阱"章节
面试加分提示:研究表明,包含明确约束+输出示例的Skill,结果稳定性提升约60%。"常见陷阱"章节是Skill最有价值的部分-持续积累Agent的失败模式。
Q7:Skill的测试和调试有哪些方法?
核心要点:Skill调试需覆盖"能否被触发"和"执行是否正确"两个层面,可通过日志分析和渐进式测试定位问题。
调试清单:
|
问题 |
排查方向 |
解法 |
|---|---|---|
|
Skill未触发 |
description不匹配 |
检查关键词覆盖度 |
|
触发了错误的Skill |
多Skill描述重叠 |
明确各Skill边界 |
|
执行偏离预期 |
指令不够明确 |
增加约束条件和示例 |
|
部分步骤跳过 |
步骤表述模糊 |
改为强制性编号列表 |
|
资源文件未加载 |
路径引用错误 |
检查相对路径正确性 |
渐进式测试法:
-
先测最简单的case,确认基本流程通
-
再测边界case(空输入、超长输入、异常输入)
-
最后测触发冲突(与其他Skill的区分度)
调试工具:运行claude --debug可查看详细的Skill加载日志,包括哪些Skill被考虑、为什么选中/跳过。
面试加分提示:好的Skill像好的函数-输入明确、输出可预期、边界条件都处理了。测试Skill的思路和测试代码完全一致。
Q8:Skills生态的现状和未来发展方向是什么?
核心要点:Skills生态正从个人DIY走向标准化市场,未来将成为AI领域的"App Store"-开发者创建分发、用户按需安装使用。
当前生态现状:
-
Anthropic官方仓库:anthropics/skills(GitHub 80K+ Stars的skill-creator)
-
开源市场:agentskills.io(全球技能注册表)、OpenSkills
-
商业市场:skillsmp.com、skillsdirectory.com
-
支持平台:Claude Code、OpenClaw、Cursor、Trae等均已支持
发展趋势:
-
标准化:Skills格式成为跨Agent通用标准(不限于Claude)
-
市场化:出现Skills交易市场,优质Skill可商业化
-
组合化:Skills间可编排组合,形成复杂工作流
-
版本管理:支持Skill版本迭代和灰度发布
-
团队协作:企业内部Skill库成为团队知识资产
面试加分提示:面试中提及"我为团队创建了X个内部Skill,覆盖了代码审查/部署检查/文档生成等场景,团队效率提升约30%"-展示你把Skills用于实际生产力提升。
模块六:LLM应用框架篇(LangChain/LangGraph)
Q1:LangChain的核心定位和它解决的三个关键问题是什么?
核心要点:LangChain是LLM应用开发的"标准化工具箱",解决了接口统一化、组件模块化、流程编排化三大工程问题。
三个核心价值:
-
接口统一化:不同LLM提供商(OpenAI/Anthropic/本地模型)的API各不相同,LangChain提供统一抽象层,一行代码即可切换模型
-
组件模块化:将Prompt模板、文档加载、向量存储、工具调用等抽象为独立可复用组件
-
流程编排化:通过Chain/Agent/Graph将组件串联为完整应用流程
适用场景:
-
快速原型验证(几十行代码搭出RAG Demo)
-
标准化应用开发(团队统一技术栈)
-
复杂Agent编排(多步骤、多工具协调)
局限性:
-
过度封装导致调试困难
-
版本迭代快,API变化频繁
-
生产环境有一定性能开销
面试加分提示:客观评价-LangChain适合80%的标准场景,但对性能或可控性有极致要求时,核心链路建议自研。
Q2:LangChain的五大核心组件各自承担什么职责?
核心要点:Models封装模型调用、Prompts管理提示词模板、Chains编排执行流程、Memory维护对话状态、Tools&Agents实现自主决策。
|
组件 |
职责 |
关键类/概念 |
|---|---|---|
|
Models |
统一封装各类LLM和Embedding |
ChatOpenAI, ChatAnthropic, HuggingFaceEmbeddings |
|
Prompts |
模板管理和动态生成 |
PromptTemplate, ChatPromptTemplate, FewShotPromptTemplate |
|
Chains |
将组件串联为执行流水线 |
LLMChain, RetrievalQA, SequentialChain |
|
Memory |
对话上下文持久化 |
ConversationBufferMemory, ConversationSummaryMemory |
|
Tools & Agents |
工具定义+自主决策 |
@tool, AgentExecutor, create_react_agent |
组件间协作示例(RAG问答):
# Models: 选择LLM
llm = ChatOpenAI(model="gpt-4o")
# Prompts: 定义模板
prompt = ChatPromptTemplate.from_template("基于{context}回答{question}")
# Chains: 组装流水线
chain = RetrievalQA.from_chain_type(llm=llm, retriever=vectorstore.as_retriever())
# Memory: 保持对话
memory = ConversationBufferWindowMemory(k=5)
面试加分提示:面试中不要只列举组件名称,要展示你理解它们如何协同-"Models提供推理引擎,Prompts控制输入质量,Memory维护状态,Chains定义流程,Agent实现动态决策"。
Q3:LCEL(LangChain Expression Language)的设计理念和优势是什么?
核心要点:LCEL用管道符|连接组件,以声明式语法替代命令式编码,天然支持流式输出、异步执行和可观测性。
LCEL语法示例:
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
# 声明式组装:一行代码即表达完整RAG链
chain = retriever | format_docs | prompt | llm | StrOutputParser()
# 等价于传统写法的数十行代码
result = chain.invoke({"question": "什么是RAG?"})
# 天然支持流式
for chunk in chain.stream({"question": "什么是RAG?"}):
print(chunk, end="")
LCEL vs 传统Chain对比:
|
维度 |
传统Chain |
LCEL |
|---|---|---|
|
语法 |
类继承、配置参数 |
管道符声明式 |
|
流式支持 |
需额外配置 |
天然支持 |
|
异步支持 |
部分组件支持 |
全链路支持 |
|
可观测性 |
需手动插桩 |
自动追踪每步IO |
|
组合复用 |
较复杂 |
像函数一样组合 |
面试加分提示:LCEL是LangChain 0.2+推荐的标准写法,新项目应优先使用。但旧项目迁移不必急于一时,两者可以混用。
Q4:LangChain的Memory机制有哪些实现?各自适用什么场景?
核心要点:Memory解决"LLM无状态"问题,四种实现分别在完整性、长度控制、信息密度、检索能力间取舍。
|
Memory类型 |
策略 |
优势 |
局限 |
适用场景 |
|---|---|---|---|---|
|
BufferMemory |
完整保留所有历史 |
无信息丢失 |
易超出上下文限制 |
短对话(<10轮) |
|
BufferWindowMemory |
滑动窗口保留最近K轮 |
长度可控 |
丢失早期信息 |
一般多轮对话 |
|
SummaryMemory |
LLM自动总结历史 |
信息密度高 |
总结有成本和延迟 |
长对话 |
|
VectorStoreMemory |
向量化存储+语义检索 |
支持长期记忆 |
检索可能不精准 |
跨会话记忆 |
选型决策:
对话轮数 < 10 → BufferMemory
对话轮数 10-50 → WindowMemory(k=10) + SummaryMemory压缩更早历史
需要跨会话记忆 → VectorStoreMemory
面试加分提示:生产环境中通常组合使用——近期对话用Window保留完整细节,历史对话用Summary压缩为摘要,关键信息用VectorStore做长期持久化。
Q5:LangGraph和LangChain Chain的本质区别是什么?什么场景必须用LangGraph?
核心要点:Chain是线性流水线(数据单向流动),LangGraph是有向图(支持分支、循环、并行),后者适合需要动态决策和迭代的复杂Agent场景。
|
维度 |
Chain |
LangGraph |
|---|---|---|
|
数据流 |
线性/简单分支 |
任意有向图 |
|
循环 |
不支持 |
原生支持 |
|
条件分支 |
简单路由 |
复杂条件边 |
|
状态管理 |
隐式 |
显式State对象 |
|
并行执行 |
有限 |
原生支持 |
必须用LangGraph的场景:
-
需要循环迭代:生成→测试→修复→再测试,直到通过
-
复杂条件路由:根据中间结果动态决定下一步
-
多Agent协作:多个Agent节点协调执行
-
人工审批节点:流程中需要暂停等待人工确认
-
长时间运行任务:需要Checkpoint断点续传
# LangGraph示例:生成-评估-改进循环
from langgraph.graph import StateGraph
graph = StateGraph(State)
graph.add_node("generate", generate_fn)
graph.add_node("evaluate", evaluate_fn)
graph.add_conditional_edges("evaluate", should_continue,
{"pass": END, "revise": "generate"}) # 循环!
面试加分提示:形象比喻-Chain是直达列车(路线固定),LangGraph是城市交通网(可以根据路况选择不同路线,甚至绕圈)。
Q6:LangGraph的三大核心概念(State/Node/Edge)如何协作?
核心要点:State是全局共享数据仓库,Node是处理单元,Edge是流转控制-三者配合实现"数据驱动的工作流编排"。
State(状态):
-
用TypedDict定义,是所有节点共享的数据结构
-
每个节点可读写State,实现数据在节点间传递
from typing import TypedDict, Annotated
class AgentState(TypedDict):
messages: Annotated[list, add_messages]
current_step: str
retry_count: int
Node(节点):
-
最小执行单元,接收State返回State更新
-
可以是LLM调用、工具执行、自定义逻辑
def research_node(state: AgentState) -> dict:
result = llm.invoke(state["messages"])
return {"messages": [result], "current_step": "research_done"}
Edge(边):
-
普通Edge:无条件跳转(A完成后必然到B)
-
条件Edge:根据State动态决定下一个目标节点
def route_decision(state):
if state["retry_count"] >= 3:
return "fail_gracefully"
if state["quality_score"] > 0.8:
return "output"
return "revise"
面试加分提示:State设计是LangGraph开发的关键-要想清楚哪些数据需要跨节点共享、用什么类型、如何合并(特别是list类型的add语义)。
Q7:LangGraph的条件边(Conditional Edge)如何实现动态路由?
核心要点:条件边通过"条件函数+映射字典"实现运行时动态分支,是LangGraph实现复杂决策流程的核心机制。
三要素:
-
源节点:条件边从哪个节点出发
-
条件函数:输入State,返回路由标识字符串
-
映射字典:标识字符串 → 目标节点名
from langgraph.graph import StateGraph, END
graph = StateGraph(AgentState)
graph.add_node("analyze", analyze_task)
graph.add_node("simple_answer", direct_answer)
graph.add_node("deep_research", research_then_answer)
graph.add_node("escalate", transfer_to_human)
# 条件函数
def complexity_router(state):
score = state["complexity_score"]
if score < 0.3:
return"simple"
elif score < 0.7:
return"medium"
else:
return"complex"
# 添加条件边
graph.add_conditional_edges(
"analyze", # 源节点
complexity_router, # 条件函数
{
"simple": "simple_answer",
"medium": "deep_research",
"complex": "escalate"
} # 映射字典
)
设计原则:
-
条件函数应为纯函数,只依赖State不依赖外部状态
-
映射字典必须覆盖条件函数所有可能的返回值
-
避免过深的条件嵌套,保持图的可读性
面试加分提示:条件边的路由逻辑可以很复杂-从简单的阈值判断到LLM做意图分类都可以,关键是确保路由决策快速且可靠。
Q8:LangGraph如何实现循环与迭代?如何防止无限循环?
核心要点:通过Edge指向已执行过的节点形成闭环实现循环,通过State中的计数器/标志位+条件边实现终止控制。
循环模式实现:
graph = StateGraph(State)
graph.add_node("generate", generate_code)
graph.add_node("test", run_tests)
# 条件函数控制循环终止
def should_continue(state):
if state["tests_pass"]:
return"done"
if state["iteration"] >= 5: # 最大迭代次数
return"done"
return"retry"
graph.add_conditional_edges("test", should_continue, {
"retry": "generate", # 循环回去
"done": END # 退出循环
})
防止无限循环的三重保护:
|
机制 |
实现方式 |
建议值 |
|---|---|---|
|
迭代计数器 |
State中维护iteration字段 |
max=5-10 |
|
超时控制 |
Graph级别设置最大执行时间 |
60-300s |
|
进度检测 |
判断连续N次迭代无改善则退出 |
N=2-3 |
面试加分提示:循环最适合"生成-验证-改进"场景(如代码生成直到测试通过)。关键是设计好"什么叫改善"的判断标准,避免在错误方向上无效迭代。
Q9:LangGraph如何实现多Agent协作系统?
核心要点:每个Agent作为独立Node,通过共享State交换信息,通过Edge(含条件边)协调执行顺序和任务分配。
监督者模式实现:
class MultiAgentState(TypedDict):
messages: list
next_agent: str
results: dict
# 监督者节点:决定任务分配
def supervisor(state):
decision = llm.invoke(
f"任务:{state['messages'][-1]}\n"
f"可用Agent:researcher, coder, writer\n"
f"选择下一个执行的Agent:"
)
return {"next_agent": decision.content}
# Worker节点
def researcher(state): ...
def coder(state): ...
def writer(state): ...
graph = StateGraph(MultiAgentState)
graph.add_node("supervisor", supervisor)
graph.add_node("researcher", researcher)
graph.add_node("coder", coder)
graph.add_node("writer", writer)
# 监督者根据决策路由到不同Worker
graph.add_conditional_edges("supervisor",
lambda s: s["next_agent"],
{"researcher": "researcher", "coder": "coder", "writer": "writer"})
# 每个Worker完成后回到监督者
graph.add_edge("researcher", "supervisor")
graph.add_edge("coder", "supervisor")
graph.add_edge("writer", "supervisor")
面试加分提示:多Agent系统的核心挑战是协调开销-每次Agent切换都有额外的上下文传递和决策成本。控制Agent数量在3-5个以内通常效果最好。
Q10:LangGraph的持久化(Checkpoint)机制有什么用途?
核心要点:Checkpoint在执行关键节点自动保存State快照,支持中断恢复、历史回溯和会话保持。
三大价值:
-
容错恢复:长时间任务中断后从最近Checkpoint恢复,而非从头重跑
-
历史审计:可查看任意时刻的State状态,方便调试和合规审计
-
会话保持:用户跨Session恢复对话上下文
from langgraph.checkpoint.sqlite import SqliteSaver
# 配置持久化后端
checkpointer = SqliteSaver.from_conn_string("checkpoints.db")
app = graph.compile(checkpointer=checkpointer)
# 执行时自动保存Checkpoint
config = {"configurable": {"thread_id": "user-123"}}
result = app.invoke(initial_state, config=config)
# 下次恢复
result = app.invoke(new_input, config=config) # 自动恢复上次State
存储后端选择:
|
后端 |
适用场景 |
|---|---|
|
MemorySaver |
开发调试 |
|
SQLite |
小规模生产 |
|
PostgreSQL |
企业级生产 |
|
Redis |
高并发低延迟 |
面试加分提示:Checkpoint对性能有一定影响(每个节点完成都要写入),生产中可以配置只在关键节点保存,或使用异步写入减少阻塞。
Q11:LangChain和LlamaIndex如何选型?可以组合使用吗?
核心要点:LangChain是通用型框架(覆盖全流程),LlamaIndex专注检索增强(RAG最优),两者可组合各取所长。
|
维度 |
LangChain |
LlamaIndex |
|---|---|---|
|
定位 |
通用LLM应用框架 |
RAG专业框架 |
|
强项 |
Agent编排、工具集成、流程控制 |
索引构建、查询引擎、检索优化 |
|
学习曲线 |
较陡(概念多) |
相对平缓(聚焦) |
|
索引类型 |
基础向量索引 |
向量/树形/列表/关键词等多种 |
|
适用 |
需要Agent+Tool+RAG的综合应用 |
纯RAG/知识库场景 |
组合使用模式:
-
用LlamaIndex构建高质量索引和查询引擎(检索最优化)
-
用LangChain/LangGraph编排整体应用流程和Agent逻辑
-
LlamaIndex的QueryEngine作为LangChain的Tool被Agent调用
面试加分提示:选型答案不要非此即彼-"我们项目用LlamaIndex做文档索引(因为它的树形索引适合我们的层级文档),用LangGraph做Agent编排(因为需要多步骤审批流程)"。
Q12:LangChain Agent的内部工作循环是怎样的?
核心要点:LangChain Agent遵循"Prompt组装→LLM决策→解析Action→执行工具→结果回传→循环或终止"的ReAct循环。
完整执行循环:
1. 组装Prompt:用户输入 + 对话历史 + 可用工具描述 + 系统指令
2. LLM推理:基于Prompt决定是"直接回答"还是"调用工具"
3. 输出解析:如果是工具调用,解析出工具名和参数
4. 执行工具:调用真实的工具函数,获取返回值
5. 结果回传:将工具返回值作为Observation追加到上下文
6. 循环判断:回到步骤2,LLM基于新信息继续决策
7. 终止输出:LLM判断可以回答时,输出Final Answer
关键设计点:
-
工具选择依赖description:工具描述质量直接影响Agent决策准确率
-
错误处理:工具执行失败时,错误信息作为Observation传回LLM,让它决定重试还是换方案
-
最大迭代限制:AgentExecutor有max_iterations参数防止死循环
from langchain.agents import create_react_agent, AgentExecutor
agent = create_react_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools, max_iterations=10, verbose=True)
result = executor.invoke({"input": "帮我查一下北京明天的天气"})
面试加分提示:理解Agent循环的关键是认识到"LLM并不执行工具,它只输出指令"-真正的执行由AgentExecutor中的代码完成,LLM只是决策大脑。
模块七:生产工程与可靠性篇
Q1:Agent系统的Token成本如何优化?有哪些有效策略?
核心要点:Token成本优化需从架构路由、缓存复用、上下文裁剪、模型分级四个层面系统化实施,组合使用可降低60-80%成本。
优化策略矩阵:
|
策略 |
原理 |
预期节省 |
|---|---|---|
|
架构分级:简单任务走Workflow |
避免不必要的Agent循环 |
60-75% |
|
模型路由:小模型处理简单子任务 |
GPT-4o只用于核心推理,GPT-3.5处理格式化等简单任务 |
20-40% |
|
语义缓存:相似Query复用历史结果 |
避免重复计算 |
20-40% |
|
上下文压缩:摘要历史对话 |
减少每次传入的Input Token |
30-50% |
|
工具按需加载:不一次性塞入所有工具描述 |
只加载当前任务可能用到的工具 |
10-20% |
|
Prompt精简:消除冗余指令 |
减少System Prompt长度 |
10-15% |
语义缓存实现思路:
def semantic_cache_query(query, threshold=0.92):
query_vec = embed(query)
cached = cache_db.search(query_vec, top_k=1)
if cached and cached[0].score > threshold:
return cached[0].response # 命中缓存
response = llm.invoke(query) # 未命中,正常调用
cache_db.insert(query_vec, response) # 写入缓存
return response
面试加分提示:用具体数字说话-"我们通过模型路由+语义缓存将月Token支出从 1800,同时用户体验指标未下降"。
Q2:Agent系统的可观测性如何建设?核心监控指标有哪些?
核心要点:可观测性建立在Traces(链路追踪)、Logs(日志)、Metrics(指标)三大支柱上,需要端到端覆盖Agent的每一步决策。
核心指标与告警阈值:
|
指标 |
含义 |
告警阈值建议 |
|---|---|---|
|
端到端延迟P95 |
用户感知的响应时间 |
>30s |
|
单次请求Token数P99 |
成本控制 |
>10,000 |
|
单次请求成本P99 |
费用监控 |
>$0.50 |
|
工具调用成功率 |
工具可用性 |
<95% |
|
LLM调用错误率 |
模型服务稳定性 |
>2% |
|
任务完成率 |
Agent效果 |
<80% |
|
幻觉率(抽样评估) |
输出质量 |
>5% |
追踪粒度设计:
[Request Trace]
├── Intent Classification (50ms)
├── Query Rewrite (300ms)
├── Retrieval (80ms)
├── Reranking (150ms)
├── LLM Generation (2000ms)
│ ├── Input Tokens: 3500
│ ├── Output Tokens: 500
│ └── Model: gpt-4o
└── Post-processing (100ms)
采样策略:错误请求和高成本请求100%追踪,正常请求10%采样,关键节点指标全量采集。
工具选型:LangSmith(LangChain原生)、Langfuse(开源)、Datadog LLM Observability(企业级)。
面试加分提示:可观测性的核心价值不是"看到问题"而是"快速定位问题环节"-一个好的Trace应该让你在30秒内判断是检索问题还是生成问题。
Q3:Agent系统在生产环境中有哪些典型"踩坑"经验?
核心要点:六大高频生产问题-死循环、幻觉工具调用、上下文污染、Token爆炸、Prompt注入、目标漂移,每个都需要专门的防御机制。
|
问题 |
表现 |
根因 |
解法 |
|---|---|---|---|
|
死循环 |
Agent反复执行相同操作 |
缺乏终止条件 |
最大步数+重复检测+超时 |
|
幻觉工具调用 |
调用不存在的工具 |
工具描述不清晰 |
白名单校验+严格Schema |
|
上下文污染 |
上一轮残留信息干扰当前任务 |
上下文未正确隔离 |
任务间状态重置 |
|
Token爆炸 |
单次请求消耗大量Token |
工具返回数据过大 |
输出截断+分页+摘要 |
|
Prompt注入 |
用户输入操纵Agent行为 |
数据与指令未分离 |
四层纵深防御 |
|
目标漂移 |
执行过程偏离原始目标 |
多步推理累积偏差 |
每步目标对齐+定期回顾 |
针对Token爆炸的工程方案:
def safe_tool_execution(tool, params, max_output=2000):
result = tool.execute(params)
if len(result) > max_output:
# 截断并提示
return result[:max_output] + f"\n[结果已截断,完整结果共{len(result)}字符]"
return result
面试加分提示:面试时讲一个你亲历的踩坑故事-"上线第一周遇到Token爆炸,某个API返回了完整的HTML页面导致单次请求花费$2,通过添加输出长度限制和内容提取解决"。
Q4:如何设计Agent系统的可靠性保障体系?
核心要点:可靠性体系需覆盖幂等性、降级回退、超时熔断、人工兜底四层保障,确保任何异常都有应对方案。
四层保障体系:
|
层级 |
机制 |
说明 |
|---|---|---|
|
第一层 |
幂等性设计 |
相同操作重复执行结果一致 |
|
第二层 |
超时+重试 |
单步超时自动重试,配置退避策略 |
|
第三层 |
降级回退 |
主路径失败自动切换备用方案 |
|
第四层 |
Human-in-the-Loop |
所有自动化兜底失败后转人工 |
级联回退策略:
主模型(GPT-4o)
→ [超时/错误] → 备用模型(Claude)
→ [超时/错误] → 缓存响应(历史相似问题答案)
→ [无缓存] → 优雅错误消息 + 转人工
熔断器模式:
class CircuitBreaker:
def __init__(self, failure_threshold=5, reset_timeout=60):
self.failures = 0
self.state = "CLOSED"# CLOSED/OPEN/HALF_OPEN
def call(self, func, *args):
if self.state == "OPEN":
return self.fallback(*args) # 直接走降级
try:
result = func(*args)
self.failures = 0
return result
except Exception:
self.failures += 1
if self.failures >= self.failure_threshold:
self.state = "OPEN"# 触发熔断
raise
面试加分提示:面试官最看重的是"你是否考虑过所有失败路径"-画出一个完整的失败场景处理图比背诵概念更有价值。
Q5:企业级Agent系统的五层架构如何设计?
核心要点:企业级Agent需要接入层、对话管理层、Agent核心层、工具层、输出管控层五层清晰分工,每层各司其职。
┌─────────────────────────────────────────┐
│ 接入层:多渠道统一接入 │
│ (Web/App/企微/钉钉/API) │
├─────────────────────────────────────────┤
│ 对话管理层:上下文维护+会话状态跟踪 │
│ (多轮对话/Session管理/用户画像) │
├─────────────────────────────────────────┤
│ Agent核心层:推理+规划+决策 │
│ (ReAct循环/工具选择/记忆管理/反思) │
├─────────────────────────────────────────┤
│ 工具层:能力接入 │
│ (知识库RAG/业务API/数据库/第三方服务) │
├─────────────────────────────────────────┤
│ 输出管控层:安全+合规+质量 │
│ (敏感词过滤/内容审核/格式规范/引用校验) │
└─────────────────────────────────────────┘
各层关键设计决策:
-
接入层:统一协议适配,消息格式标准化
-
对话管理:Session存储(Redis)、长期记忆(向量DB)
-
Agent核心:模型选择、推理策略、错误恢复
-
工具层:MCP协议接入、权限分级、调用限流
-
输出管控:规则+模型双重审核,拦截不合规输出
面试加分提示:面试时能画出这个架构图并解释每层的技术选型和设计权衡,是区分"知道概念"和"真正设计过系统"的关键。
Q6:模型路由(Model Routing)策略如何设计?
核心要点:根据任务复杂度和质量要求动态选择不同规格的模型,在成本和效果之间取得最优平衡。
路由策略:
def model_router(query, context):
complexity = estimate_complexity(query)
if complexity == "simple":
# 简单问答:小模型即可
return"gpt-3.5-turbo"# $0.5/1M tokens
elif complexity == "medium":
# 中等推理:中等模型
return"gpt-4o-mini" # $1.5/1M tokens
else:
# 复杂推理/代码生成:大模型
return"gpt-4o" # $15/1M tokens
def estimate_complexity(query):
# 基于规则+轻量分类器判断
if len(query) < 20and"?"in query:
return"simple"
if any(kw in query for kw in ["分析", "设计", "比较", "代码"]):
return"complex"
return"medium"
路由准确度直接影响成本和体验-路由错误(把复杂问题分给小模型)会导致质量下降,反之则浪费成本。建议:
-
初期用规则路由快速上线
-
积累数据后训练轻量分类器(如BERT-tiny级别)
-
持续监控各模型的完成质量,动态调整路由阈值
面试加分提示:好的路由策略可以节省40-60%成本且用户体验不降级-"80%的请求其实用小模型就够了"。
Q7:Human-in-the-Loop机制如何设计?哪些场景必须介入?
核心要点:Human-in-the-Loop在高风险操作前暂停Agent执行,等待人工审批后继续,是AI系统安全合规的最后防线。
必须人工审批的场景:
|
场景 |
风险等级 |
审批要求 |
|---|---|---|
|
数据删除/修改 |
高 |
用户确认 |
|
发送邮件/消息 |
中 |
用户确认 |
|
金额操作 |
极高 |
多级审批 |
|
权限变更 |
高 |
管理员审批 |
|
外部API写入 |
中 |
用户确认 |
实现模式(以LangGraph为例):
# 在关键节点前插入审批节点
def approval_node(state):
action = state["pending_action"]
# 暂停执行,等待外部审批信号
return {"status": "waiting_approval", "action_desc": action}
# 前端展示待审批内容,用户点击确认/拒绝
# 确认后继续执行,拒绝则走降级路径
设计原则:
-
审批请求必须清晰展示"Agent要做什么+可能的影响"
-
设置审批超时(如30分钟无响应自动取消)
-
记录所有审批决策作为审计日志
面试加分提示:Human-in-the-Loop不是"AI能力不足的补丁",而是"负责任的AI系统设计原则"-即使技术上能全自动化,高风险操作也应保留人工确认环节。
Q8:如何设计Agent系统的上线前检查清单?
核心要点:Agent上线前需覆盖功能验证、性能压测、安全审计、可观测性、降级预案五个维度的系统化检查。
上线检查清单:
功能验证 ✅
-
[ ] 核心场景测试集通过率>90%
-
[ ] 边界case(空输入/超长/恶意)处理正确
-
[ ] 工具调用正确率>99%
-
[ ] 多轮对话上下文保持正确
性能指标 ✅
-
[ ] P95延迟<30s
-
[ ] Token消耗在预算范围内
-
[ ] 并发能力满足预期QPS
安全合规 ✅
-
[ ] Prompt注入防御测试通过
-
[ ] 敏感数据不泄露
-
[ ] 权限控制正确
-
[ ] 高危操作有审批机制
可观测性 ✅
-
[ ] 链路追踪覆盖全流程
-
[ ] 关键指标告警已配置
-
[ ] 日志分级+采样策略就绪
降级预案 ✅
-
[ ] 模型不可用时的回退策略
-
[ ] 工具故障时的降级方案
-
[ ] 流量突增时的限流策略
面试加分提示:面试时展示你有这样的系统化思维-"我们有一个Agent上线SOP,包含37项检查项,必须逐一确认才能发布到生产环境"。
Q9:如何处理Agent系统中的目标漂移问题?
核心要点:目标漂移是Agent在多步执行中逐渐偏离原始目标的现象,需通过定期目标对齐和执行进度检查来纠偏。
目标漂移的常见原因:
-
工具返回信息干扰Agent注意力
-
中间步骤产生的新信息引导Agent走向歧路
-
上下文过长导致模型"遗忘"初始目标
防治策略:
def agent_loop_with_alignment(original_goal, max_steps=15):
for step in range(max_steps):
# 每3步做一次目标对齐检查
if step % 3 == 0and step > 0:
alignment = llm.check(
f"原始目标:{original_goal}\n"
f"当前进度:{current_progress}\n"
f"判断:当前工作是否仍在朝原始目标推进?如偏离请调整方向。"
)
if alignment.drifted:
# 重新规划
plan = llm.replan(original_goal, current_state)
# 正常执行步骤
next_action = llm.decide(...)
observation = execute(next_action)
面试加分提示:目标漂移在长对话和多步骤任务中尤为突出-Agent越聪明、越"好奇",越容易被中途的新信息带偏。定期的"初心检查"是工程上的必要投入。
Q10:Agent系统的灰度发布和A/B测试如何实施?
核心要点:Agent系统的灰度发布需要在模型版本、Prompt版本、工具版本三个维度独立控制,通过A/B测试量化每次变更的效果。
灰度维度:
|
维度 |
灰度方式 |
评估指标 |
|---|---|---|
|
模型升级 |
按用户比例分流 |
质量+成本+延迟 |
|
Prompt调优 |
按请求比例分流 |
任务完成率+用户满意度 |
|
工具变更 |
按功能开关控制 |
工具成功率+错误率 |
A/B测试框架:
流量入口 → 分流器(用户ID哈希)
├── 实验组(10%): 新版Agent
└── 对照组(90%): 当前版Agent
核心对比指标:
- 任务完成率变化
- 平均Token消耗变化
- P95延迟变化
- 用户反馈评分变化
注意事项:
-
Agent行为有随机性,需要足够样本量(建议>1000次请求)
-
同一用户应始终在同一组(避免体验不一致)
-
关注负面case而非只看平均值
面试加分提示:Agent的A/B测试比传统后端更复杂-因为输出不是确定性的,需要更大样本量和更多评估维度。建议使用LLM-as-Judge做自动化质量评估。
模块八:RAG 系统幻觉治理专题
Q1:大模型产生幻觉的根本原因有哪些?如何从系统层面分类?
参考解答:
大模型幻觉可从系统视角划分为两大类别:
检索缺失型幻觉(Retrieval Miss):
-
知识库中缺少相关文档,模型被迫依赖参数化记忆生成回答
-
检索器召回率不足,相关片段未能进入上下文窗口
-
查询与文档之间存在语义鸿沟,导致向量相似度偏低
生成越界型幻觉(Generation Overshoot):
-
上下文已包含正确信息,但模型在解码时"脱离锚点"
-
长文本中注意力稀释,模型对中间段落关注度下降(Lost in the Middle)
-
Decoder 的自回归特性导致错误累积与概率漂移
从工程视角,还需关注:
-
训练数据中的事实偏差被固化到参数中
-
Instruction Following 能力不足导致忽略约束指令
-
Temperature 过高引入过多随机性
面试加分提示: 能够区分"模型不知道"和"模型知道但说错了"两种情况,并针对性设计不同的治理策略,是高级架构师的关键能力。
Q2:针对检索缺失型幻觉,有哪些系统性的解决思路?
参考解答:
检索缺失型幻觉的核心是"该找到的没找到",解决方案覆盖检索全链路:
|
治理层级 |
具体手段 |
效果说明 |
|---|---|---|
|
查询理解层 |
Query Rewriting、HyDE、Sub-Question 拆解 |
弥合用户意图与文档表达的语义差距 |
|
索引构建层 |
分层索引(摘要→段落→句子)、知识图谱增强 |
提升多粒度召回能力 |
|
召回策略层 |
混合检索(向量+关键词+知识图谱)、多路召回 |
降低单一方法的盲区 |
|
排序过滤层 |
Cross-Encoder Rerank、相关性阈值过滤 |
精准筛选高质量片段 |
|
兜底机制层 |
设置"无法回答"判定逻辑、置信度评分 |
知之为知之,不知为不知 |
关键实践:
-
Rerank 分数阈值通常设置在 0.3-0.6 之间,具体需根据业务场景调优
-
引入 Retrieval Evaluator 对召回结果实时打分,低于阈值触发拒答或追问
Q3:生成越界型幻觉的治理策略有哪些?
参考解答:
当上下文中已包含正确答案但模型仍生成错误内容时,需从生成控制角度治理:
Prompt 约束策略:
你是一个严谨的问答助手。请严格基于以下【参考文档】回答问题。
规则:
1. 仅使用参考文档中明确提及的信息
2. 如果文档未涉及该问题,直接回复"当前知识库暂无相关信息"
3. 回答中必须标注信息来源段落编号
4. 禁止推测、引申或补充文档外的内容
结构化输出控制:
{
"answer": "具体回答内容",
"source_ids": ["doc_3_para_2", "doc_7_para_5"],
"confidence": 0.85,
"has_sufficient_context": true
}
后验证机制:
-
Citation Verification:检查回答中的每个断言是否能在源文档中找到支撑
-
NLI(自然语言推理)模型判断答案与文档间的蕴含/矛盾关系
-
多次采样 + 一致性投票(Self-Consistency)过滤不稳定输出
解码参数调控:
-
降低 Temperature(0.1-0.3)减少随机性
-
使用 Top-K 和 Top-P 联合截断极端 token
-
Repetition Penalty 防止循环生成
面试加分提示: 能设计"事前约束 + 事中控制 + 事后验证"的三阶段幻觉防线体系,展示系统化思维。
Q4:如何设计一个完整的幻觉检测评估体系?
参考解答:
幻觉检测需要建立多维度的自动化评估流水线:
Faithfulness(忠实度)评估:
-
将答案拆分为原子化断言(Atomic Claims)
-
逐条判断每个断言是否能被检索文档支持
-
计算公式:Faithfulness = 被支持断言数 / 总断言数
基于 NLI 模型的检测:
-
使用 DeBERTa-v3-large 等 NLI 模型
-
输入:(检索文档, 生成答案) → 输出:Entailment / Contradiction / Neutral
-
Contradiction 比例高 → 严重幻觉
基于 LLM-as-Judge 的检测:
-
让独立的评估 LLM 判断答案是否忠实于上下文
-
优点:灵活且无需训练;缺点:成本较高、存在评估偏差
生产环境集成方案:
class HallucinationDetector:
def __init__(self):
self.nli_model = load_nli_model()
self.claim_extractor = ClaimExtractor()
def detect(self, answer: str, contexts: list[str]) -> float:
claims = self.claim_extractor.extract(answer)
supported = 0
for claim in claims:
for ctx in contexts:
if self.nli_model.entails(ctx, claim):
supported += 1
break
return supported / len(claims) if claims else 1.0
Q5:Rerank 分数阈值应如何设定?有哪些工程实践经验?
参考解答:
Rerank 阈值设定是平衡准确率与召回率的关键决策点:
阈值区间参考:
-
严格场景(法律、医疗):0.5-0.7,宁缺毋滥
-
通用问答场景:0.3-0.5,平衡覆盖与精度
-
探索性场景(头脑风暴):0.2-0.3,优先保证信息丰富度
动态阈值策略:
-
根据查询类型动态调整:事实型问题提高阈值,开放型问题降低阈值
-
基于检索结果的分数分布自适应:若 Top-K 分数整体偏低,适当放宽阈值
-
A/B 测试驱动的阈值优化:通过线上指标(用户满意度、追问率)迭代调整
工程实现要点:
-
记录每次请求的 Rerank 分数分布用于离线分析
-
设置 Hard Threshold(绝对下限)和 Soft Threshold(相对排序)
-
低于阈值时触发降级策略:追问用户、返回"信息不足"、或扩大召回范围重试
Q6:Self-RAG 是什么?它如何解决传统 RAG 的幻觉问题?
参考解答:
Self-RAG(Self-Reflective Retrieval-Augmented Generation)是一种让模型自主决定"何时检索"和"如何使用检索结果"的框架。
核心机制 — 四种反思 Token:
|
反思 Token |
作用 |
触发时机 |
|---|---|---|
[Retrieve] |
判断是否需要检索 |
生成前评估自身知识充分性 |
[IsRel] |
判断检索结果是否相关 |
检索返回后进行相关性筛选 |
[IsSup] |
判断生成内容是否被检索支持 |
生成片段后进行忠实度校验 |
[IsUse] |
判断回答整体是否有用 |
完整回答生成后进行质量评估 |
与传统 RAG 的对比:
-
传统 RAG:每次都检索 → 信息过载、噪声引入
-
Self-RAG:按需检索 + 自我验证 → 更精准、减少幻觉
训练方式:
-
使用 Critic Model 为训练数据标注反思 Token
-
通过 SFT 将反思能力内化到生成模型参数中
-
推理时无需额外模型,通过特殊 Token 实现自主判断
面试加分提示: 能对比 Self-RAG、CRAG(Corrective RAG)、Adaptive RAG 三者的异同,展示对前沿技术的全面掌握。
Q7:如何设计"拒答"机制,让系统在不确定时坦诚承认?
参考解答:
"知之为知之"的拒答能力是企业级 RAG 的核心可信度保障:
多级置信度评估:
class AnswerConfidenceEvaluator:
def evaluate(self, query, contexts, answer):
scores = {
"retrieval_relevance": self.compute_retrieval_score(query, contexts),
"context_coverage": self.compute_coverage(query, contexts),
"generation_confidence": self.compute_gen_confidence(answer, contexts),
"consistency_score": self.compute_consistency(query, contexts, n_samples=3)
}
# 加权综合判断
final_score = weighted_average(scores, self.weights)
if final_score < 0.3:
return"REFUSE"# 明确拒答
elif final_score < 0.6:
return"HEDGE" # 谨慎回答,标注不确定性
else:
return"ANSWER"# 正常回答
拒答话术设计原则:
-
承认局限而非编造:「当前知识库暂未收录该领域信息」
-
提供替代路径:「建议查阅 XX 官方文档获取最新说明」
-
区分程度:完全无关 vs 部分相关但不充分
防止过度拒答:
-
监控拒答率,若超过设定比例(如 15%)需检查检索链路
-
用户反馈闭环:被拒答的问题进入知识补充队列
Q8:请设计一个完整的 RAG 幻觉治理方案,覆盖从预防到修复的全流程。
参考解答:
企业级幻觉治理需要构建四层防线体系:
第一层 — 预防(Pre-generation):
-
高质量知识库建设:文档清洗、去重、结构化
-
检索质量保障:混合检索 + Rerank + 阈值过滤
-
Query 理解增强:意图识别、多轮改写、歧义消解
第二层 — 约束(In-generation):
-
System Prompt 强约束:明确角色边界和引用规则
-
结构化输出要求:强制包含 source_ids 和 confidence
-
解码参数控制:低温度、受限 Top-P
第三层 — 检测(Post-generation):
-
Citation Verification:验证每个引用的准确性
-
NLI 模型交叉验证:判断答案与文档的逻辑关系
-
Self-Consistency Check:多次采样比对一致性
第四层 — 修复(Correction):
-
检测到幻觉后自动触发重新生成
-
缩小上下文范围,仅保留最相关的 1-2 个片段
-
切换到更保守的 Prompt 模板
-
最终仍不可靠时执行拒答策略
监控指标体系:
-
Faithfulness Score(日均)、幻觉率趋势、拒答率、用户投诉率
-
建立幻觉案例库,定期复盘并优化各层策略
面试加分提示: 将方案与具体业务场景结合(如客服、法律、医疗),说明不同场景下四层防线的侧重点差异。
模块九:大模型微调与推理优化篇
Q1:LoRA 的核心原理是什么?为何能大幅降低微调成本?
参考解答:
LoRA(Low-Rank Adaptation)的核心洞察是:模型在适配下游任务时,权重变化矩阵具有低秩特性。
数学原理:
-
原始权重矩阵 W ∈ R^(d×d),微调时的变化量 ΔW 可分解为两个低秩矩阵的乘积
-
ΔW = A × B,其中 A ∈ R^(d×r),B ∈ R^(r×d),r << d
-
训练参数从 d² 降至 2dr,当 r=8, d=4096 时,参数量减少 256 倍
工程优势:
-
原始权重冻结,只训练 A 和 B → 显存占用大幅下降
-
多个 LoRA Adapter 可共享基座模型,通过热切换服务不同任务
-
推理时可将 ΔW 合并回原权重,零额外推理延迟
关键超参数:
-
rank (r):通常 4-64,越大表达能力越强但参数越多
-
alpha:缩放因子,通常设为 rank 的 1-2 倍
-
target_modules:选择作用于哪些层(通常是 Attention 的 Q/K/V/O 矩阵)
Q2:QLoRA 相比 LoRA 有哪些改进?适用于什么场景?
参考解答:
QLoRA 在 LoRA 基础上引入三项关键技术,将微调显存进一步压缩:
三大创新:
|
技术 |
作用 |
效果 |
|---|---|---|
|
4-bit NormalFloat (NF4) |
更优的 4-bit 量化数据类型 |
信息损失更小的权重压缩 |
|
Double Quantization |
对量化常数再做量化 |
额外节省约 0.5 GB 显存 |
|
Paged Optimizers |
优化器状态使用 CPU 内存分页 |
防止显存尖峰导致 OOM |
实际效果:
-
65B 模型可在单张 48GB GPU(A6000)上完成微调
-
7B 模型仅需约 6GB 显存即可训练
-
性能损失极小:在多数基准测试上与全精度 LoRA 差距 < 1%
适用场景:
-
显存受限环境下的大模型微调
-
个人开发者或小团队使用消费级 GPU 训练
-
需要快速验证微调效果的实验阶段
Q3:全量微调(Full Fine-tuning)与参数高效微调(PEFT)如何选择?
参考解答:
选择依据需综合考量数据量、算力、任务差异度三个维度:
全量微调适用条件:
-
训练数据 > 100K 高质量样本
-
下游任务与预训练分布差异较大(如医学、法律专业领域)
-
充足算力支撑(多卡 A100/H100 集群)
-
追求极致性能,可接受较高训练成本
PEFT 适用条件:
-
数据量适中(1K-100K 样本即可有效果)
-
任务与预训练分布有一定关联性
-
算力有限或需要快速迭代
-
需要一个基座服务多个任务(Multi-Tenant)
混合策略实践:
阶段1: 使用 QLoRA 快速验证任务可行性 (数小时)
阶段2: 效果确认后切换到 LoRA + 全精度 (数天)
阶段3: 若 PEFT 效果瓶颈,评估全量微调 ROI (数周)
决策矩阵:
|
维度 |
全量微调 |
LoRA |
QLoRA |
|---|---|---|---|
|
显存需求 |
极高(模型×4) |
中等 |
极低 |
|
训练速度 |
慢 |
中 |
中 |
|
最终效果 |
最优 |
接近全量 |
略低于 LoRA |
|
多任务灵活性 |
低 |
高 |
高 |
Q4:vLLM 的核心优化机制是什么?PagedAttention 解决了什么问题?
参考解答:
vLLM 是高性能 LLM 推理引擎,其核心创新是 PagedAttention 机制。
传统 KV Cache 的问题:
-
LLM 推理时需缓存每个 token 的 Key/Value 向量
-
传统实现为每个请求预分配连续的最大长度显存
-
实际使用率通常仅 20-40%,造成严重的显存碎片和浪费
PagedAttention 解决方案:
-
借鉴操作系统虚拟内存的分页思想
-
将 KV Cache 拆分为固定大小的 Block(类似内存页)
-
Block 可以非连续存储,通过 Block Table 管理映射关系
-
按需分配 Block,请求结束后立即回收
性能收益:
-
显存利用率提升至 90%+ (vs 传统方式的 30-50%)
-
相同硬件下吞吐量提升 2-4 倍
-
支持更大的并发批次(Continuous Batching)
-
Prefix Caching:相同前缀的请求可共享 KV Block
其他 vLLM 优化:
-
Continuous Batching:请求动态加入/离开批次
-
Tensor Parallelism:跨 GPU 切分模型
-
Speculative Decoding:小模型草稿 + 大模型验证
Q5:模型量化(Quantization)的主流方案有哪些?各自的精度损失如何?
参考解答:
量化是将模型权重从高精度(FP16/BF16)映射到低精度(INT8/INT4)的技术:
主流量化方案对比:
|
方案 |
精度 |
方法类型 |
特点 |
|---|---|---|---|
|
LLM.int8() |
INT8 |
训练后量化 |
混合精度,异常值保留 FP16 |
|
GPTQ |
INT4/INT3 |
训练后量化 |
基于二阶信息的逐层量化 |
|
AWQ |
INT4 |
训练后量化 |
保护 1% 显著权重通道 |
|
GGUF |
多种 |
训练后量化 |
CPU 友好,适合边缘部署 |
|
SmoothQuant |
INT8 |
训练后量化 |
将激活难度转移到权重 |
精度损失参考(基于 LLaMA-2-70B):
-
INT8 量化:几乎无损失(PPL 增加 < 0.1)
-
INT4 GPTQ:轻微损失(PPL 增加 0.2-0.5)
-
INT4 AWQ:损失小于 GPTQ(PPL 增加 0.1-0.3)
选型建议:
-
生产部署追求吞吐:AWQ + vLLM 组合
-
边缘/端侧设备:GGUF + llama.cpp
-
科研实验快速评估:bitsandbytes (LLM.int8())
Q6:模型蒸馏(Distillation)在 LLM 场景中如何应用?
参考解答:
LLM 蒸馏将大模型(Teacher)的能力迁移到小模型(Student),在成本与性能间取得平衡:
蒸馏方法分类:
输出蒸馏(Response Distillation):
-
使用 Teacher 模型生成大量高质量回答作为训练数据
-
Student 模型在这些数据上进行 SFT
-
优点:简单直接;缺点:仅学到表面行为
-
代表:Alpaca、Vicuna 系列
Logits 蒸馏:
-
Student 同时学习 Hard Label(正确答案)和 Soft Label(Teacher 的概率分布)
-
Loss = α × CE(student, hard_label) + (1-α) × KL(student_logits, teacher_logits)
-
保留了 Teacher 对各候选答案的"不确定性"信息
中间层蒸馏:
-
对齐 Teacher 和 Student 中间层的表示(Hidden States)
-
需要设计层映射策略(因为层数不同)
-
效果好但实现复杂
实践要点:
-
数据质量 > 数据数量:精选 50K 高质量数据优于 500K 噪声数据
-
领域聚焦蒸馏效果远好于通用蒸馏
-
评估时需关注 Student 在 OOD(分布外)数据上的泛化性
Q7:推理优化中 Speculative Decoding 的原理和适用场景?
参考解答:
Speculative Decoding(投机解码)利用小模型加速大模型推理,且保证输出分布不变:
核心流程:
-
Draft Model(小模型)快速连续生成 K 个候选 token
-
Target Model(大模型)并行验证这 K 个 token 的概率
-
按照拒绝采样规则决定接受哪些 token
-
被接受的 token 直接采用,被拒绝处重新从大模型采样
数学保证:
-
通过精心设计的接受-拒绝机制,最终输出的概率分布与直接使用大模型完全一致
-
即:加速是无损的,不影响输出质量
加速效果:
-
当 Draft Model 与 Target Model 分布接近时,接受率高,加速比可达 2-3x
-
适用于 greedy/低温度 decoding,高温度时接受率下降
适用与不适用场景:
-
适用:长文本生成、代码生成(模式重复性高)
-
不适用:极度创意性任务(分布差异大)、已经极度优化的批处理场景
Q8:如何设计一个完整的 LLM 服务部署架构?需考虑哪些关键因素?
参考解答:
企业级 LLM 服务部署需要考虑性能、成本、可靠性三角平衡:
整体架构分层:
┌─────────────────────────────────────────┐
│ API Gateway / Load Balancer │
├─────────────────────────────────────────┤
│ Request Router & Queue Manager │
├─────────────────────────────────────────┤
│ Model Serving Cluster (vLLM/TGI) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Instance1│ │ Instance2│ │ Instance3│ │
│ │ (GPU×4) │ │ (GPU×4) │ │ (GPU×4) │ │
│ └──────────┘ └──────────┘ └──────────┘ │
├─────────────────────────────────────────┤
│ Model Registry & Cache Layer │
└─────────────────────────────────────────┘
关键设计决策:
|
维度 |
考量点 |
|---|---|
|
模型选择 |
自部署 vs API 调用、模型大小与精度权衡 |
|
并发策略 |
Continuous Batching、队列管理、超时控制 |
|
资源调度 |
GPU 利用率监控、自动扩缩容策略 |
|
容灾方案 |
多模型 Fallback、降级策略、多机房部署 |
|
成本控制 |
KV Cache 复用、Prefix Caching、请求合并 |
|
可观测性 |
TTFT/TPS/P99 延迟、Token 用量、错误率 |
成本优化实践:
-
路由策略:简单请求走小模型,复杂请求走大模型(Router Model)
-
缓存策略:相似请求复用已生成结果(Semantic Cache)
-
弹性伸缩:基于队列深度自动调整 GPU 实例数
面试加分提示: 能给出具体的 SLA 指标(如 TTFT < 500ms,TPS > 50 tokens/s)以及对应的架构选型依据。
模块十一:Data×AI 融合应用篇
Q1:AI 如何赋能数据治理?具体有哪些应用场景?
参考解答:
AI 驱动的数据治理正在从"人工规则"向"智能自治"演进:
核心应用场景:
1. 智能元数据管理:
-
利用 NLP 自动生成表/字段的业务注释
-
基于 LLM 的血缘关系智能识别与补全
-
自动化的数据资产分类分级(敏感数据识别)
2. 数据质量智能监控:
-
异常检测:基于时序模型识别数据波动异常
-
根因分析:LLM 结合血缘图谱自动定位问题源头
-
修复建议:生成数据修复方案并预估影响范围
3. 智能数据标准化:
-
实体对齐:将不同系统中"同一事物"的不同表达统一
-
命名规范自动检查与建议修正
-
Schema 演化影响分析与兼容性评估
4. 自然语言数据查询(NL2SQL):
-
用户用自然语言描述需求,AI 生成 SQL
-
结合元数据上下文提升生成准确率
-
多轮对话式数据探索
架构模式:
用户/数据开发者
↓ 自然语言
AI Agent (数据治理)
├── 元数据知识图谱
├── 质量规则引擎
├── LLM 推理能力
└── 自动化执行引擎
↓ 治理动作
数据平台 (Hive/Spark/Flink)
Q2:实时数仓与 AI 的结合点在哪里?有哪些典型架构?
参考解答:
实时数仓与 AI 的融合正在创造新的技术范式:
核心结合场景:
1. AI 驱动的实时特征计算:
-
Flink + Feature Store 实时计算用户特征
-
特征更新延迟从小时级降至秒级
-
支撑实时推荐、风控等 AI 应用
2. 实时数据质量保障(AI 增强):
-
流式异常检测:Flink 窗口计算 + ML 模型实时判定
-
自适应阈值:模型根据历史模式动态调整告警阈值
-
智能降噪:区分"真异常"和"正常波动"
3. Streaming ETL + LLM 增强:
-
实时日志经 LLM 进行语义解析和结构化
-
非结构化流数据(客服对话、评论)实时转化为结构化指标
-
事件驱动的 AI 流水线
典型架构:
数据源 → Kafka → Flink (实时计算)
├── Feature Store (特征服务)
│ ↓
│ ML Serving (实时推理)
│ ↓
│ 业务应用 (推荐/风控)
│
└── Doris/StarRocks (实时分析)
↓
BI + NL2SQL (智能分析)
Q3:Feature Store 在 MLOps 体系中扮演什么角色?如何设计?
参考解答:
Feature Store 是连接数据工程与机器学习的桥梁,解决特征管理的核心挑战:
核心价值:
-
特征复用:避免不同团队重复开发相同特征
-
线上线下一致性:消除 Training-Serving Skew
-
特征版本管理:支持特征回溯和实验对比
-
权限与审计:特征访问的统一管控
架构设计要点:
|
组件 |
职责 |
技术选型 |
|---|---|---|
|
Offline Store |
离线特征存储与批量计算 |
Hive/Iceberg + Spark |
|
Online Store |
低延迟特征服务 |
Redis/DynamoDB |
|
Feature Registry |
元数据管理与发现 |
自研/Feast |
|
Transform Engine |
特征计算引擎 |
Flink(实时) / Spark(离线) |
|
Serving Layer |
统一特征获取 API |
gRPC/REST |
关键设计决策:
-
实时特征 vs 离线特征的存储分离与统一服务
-
Point-in-Time 正确性保证(防止特征穿越)
-
特征血缘追踪:从原始数据到最终特征的全链路可审计
-
特征监控:分布偏移检测、缺失率告警
主流开源方案:
-
Feast:社区活跃,与 K8s 集成良好
-
Tecton:企业级特征平台
-
Hopsworks:端到端 ML 平台内置 Feature Store
Q4:NL2SQL 技术的核心挑战和前沿解决方案?
参考解答:
NL2SQL 是 Data×AI 最直接的用户价值点,但面临多重技术挑战:
核心挑战:
-
歧义消解:同一表述可能对应多种 SQL 语义
-
Schema 理解:模型需要理解复杂的表关系和业务含义
-
复杂查询:嵌套子查询、多表 JOIN、窗口函数
-
方言适配:不同数据库 SQL 语法差异(Hive/Presto/Doris)
-
安全合规:防止生成越权查询或数据泄露
前沿解决方案:
RAG 增强方案:
-
检索相关的表结构、字段注释、历史 SQL 作为上下文
-
示例选择:基于语义相似度动态选取最相关的 SQL 示例
-
效果:在 Spider 基准上 EX 准确率提升 10-15%
Agent 方案(多步推理):
用户问题 → 意图识别 → Schema 选择 → SQL 生成
→ 语法验证 → 执行预检 → 结果解释
-
引入 Self-Correction:执行报错后自动修复
-
多轮交互:遇到歧义主动追问用户
Fine-tuning 方案:
-
在特定业务 Schema 上微调开源 LLM
-
构建 (NL, SQL, Schema) 三元组训练数据
-
优势:对企业专有术语理解更好
混合策略(生产推荐):
-
简单查询:Few-Shot Prompt + 规则验证
-
中等复杂度:RAG + Reranking
-
高复杂度:Agent + 多步推理 + 人工确认
Q5:MLOps 流水线的核心组件和成熟度模型?
参考解答:
MLOps 将 DevOps 理念引入 ML 生命周期,构建可重复、可审计的 ML 工程体系:
核心组件:
┌─────────────────────────────────────────────────┐
│ Data Pipeline → Feature Engineering → Model│
│ (数据流水线) (特征工程) Training│
│ (模型训练)│
├─────────────────────────────────────────────────┤
│ Model Registry → Model Serving → Monitoring│
│ (模型注册) (模型部署) (模型监控) │
├─────────────────────────────────────────────────┤
│ Experiment Tracking │ CI/CD │ Governance │
│ (实验追踪) │(持续集成)│ (治理审计) │
└─────────────────────────────────────────────────┘
成熟度模型(Google MLOps Levels):
|
级别 |
特征 |
自动化程度 |
|---|---|---|
|
Level 0 |
手动训练、手动部署 |
无自动化 |
|
Level 1 |
ML Pipeline 自动化 |
训练自动化,部署半自动 |
|
Level 2 |
CI/CD for ML |
全流程自动化 + 自动再训练 |
Level 2 的关键能力:
-
数据验证:自动检测输入数据分布漂移
-
模型验证:上线前自动在基准集上回归测试
-
自动再训练:检测到性能衰减后触发 Pipeline 重跑
-
金丝雀发布:新模型逐步放量,对比线上指标
-
回滚机制:指标异常自动切回旧版本
Q6:向量数据库在 Data×AI 架构中的定位和选型考量?
参考解答:
向量数据库是 AI 应用层的核心基础设施,其选型直接影响系统的检索能力和可扩展性:
在整体架构中的定位:
应用层: RAG / 推荐 / 搜索 / 去重
↕
服务层: 向量数据库 (ANN 检索 + 过滤)
↕
数据层: Embedding Pipeline (模型推理生成向量)
↕
源数据: 文档 / 图片 / 用户行为 / 商品信息
选型决策矩阵:
|
产品 |
适用场景 |
规模上限 |
特点 |
|---|---|---|---|
|
Milvus |
亿级向量、高并发 |
100亿+ |
分布式、GPU 加速 |
|
Qdrant |
中等规模、丰富过滤 |
数亿 |
Rust 实现、过滤性能强 |
|
Weaviate |
多模态、GraphQL |
数亿 |
内置向量化模块 |
|
pgvector |
已有 PG 生态、小规模 |
千万 |
无额外运维、ACID |
|
Faiss |
纯离线、研究实验 |
数十亿 |
Facebook 开源、单机 |
|
Chroma |
原型验证、轻量 |
百万 |
极简 API、嵌入式 |
关键考量因素:
-
数据规模与增长预期
-
查询模式:纯向量 vs 向量+标量混合过滤
-
一致性要求:最终一致 vs 强一致
-
运维复杂度与团队能力
-
与现有技术栈的集成成本
Q7:如何构建端到端的 AI 数据飞轮?
参考解答:
数据飞轮是 Data×AI 的终极目标 - 数据驱动 AI 优化,AI 产出更好的数据:
飞轮机制:
更多用户使用 → 产生更多交互数据
↓
数据清洗 & 标注 → 更高质量训练集
↓
模型优化/微调 → 更好的 AI 效果
↓
更好的产品体验 → 更多用户使用 (循环)
构建要素:
1. 数据收集层:
-
隐式反馈:用户点击、停留时长、跳过行为
-
显式反馈:点赞/踩、评分、纠错
-
产品化设计:将反馈嵌入自然交互流程
2. 数据加工层:
-
自动标注:利用 LLM 批量生成标注(带人工抽检)
-
难样本挖掘:AI 模型预测不确定的样本优先标注
-
数据增强:利用大模型生成多样化训练样本
3. 模型迭代层:
-
持续学习:增量训练避免全量重训成本
-
A/B 实验平台:快速验证模型改进效果
-
自动化 Pipeline:数据变化自动触发训练
4. 效果度量层:
-
定义 North Star Metric(北极星指标)
-
建立从数据量 → 模型指标 → 业务指标的因果链
-
定期复盘飞轮转速(数据增长率、模型迭代频率、效果提升幅度)
面试加分提示: 能给出具体的飞轮启动策略(冷启动阶段的数据从哪里来)以及防止飞轮退化的监控机制。
Q8:未来 Data×AI 架构的发展趋势和技术方向?
参考解答:
基于 2025-2026 年的技术演进,Data×AI 呈现以下关键趋势:
趋势一:Lakehouse + AI 原生融合
-
数据湖仓一体(Iceberg/Hudi/Delta)成为 AI 数据底座
-
向量索引直接集成在 Lakehouse 中(无需独立向量库)
-
统一的数据/模型/特征 Catalog
趋势二:Agentic Data Platform
-
AI Agent 作为数据平台的"智能操作员"
-
自然语言驱动的数据管道编排
-
自愈式数据质量保障(Agent 自动发现和修复问题)
-
代表方案:DataAgent、Gorilla 系列
趋势三:实时 AI 成为标配
-
特征计算从批处理全面转向流式
-
模型推理延迟要求从秒级进入毫秒级
-
Event-Driven AI:事件触发即时智能决策
趋势四:数据隐私与可信 AI
-
联邦学习在跨组织数据协作中的普及
-
差分隐私在 LLM 训练中的应用
-
模型可解释性从科研走向监管合规要求
趋势五:AI 工程化成熟
-
LLMOps 工具链完善(评估、监控、优化一体化)
-
Prompt 作为代码(Prompt-as-Code)的工程实践成熟
-
AI 应用开发从框架拼接走向平台化
附录:面试准备建议
高频追问方向
-
系统设计类:设计一个千万 DAU 的 RAG 系统 / 设计一个 Multi-Agent 客服平台
-
故障排查类:RAG 回答质量突然下降如何排查 / Agent 陷入死循环如何处理
-
权衡决策类:自建模型 vs API 调用如何选择 / 向量库选型的考量因素
-
前沿追踪类:MCP 协议的生态进展 / Agent 框架的最新演进
以上就是我们本次的分享,后续会持续在知识星球进行更新。欢迎大家关注。
更多推荐
所有评论(0)