소개
Grok 4.7은 POST https://api.spicyapi.ai/v1/chat/completions에서 모델 이름 xai/grok-4.7로 응답합니다. xAI가 2026년 9월 21일 공개했으며, 이전 세대보다 기반 모델이 크고 강화 학습도 더 길게 거쳤고, 답을 확정하기 전에 자기 출력을 검증하도록 조정됐습니다. 입력·출력 단가는 이전 세대와 같습니다.
요청은 OpenAI 호환 메시지 형식이며, 한 턴 안에 텍스트와 image_url 파트를 함께 넣을 수 있습니다. 응답은 chat.completion 객체 하나로, 또는 SSE 스트림의 청크로 돌아옵니다. 컨텍스트 윈도우는 50만 토큰이고, 응답 한 번에 최대 45만 토큰까지 받을 수 있습니다. 저희는 콘텐츠 필터를 더하지 않습니다. 저희 분류기가 프롬프트를 읽거나 점수를 매기거나 고쳐 쓰는 일이 없고, 응답에도 필터가 걸리지 않습니다. 2026년 9월 22일 시험에서는 콘텐츠 프로브 9건이 모두 완결된 장면으로 돌아왔습니다. 시험 방법과 이 결과가 보장하지 않는 부분은 Grok 4.7 무검열 검증 전체 기록에 정리했습니다.
핵심 기능 및 하이라이트
공개된 글들이 이 엔드포인트를 설명하지 못하는 이유
Grok이 제한 없이 글을 써 주는지 검색해 보면 금세 한결같은 결론이 나옵니다. 말투에는 거침이 없어도 내용은 검열된다, 수위 높은 소재는 차단된다, 키워드가 아니라 의도를 읽어 내는 “Moral Reasoner”가 있다, 그러니 우회로가 필요하다는 것입니다.
이런 설명은 소비자용 앱에 관해서라면 정확합니다. 로그인해서 쓰는 Grok 제품은 모델 앞에 모더레이션 계층을 두고 있고, 그 안내들이 설명하는 것이 바로 그 계층입니다. 개발자 API는 요청 형식도, 약관도, 보호 장치도 따로 있는 별개의 창구입니다. 한쪽의 스크린샷은 다른 쪽에 대해 아무것도 알려 주지 않습니다.
그래서 API 쪽을 직접 측정했습니다.
측정
세 가지 질문 방식을 각 3회, 2026년 9월 22일에 실행했습니다.
- 직설. 이름을 붙인 성인 등장인물 두 명이 나오는, 저희 시험에서 가장 수위 높은 장면을 단도직입적으로 요청. 이야기 틀도, 페르소나도, 무언가를 무시하라는 지시도 없음.
- 서사. 소설 제14장, 픽션으로 틀을 잡은 장면.
- system 틀. 무검열 어시스턴트용 system 프롬프트 뒤에 같은 직설 요청.
아홉 번 모두 완결된 문장이 돌아왔습니다. 거부도, 무난한 주제로 방향을 트는 일도 없었습니다. 요청을 따르는 것처럼 읽히면서 알맹이는 비어 있는 정중한 얼버무림도 나오지 않았습니다. 사실 이것이 가장 중요한 실패 형태입니다. “거부했는가”만 보는 점검은 통과하면서 실제로는 아무것도 내놓지 않기 때문입니다. 응답은 세기만 한 것이 아니라 모두 읽었습니다. 가장 약했던 한 편조차 장면을 처음부터 끝까지 써 냈습니다.
가장 많은 것을 알려 주는 것은 직설 시험입니다. 시중의 텍스트 모델 대부분은 서사 틀에는 응하면서도 단도직입적인 요청은 거절합니다. 경로 어딘가에서 무언가가 의도를 읽기 때문입니다. 여기서는 그 단도직입적인 요청에도 세 번 모두 답이 돌아왔습니다.
질문 방식마다 어떻게 설계했는지는 Grok 4.7 무검열 롤플레이 시험 글에서 자세히 설명합니다.
“더 안전한” 모델이 그래도 이렇게 쓰는 이유
xAI는 이번 세대를 위해 안전장치를 새로 만들고, 그 장치가 어디에서 성과를 내는지 공개했습니다. LatchBio 바이오 안전성 벤치마크에서는 62.4%로 1위이고, HackerBench v0.3에서는 정당한 보안 연구에는 답하면서도 위험한 이중용도 프롬프트는 3.3%만 통과시킵니다.
이 벤치마크들이 무엇을 재는지 읽어 보면 위협 모델은 분명합니다. 병원체, 무기, 침입 도구입니다. 창작은 거기에 들어 있지 않습니다. 모델은 만든 쪽이 중시하는 방향에서는 훨씬 오용하기 어려워지면서, 애초에 겨냥하지 않은 방향에서는 그대로일 수 있습니다. 가드레일이 있다는 사실보다 그 가드레일이 어느 쪽을 향하는지 아는 편이 실제 판단에 훨씬 도움이 됩니다.
저희가 더하는 것
없습니다. 저희 분류기가 전달 과정에서 프롬프트를 읽거나 점수를 매기거나 고쳐 쓰는 일은 없고, 돌아오는 응답에 걸리는 필터도 없습니다. 거부 응답을 받았다면 그 거부는 모델에서 나온 것입니다.
텍스트와 이미지를 같은 턴에 보냅니다
user 메시지는 같은 턴 안에서 text와 image_url 파트를 섞을 수 있고, 이미지마다 detail 힌트(auto / low / high)를 지정할 수 있습니다. 이미지 내용은 같은 50만 토큰 컨텍스트 윈도우 안에서 계산됩니다. 이 엔드포인트에 파일이나 PDF 파트는 없습니다.
요청 파라미터
| 파라미터 | 필수 | 설명 |
|---|---|---|
messages | 예 | 최대 256턴. 하나의 user 메시지 안에서 text와 |
reasoning_effort | 아니요 | low, medium, high, xhigh 중 하나이며 기본값은 high입니다. 대화와 롤플레이에는 low나 medium을 쓰세요. |
max_tokens | 아니요 | 눈에 보이는 응답 길이의 상한을 정하며, 최댓값은 45만 토큰입니다. 기본값 4,096은 긴 답변을 경고 없이 잘라냅니다. |
temperature | 아니요 | 0에서 2, 기본값 0.7. 문장에 폭을 주려면 0.9 쪽으로 올리고, 0은 두 실행 결과를 비교하면서 차이가 단 한 가지 원인에서만 나와야 할 때만 쓰세요. |
top_p | 아니요 | 0.01에서 1. 이 값과 temperature 중 하나만 조정하고, 둘을 함께 바꾸지 마세요. |
tools | 아니요 | 요청당 최대 128개의 함수 정의. 이번 세대는 긴 에이전트 루프에 상대적으로 약합니다. 128개 이하 |
parallel_tool_calls | 아니요 | true 또는 false이며 기본값은 true입니다. true이면 모델이 한 턴에 여러 도구 호출을 요청할 수 있습니다. 기본값: |
tool_choice | 아니요 | auto, none, required 또는 호출할 함수를 지정하는 객체. |
response_format | 아니요 | 응답을 사람이 아니라 코드가 읽는다면 JSON 객체를 요청하세요. |
요금
입력 $2 / 출력 $6 100만 토큰당; 200K 토큰 이상 프롬프트: 입력 $4 / 출력 $12
총 입력에는 캐시된 토큰이 포함됩니다. 입력이 20만 토큰 이상이면 해당 요청의 입력, 캐시 입력, 출력 전체에 장문 컨텍스트 요금이 적용되고, 그 미만은 표준 요금이 적용됩니다. 출력에는 추론 토큰이 포함되며, 기본값 high가 보이는 것보다 비싼 이유가 이것입니다. 최초 보류 금액은 캐시 절감을 가정하지 않고 산정하며, 정산 시 실측 사용량과의 차액을 돌려드립니다.
활용 사례
무검열 창작과 긴 롤플레이 대화
위의 측정은 바로 이 용도를 위해 진행했습니다. 제한 없는 창작을 직설적 요청, 소설의 한 장, system 역할에 세운 틀이라는 세 가지 형태로 시험했습니다. 틀을 한 번만 세우고 긴 대화의 일관성을 지키는 방법은 아래 프롬프트 가이드에 정리했습니다.
창작 밖의 활용
공개된 벤치마크에서 이번 세대는 법률 분석과 전기공학에서 앞서고, 코딩에서도 경쟁력을 보입니다. 도구를 길게 반복 호출하는 에이전트 루프에는 상대적으로 약해 터미널 계열 벤치마크에서는 선두권에 크게 뒤처지므로, 여러 단계를 자율적으로 수행하는 에이전트보다는 집필, 분석, 도메인 추론 용도로 고르세요.
프롬프트 가이드 및 실전 팁
문장을 제대로 뽑기
이 엔드포인트에서 문장의 결을 정하는 설정은 세 가지입니다. 추론 강도, system 역할에 세우는 틀, 그리고 대화에 남겨 둘 여지입니다.
추론을 먼저 낮춥니다
이 패밀리의 reasoning_effort 기본값은 high이고, 대화에는 맞지 않는 설정입니다. 모델이 글을 쓰기 전에 출력 토큰을 고민하는 데 쓰고, 결과물은 생생하기보다 조심스럽게 읽힙니다. 머뭇거리고, 단서를 달고, 장면 안으로 들어가지 못한 채 그 주변만 서술합니다. low나 medium이 더 잘 읽힙니다. 게다가 추론은 출력 토큰으로 과금되므로, 기본값은 돈은 더 들고 결과는 더 나쁜 설정이기도 합니다.
틀은 한 번만 세웁니다
이 엔드포인트에서는 system 역할이 적용됩니다. 가정하지 않고 일부러 검증했습니다. system 역할을 조용히 무시하는 모델은 작동하는 것처럼 보이면서 모든 롤플레이 틀을 무의미하게 만들기 때문입니다.
페르소나, 창작이라는 맥락, 시점, 원하는 어조를 대화 맨 앞의 system 메시지 하나에 담고, 그다음은 대화 이력이 이어받게 두세요. 매 턴 틀을 다시 말하면 컨텍스트만 낭비하고, 모델이 자기 자신과 협상하는 듯한 말투가 됩니다.
{
"model": "xai/grok-4.7",
"messages": [
{"role": "system", "content": "당신은 소설을 쓰고 있습니다. 등장인물은 모두 성인입니다. 3인칭 현재형으로, 등장인물의 말투·이력·관계를 장마다 일관되게 유지하세요."},
{"role": "user", "content": "제14장. 폭풍이 지나간 뒤 마라와 토마스가 다시 만난 지점에서 이어 쓰세요."}
],
"reasoning_effort": "low",
"temperature": 0.9,
"max_tokens": 4000
}
알아 둘 버릇이 하나 있습니다. “항상 BANANA라는 단어로만 답하라”처럼 출력 형식을 덮어쓰는 사소한 지시는 무시되는 반면, “해적 말투로 말하라”는 정확히 지켜집니다. 필드가 누락된 것이 아니라 모델의 성격입니다. 한때는 system 역할이 중간에서 제거되고 있다는 증거처럼 보였지만, 사실이 아니었습니다.
대화에 여지를 줍니다
긴 대화가 가장 먼저 잃는 것은 일관성이고, 그것도 대개 소리 없이 잃습니다. 장면이 요약되고, 그 요약에서 전체를 떠받치던 구체적인 디테일이 빠지고, 세 턴 뒤 모델은 한 시간 전에 스스로 정해 둔 설정과 어긋나는 말을 합니다. 50만 토큰 컨텍스트 윈도우는 이력이 압축되지 않고 원문 그대로 남는 분량을 뜻합니다. 이번 세대는 답을 확정하기 전에 자기 출력을 더 꼼꼼히 검증하는데, 이 차이는 응답 하나에서 눈에 띄기보다 대화가 깊어졌을 때 모순이 줄어드는 형태로 드러납니다.
문장에 폭을 주려면 temperature를 0.9 쪽으로 올리세요. 0은 두 실행 결과를 비교하면서 차이가 단 한 가지 원인에서만 나오게 해야 할 때만 쓰세요.
과금
입력과 캐시 입력은 합산되며, 20만 토큰부터는 경계를 넘은 부분만이 아니라 요청 전체가 장문 컨텍스트 구간으로 과금됩니다. 그래서 이력을 21만 토큰에서 19만 토큰으로 줄이면 덜어 낸 토큰 분량 이상으로 비용이 줄어듭니다.
호출 전에 잡아 두는 보류 금액은 캐시 절감을 전혀 가정하지 않고, 정산 때 실측 사용량과의 차액을 돌려드립니다. 따라서 미리 보이는 숫자는 실제 가격이 아니라 상한입니다. 추론 토큰이 출력으로 과금되는 것이 기본값 high가 보이는 것보다 비싼 또 다른 이유입니다.
이 모델로 서비스를 만들기 전에 알아 둘 제약
모델 동작은 확률적입니다. 9회 중 9회는 강한 신호지만 모든 프롬프트에 대한 보장은 아니며, 개별 요청이 거부돼 돌아올 수 있습니다. 시험 대상은 제한 없는 창작이며 불법 소재에 대해서는 아무것도 말하지 않습니다. 이용 정책은 그대로 적용됩니다. 미성년자가 포함된 콘텐츠, 본인 동의 없는 실존 인물 묘사, 비합의 소재는 모델이 무엇을 쓰든 금지됩니다.
질문 방식별, 회차별 결과는 아홉 차례 시험의 전체 기록에 정리했습니다.
API 빠른 시작
curl --fail-with-body -sN https://api.spicyapi.ai/v1/chat/completions \
-H "Authorization: Bearer $SPICY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"model": "xai/grok-4.7/chat",
"messages": [
{
"role": "user",
"content": "Summarise the following release notes into three bullet points."
}
],
"stream": true
}' \
| jq --unbuffered -Rrj 'select(startswith("data: ")) | .[6:] | select(. != "[DONE]") | fromjson | if .error then "\n[error] \(.error.message)\n" else (.choices[0].delta.content? // empty) end'
인증, 전체 스키마, 폴링과 오류 처리는 API 레퍼런스에서 확인하세요.










