TechY

OpenAI's structured output 본문

[간단 정리]

OpenAI's structured output

hskimim 2024. 9. 11. 13:04

최근에 openai 의 structured output 지원이 공개되었는데 기존에 지원하던 json mode보다 더 강력한 구조화 출력이 지원된다.

공개 문서를 읽어보니 structured output 을 만든 방법을 간단하게 써줬길래 잊어버리고 싶지 않아 간단하게 정리해본다.

 

1. 학습을 많이 시킴

- gpt-4o-2024-08-06 모델이 structured output 을 지원하는데, 복잡한 스키마를 이해하고 이를 기반으로 출력을 생성하게끔 학습을 많이 시켰다고 한다.

- 하지만 LLM은 태생적으로 non-deterministic 하기에 deterministic 한 engineering-based approach 를 추가로 사용했다.

 

2. Constrained decoding

- 우선 constrained decoding 은 출력 토큰 생성 단계에서 확률값을 마스킹해주는 방식으로 출력의 형태를 조절하는 것이다.

- 유저가 입력으로 준 schema에 맞게 constrained decoding 을 해야하기에 dynamic constrained decoding이 된다.

- 이 과정에서 context-free gramma (CFG)를 사용한다.

- json 도 특정 문법을 따르는 언어라고 할 수 있다. 유저로부터 schema 가 주어지면 CFG를 통해 grammar 를 계산한다. (규칙을 만드는 과정으로 임의의 스키마에 대한 문법 규칙을 학습한다고 생각하면 된다)

- 이걸 계산해놓으면, 어떤 문장이 나왔을 때, 미리 계산된 문법을 따르는지를 확인할 수 있으며, 따르지 않게 하는 다음 토큰을 리스트 . 업할 수도 있다. 이러한 토큰들의 확률값을 0으로 만들어준다.

- 처음 모델 스키마를 structured output 으로 OpenAI에게 등록하면 이걸 CFG를 통해 계산하는 과정이 소요되기 때문에, 첫 schema를 등록할 때에는 latency가 높아진다고 한다. 그 이후에는 캐싱되어 빨라진다고 함