Appearance
LLM 应用面试题合集
看在前面
B 轨总结篇:20 道高频题,每题给"30 秒版"答案。先结论、再机制、最后带一个自己项目的例子,三句话讲完,深挖交给追问。素材锚点全部来自 star-site ai-service(Python/LangChain)生产代码,深入阅读见文末表格。刷法建议:遮住答案先说一遍,录音回听,卡壳超过 5 秒的题回读对应篇目。八主题不是孤岛,是一道链路题的八个切面:
用户消息 ──> [上下文工程:进窗口前裁什么] ──> [多轮状态:记住什么]
│
├──需要外部知识──> [RAG:切分/检索/评测]
│
└──需要行动────> [Agent:工具设计/循环保险]
│
模型生成 ──> [幻觉缓解 + 结构化输出 + 注入防护]
│
交付层 ──> [成本控制] + [流式输出]面试里无论从哪题切入,都要能沿这张图把话题带到相邻主题。比如聊 RAG 评测聊到金标准集,顺势接到幻觉量化(Q13-15)与成本(Q18)。一个项目把八题串完。
30 秒版答案的骨架(所有题通用)
1. 一句话结论(是什么/选什么)
2. 为什么(机制,1-2 句)
3. 项目佐证("我们生产上是……",ai-service 真实做法)一、上下文工程
Q1 · 什么是上下文工程?和提示词工程是什么关系?
答:上下文工程是"决定模型每次调用能看见什么"的系统设计。它总装系统提示词、多轮历史、检索内容、工具结果。提示词工程只是其中"怎么写指令"那一格。关系是包含:窗口是稀缺资源。
上下文工程要回答三个问题——什么必须进窗口、什么可裁剪、什么按需获取(检索/工具)。项目佐证:ai-service 把 40 项指标渲染成行式清单而不是原始 JSON,输入小 = 省钱 + 护注意力。深入:LLM基础-Token上下文与幻觉、[上下文工程-Context Engineering](../llm基础/上下文工程-Context Engineering.md)。
Q2 · 系统提示词里应该放什么?怎么演进?
答:放三样——角色与任务边界、输出格式约束(字数/JSON/禁 Markdown)、行为红线(不确定就说不确定)。演进靠版本化 + 对照实验,不靠灵感:每条约束都要能说出"它防的是哪类坏输出"。佐证:finance_diagnosis 的 6 行系统提示词每行对应一个可讲出"为什么"的决策(350 字既是产品约束也是成本上限)。深入:系统提示词工程-从财务诊断说起。
Q3 · 模型上下文都 128K 了,为什么还要做检索和裁剪?
答:三个原因。成本按 token 计,长输入每次都付费。注意力稀释(lost in the middle,中间内容召回差)。时效内容不在参数里,塞进窗口才有。一句话:大窗口解决"放得下",不解决"用得好、付得起"。
二、多轮会话状态
Q4 · 多轮对话的状态怎么管理?历史无限增长怎么办?
答:状态 = 消息列表,管理就是裁剪策略。滑窗:保留最近 N 轮。摘要压缩:老对话折叠成一段 summary。关键事实单独存(结构化记忆)。取舍:滑窗丢上下文,摘要丢细节,成本与连贯性二选一或组合。红线:裁剪永远从中间裁,系统提示词和最近一两轮必须保住。
Q5 · LangGraph 里记忆/checkpoint 怎么做?多用户怎么隔离?
答:checkpointer 把图状态按 thread_id 持久化,每轮对话是一个 thread。多用户隔离靠 thread_id(会话维度)+ 身份维度。用户 ID 进 ContextVar,不进模型上下文。佐证:ai-service 用 MemorySaver 做 checkpoint,memberId 走 ContextVar 注入工具层——模型全程无感知身份,工具以该身份查数据。深入:ReAct与LangGraph工程实践、智能体的身份链与工具安全。
三、RAG:切分、检索与评测
Q6 · 文档切分策略怎么选?固定长度行不行?
答:默认结构化切分(按标题/段落等语义边界)+ chunk 大小与 overlap 的权衡。太大稀释相关性、检索不准。太小丢上下文、召回碎片。固定长度只适合纯流水文本。表格类内容不能切(行离开表头就没意义),要整表成块或转成行式描述。深入:RAG体系与项目定位、RAG切分策略实战。
Q7 · 检索质量上不去,从哪里优化?
答:按链路四步排查。改写:口语 query → 检索友好的表述。混合检索:向量 + 关键词 BM25,互补。重排:召回粗排 top50,cross-encoder 精排 top5。上下文组装:引用来源、去掉冗余块。先看 badcase 是"没召回"还是"召回了没用好",前者改检索,后者改组装与提示词。
Q8 · RAG 系统怎么评测?
答:两层指标。检索层:召回率/MRR,拿标注的 query-chunk 对测。端到端层:固定输入的金标准集,人工审"答案是否有出处支撑、幻觉率、完整度"。关键是金标准集先建——没有它,一切调优都是 vibes。诚实加分项:说清当前系统没有系统性评测集、改进路线是先建 50 条金标准,比吹牛可信。
Q9 · 什么时候不需要 RAG?
答:数据量小且结构化时不需要——直接渲染成清单塞进窗口更准更便宜。RAG 的适用前提是"知识量大到塞不下 + 有长尾查询需求"。佐证:ai-service 的报告解读不是 RAG,是"结构化输入 + LLM",且不应该是 RAG。每次输入就是几十项指标,检索是负收益。能讲清"不用"的边界,比背流程更能证明做过工程。
四、Agent 与工具设计
Q10 · 给模型的工具怎么设计?描述怎么写?给几个合适?
答:工具 = 类型签名 + 自然语言描述 + 参数 schema。描述写给模型看,要说清"什么时候该用我、参数什么含义、返回什么",模糊描述 = 误调用。数量上宁少勿多(不超过 10 个,多了选择准确率下降)。功能重叠的工具必须合并。佐证:ai-service 工具用 pydantic 声明参数 schema,描述即契约。
Q11 · 模型输出怎么变成下游敢用的结构化数据?
答:两层。生成侧用 JSON 模式/函数调用 + 提示词钉死"只输出一个 JSON 对象",并给 null 出口。没有"我不知道"的合法出口,模型就会编值。解析侧宽容兜底——剥 ```json 围栏、字段缺失给默认值,pydantic 校验兜住类型。提示词约束是概率性的,解析兜底是确定性的,两层都要。深入:结构化输出工程-Pydantic与LLM。
Q12 · Agent 循环失控怎么办?
答:三道保险。最大迭代数硬上限(LangGraph recursion_limit)。每步工具调用超时。循环检测:连续 N 次相同工具+相同参数就强制收敛。再加成本预算:token 花销超阈值直接降级。原则:模型决定"做什么",但终止条件永远握在工程手里。
五、幻觉缓解
Q13 · 幻觉的成因是什么?
答:三条,对策不同。概率本质:训练目标是"像语料一样说话"不是"说真话",流畅≠正确。知识截止:参数冻结在训练截止日,问新事必编。上下文挤压:长上下文中间内容注意力被稀释。先诊断成因再选手段——这句话比任何单点技巧值钱。深入:LLM基础-Token上下文与幻觉。
Q14 · 怎么让模型承认"不知道"?
答:指令层把"不确定就说不确定"写进系统提示词(从弱默认提升为指令要求)。数据层给合法出口——看不清的字段输出 null 而不是编值(report_ocr 的做法)。流程层重要结论要求引用输入依据,答不上的走人工兜底话术。
Q15 · 数字/事实类输出怎么兜底?幻觉不可能全消,最后防线是什么?
答:把确定性计算从模型手里拿走——参考区间比对、单位换算、阈值判断预先算好。模型只组织语言。输出后的后果管理是最后防线("异常指标请遵医嘱"这类免责与引导)。四层递进:结构化输入 → 约束输出 → 提示红线 → 沙箱降级(无 key 时 effective_mock 直接确定性输出,零幻觉零费用)。
六、提示注入防护
Q16 · 什么是提示注入?攻击面在哪?
答:攻击者在"模型会读到的数据"里夹带指令(文档内容、网页、工具返回值、用户消息)。这会劫持模型行为——泄露系统提示词、越权调工具。攻击面 = 一切进入窗口的不可信文本。Agent 会用工具,所以注入的后果从"说错话"升级为"做错事"。深入:智能体的身份链与工具安全。
Q17 · 提示注入怎么防?能根治吗?
答:不能根治(模型分不清"指令"和"数据"是原理性缺陷),只能分层收窄。权限层——工具按调用者身份最小授权,身份链模型不可伪造。链路是网关验签 → 服务二次验签 → ContextVar 注入,模型层拿不到身份字段。数据层——外部内容明确标记为数据、工具返回做净化。输出层——敏感工具要二次确认。核心心法:把模型当不可信组件,安全边界画在工程层。
七、成本控制
Q18 · LLM 应用的成本怎么管?
答:四项措施。输入裁剪:结构化渲染代替原始数据,输入小三个收益同向——省钱护注意力降延迟。输出上限:字数约束就是单次成本上限,输出 token 更贵。模型分级:简单任务小模型/规则,复杂任务大模型。实例复用与缓存:chat_model 工厂 lru_cache,OpenAI 兼容协议随时换厂商比价。
再加一层:沙箱模式让 CI/演示零费用。佐证:ai-service 四件全占,报告解读单次调用账可手算。
八、流式输出
Q19 · 为什么要流式?怎么实现?
答:体验与实效两个理由。生成是逐 token 的,流式让首字节提前数秒(用户 1 秒内看到第一个字,比 10 秒后看到全文体验好)。长输出还能让用户提前打断止损。实现上 SSE 逐事件推送:LangChain astream_events 把"模型 token / 工具开始 / 工具结束"分类成事件流,前端按类型渲染。佐证:ai-service 的 open_agent 接口就是 astream_events → SSE 分发。深入:ReAct与LangGraph工程实践。
Q20 · 流式链路的坑有哪些?
答:三坑。网关/代理缓冲——Nginx 的 proxy_buffering 会把事件攒成一坨,要显式关闭(X-Accel-Buffering: no 或配置)。错误语义——流已经吐了一半再失败,没法回滚已显示内容,错误事件要单独设计。连接管理——SSE 长连接占住网关超时与并发配额,keep-alive 心跳与断线重连要配套。
深入阅读
| 篇目 | 覆盖本题集的哪些题 |
|---|---|
| LLM基础-Token上下文与幻觉 | Q1/Q3/Q13-15(token 三账、温度选型、幻觉四层缓解) |
| RAG体系与项目定位 | Q6-9(切分/混合检索/评测/"何时不用 RAG") |
| ReAct与LangGraph工程实践 | Q5/Q19(ReAct 循环、MemorySaver、astream_events 流式) |
| 结构化输出工程-Pydantic与LLM | Q11/Q14(pydantic 契约、宽容解析、null 出口) |
| 智能体的身份链与工具安全 | Q5/Q16-17(ContextVar 身份链、模型当不可信组件) |
| 系统提示词工程-从财务诊断说起 | Q2/Q14(六行提示词七个决策、红线写法) |
| [上下文工程-Context Engineering](../llm基础/上下文工程-Context Engineering.md) | Q1/Q3/Q4(窗口预算配比、长对话三级压缩、位置效应) |
| RAG切分策略实战 | Q6(语义边界切分、chunk/overlap 权衡、表格成块) |
| 向量检索选型-pgvector-Redis-Milvus-Qdrant | Q7(规模/过滤/运维三轴选型、混合检索的地基) |
| Few-shot与思维链 | Q2/Q11(示例作格式锚、输出可解析的结构化范式) |
| MCP协议与企业落地 | Q10(工具接入的 M×N 矩阵降为 M+N、企业四件套) |
| 自托管LLM推理-vLLM与SGLang | Q18(API 与自托管的成本账、KV cache 与吞吐) |
面试官视角小结
- 答题骨架:结论 → 机制 → 项目佐证,30 秒内完成。"我们生产上是……"是区分背题与实战的分水岭。
- 八主题各一句:上下文工程管"看见什么"。多轮状态管"记住什么、裁掉什么"。RAG 四步(切分/混合检索/重排/评测)加一条"何时不用"。Agent 三保险(迭代上限/超时/终止权在工程)。幻觉三成因四缓解。注入防不住但权限能收(身份链不可伪造)。成本四措施(裁输入/压输出/分级/复用)。流式管首字节与三坑(缓冲/半途错误/长连接)。
- 诚实是加分项。说"还没有系统性评测集,改进路线是先建金标准"。这比编一个评测体系可信得多。
- 所有题最后落回一个原则:模型是概率组件、不可信组件、有成本组件——工程的价值就是给它画边界。
2026-10 新增(留白补齐)。