整理一些AI Agent岗的面试常见的问题和比较合适的回答。
Agent
Q:Agent和工作流有什么区别?
Anthropic的解释( https://www.anthropic.com/engineering/building-effective-agents ):
At Anthropic, we categorize all these variations as agentic systems, but draw an important architectural distinction between workflows and agents:
- Workflows are systems where LLMs and tools are orchestrated through predefined code paths.
Agents, on the other hand, are systems where LLMs dynamically direct their own processes and tool usage, maintaining control over how they accomplish tasks.
workflow 是 LLM 和工具按照预先写好的代码路径执行;
- agent 则是 LLM 根据目标动态决定下一步怎么做、用什么工具、什么时候停止。
LangChain/LangGraph文档也强调,agent 相比 workflow 有更高自主性,适合问题路径不确定、需要持续反馈循环的场景。
回答:
我认为 Agent 和工作流最大的区别是自主性,workflow 更像“固定流程自动化”,而 agent 更像“带目标的自主执行系统”。
工作流是由工程师预先定义好步骤和分支,LLM 只是其中一个节点,整体执行路径比较确定;它的优点是稳定、可控、可观测、适合生产环境。缺点是灵活性有限,遇到流程外的问题就比较难处理。
而 Agent 是给模型一个目标、工具和约束,让模型根据当前上下文动态决定下一步做什么、调用哪个工具、是否需要继续执行。但Agent 灵活的同时但也带来不可控、成本高、可观测性和评估更难的问题。
举个例子,一个 RAG 问答流程通常是典型 workflow:先 query rewrite,再检索,再 rerank,再生成答案。但如果是一个研究型 Agent,它可能会先拆解问题,决定查哪些资料,发现信息不足后继续搜索,甚至调用代码或数据库工具做验证。
所以在工程落地上,我不会认为 Agent 一定比 workflow 高级。对于确定性强、合规要求高、链路清晰的任务,我会优先用 workflow,因为它更稳定、可控、好评估;对于开放式、多步骤、路径不确定的任务,比如复杂研究、数据分析、代码修复、跨系统操作,才更适合用 Agent。同时生产环境里常见的做法是混合式:外层用 workflow 做权限、状态管理和 guardrails,内部某些不确定节点交给 Agent 来决策。
Q:Prompt和Skills的区别是什么?
Prompt和Skill的区别主要在于抽象层级和可复用性。Prompt 是用户在一次任务里给模型的自然语言指令,通常解决的是当前这一次怎么回答、用什么格式、遵守什么限制。
Skill 则更像是面向 Agent 的可复用能力模块。它不只是一个提示词,而是可以包含任务说明、操作步骤、few-shot 示例、模板、脚本、工具调用方式、参考文件和业务规则。Agent 在遇到相关任务时,可以动态加载对应 skill,并按照里面定义的方法完成任务。
举个例子,让模型“用正式语气写一封邮件”是 prompt;但把公司邮件规范、审批流程、常用模板、敏感词检查、收件人规则封装起来,让 Agent 每次写邮件都自动遵守,这就是 skill。
所以 prompt 更适合一次性、轻量级的控制;skill 更适合重复性强、专业化、需要标准化执行的任务。在生产环境中,我会把经常复用的高质量 prompt、流程规范、工具使用方法和示例沉淀成 skill,而不是每次都靠用户重新描述。
ReAct
Q:ReAct框架是什么?
RAG
Q:什么是RAG
RAG 全称是 Retrieval-Augmented Generation,检索增强生成。
简单说,RAG 是让大模型在回答前,先从外部知识库里检索相关资料,再基于检索到的内容生成答案。它解决的是大模型只依赖训练参数回答时容易出现的两个问题:知识过期和幻觉。RAG 会把 LLM 和外部知识源结合起来,让回答基于权威、可更新的数据,而不是只依赖模型训练时学到的知识。
通常 RAG 包含两个核心部分:Retriever 检索器和 Generator 生成器。检索器负责从文档、数据库、网页、知识库里找相关内容;生成器通常是 LLM,负责基于这些内容组织答案。
典型流程是:
用户提问
→ 对问题做 query rewrite / embedding
→ 从向量库、全文索引或数据库中检索相关 chunks
→ 可能经过 rerank 筛选最相关内容
→ 把检索结果放进 prompt
→ LLM 基于上下文生成答案
→ 返回答案,最好附带引用来源
Q:RAG的过程
RAG 的过程一般会分成离线和在线两部分。
离线阶段主要是构建知识库。首先收集原始文档,比如 PDF、网页、产品文档、FAQ 或数据库记录;然后做解析和清洗,去掉噪声内容;接着按照语义结构或 token 长度进行 chunking,并设置合适的 overlap;之后用 embedding 模型把每个 chunk 转成向量,存入向量数据库,同时保留 metadata,比如标题、来源、时间、权限信息等。
在线阶段是用户提问后的检索和生成流程。系统收到 query 后,可能会先做 query rewrite 或意图识别,然后通过向量检索、BM25 或 hybrid search 找到相关 chunk。为了提高准确性,通常还会用 reranker 对候选结果重排,选出最相关的上下文。然后把用户问题、检索到的证据和回答约束一起构造成 prompt,交给 LLM 生成答案。最后返回答案,并最好带上 source citation。
我认为 RAG 的核心不是简单地把文档塞给大模型,而是要保证“检索到正确的内容,再让模型基于证据回答”。所以实际效果取决于文档质量、chunk 策略、embedding、召回、rerank、prompt 设计和评估体系。如果检索环节失败,生成环节很难补救。
- 普通RAG:模型不决定文件,系统自动检索
- Agentic RAG:LLM 可能会参与规划,让模型告知该调用什么命令查询什么信息,然后再把查询到的结果返回给模型。
Q:RAG中如何判断一个环节中是检索还是生成出问题?
可以把 RAG 的问题定位拆成两层:先判断 retrieval 有没有拿到正确证据,再判断 generation 有没有基于证据正确回答。
第一层看检索。对于一条 bad case,我会直接检查 top-k retrieved chunks:这些 chunk 是否包含回答所需信息?相关 chunk 的排名是否靠前?有没有被 metadata filter 或权限过滤掉?如果正确答案根本没被召回,或者排在很后面,那就是 retrieval 问题。可以进一步看 recall@k、MRR、hit rate、context recall、context precision 等指标。
第二层看生成。如果 top-k context 里已经包含正确答案,但最终回答仍然错误、幻觉、遗漏关键条件,或者没有遵守引用来源,那就是 generation 问题。此时我会看 faithfulness、groundedness、answer relevance,也会检查 prompt 是否要求模型只能基于上下文回答,是否有冲突信息,context 是否太长导致模型忽略关键段落。
所以判断标准很简单:context 没有答案,是检索问题;context 有答案但回答错,是生成问题;context 有一部分答案但不完整,可能是检索召回不足,也可能是生成整合能力不足,需要进一步做 ablation。
Q:RAG里文档如何chunk的?如果预输入不是md,而且不同的文档类别的上下文格式不一样,需要怎么处理?
MCP
Q:MCP是什么?
MCP 全称是 Model Context Protocol,模型上下文协议。
简单来说,MCP 是一个开放标准,用来统一 AI Agent / LLM 应用连接外部工具、数据源和系统的方式。
其他
Q:如何控制模型输出JSON格式的内容?
分几个层面:
- 首先在Prompt里说明输出格式;
- 检查输出格式;
- 如果失败,就利用函数来尝试提取出输出里的JSON;
- 如果还是不行,就将错误格式的输出返回给模型,让它修复。
Q:压缩算法是什么?怎么做的?在哪一个步骤做的?
股票预测RNN
Q:注意到你用了macro F1,那你有测过micro F1吗?
纯陷阱题。
先复习一下True Positive,False Positive,False Negative,True Negative等概念:
Precision(预测正确的c的数量/实际的c的数量)和Recall(预测正确的c的数量/总预测的c的数量):
普通的F1:
Micro F1:先把所有类别的TP、FP、FN加起来,再统一计算Precision、Recall和F1。
Macro F1:先分别计算每个类别的F1,然后对所有类别的F1取平均。
注意:在单标签多分类任务里,Micro F1等于 Accuracy。比如每个样本只能属于一个类别:猫、狗、鸟。模型每预测错一个样本,就会同时造成一个 FP 和一个 FN,也就是说Micro的Precision等于Micro的Recall。所以最后 Micro F1和 Accuracy会相同:
Q:为什么macro F1能提升这么多?
Macro-F1提升主要是因为优化目标和评价目标更一致了。Majority class baseline 永远预测训练集中最多的类别,所以它在 imbalanced dataset 上可以拿到不错的 accuracy,但它几乎完全牺牲 minority classes,导致 macro-F1 很低。我的 weighted GRU 使用 class-weighted cross entropy,让少数类错误在训练中受到更大惩罚,因此模型不再只偏向 majority class,而是更愿意在 down、flat、up 三类之间做更均衡的预测,所以 macro-F1 提升明显。
另外,这个任务本身是时间序列任务。每个样本不是单个静态 feature vector,而是 30 个交易日的技术指标序列。GRU/RNN 这类模型可以利用时间顺序中的动量、波动率、趋势变化等 temporal patterns;相比 majority class 这种完全不看输入的 baseline,它有机会学到一些和未来 5 日方向相关的动态信息。因此,sequential architecture 也帮助提升了表现。
The macro-F1 improved mainly because the baseline and the GRU optimize very different objectives. The majority-class baseline is essentially the best constant classifier under unweighted accuracy: it predicts the most frequent class and therefore performs reasonably on accuracy, but it gives very poor recall for the minority classes, which hurts macro-F1. In contrast, the weighted GRU was trained with class-weighted cross entropy, so mistakes on minority classes were penalized more. That made the model less biased toward the majority class and improved the per-class F1 scores, which is exactly what macro-F1 measures.
The second reason is that the input is sequential: each sample contains a 30-day history of stock-level technical features. A GRU can model temporal patterns such as momentum, volatility changes, and short-term trend behavior, while the majority baseline ignores all features. So the improvement comes from both using a sequence model and aligning the training loss with the macro-F1-oriented evaluation. I would be careful not to say RNNs are automatically better for stocks, because financial prediction is noisy; in this project, the strongest evidence is that the class-weighted GRU improved class-balanced performance, not simply accuracy.