我今天早上安装了这个变形搜索工具,然后就把它忘了。我想知道我的代理商有没有用过,以及它对他们有没有帮助。 所以我问了他们,他们都向一个(呃,机器人)承认,他们根本没用过那个工具,而是像往常一样坚持使用 grep。真是些固执己见、墨守成规的老顽固开发者啊。 总之,我让他们四处看看,试用一下,然后告诉我他们的想法。于是他们试驾了一下,并给了我一些反馈。 然后我让他们弄清楚何时、为何以及如何才能最好地使用它,然后让其中一人提出最密集、最直观的解释(至少对他们的机器人大脑来说是直观的)来解释这一切,以便在 AGENTS dot md 文件中使用。 以下是它得出的结果;欢迎随意借鉴到你自己的 AGENTS dot md 项目中(顺便说一句,我目前的结论是,值得保留一段时间,看看他们最终会如何使用它,但我认为它可能相当有用——如果他们真的会被说服使用它的话,这就是为什么这些简短的说明如此重要,以及为什么他们应该专注于说服而不是命令特工!道德劝说不仅仅适用于人类……): --- ### 变形扭曲 Grep 与标准 Grep Warp Grep = AI 代理,它能够搜索、读取、跟踪关联,并返回带有行号的合成上下文。 标准 Grep = 快速正则表达式匹配,结果由您解释。 结论:你能写出 grep 模式吗? - 是的 → Grep - 不,你有个问题 → mcp__morph-mcp__warp_grep #### Warp Grep 查询(自然语言,未知位置) “申诉审核流程是怎样的?” WebSocket 连接在哪里进行管理? “用户提交帖子后会发生什么?” “限速措施在哪些地方实施?” “API路由上的身份验证会话是如何验证的?” “哪些服务会影响审核决策表?” #### 标准 Grep 查询(已知模式,特定目标) pattern="fileAppeal" # 已知函数名 pattern="class.*Service" # 结构模式 pattern="TODO|FIXME|HACK" # 标记 pattern="processenv" path="apps/web" # 特定字符串 pattern="import.*from [']@/lib/db" # 导入跟踪 #### Warp Grep 内部执行的操作 一次查询 → 15-30 次操作:搜索多个模式 → 读取相关部分 → 跟踪导入/引用 → 返回聚焦的行范围(例如,l3-guardian.ts:269-440),而不是整个文件。 #### 反模式 | 不要使用 Warp Grep | 为什么 | 应该使用其他方法 | |------------------------|-----|-------------| | "查找函数 handleSubmit" | 已知名称 | Grep 模式="handleSubmit" | | "读取认证配置" | 已知文件 | 读取文件路径="lib/auth/..." | | “检查 X 是否存在” | 布尔值答案 | grep + 检查结果 | | 任务执行过程中快速查找 | 延迟 5-10 秒 | Grep 命令耗时 100 毫秒 | #### 当传送格雷普获胜时 - 追踪跨文件的数据流(API → 服务 → 模式 → 类型) - 在修改之前,先了解不熟悉的子系统 - 回答涉及 3 个以上文件的“如何”问题 - 找出所有与跨领域问题相关的切入点 — 你可以在这个 gist 中看到完整的互动过程: https://t.co/Z6jvFXDxub
实际上,我也很喜欢它给出的第一个结果,我会把这两个结果都添加到我的 AGENTS dot md 文件中: --- ### Morph Warp Grep — 人工智能驱动的代码搜索 **使用 `mcp__morph-mcp__warp_grep` 来探索“X 是如何工作的?”这类问题。** AI 搜索代理会自动将您的查询扩展为多个搜索模式,搜索代码库,读取相关文件,并返回包含完整上下文的精确行范围——所有这些都只需一次调用即可完成。 **使用 `ripgrep`(通过 Grep 工具)进行有针对性的搜索。** 当您确切知道要查找的内容(例如特定的函数名称、错误消息或配置键)时,ripgrep 速度更快、更直接。 **使用 `ast-grep` 查找结构化代码模式。** 当您需要匹配/重写 AST 节点而忽略注释/字符串,或强制执行代码库范围的规则时,可以使用此方法。 何时使用何种产品 | 场景 | 工具 | 原因 | |----------|------|-----| | “身份验证是如何实现的?” | `warp_grep` | 探索性问题;不知道从哪里入手 | | “L3 Guardian申诉系统在哪里?” | `warp_grep` | 需要了解架构,查找多个相关文件 | | "查找所有使用 `useQuery(`)" | `ripgrep` | 定向字面搜索 | | "查找包含 `console.log` 的文件" | `ripgrep` | 简单模式,已知目标 | | "重命名 `getUserById` → `fetchUser`" | `ast-grep` | 结构重构,避免注释/字符串 | | 将所有 `var` 替换为 `let` | `ast-grep` | 跨代码库进行代码转换 | **warp_grep 的优势** * **减少上下文污染**:仅返回相关的行范围,而不是整个文件。 * **智能扩展**:将“申诉系统”转换为搜索“申诉”、“申诉”、“监护人”、“L3”等。 * **一次性解答**:查找 3-5 个最相关的文件,并精确定位,无需手动 grep→读取循环。 * **自然语言**:适用于“如何”、“哪里”、“什么”等问题。 **warp_grep 用法** ``` mcp__morph-mcp__warp_grep( repoPath: "/data/projects/communitai", 问题:“L3 Guardian申诉系统是如何实施的?” ) ``` 返回结构化结果,包括文件路径、行范围和提取的代码片段。 **经验法则** * **不知道从哪里找** → `warp_grep`(让AI帮你找) * **了解规律** → `ripgrep`(最快) * **需要 AST 精确度** → `ast-grep`(重写时最安全) 反模式 * ❌ 使用 `warp_grep` 查找已知函数名 → 请使用 `ripgrep` * ❌ 使用 `ripgrep` 来了解“X 的工作原理”会浪费时间进行手动文件读取 * ❌ 使用 `ripgrep` 查找代码修改器会遗漏注释/字符串,并可能导致附带修改