小红书 AI应用开发 一面

1. 如果知识库原始数据不是 markdown,而是 PDF、PPT、图片或者网页,你会怎么处理进 RAG 系统?

PDF 和 PPT 会提取标题、段落、表格和页码,图片先做 OCR,网页先抽正文和元信息,然后统一清洗噪声、去掉页眉页脚、按语义做切片,补上来源、时间、文档层级这些元数据,最后再做 embedding 和索引。这样后面的召回、溯源和权限控制都更稳定。

public List<Chunk> buildChunks(Document doc) {
    List<Block> blocks = parser.parse(doc);
    List<Block> cleaned = cleaner.clean(blocks);
    return splitter.split(cleaned);
}

2. 在 RAG 检索过程中,常用的检索机制有哪些?

常见的是关键词检索、向量检索和混合检索。关键词检索适合专业术语和精确匹配,向量检索适合语义相近但表达不同的问题,混合检索通常更稳,因为它能同时覆盖字面匹配和语义匹配。线上一般不会只走一条召回链路,而是多路召回后再统一重排。

3. RAG 评价指标一般怎么设计?

通常会拆成检索侧和生成侧。检索侧会看 Recall@K、MRR、NDCG 这些指标,判断真正相关的片段有没有被召回;生成侧会看答案相关性、忠实度和上下文利用率,判断模型是不是基于检索内容在回答,而不是自己编。只看用户觉得“像不像对的”不够,因为模型有时候会说得很顺,但依据不对。

4. 为什么很多场景会优先选 RAG,而不是直接微调大模型?

因为业务知识更新很快,直接微调的成本高、周期长,而且知识一变就要重新训练。RAG 更适合接私域知识,更新快,也更容易做引用和溯源。微调更适合调整模型风格、任务习惯和领域能力上限,但不适合承担频繁更新的事实知识。真正线上很多时候是 RAG 和微调一起用,不是二选一。

5. MCP 和 Function Call 的区别是什么?

Function Call 更像是模型在当前对话里按约定好的 schema 去调用某个工具,重点是“调哪个函数”。MCP 更偏协议层,它不只是描述函数,还会描述资源、能力和上下文暴露方式,本质上是在做标准化接入。简单理解,Function Call 是工具调用能力,MCP 是让模型接外部系统时更统一的一套协议。

6. 为什么 AI 应用里经常需要做两级缓存?

因为 AI 应用的很多链路成本高、延迟高,比如 embedding、检索、重排、生成。两级缓存一般是本地缓存加 Redis,本地缓存解决进程内热点访问,Redis 解决多实例共享。这样可以减少重复 embedding、重复召回和重复生成,既能降成本,也能稳住 RT。设计时要注意缓存穿透、热点 key 和版本失效问题。

public String queryWithCache(String key, Supplier<String> loader) {
    String v = localCache.getIfPresent(key);
    if (v != null) return v;

    v = redisTemplate.opsForValue().get(key);
    if (v != null) {
        localCache.put(key, v);
        return v;
    }

    v = loader.get();
    redisTemplate.opsForValue().set(key, v, Duration.ofMinutes(10));
    localCache.put(key, v);
    return v;
}

7. 如果要做一个智能客服类 AI 应用,整体链路怎么设计?

一般会先做问题分类,区分 FAQ、知识问答、工具调用和人工转接。简单固定问题走模板回复,知识类问题走 RAG,查订单、查物流、查账户这类走工具调用,高风险或低置信度问题直接转人工。核心链路要有会话管理、权限校验、敏感词过滤、日志追踪和效果评估,不然上线后很难控风险。

8. 为什么有些场景会选 PGVector,而不是直接用 ES 做向量检索?

如果业务本身就在 PostgreSQL 上,数据规模也没有大到必须拆专门的检索集群,那 PGVector 的接入和运维成本会低很多,结构化数据和向量数据能放在一起管理,事务和权限也更容易统一。ES 也能做向量检索,但它更强的地方还是全文检索和分布式搜索。如果场景是文本搜索加语义检索混合很重,ES 会更有优势;如果更偏业务数据绑定和快速落地,PGVector 反而更顺手。

9. MySQL 和 Elasticsearch 的区别是什么,AI 应用里怎么分工?

MySQL 更适合事务型、关系型、强一致的主业务数据,Elasticsearch 更适合全文检索、模糊匹配和聚合分析。AI 应用里一般是 MySQL 存用户、配置、权限、任务记录,ES 用来做文本搜索、内容检索和日志分析。两者不是替代关系,更多是主存储和搜索层分工。

10. 为什么 Elasticsearch 要使用倒排索引,而不是顺序扫描?

因为全文检索的数据量通常很大,如果每次查询都顺序扫所有文档,代价太高。倒排索引是先建立“词 -> 文档”的映射,查询时直接定位命中文档,再做过滤和打分。这样无论是关键词查询、短语匹配还是多条件组合搜索,效率都会比顺序扫描高很多。

11. Spring 框架里常用的注解有哪些?

常用的有 @Component@Service@Repository@Controller@RestC

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

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

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

全部评论
宝子你的面试好多啊!
点赞 回复 分享
发布于 04-01 15:50 北京

相关推荐

上周去面一个AI&nbsp;Agent相关的岗,面试官第一句就扔过来:“你说说ReAct是什么?”我当时脑子一卡,差点把React框架说出来。还好缓过劲儿,赶紧答:ReAct就是Reason&nbsp;+&nbsp;Act,模型先想一想该干啥,再调用工具执行,拿到结果再观察,然后继续下一轮思考。不是一次性吐答案,而是边想边干,循环迭代,像给人配了个会反思的实习生。他接着追问:“那任务拆解怎么搞?”这题挺实用。我说复杂任务不能一股脑全扔给模型,得先拆成小步。比如用户说“帮我分析上季度用户留存”,就拆成:1.&nbsp;拉取留存数据;2.&nbsp;定义留存指标(次日、7日、30日);3.&nbsp;分渠道、分用户群看趋势;4.&nbsp;找异常点并给出假设;5.&nbsp;生成图表和建议。拆得越细,Agent执行时越不容易跑偏。面试官点点头,说很多新人就卡在这一步,模型直接硬上,结果输出一堆废话。最狠的是后面那道:“设计一个数据分析Agent(数分Agent)给我看看。”我现场画了架构:核心是LLM做大脑,配上工具集(SQL查询、Pandas处理、Matplotlib画图、甚至直接连BI系统)。加个记忆模块,记住上次的分析偏好;再套ReAct循环,确保每步都有Reason-Action-Observation。潜在坑我也提了:幻觉问题怎么防?加个验证步骤,让模型先输出SQL再执行,人工或规则审核;工具调用失败了怎么重试;多轮对话时上下文爆了怎么办,用向量数据库存历史摘要。面试回来我复盘,发现Agent岗现在问得越来越实操。不再是背定义,而是让你现场脑暴:怎么让Agent不卡死在循环里?怎么处理多Agent协作(一个负责查数据,一个负责写报告)?工具权限怎么控,避免它乱删库?甚至问你用LangChain还是LangGraph搭框架,为什么?说实话,Agent这东西火得快,但面试暴露的问题也多。很多人只玩过简单demo,一到设计真实场景就露馅。准备的时候,别光刷论文,多自己搭个小Agent练手,比如做一个自动回邮件的,或者帮你监控竞品价格的。真正拉开差距的,是你能不能把“想清楚-干一步-看结果”这个循环玩明白,而不是靠模型瞎猜。
查看3道真题和解析
点赞 评论 收藏
分享
评论
3
15
分享

创作者周榜

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