멀티턴 대화
Chat Completions는 무상태(stateless) 인터페이스입니다. 모델은 이전 요청을 기억하지 않습니다. 멀티턴 대화의 원리는—— 매 요청마다 대화 기록을 전부 포함하여 전송하는 것입니다.
기본 사용법
messages = [ {"role": "system", "content": "你是一个简洁的中文助手。"}, {"role": "user", "content": "什么是向量数据库?"},]r1 = client.chat.completions.create(model="gpt-5.5", messages=messages)messages.append({"role": "assistant", "content": r1.choices[0].message.content})
messages.append({"role": "user", "content": "它和 Elasticsearch 有什么区别?"})r2 = client.chat.completions.create(model="gpt-5.5", messages=messages)두 번째 턴에서 모델이 “它(그것)“이 무엇을 가리키는지 이해할 수 있는 이유는, 전체 대화 기록이 messages 안에 담겨 있기 때문입니다.
컨텍스트 관리
대화 기록이 길어질수록 입력 토큰이 늘어나 비용이 증가하고, 모델의 컨텍스트 한도를 초과할 수 있습니다. 주로 사용되는 전략은 다음과 같습니다:
| 전략 | 방법 | 적합한 경우 |
|---|---|---|
| 슬라이딩 윈도우 | 최근 N턴 + system만 유지 | 고객 지원, 일상 대화 |
| 요약 압축 | 오래된 기록을 저비용 모델로 요약 | 장기 세션 어시스턴트 |
| 검색 증강 | 기록을 벡터 DB에 저장 후 필요 시 관련 내용 검색 | 지식 기반 애플리케이션 |
주의사항
system메시지는 항상 첫 번째 위치에 유지하고, 캐시 과금을 활용하여 반복 비용을 절감하는 것을 권장합니다;- 대화 기록을 잘라낼 때는 “턴” 단위로 삭제하세요(user+assistant 쌍으로), 중간에서 끊지 마세요;
- 모델을 전환할 때(예: GPT에서 Claude로)는 대화 기록 형식을 변경할 필요 없이
model만 바꾸면 됩니다.