
文档教程【免费下载链接】vscode-docsPublic documentation for Visual Studio Code项目地址https://gitcode.com/gh_mirrors/vs/vscode-docs点击查看免费下载Visual Studio Code 内置了代码补全、Agent 模式、Chat 与智能操作等 AI 能力而本仓库的 ai-extensibility-overview.md 系统性地介绍了扩展这些能力的四条技术路径Language Model 工具、MCP 工具、Chat Participant 与 Language Model API。读完本文你将能够根据自身扩展的目标场景准确判断该采用哪种 AI 扩展方案并掌握各方案在package.json静态配置与扩展代码实现两个层面的关键步骤。VS Code 内置的 AI 能力概览在决定如何扩展之前需要先理解 VS Code 已经内置了哪些 AI 能力它们是所有扩展方案的承载基础代码补全Code completion在输入时提供内联代码建议Agent 模式Agent mode让 AI 借助专用工具自主规划并执行开发任务Chat聊天让开发者通过自然语言在聊天界面中提问或修改代码智能操作Smart actions将 AI 增强的操作融入编辑器的常见开发任务流程中。上述每一项内置能力都可以被扩展与定制从而构建面向特定用户群体的个性化 AI 体验。扩展 AI 能力通常带来五类收益让 Agent 模式访问企业数据源与服务领域知识注入、提供贴合扩展领域场景的智能辅助、针对特定语言/框架/领域做 AI 专精化、为聊天界面补充专用工具或助手、以及用 AI 增强调试、代码评审、测试等日常开发任务的生产力。扩展聊天体验三条路径对比Language Model 工具扩展 Agent 模式Language Model 工具的作用是扩展 Agent 模式在 Agent 模式下VS Code 会根据用户的聊天提示词自动调用这些工具去执行专项任务或从数据源、服务中检索信息用户也可以在聊天提示词中通过#引用工具如#tabCount。它的实现基础是 Language Model Tools API运行于扩展宿主进程extension host因此可以访问全部 VS Code 扩展 API与编辑器深度集成。关键优势作为自主编码工作流的一部分提供领域专项能力工具实现运行在扩展宿主进程中可直接使用 VS Code API通过 Visual Studio Marketplace 即可分发部署用户无需单独安装与更新。关键注意事项远程部署场景需要扩展自行实现客户端-服务器通信跨多个工具复用需要模块化的设计与实现。适合用 MCP 服务器替代的场景当你已经拥有一套 MCP 服务器实现并希望复用到 VS Code、希望同一工具跨不同开发环境与平台复用、工具以远程服务形式托管、或完全不需要访问 VS Code API 时可考虑改用 MCP 方案。MCP 工具标准化协议接入外部服务Model Context ProtocolMCP工具通过标准化协议将外部服务与语言模型集成。与 Language Model 工具相同MCP 工具在 Agent 模式下也会根据用户提示词被自动调用但关键差异在于MCP 工具运行在 VS Code 之外——既可以是用户本机的本地进程也可以是远程服务。用户可以通过 JSON 配置添加 MCP 工具VS Code 扩展也可以通过编程方式注册它们并且可以用多种语言 SDK 与部署选项来实现。关键优势作为自主编码工作流的一部分提供领域专项能力支持本地与远程两种部署形态MCP 服务器可在其他 MCP 客户端中复用。关键注意事项无法访问 VS Code 扩展 API这是与 Language Model 工具最本质的区别分发与部署需要用户自行搭建 MCP 服务器环境。VS Code 对 MCP 协议的支持覆盖较全面传输层支持本地stdio、Streamable HTTPhttp与遗留的 Server-sent eventssse特性层面支持工具Tools、提示词Prompts可作为聊天中的斜杠命令、资源Resources可作为聊天上下文、Elicitation、Sampling使用用户配置的模型发起语言模型请求、基于 OAuth 的认证、服务器指令、Workspace Roots 以及 MCP Apps从工具返回可交互的 UI 组件。用户侧的添加与使用方式详见 mcp-servers.md。Chat Participant扩展 Ask 模式Chat Participant 是专用助手用来扩展 Ask 模式提问式聊天用户在聊天中通过提及如cat并附上自然语言提示词随后由该 participant负责处理整个聊天交互。内置的vscode、terminal、workspace等 participant 都是这一机制的典型代表。实现基础是 Chat API同样运行于扩展宿主进程可访问全部 VS Code 扩展 API。关键优势可以掌控端到端的交互流程接收提示词、编排任务、产出响应运行在扩展宿主进程中可访问 VS Code 扩展 API 并深度集成编辑器通过 Marketplace 即可分发部署。关键注意事项远程部署需要扩展自行实现客户端-服务器通信跨工具复用需要模块化设计。与 Language Model 工具相比两者的定位差异值得强调工具是由 LLM 在编排解决用户提示词所需步骤时被调用的零件而 Chat Participant 直接接收用户提示词并自己编排任务。相关实现细节注册、请求处理器、斜杠命令、后续提问、participant 检测等可参考 chat.md。构建自有 AI 能力Language Model API如果目标不是聊天界面而是把 AI 能力直接嵌入编辑器内的任意功能如代码操作 code actions、悬停提示 hover provider、自定义视图等则应使用Language Model API详见 language-model.md它允许扩展以编程方式直接访问语言模型完全绕开聊天界面。例如 Rust 语言扩展可以用语言模型为重命名体验生成默认名称。关键优势可将 AI 能力融入现有扩展功能或构建全新功能运行在扩展宿主进程中可访问 VS Code 扩展 API通过 Marketplace 分发部署。关键注意事项跨不同体验复用需要模块化设计。Language Model API 的使用流程分为三步构建提示词prompt→ 发送请求 → 解释响应。目前该 API 仅支持User与Assistant两类消息不支持 system 消息。构建提示词有两种方式直接使用LanguageModelChatMessage类以字符串逐条提供消息或使用vscode/prompt-tsx库以 TSX 语法声明提示词——后者可以动态适应每个语言模型的上下文窗口大小并支持基于优先级的自动剪枝与灵活的 token 预算管理详见 prompt-tsx.md。发送请求时通过vscode.lm.selectChatModels按vendor、id、family、version选择模型无匹配时返回空数组必须处理该情形再调用模型实例的sendRequest方法请求可能因模型不存在、用户未授权或配额超限而失败需用vscode.LanguageModelError区分错误类型。响应基于流式streaming可配合 Chat API 提供平滑的持续输出体验。注意Copilot 的语言模型需要用户同意以认证对话框形式实现因此selectChatModels应在用户发起的动作如命令中调用。如何选择四象限决策指南原文档给出了清晰的决策指引总结如下需求场景推荐方案在聊天中扩展专项能力 Agent 模式自动调用 需要 VS Code API 深度集成 走 Marketplace 分发Language Model 工具在聊天中扩展专项能力 Agent 模式自动调用 不需要 VS Code API 需要跨环境/跨客户端复用 本地或远程运行MCP 工具用领域专家型助手扩展 Ask 模式 需要定制完整交互流程与响应行为 需要 VS Code API 走 Marketplace 分发Chat Participant把 AI 能力融入现有扩展功能 构建聊天界面之外的 UI 体验 需要对模型请求做直接编程控制Language Model API实操详解一实现一个 Language Model 工具完整实现指南见 tools.md。一个语言模型工具由两部分组成在扩展package.json中定义静态配置以及在扩展代码中通过 Language Model API 参考 实现工具本体。1.package.json静态配置在contributes.languageModelTools节点下添加工具条目核心属性如下属性说明name工具唯一名供扩展实现代码引用命名格式{verb}_{noun}如get_weatherdisplayName用于 UI 展示的用户友好名称canBeReferencedInPrompt设为true表示工具可用于 Agent 或可在聊天提示词中被#引用toolReferenceName用户在聊天提示词中通过#引用工具时使用的名称icon工具在 UI 中的图标userDescription面向用户的工具描述modelDescription面向 LLM 的详细描述说明工具做什么、返回什么、何时该用/不该用、以及重要限制inputSchemaJSON Schema描述工具输入参数及是否必填文件路径应为绝对路径when使用 when 子句 控制工具的可用时机如调试时才暴露调试相关工具一个统计标签组活动标签页数量的完整示例可对照原文档 ai-extensibility-overview.md 与 tools.mdcontributes: { languageModelTools: [ { name: chat-tools-sample_tabCount, tags: [editors, chat-tools-sample], toolReferenceName: tabCount, displayName: Tab Count, modelDescription: The number of active tabs in a tab group in VS Code., userDescription: Count the number of active tabs in a tab group., canBeReferencedInPrompt: true, icon: $(files), inputSchema: { type: object, properties: { tabGroup: { type: number, description: The index of the tab group to check. This is optional- if not specified, the active tab group will be checked., default: 0 } } } } ] }2. 扩展代码实现实现分为四步激活时用vscode.lm.registerTool注册工具名称须与package.json的name一致若希望工具仅扩展自身可见可跳过注册创建一个实现vscode.LanguageModelTool接口的类在prepareInvocation中自定义确认消息扩展工具总会显示通用确认对话框但可用MarkdownString提供更具体的说明并支持用户选择始终允许定义输入参数接口并在invoke方法中实现实际逻辑。注意输入参数会按inputSchema校验出错时应抛出对 LLM 有意义的错误消息并可附带下一步指引如换参数重试。一个典型实现骨架export function registerChatTools(context: vscode.ExtensionContext) { context.subscriptions.push(vscode.lm.registerTool(chat-tools-sample_tabCount, new TabCountTool())); } async prepareInvocation(options, _token) { return { invocationMessage: Counting the number of tabs, confirmationMessages: { title: Count the number of open tabs, message: new vscode.MarkdownString(Count the number of open tabs?) }, }; } async invoke(options, _token) { const params options.input; const group typeof params.tabGroup number ? vscode.window.tabGroups.all[Math.max(params.tabGroup - 1, 0)] : vscode.window.tabGroups.activeTabGroup; return new vscode.LanguageModelToolResult( [new vscode.LanguageModelTextPart(There are ${group.tabs.length} tabs open.)] ); }工具调用流程Tool-calling flow用户发送聊天提示词后Agent 模式中的工具调用按如下流程进行详细图解见 tools.mdCopilot 根据用户配置确定可用工具列表内置工具 扩展注册的工具 MCP 服务器工具Copilot 将提示词、聊天上下文与工具定义列表一并发送给 LLMLLM 可能返回一个或多个工具调用请求Copilot 按 LLM 给出的参数调用对应工具工具响应可能引发更多调用请求若出现错误或后续工具请求Copilot 会迭代执行直到所有工具请求处理完毕Copilot 向用户返回最终响应可能包含多个工具的结果。值得强调的机制LLM 本身从不执行工具它只生成调用你工具所需的参数因此清晰描述工具的用途、功能与输入参数是工具能被正确调用的关键。实操详解二扩展中注册 MCP 服务器MCP 服务器的开发指南见 mcp.md。如果希望在 VS Code 扩展内以编程方式注册 MCP 服务器需要完成两步静态配置在package.json中贡献contributes.mcpServerDefinitionProviders扩展点id需与实现代码一致contributes: { mcpServerDefinitionProviders: [ { id: exampleProvider, label: Example MCP Server Provider } ] }实现 provider使用vscode.lm.registerMcpServerDefinitionProvider注册McpServerDefinitionProvider对象该对象含三个成员onDidChangeMcpServerDefinitions服务器配置变化时触发的事件provideMcpServerDefinitions返回vscode.McpServerDefinition[]数组resolveMcpServerDefinition编辑器需要启动服务器时调用可在此执行需要用户交互的额外动作如认证。McpServerDefinition有两种类型vscode.McpStdioServerDefinition运行本地进程、操作其 stdin/stdout与vscode.McpHttpServerDefinitionStreamable HTTP 传输。一个同时注册 stdio 与 HTTP 两种服务器、并在启动时提示用户输入 API Key 的完整示例见 mcp.md 的折叠代码块。MCP 服务器的其他接入方式还包括网页安装链接vscode:mcp/install?{json-configuration}Insiders 为vscode-insiders:前缀、工作区.vscode/mcp.json文件、全局配置文件profile、自动发现、命令行--add-mcp选项等。开发阶段可借助配置中的dev键启用开发模式watch指定监视文件变更并自动重启服务器的 glob 模式debug支持对 Node.jstype: node与 Pythontype: debugpy可配debugpyPath服务器挂接调试器。实操详解三实现一个 Chat Participant完整指南见 chat.md。实现一个 Chat Participant 包含五个部分package.json定义、请求处理器、斜杠命令可选、后续提问可选、participant 检测可选。1. 注册 participantcontributes: { chatParticipants: [ { id: chat-sample.my-participant, name: my-participant, fullName: My Participant, description: What can I teach you?, isSticky: true } ] }其中id为全局唯一标识name用于提及建议全小写fullName显示在响应标题区建议 Title Casedescription作为聊天输入框占位文本isSticky表示响应后 participant 是否在输入框中保持。部分 participant 名称被保留若使用保留名VS Code 会显示包含扩展 ID 的完整限定名。2. 请求处理器在扩展激活时用vscode.chat.createChatParticipant(id, handler)创建 participant可选设置iconPath等属性然后实现vscode.ChatRequestHandlerconst handler: vscode.ChatRequestHandler async (request, context, stream, token) { // 先判断斜杠命令再根据用户提示词判断意图 if (request.command teach) { doTeaching(request.prompt, request.variables); } else { const intent determineUserIntent(request.prompt, request.variables, request.model); } };处理器可以从request中读取用户提示词、命令与聊天位置Chat 视图 / Quick Chat / 内联聊天也可以使用request.model语言模型实例即用户在聊天模型下拉框中选中的模型来判定意图处理逻辑可以基于语言模型、后端服务调用、传统编程逻辑或三者组合。响应使用流式输出stream支持多种内容类型Markdown、代码块、命令链接需MarkdownString.isTrusted声明受信任命令 ID 以防命令注入、命令按钮、文件树、进度消息、引用与内联锚点详见 chat.md 的Supported chat response output types一节。3. 斜杠命令、后续提问与 participant 检测斜杠命令在commands数组中定义用户在聊天中输入/即可调用如/teach、/play相比让 LLM 猜测用户意图斜杠命令更显式、更省时。后续提问通过cat.followupProvider注册ChatFollowupProvider在每次请求后向用户建议后续问题建议写成问句或指引而非简短的命令。participant 检测通过package.json中的disambiguation属性含category、description、examples三类字段可在 participant 级与 command 级分别配置让 VS Code 在用户未显式提及的情况下自动将问题路由到合适的 participant。注意内置 participant 在检测中具有优先级例如操作工作区文件的 participant 可能与内置workspace冲突。此外chat 扩展可以借助vscode/chat-extension-utils库简化工具调用在ChatRequestHandler中用vscode.lm.tools筛选工具、用sendChatParticipantRequest把提示词与工具定义一并发送给 LLM、最后返回libResult.result需要更多控制如额外校验、特殊处理工具响应时则自行实现工具调用。衡量 participant 成功度的推荐指标为unhelpful_feedback_count / total_requests可通过vscode.env.createTelemetryLogger与onDidReceiveFeedback事件采集。进阶学习路径实现语言模型工具见 tools.md在扩展中注册 MCP 服务器见 mcp.md用 Language Model API 集成 AI见 language-model.md实现 Chat Participant见 chat.md扩展代码补全使用 Inline CompletionItemProvider动手教程构建专用聊天助手的 chat-tutorial.md以及用 Language Model API 生成 AI 代码注释的分步指南 language-model-tutorial.md从 Yeoman 脚手架npx --package yo --package generator-code -- yo code开始通过registerTextEditorCommand获取活动编辑器、将可见代码与行号送入模型并解析注释渲染为内联注解。发布与责任规范无论选择哪条路径将 AI 扩展发布到 Visual Studio Marketplace 前都应遵循 Microsoft AI 工具与实践指南、符合 GitHub Copilot 扩展可接受开发与使用政策、并建议在 extension-manifest 中不要引入对 GitHub Copilot 的扩展依赖——这样未安装 Copilot 的用户也能使用非聊天功能同时必须为访问语言模型做好错误处理。模型可用性方面不要假设特定模型会永久存在防御式编程优雅处理无模型访问权限的情况推荐以gpt-4o兼顾性能与质量且注意其maxInputTokens限制当前推荐模型约为 64K tokens扩展应负责任地使用语言模型并关注速率限制不应使用 Language Model API 编写集成测试响应是非确定性的建议将提示词构建与响应解释这类确定性部分模块化以便单元测试。赞分享文档教程【免费下载链接】vscode-docsPublic documentation for Visual Studio Code项目地址https://gitcode.com/gh_mirrors/vs/vscode-docs点击查看免费下载相关推荐在 Roo Code 中使用 VS Code Language Model API接入 GitHub Copilot 与其他扩展模型在 Roo Code 中使用 VS Code Language Model API接入 GitHub Copilot 与其他扩展模型 Roo Code 内置了人工智能AI Agent代码智能体开发工具工具调用MCP ClientsVS Code 扩展实战使用 GitHub Copilot Language Model API 构建 Code Tutor 行内代码注释扩展VS Code 扩展实战使用 GitHub Copilot Language Model API 构建 Code Tutor 行内代码注释扩展 本篇文章基于示例工程Cline VS Code 插件如何接入 VS Code Language Model APIvscode-lm 提供者实现解析Cline VS Code 插件如何接入 VS Code Language Model APIvscode lm 提供者实现解析 本文基于 Cline 仓库中人工智能AI Agent代码智能体AI 应用开发工具MCP Clients上一篇Kata Containers Pod 注解Pod Annotations完全指南逐 Pod 定制运行时、Hypervisor 与 Agent 行为下一篇【亲测免费】 探索 Teslamate实时监控特斯拉的智能解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考