[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fp74jFBcp9sas8YNlDJVeE-C2RKNgCUt6lOOyuxW1qU8":3,"$fpXJXibsKnejm5jcTzzSimoZPRuhEG_LrK0_sF-YORUs":43},[4],{"id":5,"type":6,"title":7,"slug":8,"summary":9,"body":10,"coverUrl":11,"productScreenshots":12,"productLinks":13,"authorName":14,"authorUrl":15,"authorSubject":16,"category":17,"tags":22,"sourceLabel":35,"sourceName":35,"sourceUrl":35,"status":36,"seoTitle":35,"seoDescription":35,"canonicalUrl":35,"isFeatured":37,"sno":38,"sortOrder":39,"publishedAt":40,"updatedAt":41,"createdAt":42},"0e2211d6-a9cc-4151-aec3-ea60ef2575f2","article","本地大模型部署：用 Ollama 与 llama.cpp 把模型搬进你自己的机器","local-llm-deployment-ollama-llama-cpp","数据敏感、要离线、想省 API 账单？本地部署值得了解。","把大模型搬到你自己的电脑、内网服务器甚至笔记本上跑，不依赖任何云服务——这件事在 2026 年已经相当成熟。无论是数据敏感、要离线、还是想省 API 账单，本地大模型部署都值得每个开发者了解。Ollama 和 llama.cpp 是这条路上最顺手的两件工具。\n\n## 为什么要在本地跑\n\n云端 API 方便，但有三类痛点它躲不开：数据要出网（合规敏感场景直接否决）、每次调用都计费、断网就歇菜。本地部署把模型权重放在你自己的机器上，请求不出内网、零边际成本、永远在线。代价是你要自己搞定硬件和推理环境。\n\n## 两件核心工具\n\n**Ollama**：把「下载模型、起服务、调接口」封装成几条命令，对开发者最友好，自带兼容 OpenAI 的接口。\n**llama.cpp**：用 C++ 实现、支持量化与多后端（CPU\u002FGPU\u002FMetal），是把模型塞进低配机器的底层引擎，很多上层工具（包括 Ollama）都站在它肩上。\n\n```mermaid\nflowchart LR\n    A[模型权重文件] --> B[llama.cpp 推理引擎]\n    B --> C[Ollama 封装服务]\n    C --> D[你的应用 走 OpenAI 兼容接口]\n```\n\n## 一个最小可运行的例子\n\n用 Ollama 跑起一个模型并调用，比想象中简单：\n\n```bash\nollama pull qwen2.5:7b     # 拉取一个 70 亿参数模型\nollama run qwen2.5:7b      # 命令行直接对话\n```\n\n在 Python 里，它可以像调云端一样用：\n\n```python\nfrom ollama import chat\nresp = chat(model=\"qwen2.5:7b\", messages=[\n    {\"role\": \"user\", \"content\": \"用一句话解释什么是向量数据库\"}\n])\nprint(resp[\"message\"][\"content\"])\n```\n\n## 取舍与边界\n\n- **硬件是硬门槛**：7B 模型量化后约 4–5 GB 显存，能跑；70B 级别需要大显存或多卡，笔记本基本没戏。\n- **质量有差距**：本地小模型（7B\u002F14B）在复杂推理上仍明显弱于云端旗舰模型，适合内部工具、草稿、分类等场景。\n- **量化换速度**：用 llama.cpp 的 INT4 量化能在 CPU 上跑起来，但精度会降，关键任务先评测。\n- **并发能力弱**：本地单机吞吐远不及云厂商集群，不适合高并发公网服务。\n\n## Tips\n\n- 想试水，先 `ollama pull` 一个 7B 模型，五分钟跑通对话。\n- 应用层尽量走 OpenAI 兼容接口，本地\u002F云端切换只改 base_url。\n- 数据敏感或要离线，本地部署是合规最优解。\n- 真要上生产高并发，把本地模型定位为「内网辅助」，重活仍交给云端旗舰。\n- 选模型时先想清楚硬件：显存不够就上量化版，别硬刚全精度。\n","https:\u002F\u002Foxqtewbrpuiouqqjrvdv.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fpublic-media\u002F2026-07-20\u002Fbf471546-ff4c-4fee-a01c-8a41157e5a8c.jpg",[],[],"Foundit AI","https:\u002F\u002Ffoundit.cn","f39339b1-aaa6-4e86-b0c2-a6e6a21113b5",{"id":18,"name":19,"slug":20,"description":21},"d6750616-07d9-4350-8485-1834c77be3d2","指南","guide","指导建议，仅供参考",[23,27,31],{"id":24,"name":25,"slug":26},"7c76bfc2-f80f-4ee0-a95d-27bd8708b434","技术","slug",{"id":28,"name":29,"slug":30},"a202d639-99a6-488a-a712-4d4c6ffd7e15","开发","dev",{"id":32,"name":33,"slug":34},"88d2bc27-0e0f-468a-b907-2991cb97b87b","人工智能","ai",null,"published",false,76,0,"2026-07-19T00:00:00.000Z","2026-07-20T01:22:41.329Z","2026-07-20T01:11:41.120Z",[44,72,105],{"id":45,"type":6,"title":46,"slug":47,"summary":48,"body":49,"coverUrl":50,"productScreenshots":51,"productLinks":52,"authorName":53,"authorUrl":54,"authorSubject":16,"category":55,"tags":56,"sourceLabel":35,"sourceName":35,"sourceUrl":35,"status":36,"seoTitle":35,"seoDescription":35,"canonicalUrl":35,"isFeatured":37,"sno":68,"sortOrder":39,"publishedAt":69,"updatedAt":70,"createdAt":71},"356aa99a-b365-43ef-96ae-f7e5117ec256","《我的世界》游戏模组开发指南：用AI构建你的第一个模组","mc-ai-coding","在整理在《我的世界》Java版本模组开发过程中的心得体会，系统性地介绍模组开发全流程","# 一、模组加载器\n《我的世界》模组加载器可分为两大类：\n- Fabric-轻量化，加载快\n- Forge\u002FNeoForge-高度集成，功能丰富\n\n从玩家数量来说，Forge和NeoForge的玩家数量大于Fabric，理论上来说更受欢迎（也可能是因为大部分整合包都选择使用Forge或NeoForge作为模组加载器）。\n## 1.1 Fabric加载器\n### 1.1.1 简介\nFabric加载器作为目前《我的世界》（版本>1.14）的主流加载器之一，模组库数量庞大，玩家数量稳定。部分复杂功能可能需要依赖外部模组。\n### 1.1.2 环境配置\nFabric加载器在配置环境时需要搭配正确版本的Gradle、Fabric Version、Fabric API 和 Fabric Loom。例如：对于Minecraft JE 1.20.1 Fabric版本，一般使用\n- Gradle 8.7\n- Fabric Version 0.18.3\n- Fabric API xxx\n- Fabric Loom 1.6-SNAPSHOT\n> 以上环境配置部分可详细参考[Fabric Wiki](https:\u002F\u002Fwiki.fabricmc.net\u002Fzh_cn:tutorial:setup)\n### 1.1.3 创建项目\n创建新项目时，推荐使用[Fabric官方模组模版生成器](https:\u002F\u002Ffabricmc.net\u002Fdevelop\u002Ftemplate\u002F)，按照需要设置模组信息：\n- Mod Name-模组显示的名称，不影响代码\n- Mod ID-模组标识符，嵌入代码中\n- Package Name-项目内部路径名，一般为“开发者.模组名”，也可以直接使用模组名（开发者可以作为项目“水印”\n> 推荐在Advanced Options中关闭Mojang Mappings\n## 1.2 Forge\u002FNeoForge加载器\n### 1.2.1 简介\nForge和NeoForge加载器作为目前市面上玩家数量最多的加载器，内置多种编程方法工具，在不依赖外部模组的情况下可以实现多种功能。\n### 1.2.2 环境配置\n一般情况下，1.20及以下版本使用Forge加载器，1.21及以上版本使用NeoForge加载器。其在配置时也有一定区别。在1.20\u002F1.21版本，使用Gradle 9.0和对应的Forge\u002FNeoForge版本。在官方网站可以下载完整的模版文件，一般不需要再过多调整。\n### 1.2.3 创建项目\n创建新项目时，推荐使用[Forge官方模组模版生成器](https:\u002F\u002Ffiles.minecraftforge.net\u002Fnet\u002Fminecraftforge\u002Fforge\u002F)\u002F[NeoForge官方模组模版生成器](https:\u002F\u002Fneoforged.net\u002F)。\n# 二、编程环境\n## 2.1 编辑器选择\n一般情况下，推荐使用[IntelliJ IDEA](https:\u002F\u002Fwww.jetbrains.com\u002Fzh-cn\u002Fidea\u002Fdownload\u002F?section=windows)，并安装[MinecraftDev插件](https:\u002F\u002Fplugins.jetbrains.com\u002Fplugin\u002F8327)（也可直接在编辑器设置中的插件市场下载并安装）。\n## 2.2 AI编程配置\n### 2.2.1 TRAE\n初次尝试推荐使用TRAE，在编辑器自带的插件市场即可下载安装，简单注册账号后即可使用。\n### 2.2.2 Claude Code\n对于有复杂需求或大型项目编程的项目，推荐使用Claude Code，同样可在插件市场找到。对于国内环境，推荐使用[火山引擎](https:\u002F\u002Fwww.volcengine.com\u002F)，具体配置操作详见[火山引擎官方指南](https:\u002F\u002Fwww.volcengine.com\u002Fdocs\u002F82379\u002F1928262?lang=zh)。\n## 2.3 环境配置操作\n我们可以粗略地将src文件夹内的文件当作项目文件，将src以外的部分当作环境文件。每当环境文件内容发生变化，都需要刷新Gradle，可点击代码栏右上角的刷新图标快速刷新，此时右下角会出现进度提示，若配置失败，将报错信息交给AI分析。\n# 三、模组项目结构介绍\n## 3.1 Fabric通用结构\n```\n{mod_name}\u002F\n├── build.gradle              # Gradle 构建脚本（依赖声明、任务配置）\n├── gradle.properties         # 版本属性与元数据\n├── settings.gradle           # Gradle 项目设置\n├── gradle\u002F\n│   └── wrapper\u002F              # Gradle Wrapper 配置\n├── src\u002F\n│   ├── main\u002F\n│   │   ├── java\u002F             # Java 源码根目录\n│   │   │   └── com\u002Fexample\u002Fmodid\u002F\n│   │   │       ├── {ModClass}.java          # 主初始化类\n│   │   │       ├── {ModClass}Client.java    # 客户端初始化类（可选）\n│   │   │       ├── item\u002F                    # 物品相关类\n│   │   │       ├── block\u002F                   # 方块相关类\n│   │   │       └── mixin\u002F                   # Mixin 类目录\n│   │   │           └── ExampleMixin.java\n│   │   └── resources\u002F\n│   │       ├── fabric.mod.json              # 模组元数据（必需）\n│   │       ├── {modid}.mixins.json          # Mixin 配置（如使用）\n│   │       └── assets\u002F{modid}\u002F\n│   │           ├── lang\u002F\n│   │           │   ├── en_us.json           # 英文本地化\n│   │           │   └── zh_cn.json           # 中文本地化\n│   │           ├── models\u002F\n│   │           │   ├── item\u002F                # 物品模型定义\n│   │           │   └── block\u002F               # 方块模型定义\n│   │           ├── textures\u002F\n│   │           │   ├── item\u002F                # 物品纹理\n│   │           │   └── block\u002F               # 方块纹理\n│   │           └── blockstates\u002F             # 方块状态定义\n│   └── client\u002Fjava\u002F          # 客户端专用源码（分离架构时）\n├── run\u002F                      # 开发环境运行目录（自动生成）\n└── build\u002F                    # 构建输出目录（自动生成）\n```\n## 3.2 Forge\u002FNeoForge通用结构\n```\n{mod_name}\u002F\n├── build.gradle                    # Gradle 构建脚本\n├── gradle.properties               # 版本属性配置\n├── settings.gradle                 # Gradle 项目设置\n├── gradle\u002F\n│   └── wrapper\u002F                    # Gradle Wrapper 配置\n├── src\u002F\n│   ├── main\u002F\n│   │   ├── java\u002F                   # Java 源码根目录\n│   │   │   └── com\u002Fexample\u002Fmodid\u002F\n│   │   │       ├── {ModClass}.java              # 主入口类（@Mod 注解）\n│   │   │       ├── client\u002F                      # 客户端专用代码\n│   │   │       ├── common\u002F                      # 通用代码（物品、方块等）\n│   │   │       │   ├── item\u002F\n│   │   │       │   ├── block\u002F\n│   │   │       │   └── blockentity\u002F\n│   │   │       └── datagen\u002F                     # 数据生成器（可选）\n│   │   └── resources\u002F\n│   │       ├── META-INF\u002F\n│   │       │   ├── mods.toml                    # Forge 元数据（1.13+）\n│   │       │   ├── neoforge.mods.toml           # NeoForge 元数据（1.20.1+）\n│   │       │   └── accesstransformer.cfg        # 访问转换器配置（可选）\n│   │       ├── pack.mcmeta                      # 资源包元数据\n│   │       ├── assets\u002F\n│   │       │   └── {modid}\u002F\n│   │       │       ├── blockstates\u002F             # 方块状态定义\n│   │       │       ├── lang\u002F                    # 本地化文件\n│   │       │       │   ├── en_us.json\n│   │       │       │   └── zh_cn.json\n│   │       │       ├── models\u002F\n│   │       │       │   ├── block\u002F               # 方块模型\n│   │       │       │   └── item\u002F                # 物品模型\n│   │       │       ├── textures\u002F\n│   │       │       │   ├── block\u002F               # 方块纹理\n│   │       │       │   └── item\u002F                # 物品纹理\n│   │       │       ├── sounds.json              # 音效定义\n│   │       │       └── shaders\u002F                 # 着色器（可选）\n│   │       └── data\u002F\n│   │           └── {modid}\u002F\n│   │               ├── recipes\u002F                 # 配方 JSON\n│   │               ├── loot_tables\u002F             # 战利品表\n│   │               │   └── blocks\u002F\n│   │               ├── tags\u002F                    # 数据标签\n│   │               ├── advancements\u002F            # 进度定义\n│   │               └── structures\u002F              # 结构模板（可选）\n│   ├── client\u002Fjava\u002F                # 客户端专用源码（分离架构）\n│   ├── test\u002Fjava\u002F                  # 测试代码\n│   └── generated\u002F                  # 数据生成输出目录\n├── run\u002F                            # 开发环境运行目录（自动生成）\n└── build\u002F                          # 构建输出目录（自动生成）\n```\n# 四、Vibe Coading\n使用模组模版模组生成器生成模版文件后，在代码编辑器打开模组项目文件夹。\n在侧边栏展开AI编程插件，信任项目，用自然语言描述需求，例如：“帮我构建一个我的世界模组，游戏版本为Java 1.21.1，使用Fabric加载器（详细信息见gradle.properties），我需要xxx。”\n# 五、测试与调试\n在生成所需代码后，在终端控制台输入指令进行测试：\n- 清理缓存\n```\n.\u002Fgradlew clean\n```\n- 构建模组文件\n```\n.\u002Fgradlew build\n```\n- 运行测试客户端\n```\n.\u002Fgradlew runclient\n```\n- 以上指令可组合使用，如：\n```\n.\u002Fgradlew clean build runclient\n```\n> 在控制台中可使用上下方向键切换历史输入指令，无需重复输入\n# 六、模组导出\n在运行.\u002F gradlew build指令后，项目文件中的build\u002Flib文件夹中会出现对应名称的.jar模组文件，即为最终的客户端模组文件。\n# 七、模组上传与分发\n## 7.1 平台选择\n目前主流的模组分发平台有MC百科、Modrinth和Curseforge三大平台，国内分发首选MC百科，Modrinth在国内外的接受程度都较高，Curerforge则主打国外受众。\n## 7.2 分发原则\n在Modrinth和Curseforge上传的模组可被整合为链接内置于整合包中，在玩家下载并导入启动器时从平台下载被链接的模组。\n如果允许整合包制作者随意使用模组，在模组简介务必表明分发原则（即在打包时确保整合包中使用链接而不是内置模组本体）。否则整合包的下载量将不会被计算到模组中。...","https:\u002F\u002Foxqtewbrpuiouqqjrvdv.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fpublic-media\u002F2026-07-16\u002Fca4f2822-9ed5-49d8-b804-bbd92739a9d5.png",[],[],"龙家轩","https:\u002F\u002Fweatheraintbad.com",{"id":18,"name":19,"slug":20,"description":21},[57,61,62,63,67],{"id":58,"name":59,"slug":60},"541aaa1f-7a45-4fd7-b0f4-8798d3cef066","《我的世界》","minecraft",{"id":28,"name":29,"slug":30},{"id":24,"name":25,"slug":26},{"id":64,"name":65,"slug":66},"144abe77-0dc6-4f66-a176-20bddb1c0bfa","编程","coding",{"id":32,"name":33,"slug":34},30,"2026-02-07T00:00:00.000Z","2026-07-20T12:44:49.447Z","2026-07-16T11:26:54.204Z",{"id":73,"type":6,"title":74,"slug":75,"summary":76,"body":77,"coverUrl":78,"productScreenshots":79,"productLinks":80,"authorName":81,"authorUrl":82,"authorSubject":16,"category":83,"tags":88,"sourceLabel":35,"sourceName":35,"sourceUrl":35,"status":36,"seoTitle":35,"seoDescription":35,"canonicalUrl":35,"isFeatured":37,"sno":101,"sortOrder":39,"publishedAt":102,"updatedAt":103,"createdAt":104},"871e57ba-8d0e-4f70-a706-b7ec5f472ea7","Skill是什么？","what-is-skill","一套可复用、可安装、可共享的任务说明","在AI智能体和AI编程工具中，Skill通常指一套可复用、可安装、可共享的任务说明。它把操作规范、专业知识、示例、脚本和参考资料组织在一起，让AI能够更稳定地完成某一类工作。\n\n随着ChatGPT、Codex、Claude Code等工具逐渐从“聊天机器人”发展为能够读取文件、调用工具和执行任务的智能体，仅靠临时提示词已经很难管理复杂、重复的工作。Skill的出现，正是为了把成熟的工作方法保存下来，让AI在需要时直接调用。\n\n## 一、Skill到底是什么？\n\n可以把通用AI想象成一名能力很强、学习速度很快，但不了解你具体工作规范的新员工。\n\n你可以每次都重新告诉它：\n\n- 报告应该使用什么结构；\n- 代码需要遵循哪些规范；\n- 处理PDF时应该调用什么程序；\n- 发布网站前要检查哪些项目；\n- 分析数据时要生成哪些图表。\n\n但这些要求如果每次都重新输入，不仅麻烦，还容易遗漏。\n\n**Skill就是为AI准备的一份“标准作业包”。**\n\n它通常以一个文件夹存在，核心文件一般是`SKILL.md`。除了文字说明，还可以包含：\n\n- 操作步骤；\n- 任务触发条件；\n- 示例输入和输出；\n- 模板文件；\n- Python、Shell或JavaScript脚本；\n- API说明和参考资料；\n- 检查清单与质量标准。\n\nOpenAI将Agent Skills描述为封装指令、资源和可选脚本的任务能力包；ChatGPT中的Skills则被定义为可复用、可分享的工作流程。Claude Code的Skills也遵循Agent Skills开放标准，并在此基础上提供调用控制、子智能体运行和动态上下文等扩展能力。\n\n```mermaid\nflowchart TB\n    U[用户提出任务] --> A[AI智能体]\n    A --> D{是否有匹配的Skill}\n    D -- 没有 --> G[依靠通用能力完成]\n    D -- 有 --> S[读取Skill说明]\n    S --> R[加载模板、资料或脚本]\n    R --> T[按照固定流程执行]\n    T --> O[输出更稳定的结果]\n```\n\n## 二、Skill和提示词有什么区别？\n\n提示词和Skill都能指导AI，但两者解决的问题不同。\n\n| 对比项 | 普通提示词 | Skill |\n|---|---|---|\n| 使用方式 | 每次对话临时输入 | 安装后重复使用 |\n| 内容规模 | 通常较短 | 可以包含完整工作流程 |\n| 文件支持 | 一般只有文字 | 可包含脚本、模板和资料 |\n| 适用场景 | 一次性、简单任务 | 重复、专业、复杂任务 |\n| 一致性 | 容易因表达变化而波动 | 更容易保持固定标准 |\n| 分享方式 | 复制一段文字 | 分享完整Skill文件夹 |\n\n例如，下面是一条普通提示词：\n\n```text\n请检查这个网页是否存在SEO问题，并给出优化建议。\n```\n\n而一个SEO审计Skill可以进一步规定：\n\n1. 先检查页面是否能被抓取；\n2. 再检查标题、描述和Canonical；\n3. 分析结构化数据；\n4. 检查正文是否依赖JavaScript渲染；\n5. 按严重程度排列问题；\n6. 使用统一表格输出；\n7. 最后生成修改后的代码示例。\n\n因此，**提示词更像一次性的口头要求，Skill更像经过整理的标准操作手册。**\n\n## 三、Skill和工具、MCP有什么区别？\n\n这几个概念经常被混淆。\n\n### 1. 工具：让AI能够“做事”\n\n工具为AI提供实际操作能力，例如：\n\n- 搜索互联网；\n- 读取文件；\n- 执行Python；\n- 查询数据库；\n- 发送邮件；\n- 调用天气API；\n- 修改代码。\n\n工具解决的是：**AI能调用什么。**\n\n### 2. MCP：让AI连接外部系统\n\nMCP是Model Context Protocol的缩写，可以用统一方式把AI连接到数据库、知识库、GitHub、Notion、浏览器或企业内部系统。\n\nMCP解决的是：**AI怎样连接数据和服务。**\n\n### 3. Skill：告诉AI怎样完成任务\n\nSkill负责描述工作方法，例如：\n\n- 什么情况下应该调用某个工具；\n- 工具调用顺序是什么；\n- 哪些风险操作必须确认；\n- 输出必须符合什么格式；\n- 完成后如何检查质量。\n\nSkill解决的是：**AI应该按照什么流程做。**\n\n```mermaid\nflowchart TB\n    P[用户目标] --> S[Skill：任务流程与规范]\n    S --> A[AI智能体进行判断与规划]\n    A --> T[Tool：执行具体动作]\n    A --> M[MCP：连接外部系统]\n    M --> D[(数据库、文档、GitHub等)]\n    T --> O[搜索、计算、编辑、发送等结果]\n    D --> A\n    O --> A\n    A --> R[最终交付]\n```\n\n可以用一个简单比喻理解：\n\n- AI模型是大脑；\n- 工具是双手；\n- MCP是插座和连接线；\n- Skill是操作手册。\n\n## 四、一个Skill通常由什么组成？\n\n一个简单的Skill目录可能如下：\n\n```text\nseo-audit\u002F\n├── SKILL.md\n├── references\u002F\n│   ├── checklist.md\n│   └── examples.md\n├── scripts\u002F\n│   └── check_meta.py\n└── templates\u002F\n    └── report-template.md\n```\n\n其中最重要的是`SKILL.md`。\n\n一个最小化的Skill可以这样写：\n\n```markdown\n---\nname: seo-audit\ndescription: 检查网页的SEO与GEO基础问题，并输出按优先级排序的修复建议。\n---\n\n# SEO Audit\n\n## 何时使用\n\n当用户要求检查网页的SEO、GEO、抓取、索引或结构化数据问题时使用。\n\n## 工作流程\n\n1. 获取目标网页的初始HTML。\n2. 检查HTTP状态码和重定向。\n3. 检查title、description和canonical。\n4. 检查正文是否无需JavaScript即可读取。\n5. 检查JSON-LD结构化数据。\n6. 按严重、高、中、低四个等级整理问题。\n7. 提供可以直接修改的代码示例。\n\n## 输出格式\n\n- 总体评分\n- 关键问题\n- 修复优先级\n- 代码示例\n- 验收方法\n\n## 限制\n\n- 不把推测写成确定事实。\n- 无法访问页面时必须明确说明。\n- 涉及搜索引擎规则时优先参考官方文档。\n```\n\n### 元数据有什么作用？\n\n文件开头的`name`和`description`不只是介绍文字，它们还会影响智能体能否正确识别和调用Skill。\n\n```yaml\n---\nname: seo-audit\ndescription: 检查网页的SEO与GEO基础问题，并输出按优先级排序的修复建议。\n---\n```\n\n名称应该简短、稳定；描述则应该说明：\n\n- Skill能完成什么；\n- 什么情况下使用；\n- 哪些用户表达可能触发它。\n\n描述过于宽泛，Skill可能被错误调用；描述过于狭窄，应该调用时又可能无法触发。\n\n## 五、Skill是怎样工作的？\n\nSkill并不是重新训练AI模型，也不会永久改变模型本身。\n\n它更接近一种**按需加载的上下文机制**：当智能体判断某项任务与Skill匹配时，再读取Skill中的详细说明和资源。\n\n```mermaid\nsequenceDiagram\n    participant U as 用户\n    participant A as AI智能体\n    participant S as Skill\n    participant T as 工具或脚本\n\n    U->>A: 帮我检查这个网站的SEO问题\n    A->>A: 判断任务类型\n    A->>S: 读取seo-audit Skill\n    S-->>A: 返回流程、规范与模板\n    A->>T: 抓取网页并运行检查\n    T-->>A: 返回检测结果\n    A->>A: 按Skill要求验证和整理\n    A-->>U: 输出标准化审计报告\n```\n\n这种方式有三个明显优势：\n\n### 1. 减少上下文浪费\n\n智能体不必在每次对话开始时读取全部规范，只在任务需要时加载相关Skill。\n\n### 2. 提高执行一致性\n\n同一种任务可以反复使用相同流程、模板和检查标准，减少不同对话之间的质量波动。\n\n### 3. 便于团队共享\n\n团队可以把经验整理成Skill，让不同成员和不同智能体复用同一套工作方法。\n\n## 六、Skill可以用来做什么？\n\nSkill适合处理具有明确方法、重复频率较高或专业要求较强的任务。\n\n### 内容创作\n\n- 按固定风格撰写文章；\n- 生成产品介绍；\n- 检查事实和引用；\n- 将文章转换为社交媒体内容；\n- 生成统一格式的Markdown文档。\n\n### 软件开发\n\n- 创建符合团队规范的项目；\n- 执行代码审查；\n- 编写单元测试；\n- 排查构建错误；\n- 发布版本；\n- 生成API文档。\n\n### 设计与文档\n\n- 制作演示文稿；\n- 生成PDF报告；\n- 按品牌规范使用字体和版式；\n- 创建流程图；\n- 检查设计稿的一致性。\n\n### 数据分析\n\n- 清洗表格；\n- 计算指标；\n- 生成图表；\n- 检查异常值；\n- 按固定结构输出分析结论。\n\n### 企业流程\n\n- 整理会议纪要；\n- 生成周报；\n- 审核合同中的关键条款；\n- 根据模板回复客户；\n- 检查项目上线条件。\n\n```mermaid\nmindmap\n  root((Agent Skill))\n    内容\n      文章写作\n      事实核查\n      格式转换\n    开发\n      代码审查\n      自动测试\n      项目部署\n    设计\n      演示文稿\n      品牌规范\n      图片处理\n    数据\n      表格清洗\n      指标分析\n      图表生成\n    运营\n      周报\n      客服回复\n      内容发布\n```\n\n## 七、怎样安装和使用Skill？\n\n不同平台的界面和存放路径可能不同，但基本过程相似。\n\n### 方法一：安装现成Skill\n\n一般步骤为：\n\n1. 在官方库、插件市场或GitHub仓库中找到Skill；\n2. 阅读`SKILL.md`，确认用途和权限；\n3. 检查是否包含可执行脚本；\n4. 将Skill安装到平台支持的位置；\n5. 重新加载客户端或会话；\n6. 用一个明确任务测试它是否正确触发。\n\n在支持自动调用的平台中，用户不一定要直接说出Skill名称。例如安装网页测试Skill后，可以直接说：\n\n```text\n检查本地网页的登录流程，并记录失败的步骤。\n```\n\n智能体会根据任务和Skill描述判断是否调用。\n\n部分平台也支持显式调用，形式可能类似：\n\n```text\n使用 seo-audit Skill 检查这个页面。\n```\n\n或：\n\n```text\n\u002Fseo-audit https:\u002F\u002Fexample.com\n```\n\n具体调用方式取决于平台实现。\n\n### 方法二：把Skill放进项目\n\n项目级Skill适合保存某个仓库特有的规则，例如：\n\n```text\nmy-project\u002F\n├── src\u002F\n├── tests\u002F\n└── .agents\u002F\n    └── skills\u002F\n        └── release-check\u002F\n            └── SKILL.md\n```\n\n它可以要求智能体在发布前完成：\n\n- 运行测试；\n- 检查环境变量；\n- 构建生产版本；\n- 扫描未提交文件；\n- 更新版本号；\n- 生成变更日志。\n\n### 方法三：使用平台内置的Skill管理界面\n\n部分AI产品提供Skill或插件管理页面，可以完成：\n\n- 浏览推荐Skill；\n- 安装或启用Skill；\n- 查看已安装项目；\n- 控制可访问的数据；\n- 删除不再需要的Skill。\n\n由于各产品仍在快速更新，实际界面和权限应以对应平台的最新官方说明为准。\n\n## 八、怎样自己创建一个Skill？\n\n创建Skill不需要训练模型。只需把成熟的任务流程写清楚，并加入必要的资源。\n\n### 第一步：选择合适的任务\n\n好的Skill通常满足至少一个条件：\n\n- 任务会反复出现；\n- 执行步骤比较固定；\n- 输出格式需要保持一致；\n- 涉及团队内部规范；\n- 需要调用脚本或模板；\n- 普通提示词经常遗漏步骤。\n\n不适合做成Skill的任务包括：\n\n- 只会执行一次的临时要求；\n- 没有稳定方法的开放式闲聊；\n- 可以用一句提示词准确解决的简单任务。\n\n### 第二步：定义触发条件\n\n先回答三个问题：\n\n1. 用户通常会怎样描述这个任务？\n2. 哪些场景应该使用该Skill？\n3. 哪些相似场景不应该使用？\n\n例如：\n\n```markdown\n## 何时使用\n\n当用户要求创建、修改、读取或分析`.pptx`演示文稿时使用。\n\n## 不应使用\n\n当用户只要求提供演讲提纲，而不需要生成或编辑演示文件时，不要使用。\n```\n\n### 第三步：写出可靠流程\n\n不要只写“认真完成任务”，而要写成可以检查的步骤。\n\n较弱的写法：\n\n```markdown\n请专业地检查代码，确保没有问题。\n```\n\n更好的写法：\n\n```markdown\n1. 先读取受影响文件和相关测试。\n2. 检查空值、边界条件和错误处理。\n3. 检查是否引入安全问题。\n4. 运行现有测试。\n5. 对新增逻辑补充测试。\n6. 输出问题位置、影响和修复方案。\n```\n\n### 第四步：加入示例和模板\n\n示例可以让AI更准确地理解输出标准。\n\n```markdown\n## 输出示例\n\n### 严重问题\n\n**位置：** `src\u002Fauth.ts:42`\n\n**问题：** 用户输入未经验证就拼接进SQL语句。\n\n**影响：** 可能导致SQL注入。\n\n**建议：** 使用参数化查询，并增加恶意输入测试。\n```\n\n### 第五步：加入脚本\n\n当工作需要稳定计算、文件转换或自动检查时，脚本通常比自然语言更可靠。\n\n```python\n# scripts\u002Fcheck_required_files.py\nfrom pathlib import Path\n\nrequired_files = [\n    \"README.md\",\n    \"LICENSE\",\n    \".gitignore\",\n]\n\nmissing = [name for name in required_files if not Path(name).exists()]\n\nif missing:\n    print(\"缺少文件：\")\n    for name in missing:\n        print(f\"- {name}\")\n    raise SystemExit(1)\n\nprint(\"必要文件检查通过。\")\n```\n\nSkill中可以规定：\n\n```markdown\n发布项目之前，必须运行：\n\npython scripts\u002Fcheck_required_files.py\n```\n\n### 第六步：进行真实测试\n\n至少测试以下三类情况：\n\n| 测试类型 | 目的 |\n|---|---|\n| 正常任务 | 检查Skill能否正确执行 |\n| 模糊表达 | 检查Skill能否正确触发 |\n| 相似但无关的任务 | 检查Skill是否会被误调用 |\n\n## 九、怎样写出一个高质量Skill？\n\n### 1. 描述要具体\n\n不推荐：\n\n```yaml\ndescription: 帮助用户处理网页。\n```\n\n推荐：\n\n```yaml\ndescription: 检查网页的可访问性、SEO元数据、结构化数据和无JavaScript正文可读性，并生成按严重程度排序的修复报告。\n```\n\n### 2. 只保留必要内容\n\nSkill不是越长越好。过多背景材料会增加上下文负担，也可能让智能体忽略真正重要的规则。\n\n建议将内容分层：\n\n- `SKILL.md`保存核心流程；\n- `references\u002F`保存详细资料；\n- `templates\u002F`保存输出模板；\n- `scripts\u002F`保存可执行程序。\n\n### 3. 把硬性要求写成可验证规则\n\n不推荐：\n\n```markdown\n输出应当美观、专业。\n```\n\n推荐：\n\n```markdown\n- 一级标题只能出现一次。\n- 每个问题必须包含位置、影响、证据和修复建议。\n- 问题按严重、高、中、低排序。\n- 没有证据时不得下确定结论。\n```\n\n### 4. 为危险操作设置确认点\n\n涉及删除、发布、付款、发送、覆盖文件等动作时，应明确要求用户确认。\n\n```markdown\n在执行以下操作之前必须获得用户明确确认：\n\n- 删除文件或数据库记录；\n- 向外部收件人发送邮件；\n- 部署到生产环境；\n- 覆盖无法恢复的文件；\n- 产生费用的API调用。\n```\n\n### 5. 不要把密钥写进Skill\n\nSkill可能被复制、分享或提交到Git仓库。API密钥、访问令牌、密码和个人数据不应直接写入文件。\n\n正确方式是引用环境变量：\n\n```bash\nexport API_KEY=\"...\"\n```\n\n然后在脚本中读取：\n\n```python\nimport os\n\napi_key = os.environ[\"API_KEY\"]\n```\n\n## 十、使用第三方Skill时要注意什么？\n\nSkill可能包含脚本、命令和外部资源，因此不能只看名称就直接安装。\n\n安装前至少检查：\n\n1. Skill来自谁；\n2. `SKILL.md`要求AI做什么；\n3. 是否会读取个人文件；\n4. 是否会访问网络；\n5. 是否包含删除或覆盖命令；\n6. 脚本是否会上传数据；\n7. 是否要求提供密钥；\n8. 最近是否仍在维护。\n\n```mermaid\nflowchart TD\n    A[发现第三方Skill] --> B{来源可信？}\n    B -- 否 --> X[不要安装]\n    B -- 是 --> C[阅读SKILL.md]\n    C --> D[检查scripts目录]\n    D --> E{涉及敏感权限？}\n    E -- 是 --> F[限制权限或在沙箱测试]\n    E -- 否 --> G[使用测试任务验证]\n    F --> G\n    G --> H{行为符合预期？}\n    H -- 否 --> X\n    H -- 是 --> I[正式启用]\n```\n\n需要特别警惕以下内容：\n\n```bash\nrm -rf\ncurl ... | sh\nsudo ...\ngit push --force\n```\n\n这些命令不一定恶意，但可能造成不可逆影响。应先理解其用途，再决定是否执行。\n\n## 十一、一个完整示例：文章配图Skill\n\n下面是一个适合内容网站使用的简化示例。\n\n```markdown\n---\nname: article-illustration\ndescription: 根据文章主题生成简洁、无文字、16:9比例的封面插图方案。\n---\n\n# Article Illustration\n\n## 适用场景\n\n当用户要求为文章、博客或报告设计封面图时使用。\n\n## 工作流程\n\n1. 阅读文章标题和摘要。\n2. 提炼一个核心隐喻，不要堆叠多个概念。\n3. 优先使用抽象、几何或平面设计语言。\n4. 默认比例为16:9。\n5. 画面内不得出现文字、字母、水印和界面截图。\n6. 主体应占画面的25%至45%，保留足够留白。\n7. 颜色控制在三种主色以内。\n8. 输出图像生成提示词并执行图像生成工具。\n\n## 质量检查\n\n- 缩略图尺寸下是否仍能识别主体；\n- 是否存在多余文字；\n- 是否过度拥挤；\n- 是否准确表达文章主题；\n- 是否避免使用未经授权的品牌元素。\n```\n\n安装后，用户只需说：\n\n```text\n为“让大模型先查资料，再回答问题”设计一张文章封面图。\n```\n\n智能体便可以自动应用比例、留白、无文字和构图规则，而不需要用户每次重新说明。\n\n## 十二、Skill的真正价值是什么？\n\nSkill的价值并不只是“让AI多会一种功能”。\n\n它更重要的作用，是把人的经验转化为AI能够重复执行的流程。\n\n```mermaid\nflowchart LR\n    E[个人经验] --> W[整理工作步骤]\n    W --> S[制作成Skill]\n    S --> R[智能体重复执行]\n    R --> C[持续测试和修正]\n    C --> S\n    S --> T[团队共享]\n```\n\n一条优秀提示词可能解决一次问题；一个优秀Skill则可以持续改进，并被整个团队反复使用。\n\n因此，可以将Skill理解为：\n\n> **介于提示词、程序和操作手册之间的AI能力模块。**\n\n它用自然语言描述意图和规则，用脚本保证确定性，用模板维持输出标准，再由智能体根据当前任务灵活执行。\n\n## 十三、常见问题\n\n### Skill会让AI永久学会新知识吗？\n\n不会。Skill通常是在任务执行时被读取，并不会重新训练底层模型。删除或停用Skill后，对应规则通常也不会继续生效。\n\n### 不会编程也能创建Skill吗？\n\n可以。最简单的Skill只需要一个写清楚任务流程的`SKILL.md`文件。脚本是可选项，不是必需项。\n\n### Skill可以跨平台使用吗？\n\n部分Skill可以。Claude Code文档说明其Skills遵循Agent Skills开放标准；Codex也支持以`SKILL.md`为核心的能力包。不过不同平台可能增加自己的字段、目录约定和调用方式，因此迁移时仍需检查兼容性。\n\n### Skill能代替MCP吗？\n\n不能。Skill主要描述方法，MCP主要负责连接外部服务。两者经常搭配使用。\n\n### Skill越多越好吗？\n\n不是。安装过多、描述重叠的Skill可能增加误触发和冲突。更合理的做法是保留用途明确、质量可靠、经常使用的Skill。\n\n## 结语\n\nAI模型提供通用能力，工具提供行动能力，MCP提供连接能力，而Skill负责把这些能力组织成一套稳定的工作方法。\n\n对于普通用户，Skill可以减少重复提示；对于开发者，它可以封装工程流程；对于团队，它可以把个人经验变成共享标准。\n\n当你发现自己反复向AI解释同一套要求时，就可以考虑把它整理成一个Skill。\n\n## 参考资料\n\n1. [OpenAI Codex：Agent Skills](https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fskills)\n\n2. [OpenAI Help Center：Skills in ChatGPT](https:\u002F\u002Fhelp.openai.com\u002Fen\u002Farticles\u002F20001066-skills-in-chatgpt)\n\n3. [OpenAI Codex：Customization](https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fconcepts\u002Fcustomization)\n\n4. [OpenAI：Introducing the Codex app](https:\u002F\u002Fopenai.com\u002Findex\u002Fintroducing-the-codex-app\u002F)\n\n5. [Anthropic Claude Code：Extend Claude with skills](https:\u002F\u002Fdocs.anthropic.com\u002Fen\u002Fdocs\u002Fclaude-code\u002Fskills)\n\n6. [Anthropic Skills示例仓库] (https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fskills)\n\n> 注：AI产品的Skill安装入口、目录结构和功能仍在持续更新。实际使用时，应优先查看对应产品的最新官方文档。","https:\u002F\u002Foxqtewbrpuiouqqjrvdv.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fpublic-media\u002F2026-07-18\u002F4c35d873-e4f1-418f-a9ae-bb56d85df6ff.jpg",[],[],"GPT-5.6 Sol","https:\u002F\u002Fopenai.com\u002Fzh-Hans-CN\u002Findex\u002Fgpt-5-6\u002F",{"id":84,"name":85,"slug":86,"description":87},"6179d3b6-dc34-4483-9ded-3cd9f1b37a47","科普","abbreviation","介绍各领域新兴概念",[89,90,94,95,96,97],{"id":32,"name":33,"slug":34},{"id":91,"name":92,"slug":93},"0848beb4-db26-4fb8-b391-f852a11be192","AI编程","ai-coding",{"id":28,"name":29,"slug":30},{"id":24,"name":25,"slug":26},{"id":64,"name":65,"slug":66},{"id":98,"name":99,"slug":100},"d2513b48-43d7-49ba-adac-6d09366f751f","内容由AI生成","gen-by-ai",45,"2026-06-11T00:00:00.000Z","2026-07-18T16:22:51.494Z","2026-07-18T15:17:09.969Z",{"id":106,"type":6,"title":107,"slug":108,"summary":109,"body":110,"coverUrl":111,"productScreenshots":112,"productLinks":113,"authorName":14,"authorUrl":114,"authorSubject":16,"category":115,"tags":116,"sourceLabel":35,"sourceName":35,"sourceUrl":35,"status":36,"seoTitle":35,"seoDescription":35,"canonicalUrl":35,"isFeatured":37,"sno":123,"sortOrder":39,"publishedAt":124,"updatedAt":125,"createdAt":126},"544fc658-c911-4de6-93b0-d2520087119a","MCP：AI 的「USB-C」时刻","mcp-ai-usb-c-moment","以前每个 AI 应用都要为 GitHub、数据库、日历各写一套私有连接器，这是 M×N 的集成噩梦，直到 MCP 的出现","如果你用过笔记本电脑，一定熟悉那种「每个设备一根专属线」的烦躁：鼠标一个接口、打印机另一个、硬盘又一个。2025 年之前的 AI 应用，几乎就是这种状态——想让一个助手同时读你的代码仓库、查数据库、发日历邀请，开发团队得为每一个系统写一套私有「连接器」，又脆又难维护。\n\n## 背景：每个 Agent 都曾是孤岛\n\n大模型本身只会「说话」，它要真正干活，得去调工具、读数据。在 MCP（Model Context Protocol，模型上下文协议）出现之前，这套对接是组合爆炸：假设市面上有 M 个 AI 客户端、N 个工具，开发者就要写 M×N 套集成。一个代码助手要读 Git、查 Jira、搜文档，就得维护三条互不相通的管线。\n\n更糟的是，这些连接器大多只服务某一个产品，换个助手就得重写。结果就是：每个 Agent 都困在自己的小岛上，能力被锁死在少数几个硬编码的集成里。\n\n## MCP 是什么：AI 世界的「USB-C」\n\n2024 年底，Anthropic 发布了 MCP。它的目标很朴素：给「AI 连工具」定义一个统一接口，就像 USB-C 给「设备连外设」定义统一接口一样。\n\n打个比方——如果大模型是大脑，那 MCP 就是手。大脑再聪明，没有手也打不开文件、点不了按钮、查不了数据库。MCP 让任意符合规范的「大脑」（Claude、ChatGPT、Gemini、Cursor、VS Code Copilot）都能使用任意符合规范的「手」（一个封装好的工具服务），而且不用为每个组合单独适配。\n\n2025 年 12 月，Anthropic 把 MCP 捐给了 Linux 基金会，OpenAI、Google、Microsoft 作为联合发起人。到 2026 年，它的 SDK 月下载量超过 9700 万次，ChatGPT、Claude、Gemini 都支持同一个协议——某种意义上，这场标准之战已经赢了。\n\n## 它是怎么运作的：三层结构\n\nMCP 把「连工具」拆成三个角色，理解这三层就理解了全部：\n\n- **Host（宿主）**：你直接使用的应用，比如 Claude 桌面端、VS Code、一个自定义聊天机器人。\n- **Client（客户端）**：住在 Host 内部、专门负责管理 MCP 连接的小组件。\n- **Server（服务端）**：一个轻量程序，把某个能力「暴露」出来，比如一个 GitHub 服务、一个数据库查询服务。\n\n每个 Server 通过三种「原语」提供能力：`Tools`（AI 可以调用的可执行函数，如 `create_issue`）、`Resources`（AI 可以读取的数据，如文件内容、数据库表结构）、`Prompts`（可复用的提示词模板）。它们底层用 **JSON-RPC**（一种简单的远程调用格式）通信，远程服务走 HTTP 传输，本地服务走标准输入输出。\n\n整个调用流程是这样的：\n\n```mermaid\nflowchart LR\n    U[用户] --> H[Host 应用\u003Cbr\u002F>Claude \u002F Cursor \u002F VS Code]\n    H --> C[MCP Client\u003Cbr\u002F>连接管理器]\n    C -->|JSON-RPC| S1[MCP Server: GitHub]\n    C -->|JSON-RPC| S2[MCP Server: 数据库]\n    C -->|JSON-RPC| S3[MCP Server: 天气 API]\n    S1 --> D1[(代码仓库)]\n    S2 --> D2[(业务数据)]\n    S3 --> D3[(外部 API)]\n```\n\n关键点在于：Host 只要实现一次 Client 协议，Server 只要实现一次 Server 协议，从此任意 Host 能连任意 Server。集成成本从 M×N 降到了 M+N。\n\n## 一个最小可运行的例子\n\n下面用官方 Python SDK 写一个「天气查询」MCP 服务，只暴露一个工具：\n\n```python\nfrom mcp.server.fastmcp import FastMCP\n\nmcp = FastMCP(\"weather\")  # 服务名叫 weather\n\n@mcp.tool()\ndef get_weather(city: str) -> str:\n    \"\"\"查询某城市的天气（示例返回静态数据）\"\"\"\n    return f\"{city} 今天晴，25°C。\"\n\nif __name__ == \"__main__\":\n    mcp.run()  # 默认以 stdio 方式启动，等待 Host 来连\n```\n\n运行前只需 `pip install mcp`，然后用任意支持 MCP 的客户端（Claude 桌面端、Cursor 等）配置这个服务路径即可。AI 在对话里说「查下北京天气」，客户端就会通过 MCP 调用 `get_weather(\"北京\")`，拿到结果再组织成自然语言回答你。注意：这只是最小骨架，真实服务里要把静态返回值换成真正的天气 API 调用。\n\n## 取舍与边界：它解决了什么，没解决什么\n\nMCP 解决的是「连接标准」问题，但它不是银弹：\n\n- **它让集成变简单，但不保证工具安全。** 一个 MCP Server 可以是任何人所写，工具描述会直接喂给模型。如果 Server 既能读私有数据、又能访问不可信内容、还能对外发消息，就构成了安全风险（业界称之为「致命三件套」）。企业通常会加一层 **Gateway（网关）** 来做鉴权和审计——Uber、Amazon 都用了这种「网关 + 注册表」的控制平面。\n- **上下文膨胀是个真问题。** 接的 Server 一多，工具定义会塞满模型的上下文窗口。2026 年的常见解法是「按需加载」：只把当前 Agent 真正需要的工具暴露出来，而不是一次全塞进去。\n- **它定义「怎么连」，不定义「连上去说什么」。** 多 Agent 之间的协作语义，由另一套协议 A2A（Agent-to-Agent）负责——MCP 接工具，A2A 连同伴。\n\n## Tips\n\n- 下次看到「AI 连不上我的系统」，先问：有没有现成的 MCP Server？多数数据库、SaaS、开发工具都已有官方或社区实现。\n- 想自己动手：用官方 SDK（Python\u002FTypeScript 等）把内部的一个 API 包成 MCP Server，比写一套专属集成快得多。\n- 评估风险时记住三件事：私有数据、不可信输入、对外通信，三者叠加要格外小心，尽量放进网关管控。\n- 分清两层协议：接工具看 MCP，多 Agent 协作看 A2A，别混为一谈。\n- 把 MCP 当「基础设施」而非「功能」：它赢是因为无聊、通用、可复用，这正是它值得长期投入的原因。","https:\u002F\u002Foxqtewbrpuiouqqjrvdv.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fpublic-media\u002F2026-07-19\u002Fc3c06d99-a0ac-40ac-a283-7e77aabb4c4c.jpg",[],[],"https:\u002F\u002Ffoundit.cn\u002Fabout",{"id":84,"name":85,"slug":86,"description":87},[117,118,119],{"id":28,"name":29,"slug":30},{"id":24,"name":25,"slug":26},{"id":120,"name":121,"slug":122},"4c2bbea6-eab7-40a8-8447-1de478ff7749","分析","analyse",46,"2026-07-20T00:00:00.000Z","2026-07-19T17:39:20.060Z","2026-07-19T16:13:40.316Z"]