00:00:00随着人工智能的进步以及每个新模型性能的不断提升,我们编写代码的方式已经被彻底改变。
00:00:07现在有许多专门用于编码的工具,比如 ClodCode、Cursor、Antigravity 等,每个都有其独特的功能。
00:00:14但仅有优秀的模型并不能决定你所生成代码的质量。
00:00:18如何使用工具和管理上下文同样重要。
00:00:22所有这些工具都有一些内置的上下文工程机制,
00:00:24但 Cursor 刚刚为一种新方法做出了重大推进,
00:00:27将其直接构建到应用程序本身中。
00:00:29当我阅读他们的文章时,我意识到这些原则确实非常有力。
00:00:33我们今天有很多内容要讨论,因为这些理念可以广泛应用于你用来构建应用程序的任何平台。
00:00:40在使用 AI 智能体时,上下文管理一直至关重要,因为良好的上下文管理决定了输出质量。
00:00:47我们之前在视频中讨论过上下文管理的重要性,并介绍了相关工作流程。
00:00:53Cursor 将上下文管理功能直接集成到他们的产品中,并发布了一篇相关文章。
00:00:58这些原则基于他们的观察:要从模型中获得良好结果,最好在上下文窗口中提供尽可能少的细节。
00:01:06模型一次接收的信息越少,它一次需要处理的数据就越少,这意味着更少的混淆和对当前任务的更多关注,因为只包含相关信息。
00:01:17这种方法就是他们所说的动态上下文发现。
00:01:20其理念是结构化笔记记录。
00:01:22也就是说,当前不需要的信息不应该出现在上下文窗口中,排除可能造成混淆或矛盾的细节,可以显著提高智能体响应的质量。
00:01:32Cursor 当前的版本增加了五种动态上下文管理方法,即将向用户推出。
00:01:37尽管 Cursor 将其作为产品更新来实现,但这些原则可以广泛迁移到所有 AI 智能体。
00:01:44Cursor 提到的第一个更新是,长工具响应应该保存到文件中。
00:01:48MCP 通常会返回留在上下文窗口中的大量响应。
00:01:52并非响应中的所有信息都总是需要的。
00:01:55Cursor 提到,大多数编码工具的常见做法是截断长 MCP 响应,这会导致数据丢失或可能对上下文必要的重要信息被移除。
00:02:07Claude 的 Chrome 扩展是一个非常依赖工具的扩展,
00:02:11仅仅几个提示就会因为将大量内容加载到上下文窗口而填满上下文。
00:02:15所以我在 Claude.md 文件中添加了一条指令,
00:02:18任何超过 50 行的 MCP 工具响应都必须通过在终端中运行 echo 命令保存到 .context 文件夹内的 MCP 文件夹中。
00:02:27当我运行 Chrome 扩展来分析落地页的 UI 时,
00:02:30每当 Claude 遇到像 ReadPage 这样会显著膨胀上下文窗口的工具时,
00:02:36它会将 MCP 响应保存到文件中以供进一步阅读,
00:02:39利用这个方法分析整个页面并给我一份报告。
00:02:42这种变通方法让 Claude 可以根据需要从文件中多次分析响应,提高了工具响应分析的准确性,并消除了重复工具调用的需求。
00:02:52当需要之前 MCP 调用的数据时,
00:02:54Claude 可以直接从 .context 文件夹中读取,
00:02:58而不是进行工具调用,
00:02:59从而节省大量时间。
00:03:00在我们继续下一个变化之前,让我们听听我们的赞助商 Zen Rose。
00:03:04如果你正在构建 AI 产品、
00:03:06自动化系统或数据驱动的系统,
00:03:08你已经知道一件事,
00:03:09一切都始于可靠的网络数据。但大规模获取干净、
00:03:13结构化的数据比听起来更难。这就是 Zen Rose 完美融入技术栈的地方。
00:03:18Zen Rose 处理来自复杂网站的数据提取,同时自动管理反机器人绕过,让你可以专注于真正重要的事情——使用数据。
00:03:27无需处理混乱的输出,
00:03:28Zen Rose 提供结构化的结果,
00:03:31如 JSON 或 Markdown,
00:03:34可直接插入您的流程管道。它即插即用且专注业务需求,
00:03:38非常适合不想花时间维护基础设施的 AI 初创公司、
00:03:41数据团队和自动化构建者。
00:03:43无论您是在丰富潜在客户信息、
00:03:44驱动 AI 代理,
00:03:45还是自动化研究,
00:03:46Zen Rose 都能完美胜任。如果您的工作依赖网络数据,
00:03:49Zen Rose 就应该成为您技术栈的一部分。
00:03:52点击置顶评论中的链接,立即开始构建。
00:03:55我们知道,
00:03:55当上下文窗口填满时的摘要步骤非常混乱,
00:03:58会导致大量信息丢失。大多数工具,
00:04:01包括 cursor 和 Claude code,
00:04:04都会触发摘要步骤,
00:04:05然后以摘要作为起点开启一个全新的上下文窗口会话。
00:04:09当您反复点击压缩时,摘要就会开始遗忘那些对您可能很重要、但模型的摘要可能会遗漏的细节。
00:04:16您对自动压缩的控制非常有限,如果需要反复压缩,重复的压缩会导致关键信息的丢失。
00:04:24Cursor 的解决方案是将所有先前的聊天历史保存为文件,供代理日后参考。
00:04:30当我们提供非常具体的提示词,而模型在摘要中找不到信息时,先前的记录就会作为其知识库。
00:04:37模型使用该记录来生成解决方案,从而能够恢复摘要中丢失的任何内容。
00:04:43在 cursor 的实现正式推出并向所有人开放之前,我尝试在 Claude code 中实现这个功能。
00:04:50我在 Claude.md 文件中添加了指令,要求在每轮对话后更新聊天历史,记录所有关键决策和执行步骤。
00:04:58它在 .context 文件夹内使用了一个 history 文件夹,每个文件的名称都反映了对应的会话。
00:05:03因此,每当我要求它执行任何任务时,在任务执行会话结束时,它都会将聊天历史记录到相应的历史文件中,将所有内容添加到该文件。
00:05:12这样,.context 文件夹就包含了所有会话的详细记录以及完成的所有工作。
00:05:18代理被赋予了技能来帮助管理 MCP 引起的上下文问题。
00:05:23技能的全部目的是通过脚本和指令文件进行引导,并通过渐进式披露减少上下文膨胀,从而让代理更好地利用自身能力。
00:05:33Anthropic 是第一个提出这个想法的,
00:05:36基本上就是给代理提供一组指令、
00:05:39脚本和资源,
00:05:40代理可以发现并使用这些资源来更好地完成特定任务。Anthropic 基本上将这些代理技能开源,
00:05:47设立了一个其他人可以实现的标准。随后,
00:05:50Codex、
00:05:51Gemini 等开始实现代理技能,
00:05:53最后终于轮到 cursor 做同样的事情。cursor 的技能基本上就是将可执行文件和脚本捆绑在一起形成单一技能,
00:06:02代理可以用于各自的任务。只有技能的名称和描述在静态上下文中。
00:06:07一旦进入静态上下文,代理就可以自行调用它们的技能,使用 grep 和 Cursor 的语义搜索。这正是它的不同之处,因为 Cursor 的语义搜索在后台使用自己的嵌入模型和索引管道,而不是像 grep 命令中基于正则表达式的搜索那样进行简单的模式匹配。Claude 的技能只在上下文中暴露名称和描述,无论脚本使用多少文件,都能防止上下文膨胀。在我的项目中,我配置了 5 个技能,
00:06:33每个技能消耗的令牌非常少,仅占总量的约 0.2%,为工作留下了更多空间。不同之处在于,Claude 的技能还可以通过 /commands 访问,让你可以在需要时手动触发它们,解决了人们抱怨技能无法按需正确加载的问题。MCP 包含大量工具,全部暴露在上下文窗口中,不必要地使上下文窗口膨胀。Cursor 主动承担责任并强调,修复上下文膨胀是编码代理的责任,而不是 MCP 服务器的责任。他们的解决方案是通过在文件夹中同步工具描述来实现动态上下文发现。Cursor 的想法是将所有 MCP 及其名称放在单独的文件夹中,每个文件夹以连接的 MCP 命名,并且在每个文件夹内必须列出所有工具。这样,代理只接收工具的名称,每当它需要任何工具时,就通过文件夹查找。在他们进行的测试中,他们发现 MCP 工具的动态发现将使用量减少了 46.9%,如果你在长期运行的系统上工作,这会产生巨大的差异。这个实现还有助于处理 MCP 服务器意外断开连接或需要重新认证的情况。通常情况下,系统会直接忘记那些工具,但现在代理实际上可以通知用户需要重新认证。Claude 也有一个专门设计用于解决这个问题的高级搜索工具,使用一组特定的标志让 Claude 知道是否加载它。它实现了 Cursor 动态上下文发现的确切思路,但这仅限于开发者平台,并且仅适用于那些使用 API 构建的人。我们无法修改 MCP 在 Claude Code 中的使用方式,因为它们是由 Anthropic 内置的。就在我寻找在 Claude Code 中实现这一功能的方法时,我发现了一个隐藏标志。在未设置此标志的情况下,我连接的所有 MCP 工具都暴露在 Claude Code 的上下文中。当我设置 enable experimental MCP CLI 标志后,所有工具都从上下文窗口中移除了,释放了之前被 MCP 工具占用的空间。但这并不意味着启用此 CLI 后 MCP 会断开连接。唯一的区别是它们不再预先暴露在上下文窗口中。Claude 现在使用一个名为 MCP CLI 的中间 bash 层来处理所有与 MCP 相关的任务,而不是将所有模式放入上下文中。Claude 使用这个中间层来搜索、
00:08:44获取信息和调用工具。每当你要求 Claude 执行任何需要 MCP 工具调用的任务时,它不再使用通常的方法,而是通过 MCP CLI 使用 MCP 并执行所需的任务。通过使用这个工具,Claude 像往常一样执行所有任务,只是通过这个中间层。在 Cursor 中报告终端错误很困难,因为它的访问权限有限。如果终端显示任何错误,你需要将其添加到聊天中,然后让它修复。Cursor 对此的解决方案也是将终端会话移动到文件中。因此,每当你向它提出任何问题时,它都会引用那些历史文件并使用 grep 提取相关输出。
00:09:20由于服务器日志通常运行时间很长且包含大量对代理无用的干扰信息,
00:09:24使用 grep 任务会更高效,
00:09:26因为它允许代理进行模式匹配。他们从基于 CLI 的编码代理那里获得了这个灵感,
00:09:32这些代理运行命令,
00:09:33然后将输出注入到上下文中,
00:09:35就像 Claude code 和其他工具默认做的那样。尽管 Claude 能够智能地自行处理这一点,
00:09:41但我们可以通过在 Claude.md 中使用指令来进一步管理它,
00:09:46指示它将所有终端日志添加到 .context 文件夹内的 terminal 文件夹中的文件里。基本上,
00:09:53如果 Claude 运行任何 npm 命令,
00:09:56它会运行一个特殊命令,
00:09:57将输出流和输入流都记录到文档文件中。这里,
00:10:002 代表标准错误流,
00:10:011 代表标准输出流。它将这些日志写入 terminal 文件夹,
00:10:06并用时间戳标记它们。然后,
00:10:08每当需要搜索这些日志时,
00:10:09它只需使用带有指定模式的 grep 命令,
00:10:12并加载最后 20 行来提取真正重要的内容。
00:10:15所以每当我测试开发服务器时,
00:10:17它都会使用这些命令,
00:10:19并根据 Claude.md 文件持续将终端运行记录写入文件。运行服务器后,
00:10:25它会参考日志文件,
00:10:26找出导致问题的原因并为我修复了问题。
00:10:29虽然这个 Claude code 的附加功能看起来可能微不足道,
00:10:33因为它似乎对当前工作没有太大影响,
00:10:36但当你想要回顾应用程序的运行情况时,
00:10:39它会非常有用。就像当我需要确定是哪个服务导致应用程序崩溃时,
00:10:43我只需让 Claude 参考测试日志,
00:10:46而不是再次运行测试,
00:10:47这样我就不必为了重现一个已经见过的错误而重新运行 2 分钟的测试套件。这就是本视频的全部内容。如果你想支持这个频道,
00:10:56帮助我们继续制作这样的视频,
00:10:58可以使用下方的超级感谢按钮。一如既往,
00:11:01感谢观看,
00:11:02我们下期再见。