一、Python基础工程能力10题 ### 基础题1. 简历提到你使用过**生成器、装饰器、上下文管理器、匿名函数**分别说说它们的作用结合你的Streamlit流式输出项目举例说明生成器怎么解决回答丢失问题生成器作用使用yield代替 return惰性迭代、逐段产出数据不会一次性把完整结果存入内存每次迭代只生成一小段内容节省内存支持流式分段输出。装饰器作用无侵入式扩展函数功能不修改原函数代码在函数执行前后增加通用逻辑实现代码复用。 常用场景接口耗时统计、日志打印、异常捕获、鉴权。上下文管理器作用自动管理资源的创建与释放不用手动写 try-finally避免资源泄漏。底层依靠__enter__、__exit__魔术方法。匿名函数作用快速创建一次性简单函数无需单独 def 定义适合短逻辑映射、筛选。在 Streamlit 项目中我遇到的问题是AI 回复是一个流式返回的数据流如果不用生成器我需要等全部回复生成完才能显示而且一旦页面刷新正在生成的回复就丢了。我写了一个capture生成器函数它做的事很简单每收到一个片段就立刻存到缓存列表里同时把这个片段yield出去用于显示。这样既实现了打字机效果又能确保每个片段在生成时就已经被持久化到st.session_state里。即使页面在回复过程中被刷新因为数据已经被捕获并保存了重新渲染时也能从历史记录里恢复不会丢失。2. 什么是Python装饰器写一个简单计时装饰器说明在你的AI项目中可以用来做什么装饰器是 Python 里一种在不修改原函数代码的前提下为函数增加额外功能的方式计时装饰器例子import time # 1. 定义一个装饰器用来计算函数耗时 def timer(func): def wrapper(*args, **kwargs): # *args, **kwargs 保证能接收任意参数 start time.time() result func(*args, **kwargs) # 执行原函数 end time.time() print(f函数 {func.__name__} 执行耗时: {end - start:.4f} 秒) return result return wrapper # 2. 使用装饰器在函数定义前加上 timer timer def slow_function(): time.sleep(1) # 模拟一个耗时操作 return 运行完毕 # 3. 调用函数会自动打印耗时 slow_function() # 控制台输出函数 slow_function 执行耗时: 1.0003 秒AI项目中我用来检查上下文里的report标记如果为True就换报告提示词否则用默认提示词。dynamic_prompt装饰器确保它在每次调用模型前自动执行。# 这段代码是一个动态提示词Dynamic Prompt中间件核心作用是让 Agent 根据当前对话的“场景”自动切换使用不同的 System Prompt系统提示词。 dynamic_prompt # 装饰器 # request 是 LangChain 框架自动传入的 ModelRequest 对象里面包含了当前对话的上下文信息比如历史消息、运行时状态runtime等 def report_prompt_switch(request: ModelRequest): from codes.prompt_loader import load_report_prompts, load_system_prompts if request.runtime is None or request.runtime.context is None: return load_system_prompts() is_report request.runtime.context.get(report, False) if is_report: return load_report_prompts() return load_system_prompts()3. 上下文管理器with的底层原理是什么在操作ChromaDB向量库时用with有什么好处with的底层基于__enter__和__exit__两个魔法方法它确保进入时打开资源退出时无论是否发生异常都会执行清理逻辑。好处需要手动关闭数据库连接。即使查询过程中报错也能保证资源被正确释放。在写入操作中能确保事务的完整提交或回滚。4. 匿名函数lambda适用场景哪些场景不建议用lambdalambda 适用于一次性的、逻辑简单到一行能写完的场景比如sort、map、filter。如果逻辑超过一行、需要复用或者代码可读性会受影响就不应该用 lambda。5. 你项目里用RecursiveCharacterTextSplitter做文本分割chunk_size设1000为什么不设更大/更小分割重叠chunk_overlap你有没有配置作用是什么切块过小 200语义不完整模型看不懂上下文;检索到的片段碎片化拼不出完整答案切块过大 1500检索精度下降相似度计算被噪音稀释;超出模型上下文窗口浪费token;多个知识点混在一起答案容易跑偏我设置了200方便理解的说法切下一段的时候把上一段结尾的一点内容复制过来贴在新一段的开头。这样即使边界处有重要信息被切断了它也会完整地出现在下一段里。6. 项目中引入MD5去重机制对文档入库讲下实现逻辑为什么向量库必须做文档去重不去重会有什么问题我在文档入库前先计算每个文件的 MD5 值然后与本地存储的历史md5.txt中进行比对。如果已存在说明文件之前已经处理过就直接跳过不再重复入库。如果不做去重同一个文档被多次入库后检索时返回的结果会被重复内容占据导致其他相关文档被淹没。同时重复向量会浪费存储空间拖慢检索速度增加维护成本。7. Streamlit开发时遇到过大模型回答丢失你用生成器stream()流式输出解决详细说下问题根源和你的实现方案8. 本地Ollama嵌入云端DeepSeek混合部署Python侧怎么做接口封装如何区分本地向量调用和云端大模型调用9. 如何封装通用AI工具链、配置文件实现Agent模板可复用举下你项目里的封装结构。10. 代码规范层面你做AI项目会怎么分层向量库层、Prompt层、Agent调度层、前端交互层二、RAG向量数据库专项12题贴合ChromaDB项目1. 简述完整RAG链路文档向量化→语义检索→上下文拼接→模型生成每一步的核心作用2. 什么是相似度检索top-k你项目设置k3为什么不设1或5k值怎么根据业务场景权衡3. 稠密向量检索 vs 稀疏检索关键词检索你的智能客服项目只做稠密检索吗有没有考虑混合检索优化准确率4. 本地Ollama嵌入模型对比云端嵌入API各自优缺点你选择混合部署的考量隐私、成本、速度 ### ChromaDB实操深挖 5. ChromaDB索引优化你做了哪些操作文档批量自动化入库怎么实现 6. ChromaDB持久化存储机制如果知识库上万条文档检索速度下降怎么优化 7. 向量入库前MD5去重是对原文做MD5还是向量做MD5两种方案的区别 8. RAG检索后拼接上下文如何控制上下文长度防止超出大模型上下文窗口DeepSeek窗口限制你怎么处理 ### 优化落地题 9. 你项目通过优化Prompt检索参数问答准确率从70%提升到85%详细说明优化了哪些检索参数 10. RAG常见痛点幻觉、无关文档召回、长文档分割丢失语义你在智能客服项目分别怎么解决 11. 测试用例50条评估准确率你的评估指标是什么召回率/精确率/问答匹配度评估流程怎么设计 12. 如果客户新增大量扫地机器人售后文档如何实现知识库增量更新不需要全量重建向量库三、AgentLangChain/ReAct大模型专项15题核心项目重点1. 什么是System Prompt、Few-shot、CoT思维链在你的智能客服Agent中分别怎么使用2. 设计扫地机器人客服System Prompt需要包含哪些要素如何限制大模型乱回答超出知识库的内容3. 如何动态切换提示词你项目动态提示词切换的业务场景是什么4. 大模型幻觉问题仅靠Prompt能解决吗结合RAGAgent说明配套方案。 ### ReAct Agent架构5. 解释ReAct架构「思考→行动→观察」完整流程在你的扫地机器人客服里工具调用有哪些6. Agent工具调度逻辑是你独立开发的讲下工具注册、工具选择、参数校验的实现流程7. LangChain Agent和LangGraph Agent区别你的项目为什么选择LangChain而非LangGraph什么场景会改用LangGraph8. Agent记忆Memory分哪些类型你的多轮对话使用哪种记忆如何防止多轮对话上下文过长 ### 项目深度深挖核心面试拉分题9. 你的Agent支持三类场景购买咨询、售后问答、使用报告生成三种场景如何做路由区分是Prompt路由还是分类器路由10. 工具调用失败、参数错误、知识库无对应文档时你的Agent容错逻辑是什么11. 同时调用本地Ollama嵌入云端DeepSeek网络波动、云端API超时如何做降级处理12. 如何封装通用Agent工程模板做到快速迁移到其他行业客服家电、美妆等模板包含哪些通用模块13. 流式输出Agent多轮对话结合会有什么坑你怎么保证对话记忆和流式返回同步14. 主流大模型APIDeepSeek、OpenAI、通义千问调用格式有差异你如何做统一封装适配多模型15. 如果让你优化当前Agent系统提升响应延迟你会从向量库、模型调用、检索策略三个维度分别给出方案四、前端综合项目场景面试题8题1. Streamlit原生状态管理有什么缺陷为什么会出现历史回答丢失流式生成器如何规避页面刷新丢失数据2. 你掌握Vue前端三件套如果把当前智能客服从Streamlit改成独立Vue前后端分离项目架构怎么设计1. 整体复盘你的智扫通机器人客服项目开发中遇到最大的3个技术难点以及完整解决方案2. 混合部署本地嵌入云端推理的数据隐私优势客户扫地机器人售后文档不对外上传具体怎么落地隔离3. 面试官场景题现在接入新品类扫地机器人新增1000份说明书要求1小时内完成知识库上线你完整操作流程4. 场景题线上用户反馈客服经常答非所问召回无关文档你怎么排查问题、分步优化5. 职业规划自我评价你专注AI Agent应用开发未来想深耕RAG/Agent还是大模型微调如何持续学习新技术6. 团队协作题产品要求新增「机器人故障自动报修」Agent工具和后端开发对接你如何设计工具接口、联调流程五、笔试题2道实操代码题面试现场手写1. 基于LangChainChromaDB写简化代码实现文档加载、文本分割、MD5去重、向量入库、top-k3相似度检索。这个是我用deepseek生成的2. 简易ReAct Agent伪代码实现工具注册查询售后知识库、生成使用报告、思考判断、工具调用、流式输出返回结果。六、HR综合软问题4题1. 项目是独立开发还是团队协作你负责的模块边界和其他同事如何配合 2. 开发周期从2026.5至今过程中有没有需求变更如何调整技术方案 3. 遇到技术卡点向量检索准确率低、流式bug时你的排查思路和学习渠道 4. 一周内可到岗能接受加班迭代AI项目吗如何平衡开发效率和代码质量RAG检索增强 top_k?“top-k是 RAG 检索阶段的一个关键参数它决定了向量数据库在完成相似度检索后返回给大模型作为上下文的相关文档片段数量。”k值太小比如 1~2模型能获取的信息就窄回答可能不够全面比如用户问‘怎么保养’模型只看到‘清理尘盒’漏掉了‘更换滤网’。k值太大比如 10~20模型会被大量信息淹没容易‘分心’而且检索到不相关内容时会产生噪声干扰答案的准确性。同时token 消耗和响应时间也会显著增加。“top-k通常会和chunk_size文本段最大长度、相似度阈值similarity_threshold一起调整。比如我会先设top_k3用 similarity_threshold1过滤低质量的片段保证给模型的信息既相关又干净。”如何设计一个高质量的 Prompt项目中我的 System Prompt 包含 7 条规则用 %s 动态注入用户配置通过测试验证效果。角色设定 → 任务目标 → 行为规则 → 输出格式。这样做的好处是即使换成不同的业务场景也能快速输出高质量的提示词。同时我会在测试中根据模型的输出效果进行迭代优化比如调整语气、加入Few-shot示例、或用Pydantic规范输出格式。”Temperature 参数模型生成结果的随机性的作用与调整场景场景temperature建议值为什么客服问答、RAG0.1-0.3需要高确定性基于检索内容回答问题不能瞎编通用聊天0.5-0.7平衡稳定性与自然度既不会太死板也不会太跑偏创意生成0.8-1.0需要多样性和新颖性鼓励模型“发散思维”“在我做的RAG 客服项目里我把temperature设为 0.2因为用户问的是具体产品问题需要基于知识库精准回答不能有太多发挥。而如果我要做一个营销文案生成器我会把它调到 0.9让模型发挥创造力。”Pydantic 在 AI 应用中的作用也就是把模型输出的“不确定性”转化为代码可处理的“确定性”比如我的客服项目里我需要模型返回一段JSON格式的评估结果包含intent意图和confidence置信度两个字段。我会用Pydantic定义一个这样的模型from pydantic import BaseModel class IntentResult(BaseModel): intent: str confidence: float然后当模型输出后我会直接用IntentResult.model_validate_json(response)来解析。如果模型输出的JSON缺少confidence字段或者confidence写成了字符串Pydantic会自动报错我就能在代码里捕获异常并处理比如让模型重新生成或者记录错误日志并返回一个兜底回复。”延申使用说明基础使用# BaseModel 是定义数据模型的基类Field 用来给字段添加描述、默认值、校验规则等元数据。 from pydantic import BaseModel, Field from langchain_openai import ChatOpenAI from langchain_core.prompts import PromptTemplate # 输出解析器---用来把大模型返回的文本解析成 Pydantic 模型实例。 from langchain_core.output_parsers import PydanticOutputParser import os # 1. 定义 Pydantic 模型 class Test(BaseModel): name: str Field(..., title姓名, description姓名) age: int Field(..., title年龄, description年龄) sex: str Field(..., title性别, description性别) # 2. 创建解析器不是从 model 调用而是直接创建实例 parser PydanticOutputParser(pydantic_objectTest) # 3. 创建提示词模板 prompt PromptTemplate( template从以下文本中提取信息。\n文本{text}\n{format_instructions}\n请只输出JSON。, input_variables[text], partial_variables{format_instructions: parser.get_format_instructions()} ) # 4. 创建模型 model ChatOpenAI( modeldeepseek-chat, api_keyos.environ.get(DEEPSEEK_API_KEY), base_urlhttps://api.deepseek.com/v1, temperature0 ) # 5. 组装链 chain prompt | model | parser # 6. 执行 result chain.invoke({text: 张三男年龄9}) print(result) print(type(result)) 输出name张三 age9 sex男 class __main__.TestPython 是动态语言你为什么要在代码里写类型注解提升代码可读性、IDE 支持与可维护性是团队协作与工程化的基础。你的项目如何在不同机器上保证运行环境一致为了保证项目在不同机器上运行一致我的方案是第一用venv创建独立的虚拟环境第二用requirements.txt锁定所有依赖的精确版本第三通过.env文件和python-dotenv管理环境变量避免硬编码。这样任何一台机器只需三步——克隆代码、创建虚拟环境、安装依赖——就能跑起来。上下文太长怎么办如何裁剪先通过元数据过滤、少召回减少总量再用 Rerank 按分数筛掉弱相关内容合并去重超长就整段删除低分 chunk也可以用父子分块架构、资料摘要压缩来控制上下文长度。RAG 检索效果不好你如何优化先看检索准不准。如果召回的 chunks 不相关我会试试混合检索向量 BM25和 Query 改写Query 改写就是先让大模型把用户问题“翻译”成文档里会出现的表述再去检索必要时加一层 Rerank向量检索只负责“粗筛”Rerank 负责“精排”。再看上下文全不全。如果相关但信息不够我会调整 chunk_size 和 overlap或者换成父子 chunk 结构。最后看模型生成。如果资料有答案但没回答出来我会优化 System Prompt加 Few-shot 示例并把 temperature 调低到 0.2 左右。ChromaDB 检索效果不好你从哪些环节排查怎么优化我会按照文档原始质量 → 文本分块与向量化 → 向量检索链路 → LLM 生成环节由上游到下游依次排查定位故障第一步校验原始文档质量先确认数据源本身是否合格检查文档有无关键信息缺失、乱码 / 特殊符号等格式污染去除重复、高度相似文档同时校验 Embedding 模型是否适配当前文档领域文本入库前是否做清洗预处理避免脏数据影响向量语义表达。第二步排查分块策略合理性抽取测试问题对应的原文核对切分后的 chunk核心知识点是否被拦腰切碎、语义断裂chunk_size、chunk_overlap 是否适配文本类型是否存在跨块关键信息丢失 若切片残缺调整分割器改用递归语义分割、修改块大小与重叠窗口同时将标题、关键词前置注入 chunk 增强语义。第三步全链路验证检索效果先看 Top-K 返回片段整体相关性分层定位 ① 无关内容过多先检查是否配置 metadata 预过滤缩小检索范围再调优 Chroma HNSW 索引参数、执行碎片整理增加相似度距离阈值过滤低分结果 ② 向量召回精准度不足采用 Query 改写扩充问句语义、多路召回搭配 BM25 做向量 关键词混合检索粗召回后接入 Rerank 重排模型剔除假相似片段。第四步检索素材正常但回答失真排查生成环节若检索返回的素材完整相关但 LLM 输出错误 / 幻觉优化 System Prompt强制模型仅依托检索内容作答增加无答案识别逻辑调低 temperature 减少随机编造对多条检索结果做去重、同文档内容聚合统一上下文格式通过 Pydantic 约束输出结构增加引用溯源校验拦截不符合规范的回答。如何让模型调用外部工具消息格式怎么写工具调用四步流程定义工具 → 告知模型调用规则 → 模型输出结构化调用指令 → 后端执行工具将工具结果追加到消息列表再次请求模型生成答案。消息分四类角色system系统指令 工具、user用户提问、assistant模型回复 / 工具调用、tool工具返回数据。两类格式闭源 APIGPT 系列用标准 tool_calls 结构tools 参数单独传入工具描述开源大模型依靠 Prompt 约定 JSON 输出格式后端手动解析工具调用。核心关键点工具执行结果必须作为一条独立消息放回上下文模型才能拿到外部数据作答。
AI Agent面试题第二期(持续更新)
一、Python基础工程能力10题 ### 基础题1. 简历提到你使用过**生成器、装饰器、上下文管理器、匿名函数**分别说说它们的作用结合你的Streamlit流式输出项目举例说明生成器怎么解决回答丢失问题生成器作用使用yield代替 return惰性迭代、逐段产出数据不会一次性把完整结果存入内存每次迭代只生成一小段内容节省内存支持流式分段输出。装饰器作用无侵入式扩展函数功能不修改原函数代码在函数执行前后增加通用逻辑实现代码复用。 常用场景接口耗时统计、日志打印、异常捕获、鉴权。上下文管理器作用自动管理资源的创建与释放不用手动写 try-finally避免资源泄漏。底层依靠__enter__、__exit__魔术方法。匿名函数作用快速创建一次性简单函数无需单独 def 定义适合短逻辑映射、筛选。在 Streamlit 项目中我遇到的问题是AI 回复是一个流式返回的数据流如果不用生成器我需要等全部回复生成完才能显示而且一旦页面刷新正在生成的回复就丢了。我写了一个capture生成器函数它做的事很简单每收到一个片段就立刻存到缓存列表里同时把这个片段yield出去用于显示。这样既实现了打字机效果又能确保每个片段在生成时就已经被持久化到st.session_state里。即使页面在回复过程中被刷新因为数据已经被捕获并保存了重新渲染时也能从历史记录里恢复不会丢失。2. 什么是Python装饰器写一个简单计时装饰器说明在你的AI项目中可以用来做什么装饰器是 Python 里一种在不修改原函数代码的前提下为函数增加额外功能的方式计时装饰器例子import time # 1. 定义一个装饰器用来计算函数耗时 def timer(func): def wrapper(*args, **kwargs): # *args, **kwargs 保证能接收任意参数 start time.time() result func(*args, **kwargs) # 执行原函数 end time.time() print(f函数 {func.__name__} 执行耗时: {end - start:.4f} 秒) return result return wrapper # 2. 使用装饰器在函数定义前加上 timer timer def slow_function(): time.sleep(1) # 模拟一个耗时操作 return 运行完毕 # 3. 调用函数会自动打印耗时 slow_function() # 控制台输出函数 slow_function 执行耗时: 1.0003 秒AI项目中我用来检查上下文里的report标记如果为True就换报告提示词否则用默认提示词。dynamic_prompt装饰器确保它在每次调用模型前自动执行。# 这段代码是一个动态提示词Dynamic Prompt中间件核心作用是让 Agent 根据当前对话的“场景”自动切换使用不同的 System Prompt系统提示词。 dynamic_prompt # 装饰器 # request 是 LangChain 框架自动传入的 ModelRequest 对象里面包含了当前对话的上下文信息比如历史消息、运行时状态runtime等 def report_prompt_switch(request: ModelRequest): from codes.prompt_loader import load_report_prompts, load_system_prompts if request.runtime is None or request.runtime.context is None: return load_system_prompts() is_report request.runtime.context.get(report, False) if is_report: return load_report_prompts() return load_system_prompts()3. 上下文管理器with的底层原理是什么在操作ChromaDB向量库时用with有什么好处with的底层基于__enter__和__exit__两个魔法方法它确保进入时打开资源退出时无论是否发生异常都会执行清理逻辑。好处需要手动关闭数据库连接。即使查询过程中报错也能保证资源被正确释放。在写入操作中能确保事务的完整提交或回滚。4. 匿名函数lambda适用场景哪些场景不建议用lambdalambda 适用于一次性的、逻辑简单到一行能写完的场景比如sort、map、filter。如果逻辑超过一行、需要复用或者代码可读性会受影响就不应该用 lambda。5. 你项目里用RecursiveCharacterTextSplitter做文本分割chunk_size设1000为什么不设更大/更小分割重叠chunk_overlap你有没有配置作用是什么切块过小 200语义不完整模型看不懂上下文;检索到的片段碎片化拼不出完整答案切块过大 1500检索精度下降相似度计算被噪音稀释;超出模型上下文窗口浪费token;多个知识点混在一起答案容易跑偏我设置了200方便理解的说法切下一段的时候把上一段结尾的一点内容复制过来贴在新一段的开头。这样即使边界处有重要信息被切断了它也会完整地出现在下一段里。6. 项目中引入MD5去重机制对文档入库讲下实现逻辑为什么向量库必须做文档去重不去重会有什么问题我在文档入库前先计算每个文件的 MD5 值然后与本地存储的历史md5.txt中进行比对。如果已存在说明文件之前已经处理过就直接跳过不再重复入库。如果不做去重同一个文档被多次入库后检索时返回的结果会被重复内容占据导致其他相关文档被淹没。同时重复向量会浪费存储空间拖慢检索速度增加维护成本。7. Streamlit开发时遇到过大模型回答丢失你用生成器stream()流式输出解决详细说下问题根源和你的实现方案8. 本地Ollama嵌入云端DeepSeek混合部署Python侧怎么做接口封装如何区分本地向量调用和云端大模型调用9. 如何封装通用AI工具链、配置文件实现Agent模板可复用举下你项目里的封装结构。10. 代码规范层面你做AI项目会怎么分层向量库层、Prompt层、Agent调度层、前端交互层二、RAG向量数据库专项12题贴合ChromaDB项目1. 简述完整RAG链路文档向量化→语义检索→上下文拼接→模型生成每一步的核心作用2. 什么是相似度检索top-k你项目设置k3为什么不设1或5k值怎么根据业务场景权衡3. 稠密向量检索 vs 稀疏检索关键词检索你的智能客服项目只做稠密检索吗有没有考虑混合检索优化准确率4. 本地Ollama嵌入模型对比云端嵌入API各自优缺点你选择混合部署的考量隐私、成本、速度 ### ChromaDB实操深挖 5. ChromaDB索引优化你做了哪些操作文档批量自动化入库怎么实现 6. ChromaDB持久化存储机制如果知识库上万条文档检索速度下降怎么优化 7. 向量入库前MD5去重是对原文做MD5还是向量做MD5两种方案的区别 8. RAG检索后拼接上下文如何控制上下文长度防止超出大模型上下文窗口DeepSeek窗口限制你怎么处理 ### 优化落地题 9. 你项目通过优化Prompt检索参数问答准确率从70%提升到85%详细说明优化了哪些检索参数 10. RAG常见痛点幻觉、无关文档召回、长文档分割丢失语义你在智能客服项目分别怎么解决 11. 测试用例50条评估准确率你的评估指标是什么召回率/精确率/问答匹配度评估流程怎么设计 12. 如果客户新增大量扫地机器人售后文档如何实现知识库增量更新不需要全量重建向量库三、AgentLangChain/ReAct大模型专项15题核心项目重点1. 什么是System Prompt、Few-shot、CoT思维链在你的智能客服Agent中分别怎么使用2. 设计扫地机器人客服System Prompt需要包含哪些要素如何限制大模型乱回答超出知识库的内容3. 如何动态切换提示词你项目动态提示词切换的业务场景是什么4. 大模型幻觉问题仅靠Prompt能解决吗结合RAGAgent说明配套方案。 ### ReAct Agent架构5. 解释ReAct架构「思考→行动→观察」完整流程在你的扫地机器人客服里工具调用有哪些6. Agent工具调度逻辑是你独立开发的讲下工具注册、工具选择、参数校验的实现流程7. LangChain Agent和LangGraph Agent区别你的项目为什么选择LangChain而非LangGraph什么场景会改用LangGraph8. Agent记忆Memory分哪些类型你的多轮对话使用哪种记忆如何防止多轮对话上下文过长 ### 项目深度深挖核心面试拉分题9. 你的Agent支持三类场景购买咨询、售后问答、使用报告生成三种场景如何做路由区分是Prompt路由还是分类器路由10. 工具调用失败、参数错误、知识库无对应文档时你的Agent容错逻辑是什么11. 同时调用本地Ollama嵌入云端DeepSeek网络波动、云端API超时如何做降级处理12. 如何封装通用Agent工程模板做到快速迁移到其他行业客服家电、美妆等模板包含哪些通用模块13. 流式输出Agent多轮对话结合会有什么坑你怎么保证对话记忆和流式返回同步14. 主流大模型APIDeepSeek、OpenAI、通义千问调用格式有差异你如何做统一封装适配多模型15. 如果让你优化当前Agent系统提升响应延迟你会从向量库、模型调用、检索策略三个维度分别给出方案四、前端综合项目场景面试题8题1. Streamlit原生状态管理有什么缺陷为什么会出现历史回答丢失流式生成器如何规避页面刷新丢失数据2. 你掌握Vue前端三件套如果把当前智能客服从Streamlit改成独立Vue前后端分离项目架构怎么设计1. 整体复盘你的智扫通机器人客服项目开发中遇到最大的3个技术难点以及完整解决方案2. 混合部署本地嵌入云端推理的数据隐私优势客户扫地机器人售后文档不对外上传具体怎么落地隔离3. 面试官场景题现在接入新品类扫地机器人新增1000份说明书要求1小时内完成知识库上线你完整操作流程4. 场景题线上用户反馈客服经常答非所问召回无关文档你怎么排查问题、分步优化5. 职业规划自我评价你专注AI Agent应用开发未来想深耕RAG/Agent还是大模型微调如何持续学习新技术6. 团队协作题产品要求新增「机器人故障自动报修」Agent工具和后端开发对接你如何设计工具接口、联调流程五、笔试题2道实操代码题面试现场手写1. 基于LangChainChromaDB写简化代码实现文档加载、文本分割、MD5去重、向量入库、top-k3相似度检索。这个是我用deepseek生成的2. 简易ReAct Agent伪代码实现工具注册查询售后知识库、生成使用报告、思考判断、工具调用、流式输出返回结果。六、HR综合软问题4题1. 项目是独立开发还是团队协作你负责的模块边界和其他同事如何配合 2. 开发周期从2026.5至今过程中有没有需求变更如何调整技术方案 3. 遇到技术卡点向量检索准确率低、流式bug时你的排查思路和学习渠道 4. 一周内可到岗能接受加班迭代AI项目吗如何平衡开发效率和代码质量RAG检索增强 top_k?“top-k是 RAG 检索阶段的一个关键参数它决定了向量数据库在完成相似度检索后返回给大模型作为上下文的相关文档片段数量。”k值太小比如 1~2模型能获取的信息就窄回答可能不够全面比如用户问‘怎么保养’模型只看到‘清理尘盒’漏掉了‘更换滤网’。k值太大比如 10~20模型会被大量信息淹没容易‘分心’而且检索到不相关内容时会产生噪声干扰答案的准确性。同时token 消耗和响应时间也会显著增加。“top-k通常会和chunk_size文本段最大长度、相似度阈值similarity_threshold一起调整。比如我会先设top_k3用 similarity_threshold1过滤低质量的片段保证给模型的信息既相关又干净。”如何设计一个高质量的 Prompt项目中我的 System Prompt 包含 7 条规则用 %s 动态注入用户配置通过测试验证效果。角色设定 → 任务目标 → 行为规则 → 输出格式。这样做的好处是即使换成不同的业务场景也能快速输出高质量的提示词。同时我会在测试中根据模型的输出效果进行迭代优化比如调整语气、加入Few-shot示例、或用Pydantic规范输出格式。”Temperature 参数模型生成结果的随机性的作用与调整场景场景temperature建议值为什么客服问答、RAG0.1-0.3需要高确定性基于检索内容回答问题不能瞎编通用聊天0.5-0.7平衡稳定性与自然度既不会太死板也不会太跑偏创意生成0.8-1.0需要多样性和新颖性鼓励模型“发散思维”“在我做的RAG 客服项目里我把temperature设为 0.2因为用户问的是具体产品问题需要基于知识库精准回答不能有太多发挥。而如果我要做一个营销文案生成器我会把它调到 0.9让模型发挥创造力。”Pydantic 在 AI 应用中的作用也就是把模型输出的“不确定性”转化为代码可处理的“确定性”比如我的客服项目里我需要模型返回一段JSON格式的评估结果包含intent意图和confidence置信度两个字段。我会用Pydantic定义一个这样的模型from pydantic import BaseModel class IntentResult(BaseModel): intent: str confidence: float然后当模型输出后我会直接用IntentResult.model_validate_json(response)来解析。如果模型输出的JSON缺少confidence字段或者confidence写成了字符串Pydantic会自动报错我就能在代码里捕获异常并处理比如让模型重新生成或者记录错误日志并返回一个兜底回复。”延申使用说明基础使用# BaseModel 是定义数据模型的基类Field 用来给字段添加描述、默认值、校验规则等元数据。 from pydantic import BaseModel, Field from langchain_openai import ChatOpenAI from langchain_core.prompts import PromptTemplate # 输出解析器---用来把大模型返回的文本解析成 Pydantic 模型实例。 from langchain_core.output_parsers import PydanticOutputParser import os # 1. 定义 Pydantic 模型 class Test(BaseModel): name: str Field(..., title姓名, description姓名) age: int Field(..., title年龄, description年龄) sex: str Field(..., title性别, description性别) # 2. 创建解析器不是从 model 调用而是直接创建实例 parser PydanticOutputParser(pydantic_objectTest) # 3. 创建提示词模板 prompt PromptTemplate( template从以下文本中提取信息。\n文本{text}\n{format_instructions}\n请只输出JSON。, input_variables[text], partial_variables{format_instructions: parser.get_format_instructions()} ) # 4. 创建模型 model ChatOpenAI( modeldeepseek-chat, api_keyos.environ.get(DEEPSEEK_API_KEY), base_urlhttps://api.deepseek.com/v1, temperature0 ) # 5. 组装链 chain prompt | model | parser # 6. 执行 result chain.invoke({text: 张三男年龄9}) print(result) print(type(result)) 输出name张三 age9 sex男 class __main__.TestPython 是动态语言你为什么要在代码里写类型注解提升代码可读性、IDE 支持与可维护性是团队协作与工程化的基础。你的项目如何在不同机器上保证运行环境一致为了保证项目在不同机器上运行一致我的方案是第一用venv创建独立的虚拟环境第二用requirements.txt锁定所有依赖的精确版本第三通过.env文件和python-dotenv管理环境变量避免硬编码。这样任何一台机器只需三步——克隆代码、创建虚拟环境、安装依赖——就能跑起来。上下文太长怎么办如何裁剪先通过元数据过滤、少召回减少总量再用 Rerank 按分数筛掉弱相关内容合并去重超长就整段删除低分 chunk也可以用父子分块架构、资料摘要压缩来控制上下文长度。RAG 检索效果不好你如何优化先看检索准不准。如果召回的 chunks 不相关我会试试混合检索向量 BM25和 Query 改写Query 改写就是先让大模型把用户问题“翻译”成文档里会出现的表述再去检索必要时加一层 Rerank向量检索只负责“粗筛”Rerank 负责“精排”。再看上下文全不全。如果相关但信息不够我会调整 chunk_size 和 overlap或者换成父子 chunk 结构。最后看模型生成。如果资料有答案但没回答出来我会优化 System Prompt加 Few-shot 示例并把 temperature 调低到 0.2 左右。ChromaDB 检索效果不好你从哪些环节排查怎么优化我会按照文档原始质量 → 文本分块与向量化 → 向量检索链路 → LLM 生成环节由上游到下游依次排查定位故障第一步校验原始文档质量先确认数据源本身是否合格检查文档有无关键信息缺失、乱码 / 特殊符号等格式污染去除重复、高度相似文档同时校验 Embedding 模型是否适配当前文档领域文本入库前是否做清洗预处理避免脏数据影响向量语义表达。第二步排查分块策略合理性抽取测试问题对应的原文核对切分后的 chunk核心知识点是否被拦腰切碎、语义断裂chunk_size、chunk_overlap 是否适配文本类型是否存在跨块关键信息丢失 若切片残缺调整分割器改用递归语义分割、修改块大小与重叠窗口同时将标题、关键词前置注入 chunk 增强语义。第三步全链路验证检索效果先看 Top-K 返回片段整体相关性分层定位 ① 无关内容过多先检查是否配置 metadata 预过滤缩小检索范围再调优 Chroma HNSW 索引参数、执行碎片整理增加相似度距离阈值过滤低分结果 ② 向量召回精准度不足采用 Query 改写扩充问句语义、多路召回搭配 BM25 做向量 关键词混合检索粗召回后接入 Rerank 重排模型剔除假相似片段。第四步检索素材正常但回答失真排查生成环节若检索返回的素材完整相关但 LLM 输出错误 / 幻觉优化 System Prompt强制模型仅依托检索内容作答增加无答案识别逻辑调低 temperature 减少随机编造对多条检索结果做去重、同文档内容聚合统一上下文格式通过 Pydantic 约束输出结构增加引用溯源校验拦截不符合规范的回答。如何让模型调用外部工具消息格式怎么写工具调用四步流程定义工具 → 告知模型调用规则 → 模型输出结构化调用指令 → 后端执行工具将工具结果追加到消息列表再次请求模型生成答案。消息分四类角色system系统指令 工具、user用户提问、assistant模型回复 / 工具调用、tool工具返回数据。两类格式闭源 APIGPT 系列用标准 tool_calls 结构tools 参数单独传入工具描述开源大模型依靠 Prompt 约定 JSON 输出格式后端手动解析工具调用。核心关键点工具执行结果必须作为一条独立消息放回上下文模型才能拿到外部数据作答。