快手 AI Agent开发 二面

1 . RAG 怎么评测,有哪些维度,那些指标

RAG 的评测一般分成检索、生成、端到端三层。检索层主要看正确证据有没有被找回来,常用 Recall@K、HitRate@K、MRR、NDCG;生成层主要看答案对不对、是不是基于证据回答,常看 Answer Correctness、Faithfulness、Relevance、Completeness、Citation Accuracy;端到端层更偏业务效果,比如用户满意度、追问率、拒答率、时延和成本。真正做项目时不会只看最终答案,因为答案错可能是召回错、重排错、上下文拼接错,也可能是模型生成错。

2. 数据集包括什么

RAG 的数据集一般不只是知识库文档。通常会包括原始知识源数据,比如 FAQ、帮助文档、规则文档、历史问答、社区内容;还会有检索评测集,也就是 query 和 gold chunk 的映射,用来评测召回和重排;还会有生成评测集,也就是问题、标准答案和支撑证据;如果做得更完整,还会准备一些对抗样本,比如歧义问题、错别字、省略问题、多轮追问、无答案问题、越权问题。除此之外,实际项目里也经常单独维护 query 改写数据、rerank 标注数据和拒答数据。

3. 如果让你对相关度、回答效果做优化,你有什么思路

相关度优化一般从数据、召回、重排、上下文构造几层去做。数据层先解决知识库质量问题,比如清洗、去重、切分、版本控制和元数据补充;召回层会做 query 改写、混合召回、父子 chunk、多路召回、embedding 微调;重排层通常会加 rerank,把语义接近但不真正相关的结果压下去;上下文层会做去重、压缩、排序和冲突信息消解;生成层再通过 prompt 约束和拒答机制让模型尽量基于证据回答。更体系化一点,本质就是把它拆成数据层、检索层、上下文层、生成层和评测闭环层,持续用 badcase 反推前面的优化。

4. 如果设计一个数据处理场景,比如有一千条数据,需要求和,你怎么做处理

这种题本质上不是考加法,而是看有没有任务拆解意识。简单场景就是直接遍历求和;如果从 Agent 执行角度看,一般会先识别任务,然后做数据获取、分批处理、聚合和校验。如果数据规模更大或者工具调用有限制,就可以把数据拆块处理,最后再合并结果。

def chunk_sum(nums, chunk_size=100):
    total = 0
    for i in range(0, len(nums), chunk_size):
        total += sum(nums[i:i + chunk_size])
    return total

data = list(range(1, 1001))
print(chunk_sum(data, 100))

5. RAG 性能如何提升

RAG 性能提升可以分成效果提升和系统性能提升。效果上主要是优化 chunk 切分、做 query 改写、混合召回、引入父子块、增加 rerank、优化 topk、压缩上下文、减少噪声文档、对 embedding 和 rerank 做领域微调。系统上主要是 embedding 预计算、索引优化、热点 query 缓存、减少 rerank 候选数、控制上下文长度、前置轻量模型分类改写、批量推理和流式输出。线上一般要同时看准确率、时延和成本,不会只看一个指标。

6. 你的上下文怎么处理的,有什么优化思路

上下文一般由 system prompt、当前问题

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

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

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

全部评论

相关推荐

昨天 21:33
已编辑
门头沟学院 C++
其实一面的体验就不是很好,但是二面更让我难受。虽然我也不是什么后端领域大神,但是这场面试真的让我惊呆了。我在简历上写着用 Docker Compose 部署了一个服务(后端程序+数据库+Redis+前端,一共四个实例),面试官一直不理解我的 Redis 使用方式,问我怎么持久化。我说不需要持久化,因为只是缓存数据和限流数据。面试官说那服务重启怎么办,数据不会丢失吗。我就说这些数据丢失也是无所谓的,而且我只需要重启后端程序,缓存依旧保留在 Redis 里。跟面试官说了很久都不明白,他觉得我的服务一重启缓存就全丢失了。后来他甚至觉得我不了解我的项目,觉得我分不清缓存是在后端程序的内存里还是 Redis 里,我很无语…我跟他说在 Redis 里,不持久化,慢慢地他就觉得我用 Redis 没有用,他觉得 Redis 缓存和走数据库一样得经过网络,没有提速效果,差不了多少,缓存到后端程序里才有意义。后来我们不聊这个了(那时我的体验已经很不好了),我们开始写算法题。我就写了一题,用滑动窗口判断是否是连续的重排字串。结果我不知道面试官是不是不懂 C++,他仿佛看不懂我的代码。我写了两版,第一个用两个 unordered map 存储短字符串的字符出现数和窗口里的字符出现数。我写完第一版时他去忙别的了,我觉得可以只用一个 unordered map 存窗口 diff,开始写着他就回来了。对于第一个版本,他就没有多问。对于第二个版本,这是我最心累的部分——他好像看不出我循环里的 i 是窗口左边界还是右边界,对于循环终止条件也不清晰,听不懂我说的对于长度 3 的短串在长度 4 的长串里只会循环 2 次的说法,一直问我第 3 次循环会发生什么,我真的很疑惑。他说我的代码肯定是错的,让我测试样例,结果我都通过,他很不解。我们就一起把面试至少三分之二的时间花在单步口头调试这个程序上,最后没时间了才进入下一个回合。下一个回合更奇特,他直接问我前端知识。虽然我在简历里写了一些前端,但是我面试的是后端,前端只是我项目的一部分。然后就是一些过场,问我 Vibe Coding、OpenClaw,我如实回答。最后到反问部分,我只想赶紧结束这次尴尬的面试,直接回答“没有问题”,然后互相道别。全程没有问到大家面经里说的 InnoDB 设计、Redis 数据结构等等。非常难受的经历。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
昨天 18:24
已编辑
门头沟学院 Java
一面 1.上段实习项目主要为了解决什么问题?2.讲一下系统架构组成3.项目最有挑战的地方在哪?4.上上段做了啥?5.熔断和降级有啥区别?6.讲一下类加载机制7.再讲讲 classloader8.此时 thread 类获取类加载,此时是获取到的哪个类加载(不知道,直接被面试官说底层不行)9.讲讲 mvcc 解决什么问题10.了解过 spring ai 吗?说说理解11.手撕:路径总和(撕太快又来了一道),公共子序列(必须用 dp)12.反问:业务是啥,学习方面有啥建议(实习经历还行,项目总结还可以提升,技术深度差点意思,不要学的太广要把一个方面学深)总体面试体验啥的很好,确实底层方面没怎么看还需要去研究二面1.实习(10min)2.秒杀平台会遇到什么问题,问题怎么解决3.网站扫码登录怎么实现4.后端怎么通知前端?前端不轮询服务端主动通知又能怎么做呢?5.一个线上接口调用变慢怎么排查?6.遇到过什么线上问题?怎么排查的?7.手撕:一个 sql+比较版本号8.mq 消息堆积怎么处理?9.怎么提高消费者的消费能力可以从那些方面入手?10.大数据的那些表分页查询怎么优化?11.redis big key 怎么处理12.分布式 id 生成方式说一下?除了雪花算法还有那些可以实现分布式 id?13.分布式锁除了 redis 还能怎么实现?14.rpc 怎么实现调用的?15.ai 这块有什么学习?说一下16.现在有两个 10g 大小的文件全存的 url,内存只有 1g 怎么找到相似的 url 存入内存17.反问:业务和建议(还是说技术深度不够没去看原理,项目找一些深度自驱的内容)二面几乎没八股全是场景题拷打,很有压力。后续oc了,但是组内氛围很不喜欢,待了一个月就润了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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