💡 更多技术分享,欢迎访问我的博客:叁木の小屋
本篇概要
智能体需要更聪明地工作,同时也要安全可靠。本篇涵盖性能优化和安全增强:
- Copilot Memory 跨会话记忆
- 非 GitHub 工作区远程索引
- 终端沙盒隔离
- 自动审批安全命令
一、智能体优化
1.1 Copilot Memory(预览)
设置:github.copilot.chat.copilotMemory.enabled
让智能体记住重要信息,避免重复提供上下文。
┌────────────────────────────────────────────────────────┐
│ Copilot Memory │
├────────────────────────────────────────────────────────┤
│ 会话 1 │ 会话 2 │ 会话 3 │ │
│ "偏好用 Tailwind" ────────→ 自动应用偏好 ────────→ 记住偏好 │
└────────────────────────────────────────────────────────┘
使用方式:
- 启用设置:
"github.copilot.chat.copilotMemory.enabled": true - 智能体自动识别需要存储的信息
- 智能体自动检索相关记忆
- 在 GitHub Copilot 设置中管理记忆
1.2 非 GitHub 工作区外部索引(预览)
设置:github.copilot.chat.advanced.workspace.codeSearchExternalIngest.enabled
本地项目也能享受快速的语义搜索:
第一次请求 后续请求
│ │
▼ ▼
┌─────────┐ ┌─────────┐
│ 构建索引 │ │ 使用缓存 │
│ (几分钟) │ │ (快速) │
└─────────┘ └─────────┘
特性:
| 特性 | 说明 |
|---|---|
| 首次构建 | 使用 #codebase 时触发,需几分钟 |
| 缓存使用 | 后续请求速度显著提升 |
| 自动更新 | 修改和保存文件时索引自动更新 |
| GitHub 托管 | 已有远程索引,无需构建 |
1.3 读取工作区外文件
智能体现在可以在获得许可后访问工作区外的文件:
智能体请求读取外部文件
│
▼
┌─────────┐
│ 用户确认 │
└─────────┘
│
┌────┴────┐
│ │
▼ ▼
允许本次 允许整个会话
1.4 性能改进
| 改进项 | 效果 |
|---|---|
| 大型聊天对话 | 打开和滚动更流畅 |
| 对话持久化 | 更可靠 |
| 并行依赖任务 | 显著改善构建时间 |
之前:任务 A → 任务 B → 任务 C → 任务 D(顺序)
现在:任务 A ┐
任务 B ├── 并行执行
任务 C ┤
任务 D ┘
二、智能体安全与信任
2.1 终端沙盒(实验性)
设置:
chat.tools.terminal.sandbox.enabledchat.tools.terminal.sandbox.linuxFileSystemchat.tools.terminal.sandbox.macFileSystemchat.tools.terminal.sandbox.network
⚠️ 注意:仅支持 macOS 和 Linux,Windows 上暂无效果
安全隔离:
┌─────────────────────────────────────────────────────────┐
│ 终端沙盒环境 │
├─────────────────────────────────────────────────────────┤
│ ✅ 允许:工作区文件夹读写 │
│ ✅ 允许:受信任域网络访问 │
│ ❌ 阻止:工作区外文件访问 │
│ ❌ 阻止:未受信任域网络访问 │
│ ✅ 跳过:标准确认对话框(已在受控环境) │
└─────────────────────────────────────────────────────────┘
启用方式:
{
"chat.tools.terminal.sandbox.enabled": true,
"chat.tools.terminal.sandbox.network": ["api.example.com", "*.github.com"]
}
2.2 终端工具生命周期改进
| 新工具/属性 | 说明 |
|---|---|
timeout | 必填属性,0 表示无超时 |
awaitTerminal | 等待后台终端完成 |
killTerminal | 终止后台终端 |
| 手动后台推送 | 可手动将终端调用推送到后台 |
问题解决:
之前:智能体使用 echo "successful" 和 sleep n 等待命令
现在:使用 awaitTerminal 工具正确等待
2.3 终端自动审批
设置:chat.tools.terminal.enableAutoApproveORG
以下命令默认自动审批:
| 命令 | 说明 |
|---|---|
Set-Location | 目录切换 |
dir | 列出目录 |
od | Out-Directory |
xxd | 十六进制显示(仅标志+单文件) |
docker | 所有安全子命令 |
npm, yarn, pnpm | 所有安全子命令 |
快速配置参考
启用 Copilot Memory
{
"github.copilot.chat.copilotMemory.enabled": true
}
启用外部索引
{
"github.copilot.chat.advanced.workspace.codeSearchExternalIngest.enabled": true
}
配置终端沙盒
{
"chat.tools.terminal.sandbox.enabled": true,
"chat.tools.terminal.sandbox.linuxFileSystem": "workspace",
"chat.tools.terminal.sandbox.macFileSystem": "workspace",
"chat.tools.terminal.sandbox.network": ["github.com", "*.api.github.com"]
}
启用终端自动审批
{
"chat.tools.terminal.enableAutoApproveORG": ["npm", "yarn", "pnpm", "docker", "git"]
}
安全最佳实践
1. 沙盒配置建议
对于敏感项目,建议启用沙盒并严格限制网络访问:
{
"chat.tools.terminal.sandbox.enabled": true,
"chat.tools.terminal.sandbox.network": []
}
2. 外部文件访问
工作区外文件访问需要用户确认,可选择:
- 允许本次:仅当前操作
- 允许整个会话:避免重复提示
3. 自动审批范围
仅对可信赖的命令启用自动审批,避免意外执行危险操作。
下一篇预告
(四)终端编辑器与工作台 将深入探讨:
- Kitty 键盘协议支持
- 括号匹配颜色定制
- 集成浏览器功能
- 工作台生产力增强