Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- VUE
- 카렌
- Enhanced Input System
- Jinja2
- 데이터베이스
- 프메
- 알고풀자
- 언리얼프로그래머
- flask
- 스마일게이트
- R
- Unseen
- 프린세스메이커
- 언리얼뮤지컬
- 게임개발
- Bootstrap4
- 으
- Express
- 정글사관학교
- 스터디
- 언리얼
- 레베카
- node
- EnhancedInput
- Ajax
- 마인크래프트뮤지컬
- 미니프로젝트
- 파이썬서버
- JWT
- 디자드
Archives
- Today
- Total
Today, I will
[OpenAI API] LLM 스트리밍 API (stream=True) 본문
Chat GPT 등의 text 생성형 AI 서비스를 사용하다보면, 사용자는 전체 text resonse가 완성된 이후 응답을 받는 대신에 실시간으로 생성되는 답변의 조각들을 받아볼 수 있다. open ai api에서는 이런 스트리밍 기법을 사용할 수 있도록 스트리밍 api를 제공해주고 있다.
가령 아래와 같은 예시 코드를 LLM 스트리밍 API를 통해 실시간 출력으로 바꾸어보도록 한다.
🔹 기존 코드 (stream=False, 응답을 한 번에 받음)
import openai
import os
res = openai.chat.completions.create(
model=os.getenv("OPENAI_DEFAULT_MODEL"),
messages=[{"role": "user", "content": "다음을 일본어로 번역하세요: 안녕하세요? 오늘 날씨가 참 좋군요!"}]
)
print(res.choices[0].message.content)
📌 문제점:
✅ 응답이 한 번에 출력됨 → 즉, 응답이 길어질 경우 출력이 느려질 수 있음
✅ 실시간으로 텍스트가 출력되지 않음 (전체 문장을 다 받아야 표시)
LLM 스트리밍 API 사용법
📌 1. LLM 스트리밍 API (stream=True) 적용
import openai
import os
# 스트리밍 방식으로 응답 받기
gen = openai.chat.completions.create(
model=os.getenv("OPENAI_DEFAULT_MODEL"),
messages=[{"role": "user", "content": "다음을 일본어로 번역하세요: 안녕하세요? 오늘 날씨가 참 좋군요!"}],
stream=True # ✅ 스트리밍 활성화
)
# 실시간으로 응답 출력
for response in gen:
delta = response.choices[0].delta
if delta.content is not None:
print(delta.content, end='', flush=True) # ✅ 실시간 출력
구조
gen = openai.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "질문"}],
stream=True
)
while True:
response = next(gen)
delta = response.choices[0].delta
if delta.content is not None:
print(delta.content, end='')
else:
break
📌 설명:
- OpenAI의 stream=True 옵션을 사용하여 스트리밍 방식으로 응답을 받음
- 기존 방식 (stream=False) → 전체 응답을 한 번에 반환
- 스트리밍 방식 (stream=True) → 응답을 부분적으로 받아 실시간 출력 가능 (유튜브 댓글 실시간 반응처럼)
- next(gen)을 이용해 한 번에 한 덩어리씩 출력하여 빠른 피드백 제공.
📌 사용자 경험 향상
- 대화형 AI 개발에서 응답을 기다리지 않고 바로 제공할 수 있어 사용자 경험 개선! 🚀
- 긴 문장 출력 시 속도 향상 → 전체 문장을 다 받고 출력하는 것보다 빠름
- 📌 stream=True를 사용하는 이유
응답 방식 전체 응답을 한 번에 출력 부분적으로 실시간 출력 응답 속도 느림 (전체 문장 완성 후 출력) 빠름 (한 글자씩 바로 출력) 대화형 AI 불편함 (사용자가 기다려야 함) ✅ 실시간으로 대화 가능 Jupyter Notebook에서 출력 한 번에만 표시됨 ✅ 한 글자씩 점진적으로 표시
LLM 스트리밍(stream=True)을 사용하면 응답 속도가 빨라지고 실시간 출력이 가능해진다.
📌 Jupyter Notebook에서도 실시간 출력 가능
📌 추가 개선 (응답을 더 보기 좋게 출력)
Jupyter Notebook에서 줄 바꿈(\n)이 적용되지 않는 경우, 아래처럼 개선 가능:
import openai
import os
import sys # ✅ Jupyter Notebook에서 실시간 출력을 위한 모듈
gen = openai.chat.completions.create(
model=os.getenv("OPENAI_DEFAULT_MODEL"),
messages=[{"role": "user", "content": "다음을 일본어로 번역하세요: 안녕하세요? 오늘 날씨가 참 좋군요!"}],
stream=True
)
# 실시간으로 응답 출력
for response in gen:
delta = response.choices[0].delta
if delta.content is not None:
sys.stdout.write(delta.content) # ✅ 즉시 출력
sys.stdout.flush() # ✅ 버퍼를 비워 즉시 표시
이렇게 하면 Jupyter Notebook에서도 자연스럽게 실시간으로 텍스트가 표시됨
📌 결론
✅ stream=True를 사용하면 Jupyter Notebook에서도 실시간 응답 출력 가능!
✅ print(..., flush=True) 또는 sys.stdout.write()를 사용하면 더 부드럽게 출력 가능
✅ 긴 문장일수록 기다릴 필요 없이 바로 확인 가능 → 챗봇 개발에 매우 유용
'Computer Science > 인공지능,딥러닝' 카테고리의 다른 글
[OpenAI API] Completion mode vs Chat mode 차이점과 Chat mode 키워드 정리 (0) | 2025.03.17 |
---|---|
허깅페이스 한국어 데이터셋 (1) | 2024.11.12 |
[인공지능 셋업] M1 및 M2와 같은 Apple Silicon에서 PyTorch MPS 가속 (0) | 2024.10.31 |
[인공지능] 텐서플로로 선형 회귀 모델 학습하기: 경사 하강법을 이용한 최적화 (0) | 2024.10.30 |
[인공지능] 경사하강법 (0) | 2024.10.30 |