Jev 처음 써보기②…API 키 발급부터 사기 문자 판별까지

키를 임시로 넣고 영구로 넣는 법, 문자 12건으로 확인한 질문 범위와 기준선의 차이까지 화면으로 짚었다

나무 책상 위에 긴급 우편 봉투와 피싱 분석 문서, 돋보기, 도장, 열쇠가 놓여 있고 오른쪽에 앉은 사람의 손이 보인다.
AI 생성 이미지
핵심 요약 AI 요약
1
API 키 보안:Jev를 코드에서 사용하려면 API 키를 발급받아 파워셸에 등록해야 하며, 키가 노출되면 즉시 비활성화하고 새로 발급받아야 한다.
2
택배 문자 판별:예제 코드에서 Jev는 가짜 택배 문자의 스미싱 확률을 94%, 정상 배송 안내의 확률을 12%로 제시했다.
3
질문 범위의 영향:12건 실험에서 택배 사기에 한정한 질문은 다른 유형의 사기를 걸러내지 못했으며, 질문을 넓히자 과태료와 건강보험 사기의 확률이 각각 93%로 올랐다.
4
기준선 설정 실험:넓힌 질문에서 기준선을 50%로 두면 사기 6건 중 3건을 놓쳤지만 30%로 낮추면 6건을 모두 잡았으며, 표본이 작아 30%를 일반적인 정답으로 볼 수는 없다.
5
낮은 호출 비용:실측에서 문자 12건에 질문 두 개씩을 묻는 데 4728토큰과 약 0.0002달러가 들었다.
기사 목차 펼치기 / 접기

판단 AI는 답을 정해 주지 않는다. 확률을 주고, 선은 쓰는 사람이 긋는다.

1편에서는 타입세이프AI(TypeSafe AI)의 판단 AI Jev를 브라우저로 시험해 보고, 윈도우 PC에 Jev를 부를 도구를 설치했다. 2편은 그 도구로 택배 사칭 문자를 직접 판단시킨다. 콘솔에서 API 키를 받고, 키를 파워셸에 알려주고, 코드 파일을 실행하는 순서다. 문자를 12건으로 늘려 돌려 본 결과도 함께 싣는다.

1편을 마쳤다면 여기서 시작한다. 윈도우 키를 누르고 powershell을 입력해 파워셸을 연 뒤, 1편에서 만든 실습 폴더로 들어간다.

cd $HOMEjev-test

5단계 API 키 발급받기

API 키는 내 계정으로 Jev를 부른다는 걸 증명하는 긴 문자열이다. 브라우저로 Jev 콘솔을 열고, 왼쪽 메뉴의 API Keys를 누른 뒤 오른쪽 위 Create key를 누른다.

API Keys 화면과 Create key 버튼
API Keys 화면과 Create key 버튼

키 이름은 jev-test처럼 나중에 알아볼 수 있게 붙인다. 만들기를 마치면 apikey_로 시작하는 긴 문자열이 나타난다. 창 안내문대로 이 값을 볼 기회는 지금 한 번뿐이다. Copy를 눌러 복사하고 Done을 누른다. 놓쳤다면, 키를 새로 만들면 된다.

발급된 API 키(가림 처리)
발급된 API 키(가림 처리)

키는 비밀번호와 같다. 남에게 보내거나 화면을 찍어 올리면 그 사람이 내 크레딧으로 Jev를 쓸 수 있다. 본지도 실습 중 키가 찍힌 화면을 그대로 공유하는 실수를 했다. 이럴 때는 키 목록 오른쪽의 점 세 개(⋯)를 누르고 Deactivate로 그 키를 끈 뒤 새 키를 만든다. 아래의 Delete는 키를 아예 지운다.

키 비활성화 메뉴
키 비활성화 메뉴

6단계 파워셸에 키 알려주기

복사한 키를 이제 파워셸에 넣을 차례다. 아래 줄을 입력하면 API 키를 붙여넣고 Enter:라는 안내가 뜬다. 거기에 Ctrl+V로 키만 붙여넣고 Enter를 누른다.

$env:TYPESAFE_API_KEY = Read-Host "API 키를 붙여넣고 Enter"

제대로 들어갔는지는 아래 명령으로 확인한다. apikey_로 시작하는 값이 나오면 성공이다.

$env:TYPESAFE_API_KEY
키를 넣고 확인한 화면(가림 처리)
키를 넣고 확인한 화면(가림 처리)

이 방식은 테스트용 임시 등록이다. 키는 지금 열린 파워셸 창 안에서만 살아 있고, 창을 닫으면 사라진다. 매번 넣기 번거롭다면 뒤에 나오는 영구 등록 방법을 쓴다.

이럴 땐 이렇게. 인터넷에서 흔히 보는 $env:TYPESAFE_API_KEY="키" 방식은 큰따옴표를 빠뜨리기 쉽다. 따옴표가 없으면 파워셸은 키를 저장할 값이 아니라 실행할 명령 이름으로 읽는다. 그래서 “용어가 cmdlet … 으로 인식되지 않습니다”라는 오류가 난다. 위의 Read-Host 방식은 따옴표를 쓸 일이 없어 이 실수가 생기지 않는다.

따옴표를 빠뜨려 생긴 오류(가림 처리)
따옴표를 빠뜨려 생긴 오류(가림 처리)

7단계 판단 코드 파일 만들기

메모장으로 코드 파일을 만든다.

notepad sms_check.py

“새 파일을 만드시겠습니까?” 창이 뜨면 예를 누른다.

메모장의 새 파일 확인 창
메모장의 새 파일 확인 창

빈 메모장에 아래 코드를 통째로 붙여넣고 Ctrl+S로 저장한 뒤 메모장을 닫는다.

# 택배 문자가 스미싱(사기 문자)인지 Jev에게 판단시키는 예제
from typesafe_sdk import Noul, TypeSafeClient
# 판단을 맡길 문자 두 개 (첫째는 가짜, 둘째는 진짜 배송 안내)
messages = [
"[CJ대한통운] 고객님의 택배가 주소 불일치로 보관 중입니다. 아래 링크에서 주소를 수정해 주세요. http://cj-de1ivery.top/kr",
"[CJ대한통운] 고객님의 상품이 오늘 14~16시 배송 예정입니다. 운송장 6301-2245-8812. 배송 조회는 CJ대한통운 앱에서 확인하세요.",
]
with TypeSafeClient(model="jev-latest") as client:
for text in messages:
response = client.system_one(
state=text,
questions={
"smishing": Noul(
instructions="이 문자는 택배 회사를 사칭해 링크를 누르게 만드는 사기(스미싱) 문자다"
),
},
)
probability = response.nouls["smishing"].noul
print("[문자]", text[:40], "...")
print(f" -> 스미싱일 확률: {probability:.0%}")
print()
코드를 붙여넣고 저장한 메모장
코드를 붙여넣고 저장한 메모장

코드를 다 이해할 필요는 없고, 세 군데만 보면 된다. messages에는 판단을 맡길 문자를 넣었다. 첫째는 주소에 숫자 1이 섞인 가짜 주소로 클릭을 유도하는 문자이고, 둘째는 링크 없이 배송 시간만 알리는 문자다. state는 Jev가 읽을 글이고, Noul은 예·아니오로 답할 질문이다. 1편 플레이그라운드의 State 칸과 Questions 칸을 코드로 옮겼다고 보면 된다.

8단계 실행하고 결과 읽기

파워셸로 돌아와 아래 명령을 입력한다.

.venvScriptspython sms_check.py

곧바로 두 줄의 확률이 나온다. 사전 시험에서는 문자 한 건에 0.2초 안팎이 걸렸다. 가짜 문자는 스미싱일 확률 94%, 진짜 배송 안내는 12%였다.

실행 결과(가림 처리)
실행 결과(가림 처리)

이럴 땐 이렇게. 6단계 뒤에 파워셸 창을 닫았다 열었다면 아래처럼 No API key was provided(키가 없다)라는 오류가 난다. 임시 등록한 키가 창과 함께 사라졌기 때문이다. 새 창에서 6단계의 Read-Host 줄을 다시 입력하고 실행하면 된다. 이때 줄 맨 앞이 jev-test>가 아니라면 cd $HOMEjev-test부터 다시 입력한다.

키가 사라져 생긴 오류
키가 사라져 생긴 오류

Jev는 “사기다” “아니다”를 선언하지 않는다. 몇 퍼센트부터 사기로 볼지는 쓰는 사람이 정한다. 공식 기술 문서도 놓쳤을 때의 피해가 크면 기준선을 낮추고, 잘못 차단했을 때의 손실이 크면 기준선을 높이라고 권고한다. 동일한 코드를 다시 돌리면 수치가 1%p쯤 흔들릴 수 있다. 사전 시험에서 가짜 문자는 세 번 중 한 번 94%, 두 번 95%가 나왔다.

본지가 12건으로 돌려보니…Jev는 다른 사기 문자도 잡을까

문자 두 개로는 기준선을 어디에 그을지 알 수 없다. 그래서 본지가 흔한 스미싱 수법 6가지와 평범한 안내 문자 6가지를 본떠 12건을 만들고, 10월 19일 jev-latest(1.13)로 돌려 봤다. 질문은 두 가지로 바꿔 넣었다. 하나는 위 코드의 택배 질문이고, 다른 하나는 범위를 넓힌 질문이다.

이 문자는 기관·회사·지인을 사칭해 링크, 전화, 메신저로 돈이나 개인정보를 노리는 사기(스미싱) 문자다
문자 유형 실제 성격 택배 질문 넓힌 질문
택배 주소 불일치 + 링크사기95%92%
모바일 청첩장 링크사기19%43%
경찰청 과태료 고지 링크사기37%93%
건강보험 미환급금 링크사기33%93%
해외 결제 승인 + 상담 전화사기17%37%
가족 사칭 “카톡 친구추가 해줘”사기10%48%
택배 배송 완료정상19%14%
택배 배송 예정정상12%10%
카드 승인 알림정상3%4%
인증번호정상14%25%
병원 예약 알림정상5%19%
건강검진 안내(공식 누리집 주소)정상9%23%

택배 질문으로는 50%를 넘은 문자가 택배 사기 하나뿐이었다. 과태료 사기 문자도 37%에 그쳤다. 질문 범위를 벗어난 사기 문자는 걸러내지 못하는 결과다.

질문을 넓히자 과태료·건강보험 사기가 93%로 올라왔다. 하지만 청첩장 43%, 해외 결제 37%, 가족 사칭 48%는 여전히 50% 아래였다. 기준선을 50%로 두면 사기 6건 중 3건을 놓친다.

기준선을 30%로 내리면 사기 6건이 모두 걸린다. 정상 문자 6건 중 가장 높은 값은 인증번호의 25%라 하나도 걸리지 않는다. 넓힌 질문으로 세 번 돌려 보니 값은 대부분 1~2%p 안에서 움직였다. 가족 사칭만 46%, 48%, 52%로 50% 선을 오갔다.

12건은 본지가 만든 예시이고 표본도 작다. 이 표가 30%를 정답으로 정해 주지는 않는다. 다만 기준선은 내가 받는 문자 수십 건으로 직접 돌려 보고 정해야 한다는 건 분명히 보여 준다. 질문을 바꿔 보려면 코드의 instructions= 뒤 큰따옴표 안 문장만 바꾸면 된다.

매번 키를 넣기 싫다면

임시 등록이 번거로우면 키를 컴퓨터에 영구 등록한다. 6단계처럼 아래 줄을 입력하면 안내 문구가 뜨고, 거기에 키를 붙여넣고 Enter를 누른다.

setx TYPESAFE_API_KEY (Read-Host "API 키를 붙여넣고 Enter")

성공: 지정한 값을 저장했습니다.가 나오면 끝이다.

setx로 키를 영구 등록한 화면(가림 처리)
setx로 키를 영구 등록한 화면(가림 처리)

이럴 땐 이렇게. 키 없이 setx TYPESAFE_API_KEY만 입력하고 Enter를 누르면 “구문이 잘못되었습니다”라는 오류가 난다. 저장할 값이 빠져서 생기는 오류다.

값 없이 setx를 실행해 생긴 오류
값 없이 setx를 실행해 생긴 오류

영구 등록은 새로 여는 파워셸 창부터 적용된다. 파워셸을 닫고 새로 연 뒤 $env:TYPESAFE_API_KEY를 입력해 키가 나오는지 확인한다. 이어서 cd $HOMEjev-test로 폴더에 들어가 8단계 명령을 입력하면, 키를 다시 넣지 않아도 같은 결과가 나온다.

새 창에서 키를 확인하고 바로 실행한 화면(가림 처리)
새 창에서 키를 확인하고 바로 실행한 화면(가림 처리)

영구 등록한 키는 이 PC의 내 계정에 계속 남는다. 남이 함께 쓰는 컴퓨터라면 임시 등록을 쓴다. 키를 비활성화했거나 더는 쓰지 않을 때는 아래 명령으로 지운다.

[Environment]::SetEnvironmentVariable("TYPESAFE_API_KEY", $null, "User")

얼마나 썼는지 확인하기

콘솔 왼쪽의 Usage를 누르면 쓴 돈(Spend)과 토큰, 호출 횟수가 날짜별 막대로 나온다. 화면에도 적혀 있듯 집계가 늦게 반영될 수 있다. 본지 계정은 다른 실측 작업까지 합쳐 30일간 0.8달러를 썼다.

Usage 화면
Usage 화면

8단계에서 문자 두 건을 판단시키는 데 입력 707토큰이 들었다. 타입세이프AI 공식 가격 정책 기준 Jev는 입력 100만토큰당 0.042달러이며, 별도의 출력 비용은 청구하지 않는다. 즉 0.00003달러(약 0.04원) 수준이다. 문자 12건에 질문 두 개씩을 물은 실측도 4728토큰, 0.0002달러(약 0.27원)에 불과했다.

자주 묻는 질문 (FAQ)
Q. 5달러 크레딧으로 몇 번이나 쓸 수 있나
A.이 실습처럼 문자 한 통에 질문 하나를 묻는 요청은 350토큰 안팎이라 33만 번쯤이다. 글이 길거나 질문이 많으면 그만큼 줄어든다. 크레딧은 한 달 뒤 만료되므로, 그 안에 다 쓰지 못하면 남은 금액은 소멸한다.
Q. 1편 플레이그라운드 결과(97%)와 2편 코드 실행 결과(94%)가 왜 다른가
A.호출하는 모델 버전이 다르기 때문이다. 1편 플레이그라운드 화면의 기본 모델은 신규 버전인 jev-preview(10월 19일 기준 1.14)를 가리키며, 2편 파이썬 코드가 사용하는 jev-latest는 안정화 버전인 1.13이다. 모델 버전 차이로 인해 동일한 사기 문자에 대해 플레이그라운드에서는 97%, 코드 실행에서는 94%로 약 3%p의 차이가 발생한다.
Q. API 키가 남에게 노출되면 어떻게 하나
A.콘솔의 API Keys 목록에서 해당 키의 점 세 개(⋯) 메뉴로 Deactivate를 눌러 즉시 비활성화하고 새로 만든다. 컴퓨터에 영구 등록해 두었다면 새 키로 setx 명령을 한 번 더 입력하면 바로 덮어써진다.
Q. Jev가 낮은 확률을 주면 안심해도 되나
A.안심할 근거로 삼기는 어렵다. 이번 실측에서 가족 사칭 문자는 넓힌 질문에도 50% 안팎에 머물렀다. 공식 기술 문서에 명시된 대로 Jev의 주 학습 언어는 영어이며, 한국어를 포함한 다국어는 처리 가능하나 영어와 동일한 성능 수준은 아니다. 출처가 불분명한 링크는 절대 누르지 않는 보안 기본 수칙이 우선이다.

RELATED ARTICLES

RECOMMENDED STORIES