Schift PII Beta
GPT에 넣기 전에,
한국어 개인정보를 먼저 막습니다.
Claude, GPT, Gemini에 넣기 전에 민감한 내용을 먼저 줄이는 한국어 개인정보 보호 레이어입니다. 상담 기록과 법률 문서처럼 한국어 문맥이 긴 입력에서 주민번호, 계좌번호, 주소, 전화번호, 이메일을 먼저 가립니다.
아직 베타입니다. 그래서 넓게 약속하기보다, 실제로 자주 나오는 항목부터 안정적으로 보여주는 데 집중합니다.
Step 1 · Source
민감 문서 샘플
계약자 주민등록번호는 920512-1234562입니다. 해외 체류 증빙에는 여권번호 M12345678이 포함되어 있습니다. 본인 확인 서류의 운전면허번호는 12-22-123456-01입니다. 외국인 고객의 외국인등록번호 920512-5234567을 확인했습니다. 배송지 주소는 경기도 가평군 청평면 청평리 123-45번지입니다. 상담 후 연락처는 010-1234-5678로 남겼습니다. 환급 계좌번호는 1002-456-789012입니다.
Step 2 · Mask
모델에 보내기 전 텍스트
계약자 주민등록번호는 [KR_RRN]입니다. 해외 체류 증빙에는 여권번호 [KR_PASSPORT]이 포함되어 있습니다. 본인 확인 서류의 운전면허번호는 [KR_DRIVER_LICENSE]입니다. 외국인 고객의 [KR_ARN]을 확인했습니다. 배송지 주소는 [KR_ADDRESS_RURAL]입니다. 상담 후 연락처는 [KR_PHONE]로 남겼습니다. 환급 계좌번호는 [KR_ACCOUNT]입니다.
Audit
가려진 개인정보 타입
Step 3 · Downstream
LLM/검색 payload
{
"task": "summarize_sensitive_document",
"text": "계약자 주민등록번호는 [KR_RRN]입니다.\n해외 체류 증빙에는 여권번호 [KR_PASSPORT]이 포함되어 있습니다.\n본인 확인 서류의 운전면허번호는 [KR_DRIVER_LICENSE]입니다.\n외국인 고객의 [KR_ARN]을 확인했습니다.\n배송지 주소는 [KR_ADDRESS_RURAL]입니다.\n상담 후 연락처는 [KR_PHONE]로 남겼습니다.\n환급 계좌번호는 [KR_ACCOUNT]입니다.",
"privacy": {
"redacted_before_model": true,
"allowed_entity_types": [
"KR_RRN",
"KR_PASSPORT",
"KR_DRIVER_LICENSE",
"KR_ARN",
"KR_ADDRESS_RURAL",
"KR_PHONE",
"KR_ACCOUNT"
],
"raw_values_in_payload": false
}
} Step 4 · Useful output
가린 뒤에도 가능한 분석
심사자가 확인할 내용
- 고객 신분 식별자는 모두 토큰으로 대체된 상태에서 문서 요약을 진행합니다.
- 연락처와 계좌는 처리 담당자가 승인한 화면에서만 복원 대상으로 둡니다.
- 주소가 필요한 배송/관할 판단은 토큰 상태로 표시하고, 원문 복원은 별도 권한에 묶습니다.
핵심은 모델이 원문 값을 몰라도 업무 판단에 필요한 구조와 역할은 유지된다는 점입니다.
How to use
운영에서는 이렇게 씁니다
01
문서나 OCR 텍스트를 넣습니다
스캔 문서, 상담 기록, 신청서에서 읽은 텍스트를 Schift PII 기능으로 먼저 처리합니다.
02
선택한 개인정보 타입을 토큰으로 바꿉니다
주민등록번호, 여권번호, 운전면허번호, 외국인등록번호, 주소, 전화번호, 계좌번호를 모델 입력 전에 치환합니다.
03
마스킹된 텍스트만 AI로 보냅니다
요약, 분류, 심사 보조, 검색에는 원문 값 대신 [KR_RRN], [KR_PHONE] 같은 토큰이 들어갑니다.
04
복원은 권한 있는 업무 화면에서만 합니다
원문과 토큰 매핑은 짧게 보관하고, 고객 통지나 정산처럼 필요한 화면에서 복원한 뒤 바로 지웁니다.
Live로 보여줄 순서
원문 샘플을 보여준 뒤 선택 타입 마스킹 확인을 누르고, payload에 원문 값이 남지 않는 것을 확인합니다. 그 다음 “가린 뒤에도 가능한 분석”으로 업무 판단은 유지되고 원문 복원은 별도 권한에 묶인다는 점을 설명하면 됩니다.
예시 문장
이번 데모에서 가리는 종류
Before / After
사람들이 AI에 그대로 넣는 한국어 상담 기록을 먼저 가립니다.
Raw input
김민수(990210-1234567)는 서울 강남구 테헤란로 521 12층에 거주합니다. 국민은행 123-45-678901 예금주 김민수, [email protected]으로 연락했습니다.
Masked output
[이름]([주민등록번호])는 [주소]에 거주합니다. [계좌번호] 예금주 [이름], [이메일]로 연락했습니다.
기존 regex
주민번호처럼 정형 포맷은 잡지만, 한국 주소와 계좌 문맥은 자주 빠집니다.
일반 탐지 모델
한국어 주소, 이름, 계좌번호가 섞인 문장에서 놓치는 경우가 있습니다.
Schift
상담 기록과 법률 문서에서 자주 나오는 항목부터 먼저 가리도록 맞췄습니다.
Use in workflow
데모에서 끝나지 않고 실제 업무 흐름 앞단에 붙입니다.
원문을 AI 모델이나 문서 검색 시스템에 보내기 전에 한 번 줄이는 용도입니다. 민감한 내용이 들어간 상담 기록, 고객 문의, 법률 문서를 그대로 넘기지 않도록 앞에서 막습니다.
공개 데모는 낮은 한도로 열어두고, API key가 있으면 유저별 한도로 호출할 수 있습니다. 초기 운영 한도는 API key당 분당 120회, 일일 5,000회로 시작하고 서버비를 보며 조정합니다.
AI에 보내기 전
상담 기록을 GPT나 Claude에 넣기 전에 먼저 가립니다.
문서 검색에 넣기 전
검색용 문서 저장 전에 개인정보가 남지 않게 줄입니다.
업무 시스템에 붙일 때
API key가 있는 유저는 공개 데모보다 별도 한도로 호출할 수 있습니다.
API example
schift = Schift(api_key="sch_...")
masked = schift.mask(
text,
types=[
"resident_id",
"alien_registration",
"passport",
"driver_license",
"address",
"phone",
"bank_account",
],
)
response = client.responses.create(
input=masked,
) types 목록은 무엇을 가릴지 정하고, 기본 토큰 형식은 [PII_PHONE_1] 같은 복구 가능한 토큰과 reverse_map을 돌려줍니다. AI에는 masked만 보내고, reverse_map은 결과가 돌아온 뒤 복구가 필요할 때만 씁니다.
Image Beta
이미지 안의 개인정보도 베타로 엽니다.
주민번호가 찍힌 스캔본, 상담 캡처, 계약서 이미지처럼 텍스트 복사 전에 이미 위험한 파일을 먼저 줄이는 용도입니다. 텍스트 API와 같은 privacy layer로 관리하되, 이미지 원본은 더 보수적으로 다룹니다.
이미지 베타 문의스캔 문서와 상담 캡처에서 OCR로 텍스트를 읽고 개인정보 영역을 가립니다.
초기 베타는 브라우저/로컬 처리 우선입니다. 원본 이미지를 서버에 보내지 않는 흐름부터 검증합니다.
API key 고객용 서버 처리량은 텍스트 API와 별도 버킷으로 운영합니다.
Strengths · Weaknesses
지금 데모에서 먼저 확인할 수 있는 항목입니다.
먼저 가리는 항목
| 카테고리 | 상태 | 예시 |
|---|---|---|
| 주민등록번호 | 우선 가림 | 상담 기록과 신청서에 그대로 남기 쉬운 직접 식별자를 먼저 처리합니다. |
| 전화번호 | 우선 가림 | 010 번호와 +82 국제 표기처럼 자주 쓰는 연락처를 가립니다. |
| 이메일 | 우선 가림 | 상담 기록, 계약 메일, 고객 문의에 남은 이메일 주소를 가립니다. |
| 계좌번호 | 우선 가림 | 은행명과 함께 적힌 송금 계좌를 먼저 가립니다. |
| 주소 | 베타 지원 | 도로명 주소처럼 문장 안에 들어간 주소를 계속 개선 중입니다. |
확인하고 써야 하는 부분
-
모든 개인정보를 100% 보장하지는 않음
실제 운영에 붙일 때는 가지고 있는 샘플로 먼저 확인하는 것을 권장합니다.
-
짧은 이름은 문맥을 봅니다
이름만 단독으로 있을 때보다 “의뢰인 김민수”처럼 역할이 같이 있을 때 더 안정적입니다.
-
긴 문장은 결과 확인이 필요합니다
여러 사람이 한 문단에 섞인 상담 기록은 일부 항목이 남을 수 있습니다.
-
날짜는 기본적으로 가리지 않습니다
예약일, 상담일처럼 문서 이해에 필요한 경우가 많아 기본 대상에서 뺐습니다.
-
이미지 결과는 OCR 품질 영향을 받습니다
흐릿한 캡처나 기울어진 스캔은 먼저 텍스트를 잘 읽어야 정확히 가릴 수 있습니다.
못 잡은 케이스 / 잘못 잡은 케이스를 아래 폼으로 알려주시면 다음 학습 데이터에 반영합니다.
Feedback
이상하게 잡혔거나 못 잡은 케이스를 알려주세요.
위에서 한 번 마스킹을 실행한 뒤에 그 결과에 대해 코멘트를 남기실 수 있습니다. 후속 모델 개선에 직접 반영합니다.
먼저 위에서 마스킹을 한 번 실행해주세요.