안전 분류기

안전 분류기 (Safety classifiers)

출처: 문서

GPT-5 도입과 함께 OpenAI는 위험한 정보에 접근하는 것을 찾아내고 중단하기 위한 몇 가지 검사를 추가했어요. 특히 사용 범위가 넓은 애플리케이션에서는 일부 사용자가 결국 OpenAI의 정책 밖의 일에 사용자 애플리케이션을 사용하려 할 가능성이 있어요.

안전 분류기 프로세스

  1. GPT-5에 대한 요청을 위험 임계값으로 분류해요.
  2. 조직이 높은 임계값을 반복적으로 달성하면 OpenAI는 오류를 반환하고 경고 이메일을 보내요.
  3. 요청이 명시된 시간 임계값(보통 7일)을 넘어 계속되면 OpenAI는 조직의 GPT-5 접근을 중단해요. 요청은 더 이상 작동하지 않아요.

오류, 지연, 차단을 피하는 방법

조직이 안전 정책을 위반하는 의심스러운 활동에 관여하면 OpenAI는 오류를 반환하거나, 모델 접근을 제한하거나, 계정을 차단할 수도 있어요. 다음 안전 조치는 OpenAI가 고위험 요청이 어디서 오는지 식별하고, 조직 전체를 차단하는 대신 개별 최종 사용자를 차단하도록 도와줘요.

  • 개별 사용자가 모델과 상호작용하는 제품에는 안전 식별자 구현을 권장해요. Safety identifier는 권장 사항이지 필수는 아니에요.
  • 사용 사례가 생명과학 전반의 유익한 애플리케이션을 위해 덜 제한된 서비스 버전에 접근하는 데 의존한다면, 특별 접근 프로그램에 대해 읽어서 기준을 충족하는지 확인해요.

개별 사용자를 위한 안전 식별자 구현하기

safety_identifier 파라미터는 Responses API와 기존 Chat Completions API 모두에서 사용할 수 있어요. Realtime API는 OpenAI-Safety-Identifier 헤더를 통해 같은 개념을 지원해요. 안전 식별자를 사용하려면 각 요청에 최종 사용자의 안정적인 ID를 제공해요. 개인정보를 전달하지 않도록 사용자 이메일이나 내부 사용자 ID를 해시해요.

Safety identifier는 API나 세션 간에 이어지지 않아요. 애플리케이션이 Responses API 요청으로 이미 safety_identifier를 보내고 있다면, 각 Realtime 세션을 만들거나 연결할 때 동일한 안정적인 값을 별도로 전달해요.

Responses API — Responses API로 안전 식별자 제공하기

import OpenAI from "openai";

const client = new OpenAI();

const response = await client.responses.create({
  model: "gpt-5.6-terra",
  input: "This is a test",
  safety_identifier: "user_123456",
});

console.log(response.output_text);
from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-5.6-terra",
    input="This is a test",
    safety_identifier="user_123456",
)
package main

import (
	"context"
	"fmt"

	"github.com/openai/openai-go/v3"
	"github.com/openai/openai-go/v3/responses"
)

func main() {
	client := openai.NewClient()
	response, err := client.Responses.New(context.Background(), responses.ResponseNewParams{
		Model:            "gpt-5.6-terra",
		Input:            responses.ResponseNewParamsInputUnion{OfString: openai.String("This is a test")},
		SafetyIdentifier: openai.String("user_123456"),
	})
	if err != nil {
		panic(err)
	}
	fmt.Println(response.OutputText())
}
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.responses.ResponseCreateParams;

ResponseCreateParams params =
    ResponseCreateParams.builder()
        .model("gpt-5.6-terra")
        .input("Help me plan a study schedule.")
        .safetyIdentifier("user_1234")
        .build();

client.responses().create(params).output().stream()
    .flatMap(item -> item.message().stream())
    .flatMap(message -> message.content().stream())
    .flatMap(content -> content.outputText().stream())
    .forEach(text -> System.out.println(text.text()));
require "openai"

client = OpenAI::Client.new
response = client.responses.create(
  model: "gpt-5.6-terra",
  input: "Help me plan a study schedule.",
  safety_identifier: "user_1234"
)

puts(response.output_text)
curl https://api.openai.com/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ***" \
-d '{
"model": "gpt-5.6-terra",
"input": "This is a test",
"safety_identifier": "user_123456"
}'

Chat Completions API — Chat Completions API로 안전 식별자 제공하기

import OpenAI from "openai";

const client = new OpenAI();

const response = await client.chat.completions.create({
  model: "gpt-5.6-terra",
  messages: [{ role: "user", content: "This is a test" }],
  safety_identifier: "user_123456",
});

console.log(response.choices[0].message.content);
from openai import OpenAI

client = OpenAI()

response = client.chat.completions.create(
    model="gpt-5.6-terra",
    messages=[{"role": "user", "content": "This is a test"}],
    safety_identifier="user_123456",
)
package main

import (
	"context"
	"fmt"

	"github.com/openai/openai-go/v3"
)

func main() {
	client := openai.NewClient()
	response, err := client.Chat.Completions.New(context.Background(), openai.ChatCompletionNewParams{
		Model:            "gpt-5.6-terra",
		Messages:         []openai.ChatCompletionMessageParamUnion{openai.UserMessage("This is a test")},
		SafetyIdentifier: openai.String("user_123456"),
	})
	if err != nil {
		panic(err)
	}
	fmt.Println(response.Choices[0].Message.Content)
}
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.chat.completions.ChatCompletionCreateParams;

ChatCompletionCreateParams params =
    ChatCompletionCreateParams.builder()
        .model("gpt-5.6-terra")
        .addUserMessage("Help me plan a study schedule.")
        .safetyIdentifier("user_1234")
        .build();

client.chat().completions().create(params).choices().stream()
    .flatMap(choice -> choice.message().content().stream())
    .forEach(System.out::println);
require "openai"

client = OpenAI::Client.new
completion = client.chat.completions.create(
  model: "gpt-5.6-terra",
  messages: [
    {
      role: :user,
      content: "Help me plan a study schedule."
    }
  ],
  safety_identifier: "user_1234"
)

puts(completion.choices.fetch(0).message.content)
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ***" \
-d '{
"model": "gpt-5.6-terra",
"messages": [
{"role": "user", "content": "This is a test"}
],
"safety_identifier": "user_123456"
}'

Realtime API — Realtime API로 안전 식별자 제공하기

curl https://api.openai.com/v1/realtime/client_secrets \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ***" \
-H "OpenAI-Safety-Identifier: user_123456" \
-d '{
"session": {
"type": "realtime",
"model": "gpt-realtime-2.1"
}
}'

잠재적 결과

OpenAI 모니터링 시스템이 잠재적인 남용을 식별하면 다양한 수준의 조치를 취할 수 있어요:

  • 지연된 스트리밍 응답
    • 정책을 잠재적으로 위반하는 사용자에 대한 초기의 낮은 수준의 개입으로, OpenAI는 해당 사용자에게 전체 응답을 반환하기 전에 추가 검사를 실행하면서 스트리밍 응답을 지연시킬 수 있어요.
    • 검사가 통과하면 스트리밍이 시작돼요. 검사가 실패하면 요청이 중단되고 — 토큰이 전혀 나타나지 않으며 스트리밍된 응답도 시작되지 않아요.
    • 더 나은 최종 사용자 경험을 위해, 스트리밍이 지연되는 경우 로딩 스피너를 추가하는 것을 고려해요.
  • 개별 사용자에 대한 모델 접근 차단
    • 신뢰도가 높은 정책 위반의 경우 관련 safety_identifier가 OpenAI 모델 접근에서 완전히 차단돼요.
    • 해당 안전 식별자는 동일한 식별자에 대한 이후의 모든 GPT-5 요청에서 identifier blocked 오류를 받게 돼요. OpenAI는 현재 개별 식별자를 차단 해제할 수 없어요.

이 차단이 효과적이려면 차단된 사용자가 새 계정을 만들지 못하도록 하는 통제 장치가 있어야 해요. 반복적인 정책 위반으로 조직 전체의 접근 권한을 잃을 수 있다는 점을 기억하세요.

이렇게 하는 이유

특정 집행 기준은 진화하는 실제 사용 패턴이나 새로운 모델 출시에 따라 달라질 수 있어요. 현재 OpenAI는 위험하거나 의심스러운 생물학·화학 활동이 있는 안전 식별자에 대해 접근을 제한하거나 차단할 수 있어요. 생물학 분야에서 더 높은 AI 능력에 접근하는 방식에 대한 자세한 내용은 블로그 포스트에서 확인해요.

다른 유형의 안전 검사

도구와 모델 커스터마이징과 관련된 안전장치는 컴퓨터 사용 확인 및 동의와 파인튜닝 안전을 참고해요. OpenAI는 또한 모델 평가 허브에 결과를 게시해요.