你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:受保护的代码材料检测(预览版)

代码受保护材料功能提供了一个综合解决方案来识别与现有 GitHub 存储库中代码匹配的 AI 输出。 此功能可以增强对最终用户的透明度并促进对组织策略的遵守,让你可以放心地使用代码生成模型。

注意

内容安全服务的代码扫描程序/索引器仅适用于截止到 2021 年 11 月 6 日的代码。 该日期之后添加到 GitHub 的代码不会被检测到。 在使用受保护代码材料检测最新的代码主体时,请自行判断。

针对 AI 生成的代码,受保护代码材料检测功能的主要目标如下:

  • 检测和防止显示 AI 模型生成的受保护代码。
  • 使组织能够管理与 AI 生成的代码相关的风险。
  • 确保 AI 生成的代码符合法律、道德和组织策略标准。

有关受保护材料检测的详细信息,请参阅受保护材料检测概念页面。 如需了解 API 输入限制,请参阅“概述”的输入要求部分。

先决条件

  • Azure 订阅 - 免费创建订阅
  • 拥有 Azure 订阅后,请在 Azure 门户中创建 Content Safety 资源 ,以获取密钥和终结点。 输入资源的唯一名称,选择订阅,并选择资源组、支持的区域(请参阅上市区域)和支持的定价层。 然后选择“创建”。
    • 部署资源需要几分钟时间。 完成后,选择“转到资源”。 在左侧窗格中的“资源管理”下,选择“订阅密钥和终结点”。 终结点和任一密钥都用于调用 API。
  • 已安装 cURL

分析代码以检测受保护材料

下一部分介绍使用 cURL 进行请求的示例。 将以下命令粘贴到文本编辑器,并进行以下更改。

  1. <endpoint> 替换为与资源关联的终结点 URL。
  2. <your_subscription_key> 替换为资源附带的密钥之一。
  3. (可选)将正文中的 "code" 字段替换为要分析的你自己的代码。

    提示

    有关最大代码长度限制,请参阅输入要求。 受保护材料检测应在 LLM 完成时运行,而不是在出现用户提示时运行。

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": "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()"
}'

URL 中必须包含以下字段:

名称 必需? 说明 类型
API 版本 必需 这是要检查的 API 版本。 当前版本为:api-version=2024-09-15-preview。 示例: <endpoint>/contentsafety/text:detectProtectedMaterialForCode?api-version=2024-09-15-preview 字符串

请求正文中的参数在此表中定义:

名称 必需? 说明 类型
code 必须 这是要检查的原始代码。 可以包含其他非 ascii 字符。 字符串

请参阅 "code" 字段的以下示例值:

{
    "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()"
}

打开命令提示符窗口并运行 cURL 命令。

解释 API 响应

应会在控制台输出中看到显示为 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 包含有关检测到的受保护代码的详细信息的分析结果。 Object
detected 指示是否检测到 GitHub 存储库中的受保护材料。 布尔
codeCitations 找到受保护代码的引文列表。 数组
codeCitations.license 与检测到的代码关联的许可证类型。 字符串
codeCitations.sourceUrls GitHub 存储库中检测到受保护代码的 URL 列表。 字符串数组

清理资源

如果想要清理并移除 Azure AI 服务订阅,可以删除资源或资源组。 删除资源组同时也会删除与之相关联的任何其他资源。