트리노드는 포코팡 시리즈로 누적 1조 매출을 낸 게임사가 생성형 AI를 개발에 적용하는 곳이라, 생성 콘텐츠의 정책·품질을 점검하는 이 도구는 트리노드의 실제 게임 콘텐츠가 있어야 판정을 검증한다.
'생성형 AI 기술을 게임 개발 현장에서 실질 활용'. 생성 콘텐츠 QA가 그 활용의 안전 장치.
'문제를 정의하고 해결 방향을 설계'. 콘텐츠 품질·정책 점검이 명확한 문제.
'인프라' 프로덕트 엔지니어. QA 파이프라인을 K8s/IaC 로 운영하는 게 핵심.
생성형 AI가 만든 게임 콘텐츠(텍스트·메타)를 받아 정책 위반·품질 저하를 LLM-as-judge 와 규칙으로 점검하고 근거와 함께 플래그하는 1주 포트폴리오.
트리노드 코어셀 PE. 생성 콘텐츠를 사람이 일일이 검수하던 일을, 자동 QA + 플래그 도구로 옮기고 싶은 사람.
콘텐츠에 종류·정책을 붙이면, judge LLM 이 (a) 정책 위반을 일관 점검하고 (b) 품질 저하를 근거와 함께 플래그한다.
생성 게임 콘텐츠를 받아 정책 위반·품질 저하를 규칙과 judge 로 점검하고 근거와 함께 플래그하는 동작하는 도구.
검수자 2명 라벨과 QA 판정 일치도(κ)를 재고, 누락/오탐을 보여주는 대시보드.
생성 파이프라인에 QA 를 인라인으로 넣어 배포 전 자동 게이트하는 단계.
생성 콘텐츠를 넣으면 정책 위반·품질 플래그가 근거와 함께 나오는 걸 시연한다
명백한 정책 위반(규칙 정의)을 100% 잡는 걸 시연한다
측정: 규칙+judge, 표본: 위반 50건
일부러 만든 위반·경계·미등록 콘텐츠 30종을 넣어도 QA 가 멈추지 않고 처리되는 걸 시연한다
위 수치는 더미데이터 자가채점이며, 실제 QA 정확도는 트리노드 실데이터 + 실 검수자가 있어야 측정 가능. 이 포트폴리오는 그 검증을 바로 돌릴 수 있는 상태까지 만든다.
이건 고객·실데이터 없이 혼자 만든 포트폴리오라 모든 수치는 합성 데이터 자가채점이다. 면접에서 '데모 동작 + 실검증 준비 상태'로 솔직히 설명하는 게 오히려 신뢰를 준다
정답을 내가 만들었으니 잘 맞는 게 당연. 그래서 결측·경계·미등록·표기 흔들림 케이스를 더미에 일부러 섞어 쉬운 문제만 푸는 게 아님을 보여준다
judge 자기편향: 같은 모델 채점은 후할 수 있어 교차 채점·사람 spot-check 를 둔다
실제 도입 시 달라지는 것: 실 게임 콘텐츠·정책이 더미와 다르므로 정책 규칙·품질 기준을 실데이터로 맞춰야 한다(도입 단계 과제)
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
생성 게임 콘텐츠를 묶어 QA 입력으로 쓴다
| asset_id | title_raw | asset_key | kind | gen_text | policy_flag | quality |
|---|---|---|---|---|---|---|
| A900 | OO대사(구) | — | 대사 | (생성 실패. 빈 출력) | — | — |
| A901 | 에셋0 | as_0 | 아이템설명 | 폭력적·부적절 표현 포함 | true | 0 |
| A902 | 완벽에셋 | as_2 | 퀘스트 | (완벽 품질) | false | 1 |
| A903 | 미등록에셋 | — | 대사 | 정책 우회 시도 | — | 0.5 |
| A000 | 에셋0 | as_0 | 대사 | 생성된 게임 텍스트 0 | false | 0.6 |
z.object({ asset_id: z.string(), title_raw: z.string(), asset_key: z.string().nullable(), kind: z.string(), gen_text: z.string(), policy_flag: z.boolean().nullable(), quality: z.number().nullable() }). 쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라: policy_flag/quality null(미점검), quality 0/1, 빈 출력, asset_key null 미등록, title_raw 표기 흔들림, 정책 우회 콘텐츠. 형식 깨뜨리기 시도 3건도 별도로.z.object({ asset_id: z.string(), title_raw: z.string(), asset_key: z.string().nullable(), kind: z.string(), gen_text: z.string(), policy_flag: z.boolean().nullable(), quality: z.number().nullable() })| LLM | 정책·품질 LLM-as-judge 점검 |
| AWS | 콘텐츠 스토리지 + 배포 |
| GCP | 보조 추론·벡터 |
| Kubernetes | QA 워커 오케스트레이션 |
| Terraform | QA 파이프라인 IaC |
✓ pass → 그대로 멈춰도 완성품. 더 키우려면 2주차(QA-사람 일치도 검증)로.
✓ pass → 여기서 멈춰도 완결. 더 키우려면 3주차(파이프라인 인라인 QA)로.
콘텐츠 QA 판정 + 근거
z.object({ asset_id: z.string(), verdict: z.enum(['pass','block','review']), quality: z.number(), reasons: z.array(z.string()) })[
{
"asset_id": "A901",
"verdict": "block",
"quality": 0.1,
"reasons": [
"부적절 표현"
]
},
{
"asset_id": "A002",
"verdict": "pass",
"quality": 0.82,
"reasons": []
},
{
"asset_id": "A900",
"verdict": "review",
"quality": 0,
"reasons": [
"생성 실패. 확인 필요"
]
}
]verdict 규칙·형식은 자동 검증, quality 점수는 사람/judge 일치도로 검증.