Sourcegraph深度讲解三种代码搜索工具的适用场景和权衡。程序员选工具的实战指南,直接提升开发效率。
AI 为代码搜索带来了新的方式,但并不是每种方式都适用于所有问题。下面介绍如何在 Code Search、Deep Search 和 MCP 之间做出选择。
如今,几乎所有工具、工作流和产品都以某种方式集成了 AI,希望借此增强能力、改善产出。AI 确实变得越来越有用,但同时也让一些事情变得不那么清晰。
作为一名在这个领域工作、直接服务真实用户的人,我接触过全球一些规模最大的科技公司,也观察到一个明确趋势:瓶颈已经不再是开发者能否使用工具,而是能否判断该使用哪种工具,以及何时使用。
与其纠结“要不要使用 AI”,我们发现,更有效的思路是先从眼前的问题出发,思考你打算如何解决它。
这正是 Sourcegraph 提供的不同工具各自发挥作用的地方。
Sourcegraph 为开发者提供了三种不同的选择,用于大规模搜索和理解代码。
Code Search——一种传统的代码搜索工具,允许你跨所有代码仓库和代码托管平台进行搜索。你既可以使用统一界面,也可以通过 API endpoints 以编程方式完成搜索。
Deep Search——一种 Agent 式代码搜索工具,能够理解针对代码库提出的自然语言问题,并利用 Sourcegraph 的搜索工具提供依据更充分的回答。
Sourcegraph MCP——为 AI Agent 和应用提供编程接口,使其能够使用 Sourcegraph 实例中的代码搜索、导航和分析能力。
三种搜索方式可以覆盖广泛的使用场景,但关键在于知道什么时候该使用哪一种。下面我们逐一拆解。
很多时候,你并不是在探索,而只是想找到某个具体的东西。你已经知道它存在,只是不知道它在哪里、出现过多少次,或者存在于哪个 commit 中。
这正是传统代码搜索最适合的场景。它直接、可预测且速度快——这并不是 AI 所擅长的方向,AI 也没有试图取代它。
具体来说,常见场景包括:
查找某个函数、变量或 API 在多个仓库中的每一处引用
识别整个代码库中所有已知漏洞的实例
来看一个具体示例:
使用场景:在所有仓库的 properties 文件和 YAML 文件中查找特定的 Spring Boot 属性。
解决方案:使用 Sourcegraph Code Search 执行以下查询:
context:global file:(^|/)resources/application(?:[-_][A-Za-z0-9]+)*\.(?:properties|ya?ml)$ /(?s:spring\b.*h2\b.*console\b.*enabled\b.*true\b)/
如果你不熟悉 Sourcegraph 的搜索语法,Query Assist 可以帮助你生成搜索查询。
另一些时候,你并没有从某个明确的目标开始。你可能是在尝试理解一个系统、弄清楚为什么会抛出某个错误,或者研究某项功能为何会以当前方式运行。
Deep Search 将 Agent 的能力与 Sourcegraph Code Search 相结合,帮助你理解整个代码库中正在发生什么,无需手动在不同文件之间来回跳转。
当你需要回答以下问题时,Deep Search 是合适的工具:
“这个系统中的身份认证是如何运作的?”
“最近发生了哪些变化,可能导致了这个问题?”
Deep Search 会基于代码中的示例,为你提供全面的回答,甚至还能生成展示系统设计方式的可视化图表。建立起整体理解后,你可以将这些上下文交给 Code Search,以获得精确结果;也可以通过 Sourcegraph MCP 将其交给 AI Agent,让 Agent 采取行动。
还有一些情况,你不只是想查找或理解信息,而是想真正完成某项任务。这通常不止一个步骤:需要获取上下文、执行验证步骤,过程中或许还要与其他系统交互。
如果没有合适的工具来快速搜索复杂代码库并获取正确的上下文,Agent 仍然会进行大量原本可以避免的猜测。在这类场景中,真正需要的是通过 Sourcegraph 的搜索和推理工具,让你选择的 Agent 能够远程访问代码。
下面来看几个示例。
使用场景:调查 CommaFeed 应用中的生产环境问题,在远程且陌生的代码中快速确定根本原因,并给出修复建议。解决方案:向 Agent 提供错误信息和远程仓库名称,请它分析错误。分析 CommaFeed 应用中的以下 stack trace(https://github.com/Athou/commafeed)。使用 Sourcegraph MCP tools 调查代码库,提供根因分析和修复建议。jakarta.ws.rs.InternalServerErrorException: HTTP 500 Internal Server Error at org.jboss.resteasy.reactive.server.handlers.ResponseHandler.mapException(ResponseHandler.java:58) at org.jboss.resteasy.reactive.server.handlers.ResponseHandler.handle(ResponseHandler.java:42) at ...
使用场景:调查 CommaFeed 应用中的生产环境问题,在远程且陌生的代码中快速确定根本原因,并给出修复建议。
解决方案:向 Agent 提供错误信息和远程仓库名称,请它分析错误。
Triage the following stack trace from the CommaFeed application (https://github.com/Athou/commafeed).
Use Sourcegraph MCP tools to investigate the codebase and provide a root cause analysis with a fix recommendation.
jakarta.ws.rs.InternalServerErrorException: HTTP 500 Internal Server Error
at org.jboss.resteasy.reactive.server.handlers.ResponseHandler.mapException(ResponseHandler.java:58)
at org.jboss.resteasy.reactive.server.handlers.ResponseHandler.handle(ResponseHandler.java:42)
at ...
使用场景:根据 Deep Search 的初步调查结果,规划并开始重构某个仓库,重点解决糟糕的设计模式和无障碍模式。解决方案:让你选择的 Agent 查看 Deep Search 的回答,并制订一份全面的计划。查看这段 Deep Search 对话 https://demo.sourcegraph.com/deepsearch/338a1da9-d8ac-4221-9fbc-769b5ebf676e,并制订计划,解决其中发现的关键问题。由于 Sourcegraph MCP 可以让 Agent 访问 Deep Search 对话,因此你可以直接传入结果,让 Agent 开始规划并实施重构。
使用场景:根据 Deep Search 的初步调查结果,规划并开始重构某个仓库,重点解决糟糕的设计模式和无障碍模式。
解决方案:让你选择的 Agent 查看 Deep Search 的回答,并制订一份全面的计划。
Review this Deep Search conversation https://demo.sourcegraph.com/deepsearch/338a1da9-d8ac-4221-9fbc-769b5ebf676e and make a plan to resolve the key issues identified.
由于 Sourcegraph MCP 可以让 Agent 访问 Deep Search 对话,因此你可以直接传入结果,让 Agent 开始规划并实施重构。
有些问题需要精确搜索,有些需要深入理解,还有一些两者都需要。那些能够产生最大影响的人,其实只是掌握了如何根据眼前的任务选择正确的工具。
Jon 于 2022 年加入 Sourcegraph,先后担任 Senior Support Engineer,并于近期转任 Field Engineer。他曾与全球一些规模最大的科技公司合作,通过最佳实践培训以及深入研究客户关注的具体使用场景,帮助这些公司将现代代码搜索和 AI 融入日常工作流。
消除组织阻碍,更快交付。
Sourcegraph,面向企业的代码理解平台。