VSCode Copilot Model Bridge: 扩展桥接模型
VSCode 扩展桥接 Copilot 模型 通过 VSCode 扩展可以将 GitHub Copilot 中的 Claude 模型桥接出来,供外部 AI Agent 调用。这种实现方式主要基于以下技术方案: 实现原理 VSCode Extension API 使用 VSCode 扩展开发框架创建自定义扩展 通过 vscode.languages 和 vscode.commands API 注册命令和服务 利用 Language Server Protocol (LSP) 实现与外部通信 GitHub Copilot API 调用 扩展内部通过 Copilot 的内部 API 访问 Claude 模型 使用 vscode.authentication 获取 GitHub 认证令牌 调用 Copilot Chat API 发送请求并接收响应 MCP (Model Context Protocol) 服务器 在扩展中实现 MCP 服务器,暴露标准化的接口 MCP 定义了统一的消息格式和通信协议 支持通过 stdio、HTTP 或 WebSocket 与外部 Agent 通信 核心实现步骤 创建 VSCode 扩展 // extension.ts import * as vscode from 'vscode'; export function activate(context: vscode.ExtensionContext) { // 启动 MCP 服务器 const mcpServer = new MCPServer(); mcpServer.start(); // 注册命令处理 Copilot 请求 context.subscriptions.push( vscode.commands.registerCommand('extension.queryCopilot', async (prompt) => { return await queryCopilotModel(prompt); }) ); } 实现 MCP 服务器 // mcp-server.ts import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; class MCPServer { private server: Server; constructor() { this.server = new Server({ name: 'copilot-bridge', version: '1.0.0' }, { capabilities: { resources: {}, tools: {}, prompts: {} } }); // 注册工具 this.server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: [{ name: 'query_claude', description: 'Query Claude model via Copilot', inputSchema: { /* ... */ } }] })); } async start() { const transport = new StdioServerTransport(); await this.server.connect(transport); } } 桥接 Copilot API // copilot-bridge.ts async function queryCopilotModel(prompt: string) { // 获取 Copilot Chat API const copilot = await vscode.lm.selectChatModels({ vendor: 'copilot', family: 'claude' }); // 发送请求 const messages = [ vscode.LanguageModelChatMessage.User(prompt) ]; const response = await copilot[0].sendRequest(messages); // 收集响应流 let result = ''; for await (const chunk of response.text) { result += chunk; } return result; } 外部 Agent 调用 # external_agent.py from mcp import ClientSession, StdioServerParameters from mcp.client.stdio import stdio_client async def call_copilot_claude(prompt: str): # 连接到 VSCode 扩展的 MCP 服务器 server_params = StdioServerParameters( command="code", args=["--extensionDevelopmentPath=/path/to/extension"] ) async with stdio_client(server_params) as (read, write): async with ClientSession(read, write) as session: # 初始化连接 await session.initialize() # 调用工具 result = await session.call_tool("query_claude", { "prompt": prompt }) return result 关键技术点 认证与权限 ...