GPT-5.1 -> GPT 5.2: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฒด๊ฐํ•˜๋Š” AI ์•„ํ‚คํ…์ฒ˜์˜ ๋ณ€ํ™”

์ตœ๊ทผ OpenAI์˜ GPT-5.1, ๊ทธ๋ฆฌ๊ณ  ์—ฐ์ด์–ด ๊ณต๊ฐœ๋œ GPT-5.2 ์—…๋ฐ์ดํŠธ ์†Œ์‹์ด ๊ฐœ๋ฐœ ์ปค๋ฎค๋‹ˆํ‹ฐ ์‚ฌ์ด์—์„œ ํ™”์ œ๋‹ค. ๊ฒ‰์œผ๋กœ ๋ณด๋ฉด ๋‹จ์ˆœํ•œ ๋ฒ„์ „์—… ๊ฐ™์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” AI๋ฅผ ์šด์˜ ์‹œ์Šคํ…œ์— ์–ด๋–ป๊ฒŒ “์„ค๊ณ„ํ•ด์•ผ ํ•˜๋Š”์ง€”์— ๋Œ€ํ•œ ๋ฐฉํ–ฅ์„ฑ์ด ๋ช…ํ™•ํ•ด์ง„ ์—…๋ฐ์ดํŠธ๋ผ๊ณ  ์ƒ๊ฐ๋œ๋‹ค.
“๋ชจ๋ธ์ด ์ข‹์•„์กŒ๊ตฌ๋‚˜” ์ˆ˜์ค€์„ ๋„˜์–ด ์ด์ œ AI๋ฅผ ์‹œ์Šคํ…œ์— ์–ด๋–ป๊ฒŒ ๋ถ™์—ฌ์•ผ ํ•˜๋Š”์ง€๊ฐ€ ๋ช…ํ™•ํ•ด์ง€๊ณ  ์žˆ๋‹ค.
์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” GPT-5.1์˜ ํ•ต์‹ฌ ๋ณ€ํ™”์™€ GPT-5.2์—์„œ ์ถ”๊ฐ€๋กœ ๋ณด์™„๋œ ์ ์„ ์ •๋ฆฌํ•ด ๋ณด๊ณ ์ž ํ•œ๋‹ค.

GPT-5.1 ํ•ต์‹ฌ ์š”์•ฝ: ์—ญํ• ์ด ๋ถ„๋ฆฌ๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

GPT-5.1์€ Instant / Thinking / Context Caching์ด๋ผ๋Š” ์„ธ ์ถ•์„ ์ค‘์‹ฌ์œผ๋กœ ์•ˆ์ •์„ฑ, ์ถ”๋ก , ํšจ์œจ์„ฑ์„ ๋ถ„๋ฆฌํ•ด์„œ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“  ์—…๋ฐ์ดํŠธ๋‹ค.

GPT-5.1 ํ•ต์‹ฌ ๋ณ€ํ™”

GPT-5.1 ์—…๋ฐ์ดํŠธ์˜ ๋ณธ์งˆ: “๋” ๋˜‘๋˜‘ํ•ด์กŒ๋‹ค“๊ฐ€ ์•„๋‹ˆ๋‹ค

GPT-5.1 ์—…๋ฐ์ดํŠธ๋Š” “๋” ๋˜‘๋˜‘ํ•ด์ง„๊ฒŒ ์•„๋‹ˆ๋ผ ์—ญํ• ์„ ๋‚˜๋ˆ  ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค”๊ฐ€ ํ•ต์‹ฌ ํฌ์ธํŠธ๋‹ค.
GPT-5.1์—์„œ๋Š” ๋ชจ๋ธ์ด ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€ ์ถ•์œผ๋กœ ๋‚˜๋‰˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

  • ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์ธ ์‘๋‹ต์„ ๋‹ด๋‹นํ•˜๋Š” Instant
  • ๋ณต์žกํ•œ ์ถ”๋ก ๊ณผ ๋ถ„์„์„ ๋‹ด๋‹นํ•˜๋Š” Thinking
  • ๋Œ€๊ทœ๋ชจ ์ž…๋ ฅ์„ ํšจ์œจ์ ์œผ๋กœ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ Context Caching

GPT-5.1 Instant: “๋ง์„ ์ž˜ ๋“ฃ๋Š” ๋ชจ๋ธ”์˜ ๊ฐ€์น˜

JSON ํฌ๋งท์„ ์ง€ํ‚ค์ง€ ์•Š์•„์„œ ํŒŒ์‹ฑ์— ์‹คํŒจํ•œ๋‹ค๊ฑฐ๋‚˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ด์ง ๋น„ํ‹€์–ด ๋ณด๋‚ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ˆˆ์— ๋„๊ฒŒ ์ค„์—ˆ๋‹ค.
์ด ๋ถ€๋ถ„์ด ์ค‘์š”ํ•œ ์ด์œ ๋Š” ์‹ค์ œ ์šด์˜ํ™˜๊ฒฝ์—์„œ AI ์‹œ์Šคํ…œ์„ ๋ถˆ์•ˆ์ •ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์›์ธ์˜ ๋Œ€๋ถ€๋ถ„์€ ๋ชจ๋ธ์˜ “๋˜‘๋˜‘ํ•จ ๋ถ€์กฑ”์ด ์•„๋‹ˆ๋ผ “์ถœ๋ ฅ์˜ ์ผ๊ด€์„ฑ ๋ถ€์กฑ”์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
Instant ๋ชจ๋ธ์˜ ๊ฐœ์„ ์€ AI๋ฅผ ์–ธ์ œ ์‚ฌ๊ณ  ์น ์ง€ ๋ชจ๋ฅด๋Š” ์™ธ๋ถ€ ์‹œ์Šคํ…œ์ด ์•„๋‹ˆ๋ผ API ์ŠคํŽ™์„ ์ง€ํ‚ค๋Š” ์ปดํฌ๋„ŒํŠธ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

GPT-5.1 Thinking: ์ •ํ™•๋„๋ฅผ ์–ด๋””์— ์“ธ ๊ฒƒ์ธ๊ฐ€

Thinking ๋ชจ๋ธ์€ GPT-5.1์—์„œ ๊ฐ€์žฅ AI์Šค๋Ÿฝ๊ฒŒ ๋˜‘๋˜‘ํ•œ ์—ญํ• ์„ ๋งก๊ณ  ์žˆ๋‹ค. ๋ณต์žกํ•œ ๋…ผ๋ฆฌ ์ „๊ฐœ, ๋‹ค๋‹จ๊ณ„ ์ถ”๋ก , ๋ถ„์„ ์ค‘์‹ฌ ์ž‘์—…์—์„œ๋Š” ๋งค์šฐ ๊ฐ•๋ ฅํ•˜๋‹ค. ๋‹ค๋งŒ ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์–ด๋””์— ์“ฐ๋А๋ƒ์ด๋‹ค.
Thinking ๋ชจ๋ธ์„ ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ๋ฐ”๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋™๊ธฐ API์— ๋„ฃ๋Š” ์ˆœ๊ฐ„ latency์™€ timeout ๋ฌธ์ œ๋ฅผ ๋งˆ์ฃผํ•˜๊ฒŒ ๋œ๋‹ค. ๋กœ๊ทธ ๋ถ„์„, ์žฅ์•  ์›์ธ ์ถ”๋ก , ๋น„์ฆˆ๋‹ˆ์Šค ๋ฃฐ ๊ฒ€์ฆ์ฒ˜๋Ÿผ “์กฐ๊ธˆ ๋Šฆ์–ด๋„ ๋˜๋Š” ๋Œ€์‹  ์ •ํ™•ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…”์„ ๋น„๋™๊ธฐ ์›Œํฌํ”Œ๋กœ์šฐ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ๋งก๊ธฐ๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ํ˜„์‹ค์ ์ด๋‹ค.
Kafka๋‚˜ Redis Queue ๋’ค์—์„œ Thinking ๋ชจ๋ธ์ด ์ผํ•˜๋„๋ก ๋‘๋Š” ๊ตฌ์กฐ๊ฐ€ ๊ฐ€์žฅ ์•ˆ์ •์ ์ธ ์„ ํƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

Context Caching: ์ฒด๊ฐ์ด ๊ฐ€์žฅ ํฐ ๋ณ€ํ™”

GPT-5.1์—์„œ ์‹ค๋ฌด์ ์œผ๋กœ ๊ฐ€์žฅ ํฐ ๋ณ€ํ™”๋Š” Context Caching์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€์œผ๋กœ ์˜ฌ๋ผ์™”๋‹ค๋Š” ๊ฑฐ๋‹ค.
์ด์ „๊นŒ์ง€ ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ ๋ถ„์„์ด๋‚˜ ๋ ˆ๊ฑฐ์‹œ ํ”„๋กœ์ ํŠธ๋ฅผ AI์—๊ฒŒ ๋งก๊ธธ ๋•Œ์˜ ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋Š” ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๋งค๋ฒˆ ๋‹ค์‹œ ์ฝ๊ณ , ๊ทธ๋งŒํผ ํ† ํฐ ๋น„์šฉ์„ ๊ณ„์† ์ง€๋ถˆํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.
Context Caching์€ ์ด ๊ตฌ์กฐ๋ฅผ ๊ทผ๋ณธ์ ์œผ๋กœ ๋ฐ”๊พผ๋‹ค.
๊ธด ํ”„๋กฌํ”„ํŠธ์˜ ์•ž๋ถ€๋ถ„, ์ฆ‰ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋‚˜ ๊ณตํ†ต ๋งฅ๋ฝ์„ ํ•œ๋ฒˆ๋งŒ ๊ณ„์‚ฐํ•ด ๋‘๊ณ  ์ดํ›„ ์š”์ฒญ์—์„œ๋Š” ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์žฌ์‚ฌ์šฉํ•œ๋‹ค.
๊ทธ ๊ฒฐ๊ณผ

  • ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ์„ค๋ช…ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ง€๊ณ 
  • ์ปจํ…์ŠคํŠธ๊ฐ€ ์ค‘๊ฐ„์— ๋‚ ์•„๊ฐ€๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ค„๊ณ 
  • ๋Œ€๊ทœ๋ชจ ๋ฆฌํŒฉํ† ๋ง์ด๋‚˜ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์—ฐ์† ์ž‘์—…์œผ๋กœ ์ด์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
์˜์—ญ์ด์ „ ๋ชจ๋ธ์˜ ์–ด๋ ค์›€GPT-5.1 ์ ์šฉ ํ›„ ์ด์ 
์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ๋ช…๋ น์–ด ๋ถˆ์ดํ–‰์œผ๋กœ ์ธํ•œ ์žฆ์€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ํ•„์š”Instant ๋ชจ๋ธ์ด ์ •ํ™•ํ•œ ํฌ๋งท์„ ์ค€์ˆ˜ํ•˜์—ฌ AI ์—์ด์ „ํŠธ์˜ ์˜ค๋™์ž‘๋ฅ  ๊ฐ์†Œ (์•ˆ์ •์„ฑ ํ–ฅ์ƒ)
API ์„ฑ๋Šฅ๋ณต์žกํ•œ ์ถ”๋ก  API ์‘๋‹ต ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง (๊ณ ์ง€์—ฐ)Thinking ๋ชจ๋ธ์˜ ์†๋„ ํ–ฅ์ƒ์œผ๋กœ ํ•ต์‹ฌ ์ฒ˜๋ฆฌ์‹œ API ์ง€์—ฐ ์‹œ๊ฐ„ ๊ฐ์†Œ
๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฐ ๋ฆฌํŒฉํ„ฐ๋ง ์‹œ ์ปจํ…์ŠคํŠธ ์œ ์‹ค๋กœ ์ธํ•ด ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ž์ฃผ ์žฌ์ž‘์„ฑ ํ•ด์•ผ ํ•จCodex-Max ๋ชจ๋ธ์˜ Compaction ๊ธฐ์ˆ ๋กœ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ ๋ถ„์„ ๋ฐ ์ˆ˜์ • ์ž‘์—…์‹œ ์ปจํ…์ŠคํŠธ ์œ ์ง€ ํšจ์œจ ์ฆ๋Œ€

GPT-5.2: ๋ฐฉํ–ฅ์€ ์œ ์ง€ํ•˜๊ณ  ์™„์„ฑ๋„๋ฅผ ๋†’์ด๋‹ค

GPT-5.2๋Š” GPT-5.1์™€ ๊ฐ™์€ ๋ฐฉํ–ฅ์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์‹ค๋ฌด์ ์œผ๋กœ ๋” ๋‹ค๋“ฌ์€ ๋ฒ„์ „์— ๊ฐ€๊น๋‹ค.
๋ชจ๋ธ ์‚ฌ์šฉ ๋ฐฉ์‹์€ Instant / Thinking / Pro๋กœ ๋” ๋ช…ํ™•ํ•ด์กŒ๊ณ , ๊ธด ๋ฌธ๋งฅ์„ ์œ ์ง€ํ•œ ์ฑ„ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์•ˆ์ •์„ฑ๋„ ๊ฐœ์„ ๋˜์—ˆ๋‹ค.
ํŠนํžˆ ์ธ์ƒ์ ์ธ ๋ถ€๋ถ„์€ ๋„๊ตฌ ํ˜ธ์ถœ -> ๊ฒฐ๊ณผ ํ•ด์„ -> ๋‹ค์Œ ์•ก์…˜๊นŒ์ง€ ์ด์–ด์ง€๋Š” ์—์ด์ „ํŠธํ˜• ํ๋ฆ„์˜ ์‹ ๋ขฐ๋„๊ฐ€ ์˜ฌ๋ผ๊ฐ”๋‹ค๋Š” ์ ์ด๋‹ค.
์ด์ œ AI๋Š” ๋‹จ์ˆœํžˆ ๋‹ต๋ณ€์„ ์ž˜ํ•˜๋Š” ๋„๊ตฌ๋ฅผ ๋„˜์–ด ์—…๋ฌด ํ๋ฆ„์˜ ์ผ๋ถ€๋ฅผ ๋งก๊ธธ ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€์— ์ ์  ๊ฐ€๊นŒ์›Œ์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„๋ฅผ ํ•ด์•ผ ํ• ๊นŒ?

GPT-5.1๊ณผ GPT-5.2๋ฅผ ๊ฑฐ์น˜๋ฉด์„œ ์–ป์€ ๊ฒฐ๋ก ์€ ์˜์™ธ๋กœ ๋‹จ์ˆœํ•˜๋‹ค.

  • ๋น ๋ฅธ ์‘๋‹ต๊ณผ ์•ˆ์ •์„ฑ์€ Instant
  • ์ •ํ™•์„ฑ๊ณผ ํŒ๋‹จ์€ Thinking
  • ๋ฐ˜๋ณต๋˜๋Š” ๋Œ€๊ทœ๋ชจ ์ž…๋ ฅ์€ Context Caching

์ด ์„ธ๊ฐ€์ง€๋ฅผ ๊ฐ™์€ ์ž๋ฆฌ์— ๋ชฐ์•„๋„ฃ์ง€ ๋ง๊ณ  ๊ฐ๊ฐ์˜ ์„ฑ๊ฒฉ์— ๋งž๋Š” ์œ„์น˜์— ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด๋‹ค.
AI ๋•Œ๋ฌธ์— ์‹œ์Šคํ…œ์ด ๋ณต์žกํ•ด์ง€๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ณด๋ฉด ๋Œ€๋ถ€๋ถ„ ๋ชจ๋“  ๊ฑธ ํ•œ ๋ชจ๋ธ๋กœ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ์„ค๊ณ„์—์„œ ๋ฌธ์ œ๊ฐ€ ์‹œ์ž‘๋œ๋‹ค.
์ด๊ฑด ์˜ˆ์ „์— ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๋ฅผ ์ฒ˜์Œ ๋„์ž…ํ•  ๋•Œ์™€ ๊ต‰์žฅํžˆ ๋น„์Šทํ•œ ๋А๋‚Œ์ด๋‹ค. ๊ธฐ์ˆ ์  ๋ฌธ์ œ๋ผ๊ธฐ ๋ณด๋‹ค ๊ฒฝ๊ณ„๋ฅผ ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆ„๋А๋ƒ์˜ ๋ฌธ์ œ์— ๊ฐ€๊นŒ์šด ๊ฒƒ์ด๋‹ค.

์ƒ˜ํ”Œ ์ฝ”๋“œ

๋‹ค์Œ์€ Instant / Thinking / Context Caching์— ๋Œ€ํ•œ Java ์ƒ˜ํ”Œ ์ฝ”๋“œ๋‹ค.

ํ™˜๊ฒฝ ๋ณ€์ˆ˜

export OPENAI_API_KEY="..."
Bash

์˜์กด์„ฑ (Maven – Jackson)

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.17.2</version>
</dependency>
XML

Instant: ๋‚ฎ์€ ์ง€์—ฐ + JSON ์Šคํ‚ค๋งˆ

  • ๋ชจ๋ธ: gpt-5.2-chat-latest (Instant)
  • reasoning_effort: “none”๋กœ ์ง€์—ฐ ์ตœ์†Œํ™”
  • response_format: json_schema๋กœ ์ถœ๋ ฅ ํŒŒ์‹ฑ ์•ˆ์ •์„ฑ ํ™•๋ณด
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.net.URI;
import java.net.http.*;
import java.nio.charset.StandardCharsets;
import java.time.Duration;

public class InstantJsonAssistant {
  private static final String API_KEY = System.getenv("OPENAI_API_KEY");
  private static final String URL = "https://api.openai.com/v1/chat/completions";

  private final HttpClient http = HttpClient.newBuilder()
      .connectTimeout(Duration.ofSeconds(5))
      .build();
  private final ObjectMapper om = new ObjectMapper();

  public JsonNode classifyUserIntent(String userText) throws Exception {
    String payload = """
      {
        "model": "gpt-5.2-chat-latest",
        "reasoning_effort": "none",
        "messages": [
          {"role":"system","content":"Return ONLY JSON that matches the schema."},
          {"role":"user","content": %s}
        ],
        "response_format": {
          "type": "json_schema",
          "json_schema": {
            "name": "intent",
            "strict": true,
            "schema": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "intent": {"type":"string", "enum":["FAQ","INCIDENT","CODE_REVIEW","OTHER"]},
                "confidence": {"type":"number"},
                "notes": {"type":"string"}
              },
              "required": ["intent","confidence"]
            }
          }
        },
        "max_completion_tokens": 200
      }
      """.formatted(om.writeValueAsString(userText));

    HttpRequest req = HttpRequest.newBuilder()
        .uri(URI.create(URL))
        .timeout(Duration.ofSeconds(15))
        .header("Authorization", "Bearer " + API_KEY)
        .header("Content-Type", "application/json")
        .POST(HttpRequest.BodyPublishers.ofString(payload, StandardCharsets.UTF_8))
        .build();

    HttpResponse<String> resp = http.send(req, HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8));
    if (resp.statusCode() / 100 != 2) throw new RuntimeException(resp.body());

    JsonNode root = om.readTree(resp.body());
    // Chat Completions: choices[0].message.content ๊ฐ€ "JSON ๋ฌธ์ž์—ด"๋กœ ๋‚˜์˜ด
    String json = root.at("/choices/0/message/content").asText();
    return om.readTree(json);
  }
}
Java

Thinking: ๊นŠ์€ ์ถ”๋ก  (๊ณ ๋‚œ๋„ ๋ถ„์„ / ๊ณ„ํš)

  • ๋ชจ๋ธ: GPT-5.2 (Thinking)
  • reasoning.effort๋ฅผ high ๋˜๋Š” xhigh๋กœ ์˜ฌ๋ ค ํ’ˆ์งˆ ์šฐ์„ 
  • Response API์—์„œ Structured Outputs๋Š” text.format: json_schema๋ฅผ ์‚ฌ์šฉ
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.net.URI;
import java.net.http.*;
import java.nio.charset.StandardCharsets;
import java.time.Duration;

public class ThinkingIncidentAnalyzer {
  private static final String API_KEY = System.getenv("OPENAI_API_KEY");
  private static final String URL = "https://api.openai.com/v1/responses";

  private final HttpClient http = HttpClient.newHttpClient();
  private final ObjectMapper om = new ObjectMapper();

  public JsonNode analyzeIncident(String logs) throws Exception {
    String payload = """
      {
        "model": "gpt-5.2",
        "reasoning": { "effort": "xhigh" },
        "input": [
          {"role":"system","content":"You are an SRE. Produce a strict JSON report."},
          {"role":"user","content": %s}
        ],
        "text": {
          "format": {
            "type": "json_schema",
            "name": "incident_report",
            "strict": true,
            "schema": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "severity": {"type":"string","enum":["P0","P1","P2","P3"]},
                "rootCause": {"type":"string"},
                "evidence": {"type":"array","items":{"type":"string"}},
                "actions": {"type":"array","items":{"type":"string"}},
                "rollbackNeeded": {"type":"boolean"}
              },
              "required": ["severity","rootCause","actions"]
            }
          },
          "verbosity": "medium"
        }
      }
      """.formatted(om.writeValueAsString(logs));

    HttpRequest req = HttpRequest.newBuilder()
        .uri(URI.create(URL))
        .timeout(Duration.ofSeconds(60))
        .header("Authorization", "Bearer " + API_KEY)
        .header("Content-Type", "application/json")
        .POST(HttpRequest.BodyPublishers.ofString(payload, StandardCharsets.UTF_8))
        .build();

    HttpResponse<String> resp = http.send(req, HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8));
    if (resp.statusCode() / 100 != 2) throw new RuntimeException(resp.body());

    JsonNode root = om.readTree(resp.body());

    // Responses API: output_text(ํŽธ์˜ ํ•„๋“œ) ๋˜๋Š” output ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
    String json = root.path("output_text").asText(); 
    return om.readTree(json);
  }
}
Java

GPT-5.2๋Š” xhigh reasoning effort๋ฅผ ์ง€์›ํ•œ๋‹ค.

Context Caching: ๋ฐ˜๋ณต prefix ์žฌ์‚ฌ์šฉ์œผ๋กœ ๋น„์šฉ/์ง€์—ฐ ์ ˆ๊ฐ (Prompt Caching)

์•„๋ž˜ ์˜ˆ์‹œ๋Š” “๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ”์ฒ˜๋Ÿผ ๋งค๋ฒˆ ๋™์ผํ•œ ๊ทœ์น™/์•„ํ‚คํ…์ฒ˜ ์„ค๋ช…(๊ธด prefix) + diff๋งŒ ๋ฐ”๋€Œ๋Š” ์š”์ฒญ์„ ์ „์ œ๋กœ ํ•œ๋‹ค.

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.net.URI;
import java.net.http.*;
import java.nio.charset.StandardCharsets;
import java.time.Duration;

public class ContextCachingCodeReview {
  private static final String API_KEY = System.getenv("OPENAI_API_KEY");
  private static final String URL = "https://api.openai.com/v1/chat/completions";

  private final HttpClient http = HttpClient.newHttpClient();
  private final ObjectMapper om = new ObjectMapper();

  // โœ… "์บ์‹œ ํžˆํŠธ"๋ฅผ ์œ„ํ•ด, ๊ธด ๊ณ ์ • ํ”„๋ฆฌํ”ฝ์Šค๋Š” ํ•ญ์ƒ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€
  private static final String STATIC_PREFIX = """
  You are a senior backend reviewer.
  Project rules:
  - Java 11
  - Spring Boot
  - No secrets in logs
  - Prefer constructor injection
  - Keep DTO immutable
  Output: 1) risks 2) improvements 3) suggested patch summary
  """;

  public JsonNode reviewDiff(String diff) throws Exception {
    String payload = """
      {
        "model": "gpt-5.2-chat-latest",
        "reasoning_effort": "none",
        "prompt_cache_key": "repo:mail-service:v1",
        "prompt_cache_retention": "24h",
        "messages": [
          {"role":"system","content": %s},
          {"role":"user","content": %s}
        ],
        "max_completion_tokens": 700
      }
      """.formatted(
        om.writeValueAsString(STATIC_PREFIX),
        om.writeValueAsString("DIFF:\n" + diff)
      );

    HttpRequest req = HttpRequest.newBuilder()
        .uri(URI.create(URL))
        .timeout(Duration.ofSeconds(30))
        .header("Authorization", "Bearer " + API_KEY)
        .header("Content-Type", "application/json")
        .POST(HttpRequest.BodyPublishers.ofString(payload, StandardCharsets.UTF_8))
        .build();

    HttpResponse<String> resp = http.send(req, HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8));
    if (resp.statusCode() / 100 != 2) throw new RuntimeException(resp.body());

    JsonNode root = om.readTree(resp.body());

    // โœ… ์šด์˜ ํŒ: ์บ์‹œ ํžˆํŠธ ํ™•์ธ (์‘๋‹ต usage์— cached tokens๊ฐ€ ์žกํž˜)
    // ํ•„๋“œ ์œ„์น˜๋Š” ๋ชจ๋ธ/๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์–ด, ์•ˆ์ „ํ•˜๊ฒŒ ํƒ์ƒ‰
    JsonNode usage = root.path("usage");
    System.out.println("usage=" + usage);

    return root;
  }
}
Java
  • Prompt Caching์€ ๋ฐ˜๋ณต ํ”„๋กฌํ”„ํŠธ์—์„œ ์ง€์—ฐ์„ ํฌ๊ฒŒ ์ค„์ด๊ณ  ์ž…๋ ฅ ํ† ํฐ ๋น„์šฉ์„ ํฌ๊ฒŒ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • prompt_cache_key, prompt_cache_retention: “24h”๋Š” ์บ์‹œ ํžˆํŠธ์œจ์„ ๋†’์ด๊ธฐ ์œ„ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋‹ค.

GPT-5.1๊ณผ GPT-5.2๋ฅผ ํ†ตํ•ด์„œ AI๋Š” ์ด์ œ ๋ถ™์ด๋Š” ๊ธฐ์ˆ ์ด ์•„๋‹ˆ๋ผ ์„ค๊ณ„ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋กœ ์ง„ํ™”ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
๋ชจ๋ธ์˜ ์„ฑ๋Šฅ ์ž์ฒด๋ณด๋‹ค ๊ทธ ๋ชจ๋ธ์„ ์–ด๋””์— ์–ด๋–ค ์—ญํ• ๋กœ ๋ฐฐ์น˜ํ•  ๊ฒƒ์ธ์ง€๊ฐ€ ์•ž์œผ๋กœ AI ๊ธฐ๋ฐ˜ ๋ฐฑ์—”๋“œ ์‹œ์Šคํ…œ์˜ ์‹ค๋ ฅ์„ ๊ฒฐ์ •ํ•˜๊ฒŒ ๋  ๊ฒƒ ๊ฐ™๋‹ค.

์ฐธ๊ณ  ์‚ฌ์ดํŠธ

https://www.infoq.com/news/2025/12/openai-gpt-51/?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global

https://openai.com/ko-KR/index/gpt-5-1

https://openai.com/ko-KR/index/introducing-gpt-5-2

https://platform.openai.com/docs/guides/prompt-caching?utm_source=chatgpt.com

https://platform.openai.com/docs/api-reference/chat/create

https://platform.openai.com/docs/guides/structured-outputs?utm_source=chatgpt.com

https://platform.openai.com/docs/guides/latest-model