정렬 오류 모니터링

정렬 오류 모니터링 (Misalignment monitoring)

출처: 문서

정렬 오류 모니터링(Misalignment monitoring)은 민감한 데이터 전송, 민감한 데이터 접근, 또는 파괴적인 변경 수행과 같은 중대한 문맥에서 에이전트가 사용자 지침을 제대로 해석하고 있는지 검사해요. 모델의 추론과 행동을 비동기적으로 검토하며, 잠재적 문제를 식별하면 대화를 중단할 수 있어요.

플래그는 에이전트의 행동에 검토가 필요함을 나타낼 뿐이에요. 사용자가 정책을 위반했거나 에이전트가 지침과 다르게 행동했다는 것을 확립하는 것은 아니에요. 모니터링은 문제를 놓칠 수도 있고 합법적인 활동에 플래그를 붙일 수도 있으므로, 중대한 행동에 대한 사람의 승인을 포함한 애플리케이션 안전장치를 계속 사용해야 해요.

더 많은 맥락은 Help Center의 정렬 오류 모니터링 개요를 참고해요.

요청 커버리지

이 시스템이 커버하는 모델의 경우, 모니터링과 자동 중단은 요청의 API와 대화 맥락을 보존하는 방식에 따라 달라져요:

요청 동작
유지된 추론(persisted reasoning), WebSockets, 또는 OpenAI compaction을 사용하는 Responses API 요청 모니터링됨. 시스템이 대화의 연속을 식별하고 추가 실행을 차단할 수 있음.
위 메커니즘을 전혀 사용하지 않는 Responses API 요청 모니터링됨. 구성된 웹훅이 알림을 받을 수 있지만, 시스템이 대화를 자동으로 중단하지는 않음.
Chat Completions API 요청 이 모니터링 시스템의 커버리지 대상이 아님. 다른 안전 검사는 여전히 적용됨.

대화 맥락 지침은 호출 간 추론 보존, WebSocket 모드, compaction을 참고해요. 알림 웹훅을 구성한다고 해서 자동 중단이 활성화되지는 않아요.

중단된 요청 처리하기

정렬 오류 모니터링이 스트리밍이 시작되기 전에 요청을 차단하면, API는 오류 유형 invalid_request_error, 코드 misalignment_policy_violation과 함께 HTTP 403을 반환해요. 메시지 텍스트가 아니라 오류 코드를 기준으로 대응해요. 스트리밍 통합은 출력을 받은 후에도 스트림을 소비하는 동안 오류를 처리해야 해요.

애플리케이션이 이 오류를 받으면:

  1. 영향을 받는 대화에 대해 추가 행동을 중단해요. 차단된 워크플로를 자동으로 재시도하지 마세요.
  2. 관련 요청·응답 ID, 도구 호출, 애플리케이션 레코드를 데이터 처리 정책에 따라 보존해요.
  3. 사용 가능한 오류 정보를 작업을 담당하는 사용자나 운영자에게 보여줘요. 에이전트의 행동을 의도된 작업과 비교하고, 이미 이루어진 변경을 검토하게 해요.

API는 정렬 오류 모니터링에 의해 중단된 대화를 재개하는 일반적인 방법을 제공하지 않아요.

모니터링이 비동기적이므로, 모니터링이 문제를 식별하기 전에 행동이 이미 완료되었을 수 있어요. 중단된 요청이 이전 행동을 되돌리지는 않아요.

프로젝트 안전 알림 받기

safety.alert.created를 구독해서 API 프로젝트에 대한 모니터링 알림을 사용자 팀이 운영하는 시스템으로 라우팅해요. 알림을 받는 것은 API 요청의 오류를 처리하는 것을 대체하지 않아요.

알림을 받고 싶은 각 프로젝트에 대해 웹훅 엔드포인트 생성을 따라해요. 서명 검증, 확인, 재시도, 중복 전달은 Webhooks 가이드를 사용해요.

웹훅에는 알림 세부 정보가 아닌 알림 ID가 포함돼요:

{
  "object": "event",
  "id": "evt_123",
  "type": "safety.alert.created",
  "created_at": 1787659200,
  "data": {
    "id": "alert_0123456789abcdef0123456789abcdef"
  }
}

웹훅을 검증하고 확인한 후 백그라운드 처리에서 알림을 검색해요. 설명용 alert_0123456789abcdef0123456789abcdef 값을 웹훅의 data.id로 바꿔요. 이벤트의 id는 알림이 아니라 웹훅 이벤트를 식별해요. 같은 프로젝트에 대해 api.safety.alerts.read 권한이 있는 API 키를 사용해요:

curl "https://api.openai.com/v1/safety/alerts/alert_0123456789abcdef0123456789abcdef" \
  -H "Authorization: Bearer ***"

프로젝트 안전 알림 검색

// Replace the illustrative IDs and URLs below with your own resource values.
import OpenAI from "openai";

const client = new OpenAI();
const alertId = "alert_0123456789abcdef0123456789abcdef";

const alert = await client.safety.alerts.retrieve(alertId);
console.log(alert.error_type, alert.reason, alert.response_id);
# Replace the illustrative IDs and URLs below with your own resource values.

from openai import OpenAI

client = OpenAI()
alert = client.safety.alerts.retrieve("alert_0123456789abcdef0123456789abcdef")
print(alert.error_type, alert.reason)
// Replace the illustrative IDs and URLs below with your own resource values.
package main

import (
	"context"
	"fmt"

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

func main() {
	client := openai.NewClient()
	alert, err := client.Safety.Alerts.Get(context.Background(), "alert_0123456789abcdef0123456789abcdef")
	if err != nil {
		panic(err)
	}
	fmt.Println(alert.ErrorType)
	fmt.Println(alert.Reason)
	fmt.Println(alert.RequestPaused)
}
// Replace the illustrative IDs and URLs below with your own resource values.
import com.openai.models.safety.alerts.SafetyAlert;

SafetyAlert alert = client.safety().alerts().retrieve("alert_0123456789abcdef0123456789abcdef");
System.out.println(alert.errorType());
alert.reason().ifPresent(System.out::println);
System.out.println(alert.requestPaused());
# Replace the illustrative IDs and URLs below with your own resource values.
require "openai"

client = OpenAI::Client.new
alert = client.safety.alerts.retrieve("alert_0123456789abcdef0123456789abcdef")
puts(alert.error_type)
puts(alert.reason)
puts(alert.request_paused)

반환된 request_id와 response_id를 사용해 애플리케이션 레코드에서 영향을 받은 작업을 찾아요. 알림 카테고리는 조사할 우려 사항으로 취급해요. request_paused가 true이면 안전 차단 등록이 성공한 것이지, 실행이 중단되었거나 이전 행동이 되돌려졌다는 것을 확인하는 것은 아니에요. 애플리케이션의 작업 상태와 도구 레코드를 확인해요.

알림의 reason은 Zero Data Retention(ZDR) 요청을 포함해 null일 수 있어요. null이 아닌 reason은 전체 전사본이나 조사 보고서가 아니라 범주 설명이에요. 조직의 데이터 정책에 따라 필요한 레코드를 보관해요. API 데이터 제어는 Your data를 참고해요.

검색이 safety_alert_not_found 코드와 함께 404를 반환하면 알림 ID와 프로젝트 자격 증명을 확인해요. 누락되거나, 접근할 수 없거나, 불완전한 레코드가 이 오류를 반환할 수 있어요. 알림 전달과 검색은 완전한 감사 기록을 제공하지 않아요.