CVTE AI Agent开发 二面

1、自我介绍

2、如果让你设计一个可回放、可调试、可审计的 Agent Runtime,你会怎么做

一个真正能在线上稳定运行的 Agent Runtime,不应该只是“模型 + 工具调用”这么简单,而应该是一个有状态机、有事件日志、有回放能力的执行系统。我会把它拆成几个核心模块:任务上下文、Planner、Executor、Tool Adapter、State Store、Event Log、Policy Engine 和 Replay Engine。

任务执行时,不是把所有中间过程都放在 Prompt 里,而是把关键状态结构化存储。比如当前步骤、已完成动作、失败次数、工具返回摘要、等待确认事项、上下文版本号,这些都应该进状态仓库。每一步执行都记录事件日志,日志至少包括时间戳、输入、模型输出、工具参数、工具结果、状态快照和错误信息。这样出了问题后,不只是能看最终答复,而是能完整重放执行链路。

Replay Engine 的作用非常大。它不仅能帮助排查线上问题,还能把失败样本变成评测集。很多 Agent 系统做不稳,不是模型差,而是没有执行轨迹,出了问题只能猜。可回放和可审计,决定了这个系统能不能真正走向工程化。

3、如果 Agent 使用工具时经常出现“参数看起来对,语义其实错”的问题,你怎么处理

因为 schema 校验只能保证字段存在、类型正确,但不能保证语义正确。比如查询时间范围填了,但时间窗口不符合用户意图;地点字段合法,但不是目标城市;筛选条件存在,但约束方向反了。

处理这种问题,我会做三层控制。第一层是工具定义层,把参数说明写成接近判定规则的形式,而不是一句很短的描述。必要时给参数加正反例。第二层是执行前语义校验,不只是校验类型,还要校验参数之间的关系,比如开始时间不能晚于结束时间、筛选条件是否互斥、是否缺少业务上必需的上下文。第三层是执行后结果一致性验证,也就是拿工具结果反向检查是否符合用户目标。如果查到的内容和问题明显不一致,就不能直接进入下一步,而应该触发重试、澄清或者回退。

很多团队把工具调用不稳定理解成“模型不会填 JSON”,其实更难的是语义一致性。真正解决这个问题,不能只靠 Prompt,要有程序级约束和结果校验。

4、如果 RAG 召回没问题,但生成阶段经常“引用错证据”或者“把多段证据拼坏了”,你怎么优化

这种情况说明问题不在召回,而在证据组织和答案约束。模型虽然拿到了相关片段,但没能正确使用。常见原因有几个:上下文太长、证据冲突、片段顺序混乱、引用边界不清、Prompt 没有要求逐条归因。

我一般会先调整 evidence packing 的方式。不是简单把 topk 全拼进去,而是按主题聚类、按时间排序或者按规则优先级重排,让模型看到的是“可推理的证据结构”,而不是“证据堆”。第二步是把生成任务拆成两阶段,先做证据选择和归因,再做最终生成。比如先让模型输出“结论对应哪些证据片段”,通过后再拼成自然语言答案。第三步是对答案做 attribution check,检查输出中的每个关键结论是否都能映射回检索片段。不能映射的部分要么删除,要么标记不确定。

如果业务很严肃,我甚至会把“自由生成答案”改成“基于证据填模板”。因为很多时候用户想要的是准,而不是文采。生成系统最危险的地方,就是它把部分正确证据和部分错误推断混在一起,看起来像真的。

5、MoE 模型在线推理时,为什么有时候吞吐没上去,反而更差

很多人觉得 MoE 参数大、激活少,所以推理一定更省,但线上不一定。MoE 的理论优势是每个 token 只经过少数 expert,计算量不会随着总参数线性增加。但工程上它会带来新的瓶颈,尤其是路由不均衡、跨卡通信和 batch 内 token 分布离散。

如果 expert 分配不均匀,有些 expert 很忙,有些 expert 很闲,就会出现负载倾斜,导致整体等待最慢 expert。其次,MoE 在多卡环境下往往需要 token dispatch 和 gather,这个过程通信代价很高,尤其是 batch 小、请求碎片化或者并发不稳定时,通信开销可能直接吃掉计算收益。再加上线上请求不是训练那种规整 batch,真实流量的长度、领域和输入差异会让路由模式更不稳定。

所以 MoE 在线上想把吞吐做起来,不能只看理论 FLOPs,要看 expert placement、通信拓扑、batch 聚合能力和调度策略。很多时候,小而稳的 dense 模型在真实业务里反而更容易把 SLA 做好。

6、如果长上下文下模型开始出现“中间遗忘”,你会怎么验证它到底是不是注意力退化

要验证是不是注意力退化,不能只凭感觉说“长文本效果差了”。我会先做受控实验,把问题拆成不同位置的信息依赖任务,比如答案只依赖前部、中部、后部、跨段组合这几类。然后构造长度逐渐增加的数据,观察模型在不同位置上的命中率变化。

如果发现前后信息还行,中间信息明显掉得快,这通常就是典型的 lost-in-the-middle 问题。再进一步,可以看 attention pattern、检索片段被引用的分布、答案中对中间证据的使用率。如果业务里有日志,还能对比模型到底有没有“看见”那段信息,比如在 reasoning trace 或中间选择步骤里是否提到了关键证据。

解决时,一般不是单靠把窗口继续拉长,而是要结合重排、摘要、关键片段前置、多轮检索或者 query-focused packing。长上下文的核心不是“装得下”,而是“拿得准”。

7、如果让你做一个支持千级并发会话的流式 Agent 服务,链路上最容易炸的点是什么

最容易炸的通常不是单个模型推理,而是长连接、状态管理和下游依赖叠加之后的资源耗尽。流式 Agent 服务通常要维持大量 SSE 或 WebSocket 连接,这会长期占用连接资源、协程资源和缓冲区。再加上 Agent 一次请求不一定只调一次模型,可能还会穿插检索、工具调用、数据库、外部 API,这时候真正的瓶颈往往变成全链路排队。

具体来说,几个高风险点很常见。第一是流式输出期间客户端消费慢,导致服务端发送缓冲堆积。第二是 Agent 链路较长,一个请求占着连接很久,吞吐上不去。第三是工具超时拖住整个会话,造成协程堆积。第四是上下文和 KV Cache 导致显存与内存同时紧张。第五是日志打点太重,高并发下 I/O 成为隐藏瓶颈。

解决这类问题,不能只优化模型。要同时做会话级超时、背压控制、异步任务拆分、工具熔断、请求队列治理、连接资源回收和分层缓存。流式服务的难点从来都不是“能流出来”,而是“高并发时还能稳定地流”。

8、你怎么设计 Agent 的幂等性和重试机制,避免同一个动作被执行两次

这在真实系统里非常关键,尤其是 Agent 一旦开始执行副作用操作,比如发消息、下单、写数据库、调用第三方接口,多执行一次就可能出事故。幂等性的核心不是“重试要小心”,而是从设计上给每个动作明确唯一身份和可验证结果。

我的做法通常是这样:每个执行动作都会生成 action_id,并绑定任务 id、步骤 id、参数哈希和时间戳。执行器在真正调用工具前,先查这个 action_id 是否已经成功提交。如果已经执行成功,就直接返回已有结果,而不是重复调用。对于不可逆操作,必须支持 pre-check 和 post-check,比如执行前先确认当前状态是否已满足目标,执行后再验证是否真的成功写入。

重试机制也不能是无脑 retry。要区分错误类型:超时、网络抖动可以重试;参数错误、权限

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

AI-Agent面试实战专栏 文章被收录于专栏

本专栏聚焦 AI-Agent 面试高频考点,内容来自真实面试与项目实践。系统覆盖大模型基础、Prompt工程、RAG、Agent架构、工具调用、多Agent协作、记忆机制、评测、安全与部署优化等核心模块。以“原理+场景+实战”为主线,提供高频题解析、标准答题思路与工程落地方法,帮助你高效查漏补缺.

全部评论

相关推荐

1.自我介绍2.HashMap是线程安全的吗?3.你的这个监测分析的Agent是怎么做的?具体分析哪些数据?4.这个数据清洗的话,具体是怎么清洗的?5.这个清洗是一次性的还是可复用的?然后如果是可复用的话,你这个放到我们的向量数据库里面是怎么和rag集合起来的?6.简单讲一下通用Agent的设计流程,还有你的这一个项目里面的Agent的设计流程是怎样的?7.这是怎么做到的?它的架构是怎么去流转的?8.最终调用Agent的时候,它的这个记忆是怎么设计的?它是怎么存储的?怎么用的?9.有没有做上下文压缩?压缩的话是短期压缩还是长期压缩?10.你的这个向量数据库的选型是怎么选的?为什么选这个?11.做一个RAG的话,我们的数据存进去也是很重要的。如果你存进去的是有问题的数据的话,那你得出来的结果也会是有问题的结果。那你这个存进去向量数据库,或者是存进去你的这个数据的话,是以什么样的一种形式去进行保存的?是什么文件格式?JSON?12.怎么切割的?常见切割策略有什么?以及怎么能确保它的语义不断裂?13.用户订阅的这一个服务是怎么做到的?它这个体系是怎么搭建的?你是怎么实现这个功能的?14.用户订阅推送信息的,这个是怎么实现的?定时任务还是怎么样?定时任务怎么设计的?15.我们回到Agent上面来吧。你用到Agent的开发肯定要调用到模型,你的不同节点的模型分别选型是怎样的?以及你的这个选型的模型如果遇到了这一个额度上限的话,要怎么办?16.你自己调用的这一个模型是否遇到过达到上限的情况?17.你自己做的这些是部署在本地的,还是部署在云端的?部署在云端的话,你的操作系统是什么?以及有没有自己买过服务器去部署?18,如果是以自己的机器在跑的话,那你遇到的这一个环境的问题怎么办?你的这个可迁移性的这一个问题怎么办?你本机的代码如何迁移到云端去部署?19.你的云服务器是怎么暴露给外面人去进行发请求的?是走端口还是怎样?20.我们回到AI上面来说吧,你对AI挺感兴趣的,来讲一下你平时用AI写代码是怎么写的?以及是怎么进行一个code review的?21.你自己的编程工具用过什么?以及我们来对比一下这个编程工具,Trae和Cursor的话,这两者你比较一下它们的特点,以及分别有什么好处、坏处,你自己用的是哪个?22.我看你主要还是Java的技术栈,那我们这边主要用的是Python,你讲一下Java和Python的这一个线程池底层的实现的区别是什么?以及它们分别是怎么实现的?23.我们再来聊一下后端吧。我们现在用的基本是微服务,你一个单体服务拆成微服务的话,需要怎么做?要怎么拆?24.比方讲一个电商系统,我们应该怎么去拆分这一个业务的这个微服务?25.你讲到了分库分表的话,那你讲一下分库分表常见的策略有什么?以及什么时候需要分库分表?26.我记得你前面讲到了一个扣款的一个服务,那你讲一下,比方说我扣款的功能里面出现了超扣的情况,这个怎么解决?27.我看你实习也挺久的了,我们来问一个故障的问题吧。你在实际当中,如果遇到OOM或者是MySQL的数据库的一些问题,一般是怎么排查的?28.那在还没有出现这些问题的时候,我们应该去怎么去评估哪里可能会有潜在的风险?为什么?后面就是一些关于实习稳定性,还有一个背景信息的了解。然后还有反问和面试官聊的很开心,学到了很多。
查看28道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务