Skills、Agents和MCP服务器如何在Claude Code中协同工作

    /
    6 分钟阅读
    Ing. Patrik Kelemen
    Skills、Agents和MCP服务器如何在Claude Code中协同工作

    一份关于理解Claude Code如何通过skills、子代理和MCP服务器连接来扩展其能力的实用指南。

    Namiru AI

    AI客户支持 为您的网站

    粘贴您的URL。30秒内获得支持代理。

    Skills、Agents和MCP服务器如何在Claude Code中协同工作

    你可能遇到过这个困境: 你把整个代码库粘贴到AI聊天中,添加一个详细的提示,然后得到的是......毫无用处的回答。更糟糕的是,模型开始幻想出不存在的函数名,因为它在50,000个token之前就失去了追踪。

    这就是上下文窗口问题。这也是为什么向LLM扔更多代码并不能让它变得更聪明。

    Claude Code以不同的方式解决这个问题。不是通过拥有更大的上下文窗口(虽然这也有帮助),而是通过智能地利用它拥有的空间。它通过三样东西的协同工作来实现: skills、子代理和MCP服务器。

    让我展示这些部分如何组合在一起。一旦你理解了这一点,你就会停止与AI对抗,开始与它协作。

    上下文窗口问题

    这是我花了一段时间才内化的东西: LLM实际上并不会像你预期的那样"记住"长对话的开头。上下文窗口更像是一个聚光灯而不是一个文件柜。随着你添加更多token,更早的内容得到的注意力就越少。粘贴100,000个token的代码,模型在读到你的问题时基本上已经在略读了。

    这解释了很多令人沮丧的AI行为。模型一开始看起来很聪明,然后就变得困惑了。它忘记了你之前告诉它的事情。它幻想出它"读过"但显然没有记住的文件中的细节。

    修复方法不是更大的上下文窗口。修复方法是不需要更大的上下文窗口。

    Claude Code实际上是如何思考的

    Claude Code是一个代理。这听起来很高级,但它只是意味着它可以规划、执行、观察结果并迭代。当你要求它"修复我项目中失败的测试"时,它不会试图一次理解你的整个代码库。相反,它按照聚焦的步骤工作:

    1. 读取项目结构以了解什么在哪里
    2. 运行测试以查看实际失败的是什么
    3. 查看具体失败的测试及其测试的代码
    4. 进行修复
    5. 再次运行测试
    6. 如果仍然有问题,尝试其他方法

    每个步骤只使用它需要的上下文。代理维护着它所学到的工作摘要,而不是它看到的一切的原始日志。这就是Claude Code如何能在复杂的bug上迭代20次而不会耗尽上下文空间。

    把它想象成你实际调试东西的方式。你不会把整个代码库都记在脑子里。你专注于一个区域,形成假设,测试它,然后调整。Claude Code的工作方式也是一样的。

    子代理 - 真正的游戏规则改变者

    这就是变得真正有趣的地方。Claude Code可以生成子代理。

    子代理是一个独立的Claude实例,拥有自己干净的上下文窗口。你可以让Claude Code启动一个子代理,给它一个聚焦的任务,让它独立工作,然后获取它发现的摘要。子代理的完整上下文永远不会污染你的主对话。

    这非常重要。不是让一个代理试图掌握所有东西:

    你: "分析这个代码库的安全问题、性能问题和测试覆盖率" 主代理生成子代理: ├── 子代理1: 安全分析(自己的上下文,读取安全相关文件) ├── 子代理2: 性能审查(自己的上下文,聚焦热点路径) └── 子代理3: 测试覆盖率(自己的上下文,检查测试文件) 每个子代理向主代理返回摘要 主代理将所有内容综合成一个回复

    每个子代理可以读取数千行代码。但主代理只接收它们的压缩发现。你的主上下文保持干净,同时仍能获得跨多个领域的深入分析。

    把它想象成委托给初级开发者。你不需要读他们审查的每一行代码。你需要他们的结论和他们发现的任何警示信号。子代理的工作方式完全相同。

    如何实际使用子代理

    你可以明确要求Claude Code生成子代理:

    • "生成一个子代理来深入分析认证模块"
    • "使用子代理来审查所有数据库查询的N+1问题"
    • "让一个子代理浏览测试文件并报告覆盖率差距"

    子代理获得自己的全新上下文,完成深度工作,然后返回摘要。你的主对话不会因为所有原始分析而膨胀。

    这对大型代码库特别强大。Claude Code不会在分析到一半时失去追踪,你可以获得真正可扩展的聚焦分析。

    Skills的作用

    所以Claude Code可以分解任务、生成子代理并按聚焦步骤工作。但它如何知道怎样做好特定的事情?这就是skills发挥作用的地方。

    Skills是Claude在处理特定类型任务之前读取的打包指令。当你要求Claude Code创建PowerPoint演示文稿时,它首先读取/mnt/skills/public/pptx/SKILL.md中的skill文件。这个文件包含最佳实践、常见陷阱和实际有效的确切代码模式。

    一个skill通常包括:

    • 一个带有详细指令的SKILL.md文件
    • 代码模板和示例
    • 已知的限制和解决方法
    • 输出格式规范

    关键的洞察是skills按需加载。当你在调试Python时,Claude不会浪费上下文窗口空间在PowerPoint指令上。它在需要时加载相关skill,用于任务,然后继续前进。

    这与工具不同。工具是Claude调用以获取数据的函数,如web_searchbash_tool。Skills是改变Claude处理问题方式的知识包。这个区别很重要,因为工具会在系统提示中消耗token(更多工具 = 更少的代码空间),而skills只在相关时加载。

    方面工具Skills
    工作方式调用函数,获取结果加载指令,修改行为
    Token成本始终存在于上下文中按需加载
    最适合离散操作(API调用,文件操作)复杂工作流(文档创建)

    子代理也可以加载skills。分析安全性的子代理可以加载安全特定的skills,而这些指令不会弄乱你的主对话。

    迭代循环

    你会不断看到的一种模式是迭代循环。Claude Code生成某些东西,检查它是否有效,然后修复问题直到正确为止。

    1. 生成代码 2. 运行它(或lint它,或做类型检查) 3. 看看它是否工作 4. 如果不行,分析错误并重试 5. 重复直到通过

    这就是为什么Claude Code可以修复单次提示会遗漏的bug。它不仅仅是生成代码然后祈祷。它测试自己的工作并回应真实的反馈。

    当Claude Code创建一个React组件然后运行开发服务器检查错误时,它在使用这个循环。当它编写一个函数并运行测试来验证它是否工作时,也是同样的事情。生成和验证步骤协同工作。

    这也解释了为什么Claude Code有时候比你预期的要花更长时间。它不是慢。它是彻底的。它在运行你的测试,检查类型错误,并迭代直到一切真正工作。

    MCP服务器 - 连接到外部系统

    到目前为止,我们讨论了Claude Code如何思考(代理步骤,子代理)以及它知道什么(skills)。但是连接到外部系统呢?这就是MCP发挥作用的地方。

    Model Context Protocol是Claude Code与数据库、GitHub、文件系统、CI/CD管道以及几乎任何其他东西通信的方式。把MCP想象成AI的USB-C: 一个让任何兼容的AI系统连接到任何兼容服务的标准接口。

    MCP服务器公开三种类型的功能:

    工具 - Claude可以调用的函数,如查询数据库或创建拉取请求

    资源 - Claude可以读取的数据源,如文件内容或数据库模式

    提示 - 用于常见交互的可重用模板

    对于Web开发,最有用的MCP服务器包括:

    • 文件系统服务器 - 在你的项目中读写文件(为安全进行沙箱隔离)
    • GitHub服务器 - 管理代码仓库、PR、问题和工作流
    • 数据库服务器 - 通过自然语言查询PostgreSQL、MySQL、SQLite

    以下是一个简单MCP服务器在TypeScript中的样子:

    typescript
    import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
    import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
    
    const server = new McpServer({
        name: 'code-analyzer',
        version: '1.0.0'
    });
    
    server.registerTool(
        'analyze_complexity',
        {
            description: 'Analyze cyclomatic complexity of a file',
            inputSchema: { filePath: { type: 'string' } }
        },
        async ({ filePath }) => {
            const result = await analyzeFile(filePath);
            return { content: [{ type: 'text', text: JSON.stringify(result) }] };
        }
    );
    
    const transport = new StdioServerTransport();
    await server.connect(transport);
    

    MCP服务器的强大之处在于它们如何与子代理配合工作。子代理可以通过MCP查询数据库,分析数千行数据,只返回相关发现。原始数据永远不会接触你的主上下文。

    综合运用

    让我们通过一个真实的例子来说明。你问Claude Code: "审查这个PR并检查数据库迁移是否安全。"

    以下是实际发生的事情:

    1. 主代理加载代码审查的相关skills
    2. 它生成一个子代理来深入分析PR变更
    3. 那个子代理调用GitHub MCP服务器来获取PR详情
    4. 另一个子代理通过MCP读取迁移文件并查询当前数据库模式
    5. 子代理返回聚焦摘要: "迁移添加索引,看起来安全"或"警告: 这会删除一个仍在引用的列"
    6. 主代理将子代理的发现综合成清晰的回复

    注意繁重的工作发生在拥有自己上下文的子代理中。主代理编排和总结。你的对话保持干净,同时获得深入的分析。

    为什么这对你的工作流程很重要

    理解这个架构会改变你使用Claude Code的方式:

    你停止与上下文窗口对抗。 一旦你意识到子代理单独处理深度分析,你就会停止试图把整个代码库粘贴到主对话中。让子代理做繁重的阅读工作。

    你明确使用子代理处理大任务。 不是希望Claude Code自己想明白,而是告诉它: "使用子代理分析支付模块"或"为安全、性能和测试审查各生成子代理。"你在与架构配合而不是对抗。

    你理解为什么某些任务比其他的效果更好。 可以委托给子代理的任务扩展性很好。需要在一个上下文中持续来回的任务更快地达到限制。

    你信任迭代循环。 修复bug时,让Claude迭代。它通常会通过实际运行代码和观察失败来发现你没有预料到的问题。不要在第一次尝试后就打断它。

    实用提示

    对大任务明确要求子代理。 "生成一个子代理来审查认证系统"比希望Claude Code自己想出需要委托要好得多。

    让Claude先读取skills。 如果你在创建文档或使用特定文件格式,Claude在开始之前先读取相关skill文件时表现更好。

    为重复性集成连接MCP服务器。 不要把数据库输出或GitHub PR详情复制粘贴到你的提示中,连接相关的MCP服务器。Claude会精确地获取它需要的内容。

    在构建自定义工具之前检查生态系统。 MCP生态系统已增长到超过5,000个社区服务器,涵盖Stripe、Cloudflare、CI系统和大多数你想集成的服务。可能已经有人构建了你需要的东西。

    当它出错时提供反馈。 当Claude Code产生错误结果时,告诉它哪里出了问题。迭代循环也适用于你的反馈。

    更大的图景

    MCP最近被捐赠给了Linux基金会,OpenAI、Google和Microsoft作为支持成员加入。这表明该协议正在成为行业标准基础设施,而不仅仅是Anthropic的东西。

    子代理(在独立上下文中并行工作)、skills(按需加载的领域专业知识)和MCP服务器(与外部系统的干净连接)的组合代表了现代AI编码助手实际工作的方式。这不是魔法。这是用良好的架构解决真实的约束。

    子代理模式尤其值得深入理解。它是AI在大型代码库上崩溃和可扩展之间的区别。当你要求Claude Code分析某些大型内容时,它不是把所有东西塞进一个上下文然后祈祷。它委托给聚焦的子代理,每个都有干净的上下文,然后综合它们的发现。

    理解这些部分帮助你与系统配合而不是对抗。你会获得更好的结果,遇到更少的阻碍,并知道什么时候信任AI,什么时候手动接管。

    Namiru.ai - 为您的网站提供即插即用的AI聊天。

    Patrik Kelemen
    Author
    Ing. Patrik Kelemen
    Founder of Namiru.aiSlovakia, EU

    Senior software engineer with 10+ years of experience, specializing in AI chat widgets and automation. Building Namiru.ai to help businesses leverage AI without complexity.

    AI AgentsAngularReactNodeJSAWSAzure
    您喜欢这篇文章吗?

    看看AI能为您的 网站

    粘贴您的URL,观看AI代理在几秒钟内启动。

    您的客户获得即时回答。您获得潜在客户、分析和宝贵时间。

    无需信用卡

    Namiru.ai

    AI chat for your website