一句話說明

GitHub Copilot 的三種方案在資料處理上有根本差異:Individual 版預設會用你的程式碼改善模型,Business 和 Enterprise 不會。這篇整理每個方案的安全邊界、實際設定方式,以及企業導入時要注意的智財風險。

三種方案的資料處理差異

這是選方案時最重要的判斷依據,但很多人忽略細節。

Copilot Individual(每月 10 美元):你在編輯器裡打的程式碼片段會送到 GitHub 伺服器進行推論。預設情況下,這些片段會被用來改善 Copilot 的模型。你可以在設定中關閉「Allow GitHub to use my code snippets for product improvements」,但即使關閉,程式碼仍然會送到伺服器做推論——只是不會被存下來做訓練。

Copilot Business(每月 19 美元/人):程式碼片段送到伺服器推論後會立即丟棄,不會被存儲或用於訓練。所有建議都是即時生成、即時刪除。這是企業最低限度應該選的方案。

Copilot Enterprise(每月 39 美元/人):在 Business 的基礎上增加了 Content Exclusion(指定哪些 repository 或路徑的程式碼完全不送到 Copilot)、組織層級的使用量報表、稽核日誌,以及 IP Indemnity(智慧財產權賠償保障)。

一個常見的誤解是「Business 版就不會把我的程式碼送出去」。不對——推論時一定會送出去,差別只在於不會被存下來做訓練。如果你的程式碼連送到外部伺服器都不行(例如軍工、政府、部分金融機構),那三種方案都不適合。

你的程式碼會經過哪些路徑

了解資料流向才能做正確的風險評估。

當你在 VS Code 裡打字時,Copilot 會把以下資訊送到 GitHub 伺服器:

目前檔案的內容(或部分內容,取決於檔案大小和上下文視窗)。目前游標位置前後的程式碼。同一個專案中其他已開啟 tab 的部分內容。你的語言設定和編輯器設定。

這些資料透過 HTTPS 加密傳輸到 GitHub 的推論伺服器,伺服器產生建議後回傳。在 Business/Enterprise 方案下,推論完成後所有輸入資料會被刪除,不寫入磁碟。

注意:Copilot Chat 的資料流和行內補全不同。Chat 的對話記錄在 Individual 方案下會被保留 28 天用於改善服務。Business/Enterprise 方案下,對話記錄在推論後即時刪除。

.copilotignore 設定

.copilotignore 的功能類似 .gitignore:被列入的檔案不會送到 Copilot 伺服器,Copilot 也不會在這些檔案中提供建議。

在專案根目錄建立 .copilotignore 檔案:

# 環境變數和密鑰
.env
.env.*
*.pem
*.key
*.p12

# 設定檔(可能含連線字串)
config/production.json
config/secrets.yaml
docker-compose.prod.yml

# 內部文件
docs/internal/
specs/confidential/

# 資料庫遷移(可能洩漏 schema 設計)
migrations/

# 測試的 fixture 資料(可能含真實資料的副本)
tests/fixtures/

注意事項:.copilotignore 是 Individual 和 Business 方案都支援的,但只能在本機設定(每個開發者各自設定)。如果要在組織層級統一管理排除規則,需要 Enterprise 方案的 Content Exclusion 功能。

Content Exclusion 在 GitHub 組織管理頁面設定,可以指定整個 repository 或特定路徑不送到 Copilot。所有組織成員自動套用,不需要每個人自己設定。

程式碼建議的智財風險

Copilot 的訓練資料來自 GitHub 上的公開程式碼。這代表它產生的建議可能與某個開源專案的程式碼非常相似或完全相同。

如果那段開源程式碼是 GPL 授權,而你在商業專案中使用了 Copilot 產生的相同片段,你的商業專案可能面臨 GPL 授權的感染效應(copyleft)。

實際案例:2022 年有開發者發現 Copilot 在特定 prompt 下會逐字輸出 Quake III 的快速平方根倒數演算法,包含原始註解。這段程式碼有其原始授權。

降低風險的做法:

開啟 Copilot 的重複偵測過濾器(Duplicate Detection Filter)。在 VS Code 設定中搜尋 github.copilot.advanced,開啟 blockSuggestions 中的 public code filter。這會過濾掉與公開程式碼高度相似的建議。

Enterprise 方案的 IP Indemnity:GitHub 承諾如果因 Copilot 建議的程式碼引發智財權訴訟,GitHub 會負責賠償。但這只適用於開啟了 Duplicate Detection Filter 的情況下。

飛飛的建議:不管用哪個方案,都開啟重複偵測過濾器。漏掉幾個建議的成本,遠低於一次智財訴訟的成本。

程式碼建議中的安全問題

Copilot 的建議可能包含安全漏洞,因為訓練資料中有大量不安全的程式碼範例。

常見的問題模式:

建議在 SQL 查詢中使用字串拼接(SQL Injection)。建議把 API Key 直接寫在程式碼中而非從環境變數讀取。建議使用已被棄用或有已知漏洞的函式庫版本。產生的正則表達式可能有 ReDoS(Regular Expression Denial of Service)風險。

飛飛在課程中會用以下 prompt 示範 Copilot 如何產生不安全的建議:

# 連接資料庫並查詢使用者
def get_user(username):

Copilot 很可能會建議:

def get_user(username):
    conn = sqlite3.connect('users.db')
    cursor = conn.execute(f"SELECT * FROM users WHERE name = '{username}'")
    return cursor.fetchone()

這段有明顯的 SQL Injection 漏洞。安全的寫法是用參數化查詢:

def get_user(username):
    conn = sqlite3.connect('users.db')
    cursor = conn.execute("SELECT * FROM users WHERE name = ?", (username,))
    return cursor.fetchone()

Copilot 有時候會建議安全的寫法,有時候不會。這取決於上下文和提示方式。重點是:每一段 AI 產生的程式碼都需要人工做安全審查。

企業導入檢查清單

如果你負責在公司導入 Copilot,以下是導入前需要確認的項目:

方案選擇:至少選 Business。如果涉及機密程式碼或有合規需求,選 Enterprise。

存取控制:設定哪些 repository 可以使用 Copilot、哪些不行。不是所有專案都適合。

Content Exclusion(Enterprise):列出所有不應送到 Copilot 的 repository 和路徑。

使用政策:制定內部的 Copilot 使用規範,包含哪些場景可以用、哪些不行、產出的程式碼需要經過什麼審查流程。

稽核日誌:定期檢視 Copilot 的使用量報表,確認沒有異常使用模式。

開發者教育:讓團隊成員了解 Copilot 的限制,特別是安全漏洞和智財風險。

安全與限制

Copilot 的建議不等於安全的程式碼。訓練資料中包含大量不安全的範例,AI 無法區分好的和壞的 pattern。

.copilotignore 只在本機生效。如果團隊裡有人沒設定,他們的敏感檔案仍然會送到伺服器。組織層級的管控需要 Enterprise 方案。

Copilot 看不到私有 repository 的程式碼(除非你開啟了那個 repo 並在其中使用 Copilot)。但它在你的 repo 中使用時,會把當前檔案上下文送到伺服器。

IP Indemnity 有前提條件。必須開啟 Duplicate Detection Filter,且只適用於 Enterprise 方案。

Copilot 不會告訴你建議的來源。你無法知道某段建議是原創生成的還是從訓練資料中複製的。

知識檢測

讀完文章後,測試一下你對這個主題的理解。

常見問題

Copilot 會把我的程式碼拿去訓練嗎?

Individual 方案預設會,但可以在設定中關閉。Business 和 Enterprise 方案不會,GitHub 在服務條款中明確承諾。

.copilotignore 和 Content Exclusion 有什麼不同?

.copilotignore 是開發者自己在本機設定的,只影響自己。Content Exclusion 是組織管理員在 GitHub 管理頁面設定的,會套用到所有組織成員,而且只有 Enterprise 方案才有。

我可以在 air-gapped 環境中使用 Copilot 嗎?

不行。Copilot 需要連線到 GitHub 伺服器做推論,無法在完全隔離的環境中使用。如果你需要離線的 AI 程式碼補全,考慮本地部署的開源方案(如 StarCoder + continue.dev)。

開啟 Duplicate Detection Filter 會影響建議品質嗎?

會略微減少建議數量,因為與公開程式碼高度相似的建議會被過濾掉。但對日常使用的影響很小,飛飛建議所有使用者都開啟。

台灣企業使用 Copilot 需要注意什麼法規?

主要是個資法。如果你的程式碼中包含個人資料的處理邏輯(例如資料庫 schema 包含身分證字號欄位),這些資訊送到 GitHub 伺服器可能構成個資的跨境傳輸。建議用 Content Exclusion 排除包含個資處理邏輯的 repository。

相關文章

參考資料

  • GitHub Copilot Trust Center
  • GitHub Copilot for Business Privacy Statement
  • GitHub Copilot Product Terms