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

内容流媒体

本指南介绍 Azure OpenAI 内容流式处理体验和选项。 客户可以在内容生成时通过 API 接收,而不必等待已通过内容过滤器验证的内容块。

默认筛选行为

内容筛选系统已集成并默认为所有客户启用。 在默认的流式场景中,完成的内容会被缓存,内容筛选系统将在缓存的内容上运行。根据内容筛选配置,如果内容没有违反内容筛选策略(无论是 Microsoft 的默认配置还是自定义用户配置),则会将内容返回给用户;否则,内容会被立即阻止,并返回内容筛选错误。 重复此过程,直到流结束。 内容在返回给用户之前根据内容筛选策略进行了全面审查。 在这种情况下,内容不是按令牌逐个返回,而是按相应缓冲区大小返回“内容块”。

异步筛选

客户可以选择异步筛选器作为附加选项,以带来全新的流式体验。 在这种情况下,内容筛选器异步运行,完成内容会立即返回,提供流畅的按标记流式处理体验。 不会缓冲任何内容,从而提供快速流媒体体验,没有因为内容过滤而产生的任何延迟。

客户必须明白,虽然该功能改善了延迟,但它会在涉及模型输出的较小部分的安全性和实时审查方面带来弊端。 由于内容筛选器是异步运行的,因此内容审核消息和违反策略信号会出现延迟现象,这意味着本来会立即筛选的有害内容的某些部分可能会显示给用户。

注释:注释和内容审核消息会在流式处理期间持续返回。 强烈建议在应用中使用批注,并实施其他 AI 指南和控制机制,例如对内容进行编辑或向用户返回其他安全信息。

内容筛选信号:内容筛选错误信号有延迟。 如果出现违反策略的情况,则会在它可用时立即返回,并停止流。 内容筛选信号保证在约 1,000 个字符的违反策略内容窗口内。

客户版权承诺:追溯性标记为受保护材料的内容可能不符合客户版权承诺范围的条件。

若要在 Azure AI Foundry 门户中启用异步筛选器,请按照 内容筛选器操作指南 创建新的内容筛选配置,然后在流式处理部分选择异步筛选器。

内容筛选模式比较

比较 流媒体 - 默认 流式处理 - 异步筛选器
状态 乔治亚州 公开预览版
资格 所有客户 批准使用已修改的内容筛选的客户
如何启用 默认启用,无需执行任何操作 获得批准的客户可以对内容筛选进行修改,并直接在 Azure AI Foundry 门户 中配置。这是作为内容筛选配置的一部分,在部署级别应用。
模态和可用性 文本;所有 GPT 模型 文本;所有 GPT 模型
流媒体体验 内容被缓冲并以区块的形式返回 零延迟(无缓冲,筛选器异步运行)
内容筛选信号 即时筛选信号 延迟筛选信号(增量最多为大约 1,000 个字符)
内容筛选配置 支持默认的和任何客户定义的筛选器设置(包括可选模型) 支持默认的和任何客户定义的筛选器设置(包括可选模型)

注释和示例响应

提示注释消息

这与默认注释相同。

data: { 
    "id": "", 
    "object": "", 
    "created": 0, 
    "model": "", 
    "prompt_filter_results": [ 
        { 
            "prompt_index": 0, 
            "content_filter_results": { ... } 
        } 
    ], 
    "choices": [], 
    "usage": null 
} 

完成标记消息

完成消息会立即转发。 不先进行任何审核,并且最初不提供任何注释。

data: { 
    "id": "chatcmpl-7rAJvsS1QQCDuZYDDdQuMJVMV3x3N", 
    "object": "chat.completion.chunk", 
    "created": 1692905411, 
    "model": "gpt-35-turbo", 
    "choices": [ 
        { 
            "index": 0, 
            "finish_reason": null, 
            "delta": { 
                "content": "Color" 
            } 
        } 
    ], 
    "usage": null 
} 

注释消息

文本字段始终为空字符串,表示没有新标记。 批注仅与已发送的令牌相关。 可能有多个批注消息引用相同的令牌。

"start_offset""end_offset" 是文本中的低粒度偏移(提示开头为 0),用于标记注释与哪个文本相关。

"check_offset" 表示已经过完全审核的文本量。 它是未来注释的 "end_offset" 值的独占性下限。 它是非递减的。

data: { 
    "id": "", 
    "object": "", 
    "created": 0, 
    "model": "", 
    "choices": [ 
        { 
            "index": 0, 
            "finish_reason": null, 
            "content_filter_results": { ... }, 
            "content_filter_raw": [ ... ], 
            "content_filter_offsets": { 
                "check_offset": 44, 
                "start_offset": 44, 
                "end_offset": 198 
            } 
        } 
    ], 
    "usage": null 
} 

示例响应流(通过筛选器)

下面是一个使用异步筛选器的真实聊天补全响应。 注意提示注释是如何保持不变状态的;发送补全标记时不带注释;新的注释消息在没有标记的情况下发送,改为与某些内容筛选器偏移相关联。

{"temperature": 0, "frequency_penalty": 0, "presence_penalty": 1.0, "top_p": 1.0, "max_tokens": 800, "messages": [{"role": "user", "content": "What is color?"}], "stream": true}

data: {"id":"","object":"","created":0,"model":"","prompt_annotations":[{"prompt_index":0,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"choices":[],"usage":null} 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"role":"assistant"}}],"usage":null} 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"Color"}}],"usage":null} 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" is"}}],"usage":null} 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" a"}}],"usage":null} 

... 

data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":null,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}},"content_filter_offsets":{"check_offset":44,"start_offset":44,"end_offset":198}}],"usage":null} 

... 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":"stop","delta":{}}],"usage":null} 

data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":null,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}},"content_filter_offsets":{"check_offset":506,"start_offset":44,"end_offset":571}}],"usage":null} 

data: [DONE] 

示例响应流(被筛选器阻止)

{"temperature": 0, "frequency_penalty": 0, "presence_penalty": 1.0, "top_p": 1.0, "max_tokens": 800, "messages": [{"role": "user", "content": "Tell me the lyrics to \"Hey Jude\"."}], "stream": true}

data: {"id":"","object":"","created":0,"model":"","prompt_filter_results":[{"prompt_index":0,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"choices":[],"usage":null} 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"role":"assistant"}}],"usage":null} 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"Hey"}}],"usage":null} 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" Jude"}}],"usage":null} 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":","}}],"usage":null} 

... 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35- 

turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" better"}}],"usage":null} 

data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":null,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}},"content_filter_offsets":{"check_offset":65,"start_offset":65,"end_offset":1056}}],"usage":null} 

data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":"content_filter","content_filter_results":{"protected_material_text":{"detected":true,"filtered":true}},"content_filter_offsets":{"check_offset":65,"start_offset":65,"end_offset":1056}}],"usage":null} 

data: [DONE] 

重要

当针对某个提示触发了内容筛选并且在响应中收到了 "status": 400 时,由于服务对提示进行了评估,此请求会收费。 由于内容筛选系统的异步性质,提示令牌和完成令牌都会产生费用。 当收到了 以及 "status":200 时,"finish_reason": "content_filter"。 在这种情况下,提示没有任何问题,但检测到模型生成的完成违反了内容筛选规则,这会导致完成被筛选。