For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
기본 탐색 메뉴
Theme

콘텐츠 검토

텍스트와 이미지에서 유해 콘텐츠를 식별하세요.

OpenAI 콘텐츠 검토 모델을 사용하면 텍스트와 이미지에서 유해 콘텐츠를 감지할 수 있습니다. 콘텐츠 검토 엔드포인트로 입력을 독립적으로 분류하거나, 응답을 생성할 때 검토 점수도 함께 요청할 수 있습니다. 검토 결과를 바탕으로 콘텐츠를 필터링하거나, 요청을 검토 담당자에게 전달하거나, 유해 가능성이 있다고 표시된 콘텐츠를 제출한 계정에 조치를 취하는 등 애플리케이션 정책을 적용하세요.

omni-moderation-latest 모델은 텍스트와 이미지를 입력으로 받습니다. 오디오는 분류하지 않습니다. 콘텐츠 검토 엔드포인트는 무료로 사용할 수 있으며 이미지 파일은 최대 20 MB까지 지원합니다.

아동 안전: 아동 성착취물(CSAM)로 확인되었거나 의심되는 자료를 Moderation API에 보내지 마세요. 이 API는 아동 성착취물을 감지하거나 처리하도록 설계되지 않았으며, 아동 보호를 위한 전용 안전 조치를 대체할 수 없습니다. 아동 성착취물을 예방하고 감지하며, 발견 시 대응하고 신고하는 절차는 아동 성착취물 관련 지침을 참고하세요.

콘텐츠 검토 워크플로우 선택하기

워크플로우 사용 시점
생성된 콘텐츠 검토하기 애플리케이션에서 Responses API 또는 Chat Completions API로 텍스트를 생성하면서 유해성 판단에 필요한 정보도 함께 받아야 할 때
독립적인 입력 분류하기 모델 응답을 생성하지 않고 텍스트나 이미지를 분류해야 할 때
콘텐츠 검토 결과 해석하기 플래그, 카테고리, 점수 또는 점수가 적용된 입력 유형을 해석해야 할 때
지원되는 카테고리 확인하기 각 유해 콘텐츠 카테고리가 텍스트와 이미지 중 어떤 입력에 적용되는지 알아야 할 때

생성된 콘텐츠 검토하기

애플리케이션에서 생성된 텍스트와 검토 점수가 모두 필요하면 생성 요청의 최상위에 moderation 객체를 전달하세요. 별도의 검토 요청 없이도 API가 모델 입력과 생성된 출력에 대한 검토 점수를 반환합니다.

모델은 평소와 같이 응답을 생성합니다. 사용자에게 출력을 표시하거나 후속 작업을 수행하기 전에 검토 결과를 확인하세요.

응답을 생성할 때 moderation.model을 설정하세요.

검토 점수와 함께 응답 생성하기
from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-6-astra",
    input=[
        {
            "role": "user",
            "content": (
                "A user asks for instructions to make a harmful weapon. "
                "Draft a brief refusal and offer a safer alternative."
            ),
        }
    ],
    moderation={"model": "omni-moderation-latest"},
)

input_moderation = response.moderation.input
output_moderation = response.moderation.output
if input_moderation.type == "error":
    raise RuntimeError(input_moderation.message)
if output_moderation.type == "error":
    raise RuntimeError(output_moderation.message)

print(input_moderation.flagged)
print(output_moderation.flagged)

Responses API는 입력에 대한 moderation_result 객체를 response.moderation.input에, 출력에 대한 moderation_result 객체를 response.moderation.output에 반환합니다.

응답과 함께 반환되는 검토 결과에는 별도로 요청한 검토 결과와 동일한 카테고리 필드가 있습니다. 먼저 flagged로 1차 판단을 내린 다음, categories와 category_scores를 확인해 로그 기록, 요청 라우팅, 감사 추적 또는 담당자 검토 대기열 관리에 활용하세요. 요청을 거절하거나 안전을 고려해 작성한 응답도 유해 콘텐츠를 언급하면 플래그가 설정될 수 있습니다. 검토 점수만으로 콘텐츠를 자동 차단하지 말고, 애플리케이션 정책에 따라 판단할 때 참고하세요.

애플리케이션에서 콘텐츠 검토 실패를 처리해야 한다면 점수를 읽기 전에 검토 결과 유형을 확인하세요. 검토 단계를 완료할 수 없는 경우 해당 입력 또는 출력의 검토 필드에 점수 대신 오류가 들어갈 수 있습니다.

도구를 호출하는 요청에서는 대화 내용에 포함된 도구 호출 인수와 도구 출력을 검토합니다. 도구 이름, 도구 설명, 도구 스키마, 응답 형식 스키마는 검토 대상에서 제외됩니다.

생성된 응답을 스트리밍하면 전체 출력이 생성된 후에 검토 점수를 받습니다. 스트리밍 중에 전송되는 부분 출력 델타에는 검토 점수가 포함되지 않습니다.

독립적인 입력 분류하기

모델 응답을 생성하지 않고 텍스트나 이미지 입력을 분류하려면 콘텐츠 검토 엔드포인트를 사용하세요. 아래 탭에서 OpenAI 라이브러리와 omni-moderation-latest 모델을 사용하는 방법을 확인할 수 있습니다.

입력 텍스트의 분류 정보 가져오기
from openai import OpenAI

client = OpenAI()

response = client.moderations.create(
    model="omni-moderation-latest",
    input="...text to classify goes here...",
)

print(response)

콘텐츠 검토 결과 해석하기

다음은 전쟁 영화의 한 프레임을 이미지로 입력했을 때의 전체 출력 예시입니다. 모델은 이미지에서 폭력의 징후를 감지했으며, violence 카테고리 점수는 0.8을 넘습니다.

{
  "id": "modr-970d409ef3bef3b70c73d8232df86e7d",
  "model": "omni-moderation-latest",
  "results": [
    {
      "flagged": true,
      "categories": {
        "sexual": false,
        "sexual/minors": false,
        "harassment": false,
        "harassment/threatening": false,
        "hate": false,
        "hate/threatening": false,
        "illicit": false,
        "illicit/violent": false,
        "self-harm": false,
        "self-harm/intent": false,
        "self-harm/instructions": false,
        "violence": true,
        "violence/graphic": false
      },
      "category_scores": {
        "sexual": 2.34135824776394e-7,
        "sexual/minors": 1.6346470245419304e-7,
        "harassment": 0.0011643905680426018,
        "harassment/threatening": 0.0022121340080906377,
        "hate": 3.1999824407395835e-7,
        "hate/threatening": 2.4923252458203563e-7,
        "illicit": 0.0005227032493135171,
        "illicit/violent": 3.682979260160596e-7,
        "self-harm": 0.0011175734280627694,
        "self-harm/intent": 0.0006264858507989037,
        "self-harm/instructions": 7.368592981140821e-8,
        "violence": 0.8599265510337075,
        "violence/graphic": 0.37701736389561064
      },
      "category_applied_input_types": {
        "sexual": ["image"],
        "sexual/minors": [],
        "harassment": [],
        "harassment/threatening": [],
        "hate": [],
        "hate/threatening": [],
        "illicit": [],
        "illicit/violent": [],
        "self-harm": ["image"],
        "self-harm/intent": ["image"],
        "self-harm/instructions": ["image"],
        "violence": ["image"],
        "violence/graphic": ["image"]
      }
    }
  ]
}

JSON 응답의 필드를 보면 입력에 어떤 카테고리의 콘텐츠가 포함되어 있는지, 모델이 각 카테고리에 대한 판단을 얼마나 확신하는지 알 수 있습니다.

출력 항목설명
flagged

모델이 콘텐츠를 잠재적으로 유해하다고 분류하면 true, 그렇지 않으면 false입니다.

categories

카테고리별 위반 여부를 플래그로 나타내는 딕셔너리입니다. 모델이 해당 카테고리에서 위반을 감지하면 값은 true, 그렇지 않으면 false입니다.

category_scores

카테고리별 점수를 담은 딕셔너리입니다. 각 점수는 입력에 해당 카테고리의 콘텐츠가 포함되어 있다고 모델이 얼마나 확신하는지를 나타냅니다. 값은 0에서 1 사이이며 클수록 신뢰도가 높습니다.

category_applied_input_types

각 카테고리의 점수가 적용되는 입력 유형을 담고 있습니다. 예를 들어 violence/graphic 카테고리가 이미지와 텍스트 입력 모두에 적용되면 violence/graphic 속성의 값은 ["image", "text"]입니다.

OpenAI는 콘텐츠 검토 엔드포인트에서 사용하는 모델을 지속적으로 업그레이드할 계획입니다. 따라서 category_scores를 기준으로 삼는 맞춤 정책은 시간이 지나면서 판단 기준을 다시 조정해야 할 수 있습니다.

지원되는 카테고리 확인하기

아래 표에서 콘텐츠 검토 엔드포인트가 감지할 수 있는 콘텐츠 카테고리와 각 카테고리가 지원하는 입력 유형을 확인하세요.

“텍스트만”으로 표시된 카테고리는 이미지 입력을 지원하지 않습니다. omni-moderation-latest 모델에 텍스트 없이 이미지만 보내면 이미지를 지원하지 않는 카테고리의 점수는 0으로 반환됩니다. 이미지 파일의 최대 크기는 20 MB입니다.

카테고리설명입력 유형
harassment

대상에 관계없이 괴롭힘에 해당하는 발언을 하거나 그러한 발언을 선동하거나 조장하는 콘텐츠입니다.

텍스트만
harassment/threatening

괴롭힘의 대상에게 폭력을 행사하거나 심각한 위해를 가하는 내용까지 포함하는 콘텐츠입니다.

텍스트만
hate

인종, 성별, 민족, 종교, 국적, 성적 지향, 장애 여부 또는 카스트를 근거로 혐오를 표현하거나 선동하거나 조장하는 콘텐츠입니다. 체스 선수처럼 보호 대상이 아닌 집단을 향한 혐오 콘텐츠는 괴롭힘으로 분류합니다.

텍스트만
hate/threatening

인종, 성별, 민족, 종교, 국적, 성적 지향, 장애 여부 또는 카스트를 근거로 특정 집단을 겨냥한 혐오 콘텐츠로, 해당 집단에 폭력을 행사하거나 심각한 위해를 가하는 내용까지 포함합니다.

텍스트만
illicit

불법 행위를 저지르는 방법에 대한 조언이나 지침을 제공하는 콘텐츠입니다. “가게에서 물건을 훔치는 방법”과 같은 문구가 이 카테고리에 해당합니다.

텍스트만
illicit/violent

illicit 카테고리에 해당하면서 폭력이나 무기 입수도 언급하는 콘텐츠입니다.

텍스트만
self-harm

자살, 자신의 몸을 베는 행위, 섭식 장애 등 자해 행위를 조장하거나 부추기거나 묘사하는 콘텐츠입니다.

텍스트와 이미지
self-harm/intent

화자가 자살, 자신의 몸을 베는 행위, 섭식 장애 등 자해 행위를 하고 있거나 할 의도가 있다고 밝히는 콘텐츠입니다.

텍스트와 이미지
self-harm/instructions

자살, 자신의 몸을 베는 행위, 섭식 장애 등 자해 행위를 부추기거나 그러한 행위를 하는 방법에 대한 지침이나 조언을 제공하는 콘텐츠입니다.

텍스트와 이미지
sexual

성행위 묘사 등 성적 흥분을 유발할 목적으로 제작된 콘텐츠이거나 성적 서비스를 홍보하는 콘텐츠입니다. 성교육과 성 건강 관련 콘텐츠는 제외합니다.

텍스트와 이미지
sexual/minors

18세 미만인 사람이 등장하는 성적 콘텐츠입니다.

텍스트만
violence죽음, 폭력 또는 신체적 부상을 묘사하는 콘텐츠입니다.텍스트와 이미지
violence/graphic

죽음, 폭력 또는 신체적 부상을 적나라하고 상세하게 묘사하는 콘텐츠입니다.

텍스트와 이미지