💡应聘技术问题
问题:"请解释 AI Agent 的工作原理,以及 LangChain 框架在构建 Agent 中的作用"
参考答案:
简单来说,Agent 就是一个能自己"想清楚该做什么,然后去做"的程序。和直接调 API 让大模型回答问题不同,Agent 会拆解任务、调用工具、根据结果决定下一步。
它大致由几块组成:一个感知部分接收用户输入,一个大语言模型负责推理和规划,一组工具(搜索引擎、代码执行器、数据库查询之类)让它能和外部世界交互,还有一个记忆模块保存对话历史,这样多轮对话才不会"失忆"。
LangChain 在这里扮演的是"胶水框架"的角色。它把 Agent 需要的各个部件做了标准化封装——Chain 把多次 LLM 调用串起来,Tool 让 Agent 能调用外部工具,Memory 管上下文,Agent Executor 协调整个"想一步、做一步"的循环。LangChain 推崇的 ReAct 模式,就是让 Agent 在"Reasoning(想)"和"Acting(做)"之间交替,直到把活干完。
举个实际的例子。假设你要 Agent "清洗这份 Excel 里的地址数据",它的工作过程大概是:先想想需要几步,然后调 Python 工具把文件读进来,再调正则工具把地址格式标准化,最后输出结果。整个过程不需要人一步一步指挥。
问题:"Python 中如何高效处理非结构化数据(如 PDF 文档、图片)?请描述你的处理流程"
参考答案:
处理非结构化数据没什么银弹,基本是"对症下药"的思路。
文档类的(PDF、Word),先用 PyPDF2 或 pdfplumber 把文本扒出来。扫描件就麻烦点,得上 OCR(tesseract 或 PaddleOCR)。提取出来的原始文本通常一堆乱码、多余空格和不规则换行,得用正则和字符串方法清理。如果要提取表格数据,正则匹配能搞定大部分情况;更复杂的可以用大模型直接从文本里抽取字段——名称、日期、金额之类的。
图片数据的话,Pillow 先做预处理(裁剪、灰度化),再送 OCR 提文字。要是需要理解图表内容,可以调多模态模型的 API。
清洗阶段常用到的 Python 工具:strip/replace/split 处理空白和分隔符,re 模块做模式匹配,json 模块做结构化转换。文件多了的话,os 和 pathlib 遍历目录,配上 concurrent.futures 多进程并行,能省不少时间。
整个流程可以串成一个 Pipeline:文件路径进来 → 判断类型 → 调对应的解析器 → 清洗标准化 → 输出结构化 JSON。每个环节做成独立函数,方便维护和替换。
问题:"什么是 RAG(检索增强生成)?它在实际项目中如何落地?"
参考答案:
RAG 的想法很直接:大模型知识有截止日期,还容易瞎编。那用户提问的时候,先从知识库里找几段相关内容,塞进 prompt 里当参考材料,让模型"开卷答题"。
落地分三步走。第一步,把文档切成文本块(chunk),用 Embedding 模型转成向量,存进向量数据库——FAISS、Chroma、Milvus 都行。第二步,用户提问时,把问题也做成 Embedding,在向量库里做相似度搜索,捞回最相关的几段文本。第三步,把捞回来的文本和用户问题拼在一起,丢给大模型生成回答。
新东方做教育的话,RAG 能用到的场景不少。比如学科知识问答,检索教材对应章节来辅助回答;题库解析,从已有题库里找相似题的解法;或者根据学生的薄弱知识点匹配对应的讲解内容。
实际做的时候有几个坑要注意。chunk 大小很影响效果,太大信息冗余、太小上下文断掉,一般 500-1000 字符是常见的起步值,具体得根据文档类型调。检索质量直接决定回答质量,光用向量检索有时候不够,混合检索(向量 + BM25 关键词)往往效果更好。Embedding 模型也要选对,中文场景下 text2vec-chinese 比 OpenAI 的 ada 在本地部署更方便。
问题:"描述一个你做过的项目,包括技术选型的理由和遇到的难点"
参考答案:
面试官问这个,主要想听你解决问题时的思路,不是技术名词罗列。用 STAR 结构来组织会比较清晰:
背景(Situation):说清楚项目要干什么。比如"做了一套智能题库系统,学生输入题目描述就能匹配相似题目和解析"。
你负责什么(Task):明确你的职责范围。比如"我负责题目的向量化检索模块和后端 API"。
具体做了什么(Action):这里要说"为什么选这个技术",而不是只说"用了什么"。举个例子:"后端用 FastAPI,因为异步性能好、自带文档;向量数据库选 Chroma 而不是 Milvus,因为项目还在原型阶段,Chroma 够轻够快;Embedding 用 text2vec-chinese,中文效果不输 OpenAI 的,而且免费本地跑。做的时候碰到题目文本太长导致 Embedding 质量下降的问题,试了几种分块策略,最后发现按知识点分块再拼摘要效果最好。"
结果(Result):能量化就量化。"检索准确率从 60% 提到 85%,API 响应时间压到了 500ms 以内。"
面试官关注的点:你做技术选择时有没有权衡过利弊,遇到问题是怎么分析和试错的,而不是你用了多少热门技术。
问题:"如果让你为公司设计一个自动化数据处理 Pipeline,每天处理 1000 份不同格式的教学文档,你会怎么设计?"
参考答案:
我会把整个系统拆成几个独立阶段。
文件进来先过一道分类。设一个统一接收目录(量大了换消息队列),用 watchdog 监听新文件。进来后按后缀名判断类型——PDF、Word、图片、Excel,各自路由到对应的解析器。碰到认不出的格式,标异常丢进人工审核队列。
解析阶段,每种文件类型有自己的 Parser,但输出统一成中间格式:{"raw_text": "...", "metadata": {"file_type": "...", "page_count": ...}}。然后过清洗流水线:去乱码、统一编码、修复断行、提取结构化字段。清洗规则以正则为主,复杂的字段提取可以用大模型辅助。
清洗完的数据按预定义 Schema 转成 JSON 入库。结构化数据存 PostgreSQL,文本块做完 Embedding 存向量库,原文件存对象存储(MinIO 或 S3)。
工程上每个阶段做成独立模块,参数放配置文件里(chunk 大小、并发数这些)。每份文件处理到哪一步都记日志,失败的进重试队列。跑一段时间就能看日处理量、成功率、平均耗时这些指标了。
技术栈的话,Python 3.10+,Celery 调度任务,Redis 做队列,PostgreSQL + pgvector 存数据,Docker 部署。前期单机够用,后面哪个模块慢了就单独扩。
🎯应聘面试准备
问:想应聘上述岗位,需要做哪些准备?
答:
简历优化
1.核心信息前置
- 有 Agent Demo 开发经验或数据处理项目经历的优先放在前面
- 技术栈以 Python 为主,突出 LangChain / LlamaIndex 等 AI 框架经验
2.匹配岗位关键词
- 技术栈:Python、LangChain、LlamaIndex、RAG、AIGC 工具
- 工程能力:数据清洗、自动化脚本、API 开发、Prompt Engineering
- 工具:Claude Code、Cursor、Copilot、GitHub、FAISS / Chroma
技能梳理
Python 编程方面,字符串处理(正则、split/join/strip)、JSON/Dict 操作、文件读写(os / pathlib / shutil)、多进程并发(concurrent.futures)这些得熟练,能写出能跑的、别人看得懂的脚本。
Agent 开发方面,需要理解几个概念:Agent 是怎么感知输入、做推理、调用工具、维护记忆状态的。最好能自己用 LangChain 搭一个 Agent 出来——哪怕只是一个能联网搜索并回答问题的小机器人。了解 ReAct 模式和 Function Calling 机制就够了。
数据处理方面,能处理 PDF(PyPDF2 / pdfplumber)、Excel(openpyxl / pandas)、图片(Pillow + OCR)。数据清洗的基本流程:提取、去噪、格式化、结构化输出,这个得能说清楚。
AI 工具方面,面试前最好实际用过 Claude Code 或 Cursor,能讲出具体的使用场景——比如用它辅助写爬虫、生成数据处理脚本、调试代码之类。光说"我会用"不如说"我用它做了什么"。
面试准备
经典问题
- LangChain 里 Chain、Tool、Memory 各自干什么
- 给你一份混合了表格和文字的 PDF,你怎么提取里面的数据
系统设计
项目经验准备