小红书 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 框架里常用的注解有哪些?
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏聚焦 AI-Agent 面试高频考点,内容来自真实面试与项目实践。系统覆盖大模型基础、Prompt工程、RAG、Agent架构、工具调用、多Agent协作、记忆机制、评测、安全与部署优化等核心模块。以“原理+场景+实战”为主线,提供高频题解析、标准答题思路与工程落地方法,帮助你高效查漏补缺.
查看3道真题和解析