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 关键技术点 认证与权限 ...

Created 26266-04-26 · Updated 23236-07-23 · 2 min · 417 words · -

项目里的 AI 文档怎么放

背景 给 AI 编程助手写「项目级说明」,目前尚无统一行业标准——没有 RFC,也没有各家都认的固定文件名。2024 到 2026 年间的常见做法是:在仓库里放 markdown,让 agent 改代码前先读约束。 真正稳定的实践,往往不在某个目录名上,而在三件事: 入口清晰 — agent 知道先读哪个文件 约束可执行 — 语言、目录、测试命令等,少写空泛原则 规模匹配 — 小 demo 不必拆十几份 doc 常见组织方式 方式 典型路径 优点 缺点 根目录入口 AGENTS.md、CLAUDE.md 易发现,多工具能扫到 规则一多文件会很长 .ai/ 目录 .ai/instructions.md 可拆分,根目录干净 部分工具不会自动索引子目录 Cursor 专用 .cursor/rules/*.mdc 与 Cursor IDE 深度集成 绑定 Cursor,换工具需迁移 Copilot 专用 .github/copilot-instructions.md VS Code / Copilot 原生支持 绑定 GitHub Copilot 生态 与人类文档合并 CONTRIBUTING.md 内 AI 段 贡献指南一处维护 AI 规则与人工流程易混杂 没有「唯一正确」的目录名。.ai/ 是合理选项之一,不是法定标准。 ...

Created 20206-06-20 · Updated 20206-06-20 · 2 min · 232 words · -