AI 거버넌스 소개
AI 거버넌스 소개 (Introduction to AI Governance)
조직의 AI 컴플라이언스 요구사항을 폴리시로 만들고, 모든 프로젝트에서 지속적으로 강제하는 방법을 설명하는 문서예요. 이 문서에서는 거버넌스의 핵심 개념, 컨트롤 유형, 평가 상태, 그리고 CI/CD에서 배포 게이트를 거는 방법까지 한 번에 정리해 볼게요.
출처: 문서
본문
개요 (Overview)
Confident AI의 AI 거버넌스는 조직의 컴플라이언스 요구사항을 폴리시(policy) 로 만들어 프로젝트 전체에 지속적으로 강제할 수 있게 해줘요. 폴리시는 컨트롤(control) 들의 묶음인데, 컨트롤은 각 프로젝트의 실제 상태(데이터셋, 트레이스, 알림, 테스트 실행, 위험 평가 등)에 대해 자동으로 평가되는 개별적이고 측정 가능한 요구사항이에요.
평가, 관측성, 레드팀을 위한 기준을 한 번 정의하고 어디에나 적용해요. 폴리시에 할당된 모든 프로젝트는 동일한 품질 기준으로 평가되기 때문에, 모든 팀이 AI가 조직이 기대하는 기준을 충족한다는 확신을 갖고 릴리스할 수 있어요. 거버넌스는 그 기준을 명시적이고 일관되게, 자동으로 강제해서 모두가 "좋은 상태"가 무엇인지 같은 정의를 공유하게 해줘요.
이렇게 하면 컴플라이언스·엔지니어링 팀이 "이 AI 애플리케이션을 릴리스해도 되나요?"에 답할 수 있는 단일 출처(single source of truth)를 갖게 되고, 기준에 미달하는 배포를 막을 수 있어요.
AI 거버넌스는 엔터프라이즈 기능이에요. 조직에서 활성화하려면 문의해 주세요.
작동 방식
컨트롤 정의
컨트롤은 "트레이스가 로깅되고 있다", "p95 지연 시간이 2초 아래다", "최신 공식 레드팀 평가가 통과했다" 같은 단일 요구사항이에요. 컨트롤은 자동으로 평가되고 하나의 상태(status)로 결정돼요.
컨트롤을 폴리시로 묶기
폴리시는 명명된 컨트롤 묶음으로, 보통 EU AI Act나 NIST AI RMF 같은 컴플라이언스 프레임워크에 매핑돼요. Low 중요도보다 높은 모든 컨트롤이 통과하면 폴리시가 충족(met) 돼요.
프로젝트를 폴리시에 할당
각 프로젝트는 최대 하나의 폴리시에 속해요. 폴리시에 할당된 모든 프로젝트는 그 폴리시의 모든 컨트롤로 평가돼요.
평가와 게이팅
평가는 매일 자동으로, 그리고 필요할 때 요청에 따라 실행돼요. CI/CD에서 배포 게이트(deploy gate) 로 실행할 수도 있는데, Low 중요도보다 높은 모든 컨트롤이 통과하기 전에는 릴리스를 막아요.
핵심 개념
거버넌스 폴리시
컴플라이언스 요구사항에 매핑되는 컨트롤 묶음이에요. 각 프로젝트는 폴리시 하나에 속하고, Low 중요도보다 높은 모든 컨트롤이 통과하면 충족돼요.
거버넌스 컨트롤
평가되는 개별 요구사항이에요. 평가와 레드팀을 아우르는 운영(operational), 런타임(runtime), 배포 전(pre-deployment) 검사를 아우러요.
컨트롤 유형
컨트롤은 네 가지 유형으로 나오고, 각자 AI 라이프사이클의 다른 조각을 담당해요:
| 유형 | 확인 내용 |
|---|---|
| 운영(Operational) | 정적 설정 검사 — 예: 데이터셋 존재, 트레이스 로깅, 알림 설정. |
| 런타임(Runtime) | 관측성 데이터(트레이스, 스팬, 스레드)에 대한 임계값 기반 지표, 알림과 비슷해요. |
| 배포 전 평가(evals) | 최근 테스트 실행에 게이트 — 예: 최신 공식 실행의 통과 요구. |
| 배포 전 레드팀(red teaming) | 레드팀 워크플로의 최근 위험 평가에 게이트. |
각 유형의 전체 설명과 설정 방법은 컨트롤 문서를 참고해요.
평가 상태 (Assessment statuses)
모든 컨트롤 평가는 네 가지 상태 중 하나로 결정돼요:
| 상태 | 의미 |
|---|---|
PASS |
컨트롤의 요구사항이 충족됨. |
FAIL |
요구사항이 충족되지 않음 — 검사 실패, 임계값 위반, 또는 게이팅 실행 미일치 등. |
ERROR |
평가가 실행되지 못함. 보통 컨트롤이 잘못 설정된 경우. |
NO_DATA |
평가할 데이터가 없음 — 예: 기간 내 지표 없음, 또는 아직 자격 있는 실행 없음. |
Low 중요도보다 높은 모든 컨트롤이 PASS로 결정되면 폴리시가 충족(met) 된 것으로 봐요. Low 중요도 컨트롤은 FAIL, ERROR, NO_DATA로 결정돼도 폴리시를 실패시키지 않아요.
배포 게이팅 (Gating deployments)
deepeval CLI(Python과 TypeScript 모두 제공)로 CI/CD 파이프라인에서 폴리시를 강제하거나, 공개 API를 직접 호출할 수 있어요. 게이트는 프로젝트 폴리시의 모든 컨트롤을 평가하고, Low 중요도보다 높은 모든 컨트롤이 통과할 때 통과해요:
Python
deepeval gate
TypeScript
npx deepeval gate
cURL
요청 (POST /v1/governance/assess) — API 레퍼런스
curl -X POST "https://api.confident-ai.com/v1/governance/assess" \
-H "CONFIDENT_API_KEY: <PROJECT-API-KEY>"
import requests
response = requests.post(
"https://api.confident-ai.com/v1/governance/assess",
headers={
"CONFIDENT_API_KEY": "<PROJECT-API-KEY>",
},
)
print(response.json())
const response = await fetch("https://api.confident-ai.com/v1/governance/assess", {
method: "POST",
headers: {
"CONFIDENT_API_KEY": "<PROJECT-API-KEY>",
},
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, err := http.NewRequest("POST", "https://api.confident-ai.com/v1/governance/assess", nil)
if err != nil {
panic(err)
}
req.Header.Set("CONFIDENT_API_KEY", "<PROJECT-API-KEY>")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, err := io.ReadAll(res.Body)
if err != nil {
panic(err)
}
fmt.Println(string(out))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.confident-ai.com/v1/governance/assess"))
.header("CONFIDENT_API_KEY", "<PROJECT-API-KEY>")
.POST(HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let response = reqwest::Client::new()
.post("https://api.confident-ai.com/v1/governance/assess")
.header("CONFIDENT_API_KEY", "<PROJECT-API-KEY>")
.send()
.await?;
println!("{}", response.text().await?);
Ok(())
}
CLI는 폴리시가 충족될 때만 코드 0으로 종료하고, 그 외에는 0이 아닌 코드로 종료해요. 세 가지 방식 모두 프로젝트의 API 키로 POST /v1/governance/assess 엔드포인트를 내부적으로 호출하며, 이 응답은 컨트롤 수준의 상태처럼 전체 그림을 로깅할 수 있는 모든 컨트롤의 상태도 반환해요. 0이 아닌 종료 코드는 파이프라인을 멈춰서, 컴플라이언스에 미달하는 배포가 나가지 못하게 해요.