前端进阶之旅前端进阶之旅
  • 基础篇HTML/CSS/JS 打底
  • 进阶篇原理与工程化
  • 高频篇面试最常问的那批
  • 精选篇按模块收敛的总结
  • 手写篇常考代码手写实现
  • 面经篇真实面试问题复盘
  • AI 篇NEWAI 时代的前端考点
  • 历年面经NEW按年份追踪真实考点
  • 每日一题每天一道,攒手感
  • 专项自测100 题快速查漏
  • 小程序题库小程序专项刷题
  • 算法题库NEW在线编码即时判题
  • 知识卡片NEW碎片时间过考点
  • 面试题大全常见问题解析
  • AI 答疑NEW随时提问,即时解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • AI 定制路线NEW按你的简历现排
  • AI 知识地图NEW串起全站知识点
  • 原理篇React / Vue 源码拆解
  • HTTP从报文一路讲到 HTTPS
  • 浏览器渲染、事件循环、进程
  • 计算机基础Linux、网络、操作系统
  • 设计模式23 种模式怎么用
  • Node学习指南从环境搭建到服务端
  • NPM工作流script、依赖与发布
  • Docker容器化部署上手
  • Canvas图形与动画实战
  • 前端系统进阶学习大型项目工程化
  • 前端综合文章长期沉淀的实践文
  • 思维导图知识点全景图
  • 学习路线按图索骥不跑偏
  • AI 热点NEWAI 每日动态
  • 公众号动态公众号历史文章
  • 博客动态站长的技术博客
  • 开发者导航常用工具与文档站
  • 基础篇HTML/CSS/JS 打底
  • 进阶篇原理与工程化
  • 高频篇面试最常问的那批
  • 精选篇按模块收敛的总结
  • 手写篇常考代码手写实现
  • 面经篇真实面试问题复盘
  • AI 篇NEWAI 时代的前端考点
  • 历年面经NEW按年份追踪真实考点
  • 每日一题每天一道,攒手感
  • 专项自测100 题快速查漏
  • 小程序题库小程序专项刷题
  • 算法题库NEW在线编码即时判题
  • 知识卡片NEW碎片时间过考点
  • 面试题大全常见问题解析
  • AI 答疑NEW随时提问,即时解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • AI 定制路线NEW按你的简历现排
  • AI 知识地图NEW串起全站知识点
  • 原理篇React / Vue 源码拆解
  • HTTP从报文一路讲到 HTTPS
  • 浏览器渲染、事件循环、进程
  • 计算机基础Linux、网络、操作系统
  • 设计模式23 种模式怎么用
  • Node学习指南从环境搭建到服务端
  • NPM工作流script、依赖与发布
  • Docker容器化部署上手
  • Canvas图形与动画实战
  • 前端系统进阶学习大型项目工程化
  • 前端综合文章长期沉淀的实践文
  • 思维导图知识点全景图
  • 学习路线按图索骥不跑偏
  • AI 热点NEWAI 每日动态
  • 公众号动态公众号历史文章
  • 博客动态站长的技术博客
  • 开发者导航常用工具与文档站
首页程序员面试题库编码 Agent 语义检索与 grep 代码搜索对比
AIAI Agent编码与执行

编码 Agent 查代码时,语义检索和 grep 搜索分别适合什么问题?

知道精确符号时直接查文本,不知道实现叫什么时再用语义线索扩大候选。

前端进阶之旅 · 一题精讲更新于 2026.09.06
AI Agent#编码与执行#向量检索
先看核心答案读代码示例
理解线索

按手里的线索选择入口

  1. 精确标记函数名、错误码与路径可直接做文本搜索
  2. 业务描述用语义相似度发现可能相关的实现位置
  3. 代码证据重新读取文件,确认定义、调用与实际行为

下面命令只是演示受控范围内的精确搜索,不会创建嵌入,也不调用任何文本模型服务。

核心回答

先记住这个答案

已知函数名、错误码、路由片段或配置键时,grep 或 ripgrep 能直接定位实际文本,结果容易核对,也不依赖向量索引更新。只有自然语言行为描述、代码命名与需求用词差异较大时,语义检索可以帮助找到概念相关候选,但相似度不证明调用关系或当前实现正确。两者可以组合:先用精确线索缩小范围,缺少线索时语义召回,再读取真实文件并追踪定义与引用。无论从哪种方式得到结果,修改前都要确认仓库、分支、版本和文件现状。

  • 符号和错误文本适合精确查找,模糊意图适合语义召回
  • 命中内容不等于证明运行路径或符号关系
  • 索引结果必须回到当前原文件核对

精确搜索擅长回答内容在哪里

用户给出错误码 AUTH_EXPIRED,先在目标源码目录固定字符串查找,通常比把整段问题转换成向量更直接。rg 的 -F 让搜索词按字面匹配,避免点号或括号被当成正则语法;-n 提供行号,便于继续读取上下文。

命中结果仍可能来自测试、旧实现或未使用导出。下面限制 TypeScript 文件并分别查看文件清单和错误码位置。真实排查还要确认忽略规则、隐藏文件与生成目录是否符合任务范围,零命中不等于整个系统不存在相关行为。

先查看范围,再定位精确错误码Shell
rg --files src -g '*.ts' -g '*.tsx'
rg -n -F 'AUTH_EXPIRED' src -g '*.ts' -g '*.tsx'

第一条列出所选源码文件,第二条查找字面错误码。命令不会判断哪个分支实际运行,也不会自动追踪同名符号;必要时结合语言服务、引用查询和调用方代码继续验证。

语义召回适合命名未知的业务问题

如果问题是“关闭弹窗后旧请求仍覆盖新页面”,仓库可能使用 epoch、requestToken 或 disposed 等词,未必出现用户描述中的关键词。语义检索可以把这些概念相关片段放进候选集,再由 Agent 对照异步流程判断是否有关。

它也可能把其他模块里类似的取消逻辑排得很高,或者只召回注释和文档。分数表示当前检索模型的相关程度,不是代码正确性的概率。应保留路径、范围与版本信息,避免脱离上下文把一个看起来相似的片段直接当成修改目标。

混合检索最后仍要落到当前代码证据

可以并行收集文本命中和语义候选,去重后按任务相关性、目录归属和调用关系继续缩小。两种分数通常不能直接相加,排名融合是一种可选方式,但是否有效需要用真实仓库问题评估,不能只看检索列表更长。

向量索引可能落后于当前分支,文本搜索也可能读取到随后被修改的文件。准备补丁前重新读取目标范围并检查版本,必要时更新索引或放弃过期候选。涉及符号重命名时还应使用语法与引用工具,普通文本匹配无法可靠区分所有同名符号。

回答前,多想一步

容易答错的地方

语义搜索排名第一的文件就是问题根源
相似度只提供候选,真正根因需要结合调用链、状态变化和复现证据确认;相关实现不一定在故障路径上。
rg 没找到就证明代码不存在
搜索目录、扩展名、忽略规则和词形都可能限制结果,动态生成与依赖包也可能不在范围内;应先检查搜索前提再下结论。
试着用自己的话回答

面试官还会怎么问?

已经知道函数名还要跑向量检索吗?

通常先查精确符号更直接。只有定义分散、需要发现替代实现或相关业务概念时,再增加语义召回作为补充。

向量索引应该按整文件还是函数切块?

要兼顾语义完整和上下文成本。函数块方便定位,但可能缺少类型与周围约定;检索结果应能扩展到相邻定义,并保留原文件位置。

搜索结果可以直接作为补丁输入吗?

应先重新读取当前文件,确认内容没有截断或过期。检索片段是发现入口,不能替代应用补丁时需要的真实上下文和版本前提。

从一道题,走向一组知识

把知识连起来

编码与执行

编码 Agent 用搜索替换、行号、diff 还是整文件重写,怎样选择?

定位目标后再选择可靠的编辑表达方式

编码与执行

编码 Agent 修改多个文件时,怎样保证补丁一致性与执行顺序?

定义与调用方检索结果共同决定重构范围

编码与执行

AI 编码 Agent 面对大型仓库时,如何设计上下文检索策略而不是把整个仓库塞进提示词?

把不同检索方式纳入大型仓库的上下文获取流程

参考资料

  • ripgrep:User Guide
  • Elastic:Hybrid search

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 精确搜索擅长回答内容在哪里
  3. 语义召回适合命名未知的业务问题
  4. 混合检索最后仍要落到当前代码证据
  5. 容易答错的地方
  6. 面试官还会怎么问
  7. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑