コード内の保護されたマテリアルを検出（Azure AI Content Safety）

# Azure AI Content Safetyでコード内の保護されたマテリアルを検出する

近年、AI技術の進化は目覚ましく、特にコード生成AIモデルは開発現場において大きな変革をもたらしています。しかし、AIが生成したコードには、既存のオープンソースコードや著作権で保護されたコードが含まれている可能性があり、法的リスクや倫理的な問題を引き起こす可能性があります。

そこで、Microsoft Azureは、AIによって生成されたコードに含まれる保護されたマテリアルを検出するための機能「Azure AI Content Safety」を提供しています。本記事では、Azure AI Content Safetyの概要、機能、使用方法について詳しく解説します。

https://learn.microsoft.com/ja-jp/azure/ai-services/content-safety/quickstart-protected-material-code

## Azure AI Content Safetyとは

Azure AI Content Safetyは、有害コンテンツや不適切なコンテンツからユーザーを保護するためのAzure AIサービスです。テキスト、画像、コードなどのコンテンツを分析し、ポリシーに違反する可能性のあるコンテンツを検出します。

コード用の保護されたマテリアル検出機能は、AIによって生成されたコードが、既存のGitHubリポジトリのコードと一致するかどうかを識別する機能です。この機能を利用することで、エンドユーザーに対する透明性を高め、組織のポリシーへのコンプライアンスを促進し、自信を持ってコード生成モデルを使用できるようになります。

### 主な目的

* **保護されたコードの開示の検出と防止:** AIモデルによって生成されたコードに、著作権で保護されたコードやライセンス制限のあるコードが含まれていないかを検出します。
* **AIによって生成されたコードに関連するリスクの管理:** 法的リスク、倫理的リスク、コンプライアンスリスクなど、AIによって生成されたコードに関連するリスクを組織が管理できるようにします。
* **法的、倫理的、組織のポリシー標準への準拠の確認:** AIによって生成されたコードが、法的要件、倫理的ガイドライン、および組織のポリシーに準拠していることを確認します。


## 前提条件

Azure AI Content Safetyを利用するためには、以下の前提条件を満たす必要があります。

1. **Azureサブスクリプション:** Azureアカウントが必要です。お持ちでない場合は、アカウントを作成してください。
2. **Content Safetyリソース:** Azure portalでContent Safetyリソースを作成し、キーとエンドポイントを取得します。
    * Azure portalにサインインします。
    * 「Content Safety」を検索し、Content Safetyリソースを作成します。
    * リソースの一意の名前、サブスクリプション、リソースグループ、サポートされているリージョン、価格レベルを選択します。
    * **［作成］** を選択します。
    * リソースのデプロイが完了したら、**［リソースに移動］** を選択します。
    * 左側のペインの **［リソース管理］** で、**［キーとエンドポイント］** を選択します。
    * エンドポイントとキーは、APIを呼び出すために使用します。
3. **cURL:** コマンドラインからAPIを呼び出すために、cURLがインストールされている必要があります。

## コードの分析方法

ここでは、cURLを使用して保護されたマテリアルの検出を行う方法を説明します。

1. **cURLコマンドの作成:** 次のcURLコマンドをテキストエディターにコピーし、必要な情報を入力します。
```bash
curl --location --request POST '<endpoint>/contentsafety/text:detectProtectedMaterialForCode?api-version=2024-09-15-preview' \
--header 'Ocp-Apim-Subscription-Key: <your_subscription_key>' \
--header 'Content-Type: application/json' \
--data-raw '{
  "code": "<分析するコード>"
}'
```


* `<endpoint>`を、Content SafetyリソースのエンドポイントURLに置き換えます。
* `<your_subscription_key>`を、Content Safetyリソースのキーに置き換えます。
* `"code"`フィールドを、分析するコードに置き換えます。

**例:**

```bash
curl --location --request POST 'https://your-resource-name.cognitiveservices.azure.com/contentsafety/text:detectProtectedMaterialForCode?api-version=2024-09-15-preview' \
--header 'Ocp-Apim-Subscription-Key: YOUR_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
  "code": "python import pygame\npygame.init()\nwin = pygame.display.set_mode((500, 500))\npygame.display.set_caption('My Game')\nx = 50\ny = 50\nwidth = 40\nheight = 60\nvel = 5\nrun = True\n\nwhile run:\n    pygame.time.delay(100)\n\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            run = False\n\n    keys = pygame.key.get_pressed()\n\n    if keys[pygame.K_LEFT] and x > vel:\n        x -= vel\n    if keys[pygame.K_RIGHT] and x < 500 - width - vel:\n        x += vel\n    if keys[pygame.K_UP] and y > vel:\n        y -= vel\n    if keys[pygame.K_DOWN] and y < 500 - height - vel:\n        y += vel\n\n    win.fill((0, 0, 0))\n    pygame.draw.rect(win, (255, 0, 0), (x, y, width, height))\n    pygame.display.update()\n\npygame.quit()"
}'
```

2. **cURLコマンドの実行:** コマンドプロンプトまたはターミナルを開き、作成したcURLコマンドを実行します。

### 入力要件

* **APIバージョン:** `api-version=2024-09-15-preview`を使用します。
* **コード:** 分析する生のコードを文字列として指定します。最大コード長の制限については、[公式ドキュメント](https://learn.microsoft.com/ja-jp/azure/ai-services/content-safety/overview#input-requirements)を参照してください。
* **エンコード:** 他の非ASCII文字も含めることができます。


## API応答の解釈

APIリクエストが成功した場合、保護されたマテリアルの検出結果がJSON形式で返されます。

**例:**

```json
{
  "protectedMaterialAnalysis": {
    "detected": true,
    "codeCitations": [
      {
        "license": "NOASSERTION",
        "sourceUrls": [
          "https://github.com/kolejny-projekt-z-kck/game-/tree/f134099ce970da951bac9baac83c7885e991c676/ganeee.py",
          "https://github.com/Felipe-Velasco/Modulo-Pygame/tree/11490c44a951812dc0c6424b68b1e14fc5cc4c0b/pygame%20basics.py",
          "https://github.com/bwootton/firstgame/tree/70d722a6b1ccb79bfa56d9cc69932051848c44bf/jump.py",
          "https://github.com/Jason017/Pygame-Learning-Module/tree/17cd69f169d3759e00816ed4a3795dd6db7e157f/pygameModule02.py",
          "https://github.com/Coders-Brothers/pygame-tutorial/tree/1b481f5687cdda7c0765089780ef451af6e175cd/lesson-2.py"
        ]
      }
    ]
  }
}
```

**JSONフィールドの説明:**

* `protectedMaterialAnalysis`: 検出された保護されたコードに関する詳細を含む分析結果。
    * `detected`: GitHubリポジトリから保護されたマテリアルが検出されたかどうかを示すブール値。`true`の場合、保護されたマテリアルが検出されました。
    * `codeCitations`: 保護されたコードが見つかった引用の一覧。
        * `license`: 検出されたコードに関連付けられているライセンスの種類。
        * `sourceUrls`: 保護されたコードが検出されたGitHubリポジトリからのURLの一覧。


## 注意事項

* Azure AI Content Safetyのコードスキャナー/インデクサーは、2021年11月6日までのGitHubリポジトリに基づいています。この日付以降にGitHubに追加されたコードは検出されない場合があります。
* 保護されたマテリアルの検出は、ユーザープロンプトではなく、LLM（大規模言語モデル）の完了時に実行されるように設計されています。

## まとめ

Azure AI Content Safetyのコード用保護されたマテリアル検出機能は、AIによって生成されたコードに含まれる可能性のある著作権侵害やライセンス違反のリスクを軽減するための強力なツールです。この機能を活用することで、法的リスクを回避し、倫理的なコード生成を促進し、AI技術の安全な利用を実現できます。