理解您的代码库
软件工程师最重要的工作之一,是在脑海中构建代码库的全貌,并深入理解系统的运作方式。随着项目规模不断扩大,要找到所需的代码也越来越困难。
过去,浏览大型代码库需要记住正则表达式模式,或学习专门的工具来高效搜索。借助编码 agent,您可以用自然语言描述要查找的内容,让智能体使用工具帮您找到。
Cursor 为智能体提供了专门的高效搜索工具。了解这些工具的工作原理,能帮助您提出更好的问题,并获得更准确的结果。
智能体搜索
要精确查找某段代码,最直接的方法是寻找完全匹配的内容,例如函数名、变量名或其他代码片段。
智能体可以使用 grep 这一精确字符串查找工具,也可以创建更复杂的正则表达式模式或词边界匹配。还有 ripgrep 等在 grep 基础上改进的工具,支持递归搜索。
这两种工具都非常好用。不过,Cursor 借助 Instant Grep 将 grep 进一步优化;与 ripgrep 相比,它能显著加快在大型代码库中的智能体搜索速度。
使用这些工具无需配置或改变使用习惯。Cursor 会自动提供这些工具;与智能体聊天时,它会在后台使用这些工具。
按语义搜索
当您不知道确切的符号或文本时,Agent 可以按语义搜索您的代码库。它会结合 grep 查找相关文件,并追踪精确引用。详见 Agent 如何搜索您的代码库。
如何提出好问题
问题的表述方式会影响智能体使用哪些搜索工具,以及搜索结果的效果。提问可以从具体到宽泛:你可以先要求精确匹配某段文本,例如函数名;也可以提出宽泛的问题,例如“帮我了解用户在我们的应用中提交付款后会发生什么。”
知道自己要找什么时,就从具体的问题开始。探索陌生领域时,则可以扩大范围。下面来看几个示例。
在第一个示例中,由于提示词要求查找具体内容,智能体会先使用 grep。它会搜索 import.*PaymentService,找出所有引用该服务的文件。
探索陌生领域时,可以扩大搜索范围。下一个示例中,我们询问应用如何处理付款失败。请注意,第一个工具调用是“搜索代码库”。智能体会先找到相关文件,再使用 grep 补充细节。
Explore 子代理
智能体还可以生成子代理,更高效地完成任务。
内置的 Explore 子代理 可帮助您搜索代码库。Explore 子代理在独立于父智能体的上下文窗口中运行,并使用速度更快的模型,因此可以执行大量并行搜索,而不会占用过多主对话的上下文。
您无需手动调用它。智能体会在判断其适用时使用它。不过,您也可以直接要求使用该子代理。
正如我们在基础课程中所讲,了解并关注上下文用量很重要。如果您要搜索代码库中的许多文件,就会生成大量上下文。子代理仅返回其发现结果,让主对话保持聚焦,从而显著改善上下文管理。
架构图
对于大型或不熟悉的代码库,您可以让智能体生成架构图,例如 Mermaid 图,帮助您直观理解代码库。
这些图有助于入职、编写文档和设计评审。它们还能揭示架构问题,例如某个服务依赖过多其他服务,或数据流走了意料之外的路径。
常见失败模式:未理解就改动
一个常见错误是,在不了解现有实现的情况下就让智能体修改代码。智能体可能会在已有工具函数的情况下新建一个,或采用与代码库其余部分不同的模式。
提出修改请求前,先让智能体进行探索:
编码 agent 会按字面理解您的请求。如果您没有提供意图,它们会自行做出最佳判断。有时这样做效果不错。但对于需要遵循现有模式的更改,先理解代码库并明确知道该提出什么要求,通常能获得更好的结果。
接下来
你已经能够查找并理解代码。下一章将学习如何将理解付诸实践并上线:规划功能、编写测试,以及将设计转化为代码。