当前位置: 首页 > news >正文

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适用场景,哪些场景不建议用lambda?

lambda 适用于一次性的、逻辑简单到一行能写完的场景,比如sortmapfilter。如果逻辑超过一行、需要复用,或者代码可读性会受影响,就不应该用 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?你项目设置k=3,为什么不设1或5?k值怎么根据业务场景权衡?

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. 如果客户新增大量扫地机器人售后文档,如何实现知识库增量更新,不需要全量重建向量库?

三、Agent&LangChain/ReAct大模型专项(15题,核心项目重点)

1. 什么是System Prompt、Few-shot、CoT思维链?在你的智能客服Agent中分别怎么使用?

2. 设计扫地机器人客服System Prompt需要包含哪些要素?如何限制大模型乱回答超出知识库的内容?

3. 如何动态切换提示词?你项目动态提示词切换的业务场景是什么?

4. 大模型幻觉问题,仅靠Prompt能解决吗?结合RAG+Agent说明配套方案。 ### ReAct Agent架构

5. 解释ReAct架构「思考→行动→观察」完整流程,在你的扫地机器人客服里,工具调用有哪些?

6. Agent工具调度逻辑是你独立开发的,讲下工具注册、工具选择、参数校验的实现流程?

7. LangChain Agent和LangGraph Agent区别,你的项目为什么选择LangChain而非LangGraph?什么场景会改用LangGraph?

8. Agent记忆Memory分哪些类型?你的多轮对话使用哪种记忆?如何防止多轮对话上下文过长? ### 项目深度深挖(核心面试拉分题)

9. 你的Agent支持三类场景:购买咨询、售后问答、使用报告生成,三种场景如何做路由区分?是Prompt路由还是分类器路由?

10. 工具调用失败、参数错误、知识库无对应文档时,你的Agent容错逻辑是什么?

11. 同时调用本地Ollama嵌入+云端DeepSeek,网络波动、云端API超时如何做降级处理?

12. 如何封装通用Agent工程模板,做到快速迁移到其他行业客服(家电、美妆等)?模板包含哪些通用模块?

13. 流式输出+Agent多轮对话结合会有什么坑?你怎么保证对话记忆和流式返回同步?

14. 主流大模型API:DeepSeek、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. 基于LangChain+ChromaDB,写简化代码实现:文档加载、文本分割、MD5去重、向量入库、top-k=3相似度检索。(这个是我用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_k=3,用 similarity_threshold=1过滤低质量的片段,保证给模型的信息既相关又干净。”

如何设计一个高质量的 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_object=Test) # 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( model="deepseek-chat", api_key=os.environ.get('DEEPSEEK_API_KEY'), base_url="https://api.deepseek.com/v1", temperature=0 ) # 5. 组装链 chain = prompt | model | parser # 6. 执行 result = chain.invoke({"text": "张三男年龄9"}) print(result) print(type(result)) 输出:name='张三' age=9 sex='男' <class '__main__.Test'>

Python 是动态语言,你为什么要在代码里写类型注解?

提升代码可读性、IDE 支持与可维护性,是团队协作与工程化的基础。

你的项目如何在不同机器上保证运行环境一致?

为了保证项目在不同机器上运行一致,我的方案是:

第一,用venv创建独立的虚拟环境;

第二,用requirements.txt锁定所有依赖的精确版本;

第三,通过.env文件和python-dotenv管理环境变量,避免硬编码。这样,任何一台机器只需三步——克隆代码、创建虚拟环境、安装依赖——就能跑起来。

上下文太长怎么办?如何裁剪?

先通过元数据过滤、少召回减少总量;再用 Rerank 按分数筛掉弱相关内容,合并去重;超长就整段删除低分 chunk,也可以用父子分块架构、资料摘要压缩来控制上下文长度。

RAG 检索效果不好,你如何优化?

  1. 先看检索准不准。如果召回的 chunks 不相关,我会试试混合检索(向量 + BM25)和 Query 改写(Query 改写就是先让大模型把用户问题“翻译”成文档里会出现的表述,再去检索),必要时加一层 Rerank(向量检索只负责“粗筛”,Rerank 负责“精排”)。

  2. 再看上下文全不全。如果相关但信息不够,我会调整 chunk_size 和 overlap,或者换成父子 chunk 结构。

  3. 最后看模型生成。如果资料有答案但没回答出来,我会优化 System Prompt,加 Few-shot 示例,并把 temperature 调低到 0.2 左右。

ChromaDB 检索效果不好,你从哪些环节排查?怎么优化?

我会按照文档原始质量 → 文本分块与向量化 → 向量检索链路 → LLM 生成环节由上游到下游依次排查,定位故障:

  1. 第一步:校验原始文档质量先确认数据源本身是否合格:检查文档有无关键信息缺失、乱码 / 特殊符号等格式污染;去除重复、高度相似文档;同时校验 Embedding 模型是否适配当前文档领域,文本入库前是否做清洗预处理,避免脏数据影响向量语义表达。
  2. 第二步:排查分块策略合理性抽取测试问题对应的原文,核对切分后的 chunk:
    • 核心知识点是否被拦腰切碎、语义断裂;
    • chunk_size、chunk_overlap 是否适配文本类型,是否存在跨块关键信息丢失; 若切片残缺,调整分割器(改用递归语义分割)、修改块大小与重叠窗口,同时将标题、关键词前置注入 chunk 增强语义。
  3. 第三步:全链路验证检索效果先看 Top-K 返回片段整体相关性,分层定位: ① 无关内容过多:先检查是否配置 metadata 预过滤缩小检索范围;再调优 Chroma HNSW 索引参数、执行碎片整理,增加相似度距离阈值过滤低分结果; ② 向量召回精准度不足:采用 Query 改写扩充问句语义、多路召回;搭配 BM25 做向量 + 关键词混合检索;粗召回后接入 Rerank 重排模型剔除假相似片段。
  4. 第四步:检索素材正常但回答失真,排查生成环节若检索返回的素材完整相关,但 LLM 输出错误 / 幻觉:
    • 优化 System Prompt,强制模型仅依托检索内容作答,增加无答案识别逻辑;
    • 调低 temperature 减少随机编造;
    • 对多条检索结果做去重、同文档内容聚合,统一上下文格式;
    • 通过 Pydantic 约束输出结构,增加引用溯源校验,拦截不符合规范的回答。

如何让模型调用外部工具?消息格式怎么写?

  • 工具调用四步流程:定义工具 → 告知模型调用规则 → 模型输出结构化调用指令 → 后端执行工具,将工具结果追加到消息列表再次请求模型生成答案。
  • 消息分四类角色:system(系统指令 + 工具)、user(用户提问)、assistant(模型回复 / 工具调用)、tool(工具返回数据)。
  • 两类格式:
    • 闭源 API(GPT 系列):用标准 tool_calls 结构,tools 参数单独传入工具描述;
    • 开源大模型:依靠 Prompt 约定 JSON 输出格式,后端手动解析工具调用。
  • 核心关键点:工具执行结果必须作为一条独立消息放回上下文,模型才能拿到外部数据作答。
http://www.jsqmd.com/news/1250517/

相关文章:

  • 计算机毕业设计之基于jsp在线选课系统的设计与实现
  • 天道随笔第二篇
  • 非结构化数据满天飞,90%的敏感数据藏在文档堆里,怎么让AI真正分得清?
  • 深圳设备搬运公司罗湖区2026年:医疗设备搬运+养老院搬迁合作案例,养老产业支持要点 - szxybj
  • 2026年怎么选靠谱品牌全案公司?五家主流机构对比参考 - 优企甄选
  • 2026热门视频去水印在线工具推荐,免费网站优缺点与侵权注意事项 - 免费软件工具方法教程
  • C语言学习(跟b站鹏哥)
  • Django计算机毕设之基于 Django 的贵州山地特色产品产地直售商城系统设计与实现 轻量化贵州特色好物线上交易平台的设计与实现(完整前后端 代码+说明文档+LW,调试定制等)
  • AI写作工具如何提升学术论文效率与质量
  • 白帽SEO服务商机构排名:白帽SEO与GEO双合规服务商分级排名榜单 - GEORANK
  • 北京食品检测服务企业做GEO服务商怎么选?2026靠谱选型指南与五家服务商深度测评 - 小随科技
  • ShortGPT: Layers in Large Language Models are More Redundant Than You Expect 解读
  • PCBA贴片加工中影响回流焊接的因素
  • 【项目扩展实战|第8篇】Spring Boot + MyBatis 分页条件查询接口优化
  • [具身智能-632]:efficientnasnet、googlenet、resnet18、vargconvnet对比
  • 网站自动建站备份工具:本地测试站,1分钟平滑传阿里云
  • 广州黄埔区搬家公司起步价完整明细汇总,正规服务商联系方式整理,全城可随时咨询报价 - 厚道搬家
  • 天河区搬家公司全街道收费价格一览,广州天河居民企业搬家报价及正规搬家联系电话汇总 - 厚道搬家
  • 论文查重免费平台哪个准?2026年实测4家,这家和学校结果误差不到3%
  • 面向欧洲GDPR合规的Node-RED边缘计算网关本地脱敏架构实战
  • 大模型入门与实战:从原理到企业级应用优化
  • 华为OD机试真题 新系统 2026-07-15 JavaGoC 实现【谁没交卷】
  • 青岛工程纠纷律师于臻分析转包、分包与实际施工人的法律关系 - 新思维商业观察
  • 白帽SEO服务商平台推荐:2026年平台化服务选型指南 - GEORANK
  • 2026年充电桩怎么选:七个问题帮你找到适合自家的那一款
  • 环境变量“爆仓”记:Spring Boot 云函数 4KB 限制下的配置瘦身与外部化破局之道
  • 去水印软件哪个好用?2026有什么软件可以去视频水印 - 免费软件工具方法教程
  • 05-职业发展-AI时代数字孪生开发者进阶指南从技术执行者到价值创造者
  • 北京新型材料服务企业做GEO服务商怎么选?2026靠谱选型指南与五家代表性服务商深度测评 - 子柔传媒
  • 可再生能源与电动汽车协同调度的优化模型与Python实现