携程 Java 后端二面:分块、向量检索与查询改写
本场面试题
- RAG 分块怎样做,还有哪些方案?
- 为什么要向量化,直接文本匹配不行吗?
- 问题怎样改写和拆分,为什么需要术语归一化?
面经与参考答法
携程 Java 后端二面:分块、向量检索与查询改写
作者自述参加携程 Java 后端开发暑期实习二面,部门和面试日期未说明。本页仅整理项目部分的三组 RAG 问题;原帖没有给出具体实现和现场答案。
以下经历未经独立核验。短答与例子由编辑补充,用于学习,不代表作者的现场作答或原项目实现。
(1)RAG 分块怎样做,还有哪些方案?
可先按标题、段落、表格等结构组织内容,超长部分再递归或按语义切分。块长同时受 Embedding 输入限制、检索粒度和生成上下文预算约束;保留标题、来源与版本,有限使用重叠。用同一查询—证据集比较召回、限定条件完整性、答案质量与成本,没有通用最优块长。
教学示例(非原面试实现):操作步骤和“仅管理员可用”的条件应一起保留;若为精确召回采用小块,命中后可受预算限制地补回所属章节,而非只返回孤立的一句话。
(2)为什么要向量化,直接文本匹配不行吗?
向量表示用于寻找语义接近但说法不同的内容;关键词匹配则擅长错误码、编号和专有名词。向量可能淡化数字、否定和精确词,不能全面替代文本匹配。应保留关键词基线,按真实查询切片比较,必要时融合两路结果;高相似度也不等于事实正确。
教学示例(非原面试实现):“网页一直转圈”可能需要召回“请求挂起”的文档;查询一个明确错误码时,则应保住该字符串的精确匹配,不能只依赖主题相似。
(3)问题怎样改写和拆分,为什么需要术语归一化?
改写用于消除表达噪声,拆分用于分别检索多个子问题,术语归一化把已确认的别名对应到统一概念。必须保留原问题的实体、数字、否定、时间、版本和权限约束;有歧义先澄清,有依赖的子问先取前置证据。改写文本只是检索线索,最终答案仍须依据真实语料。
教学示例(非原面试实现):“旧版是否支持导出,新版怎样迁移”可拆成能力查询和迁移条件查询,各自携带对应版本;不能归一化后丢掉“旧版”或把“不能导出”改成“可以导出”。
原文还记录了项目经历、个人素养、MySQL 和缓存问题,本页未展开。所用向量库、分块参数、检索效果与具体项目情况均未披露,不据此推断携程的统一技术栈。