为VS Code中GitHub Copilot自定义代理实现可观测性
需求概述
需为VS Code中GitHub Copilot与自研自定义代理的交互实现日志记录功能,捕获所有交互细节(含代理使用内置工具或无工具的场景),但官方无公开API支持该需求。
已尝试的无效方案
- 尝试通过自定义代理搭载的MCP Server记录日志,但无法覆盖代理使用内置工具或无工具的交互场景
- 通过代理在指令中嵌入日志逻辑,存在可靠性问题且会污染对话上下文
- 组织级Copilot审计日志仅提供高层统计数据,无法满足自研特定代理的详细日志需求
- 尝试开发VS Code扩展访问Copilot输出通道或调试视图,但未找到对应官方API
可靠实现方案
1. 自定义MCP Server链路拦截
基于已部署的自定义MCP Server,在核心请求处理链路中添加日志拦截层:
- 针对
completion、chatCompletion等Copilot核心交互接口,在请求到达和响应返回时,记录用户输入上下文、代理响应内容、时间戳、用户标识、工具调用详情(若有) - 对代理调用内置工具的逻辑,在工具调用前、后分别插入日志节点,记录工具参数、执行结果
- 该方案无需修改VS Code端逻辑,所有日志处理在服务端完成,不会污染对话上下文,且能覆盖所有通过MCP Server的交互场景
2. VS Code扩展侧Hook实现
通过VS Code扩展API结合猴子补丁技术,捕获Copilot扩展的内部交互:
- 监听输出通道:通过
vscode.window.createOutputChannel('GitHub Copilot')获取Copilot的输出通道,订阅其onDidAppend事件,直接捕获扩展输出的调试日志(包含请求、响应的关键信息) - Hook核心方法:调试Copilot扩展的源码,找到其发送请求、处理响应的核心函数(如
fetchCompletion类方法),通过猴子补丁替换原方法,在调用前后插入日志记录逻辑,直接获取原始请求/响应数据 - 注意:该方案需适配Copilot扩展的版本更新,若扩展内部实现变更,需同步调整Hook逻辑
3. 本地网络流量代理拦截
部署轻量本地代理服务,拦截VS Code与自定义MCP Server之间的所有HTTPS流量:
- 配置VS Code的
http.proxy和https.proxy指向本地代理服务 - 在本地代理中解析HTTPS请求/响应,记录请求头、请求体(用户输入)、响应体(Copilot返回内容)、交互时间等信息
- 需为本地代理生成自签名证书,并添加到VS Code的信任证书列表中,确保HTTPS流量能正常解析
- 该方案无需修改代理或扩展代码,实现成本低,适合快速验证场景
内容的提问来源于stack exchange,提问作者Shay
相关产品推荐
相关产品推荐

