現在生成式 AI 發展越來越快,也越來越多開發人員使用來產生程式碼的建議,但是對於企業來說除了考慮程式碼會不會被拿出去訓練之外的問題,就是要確保產生的程式碼是否有使用到公開的程式碼,有使用的話又是哪種授權,避免一不小心就產生的著作權的問題,本文就來介紹使用 GitHub Copilot 的時候該如何判斷,以及透過 Azure AI Content Safety 來判斷非 GitHub Copilot 產生的程式碼如何判斷是否有用到公開程式碼。
說明
GitHub Copilot
在 VS Code 透過 GitHub Copilot 來產生程式碼建議,範例我們會用底下的 JavaScript 來產生程式碼建議。
function fizzBuzz()
按下 Tab 接受建議之後,可以在輸出的地方選擇 GitHub Copilot Log 的分類,就會顯示出目前建議的程式碼有用到的公開程式碼。
可以從 Log 看到會產生一個連結,點開連結之後就會列出所有相關的公開程式碼以及對應的程式碼授權是哪一個,方便我們來判斷是否有用到使用在公司產品上可能會侵權的公開程式碼。
目前此功能只支援 VS Code 上的 GitHob Copilot ,未來也會陸續更新到其他有支援的 IDE。
Azure AI Content Safety
如果不是使用 GitHub Copilot 或是暫時不支援的 IDE 的話,我們就可以改用微軟的 Azure AI Content Safety,最近有推出一個預覽的功能程式碼的受(版權)保護素材偵測 (Protected material detection for code),讓我們可以針對程式碼來判斷是否有用到公開程式碼。
搜尋 Azure AI Content Safety 來建立服務。
建立的時候只有定價層需要注意,因為我們單純要測試,選擇免費方案就好了。
建立好之後可以取得節點和金鑰。
後面就用 Postman 來測試。
只需要用 POST 去打底下的 API 即可。
https://{Your Endpoint}.cognitiveservices.azure.com/contentsafety/text:detectProtectedMaterialForCode?api-version=2024-09-15-preview
驗證的部分就透過 API Key 帶入到 Header 名稱 Ocp-Apim-Subscription-Key
。
內容我用底下的範例程式碼來測試。
{
"code": "python import pygame pygame.init() win = pygame.display.set_mode((500, 500)) pygame.display.set_caption(My Game) x = 50 y = 50 width = 40 height = 60 vel = 5 run = True while run: pygame.time.delay(100) for event in pygame.event.get(): if event.type == pygame.QUIT: run = False keys = pygame.key.get_pressed() if keys[pygame.K_LEFT] and x > vel: x -= vel if keys[pygame.K_RIGHT] and x < 500 - width - vel: x += vel if keys[pygame.K_UP] and y > vel: y -= vel if keys[pygame.K_DOWN] and y < 500 - height - vel: y += vel win.fill((0, 0, 0)) pygame.draw.rect(win, (255, 0, 0), (x, y, width, height)) pygame.display.update() pygame.quit()"
}
假設有用到公開程式碼的話,就會偵測的到,License 屬性會顯示這段程式碼的授權類型,以及列出 GitHub 網址。
根據文件說明目前資料只到 2021 年 11 月 6 日以前的程式碼,在這時間點之後的新程式碼就不會偵測到了。
結論
進來因為生成式 AI 的蓬勃發展,越來越多的程式碼都會由 AI 來產生建議,對於個人或企業在開發產品的時候,因為會用於商業用途,就需要注意到程式碼的授權協議,除了 GitHub Copilot 內建的 Log 可以判斷以外,我們也可以透過微軟的服務來判斷,Azure AI Content Safety 除了程式碼以外,也可以用來判斷產生的文字內容是否有版權,對於透過 AI 服務產生的內容就可以在呈現給終端用戶前,先行判斷是否會產出侵權的內容,避免後續產生的法律爭議。