[카테고리:] 미분류

  • OpenAI Chat API 기반 대화형 AI 구현과 응용


    1. 서론

    대규모 언어모델(LLM, Large Language Model)은 단순 질의응답을 넘어, 맥락을 이해하고 연속적인 대화를 이어갈 수 있는 지능을 제공합니다.
    OpenAI의 Chat API는 기존 텍스트 완성 모델과 달리 대화 메시지(message) 구조를 기반으로 설계되어, 대화 맥락 추적, 역할 지정, 스트리밍 응답이 가능합니다.

    이 문서는 개발자가 Playground 실험 → Python 코드 구현 → Streamlit/Gradio UI 적용 → 금융/엔터테인먼트 응용까지 차근차근 따라 할 수 있는 학습형 화이트 페이퍼입니다.


    2. OpenAI Playground에서 Chat 기능 이해하기

    2.1 Playground 개요

    • OpenAI Playground는 브라우저 기반 실험실로, API 호출을 직접 작성하지 않고도 모델을 실험할 수 있는 환경입니다.
    • 주소: OpenAI Playground Chat
    • 결제 정보(카드 등록)가 필요하며, 소규모 크레딧 제공 후 사용량에 따라 과금됩니다.

    Playground는 빠른 프로토타입 제작에 유용하며, 추후 Python 코드/API 호출로 확장하기 전에 개념을 이해하기 좋은 툴입니다.


    2.2 메시지 구조와 역할(role)

    Chat API의 핵심은 messages 배열입니다.
    각 메시지는 아래 3가지 역할(role) 중 하나를 가집니다:

    • system: 모델의 페르소나를 정의 예: "너는 요리 연구가야. 가을 제철 요리를 설명해줘."
    • user: 사용자의 질문이나 지시 입력
    • assistant: AI가 응답한 내용

    예시 대화 (Playground UI)

    system : 너는 시적 보조자야. 복잡한 프로그래밍 개념을 시로 설명해.
    user   : 재귀(recursion)의 개념을 한국어 시로 설명해줘.
    assistant : (재귀 개념을 시로 표현한 응답)
    

    2.3 요청 메시지 형식 (Chat Completion Request Body)

    {
      "model": "gpt-4o-mini",
      "messages": [
        {"role":"system", "content":"너는 자바 개발 전문가야."},
        {"role":"user", "content":"스프링 프레임워크의 장점을 알려줘"}
      ],
      "temperature": 0.7,
      "max_tokens": 500,
      "stream": false
    }
    

    주요 파라미터 정리

    파라미터설명예시
    model사용할 모델 ID"gpt-4o", "gpt-4o-mini"
    messages대화 기록 (system, user, assistant)리스트 형태
    temperature무작위성 조절 (0=결정적, 2=창의적)0.7
    max_tokens생성할 최대 토큰 수500
    stream스트리밍 응답 여부true / false
    stop특정 문자열에서 응답 중단[“종료”, “\n\n”]

    2.4 대화 맥락 유지 전략

    대화형 챗봇은 사용자 입력과 AI 응답을 계속 messages 배열에 누적해야 합니다.

    messages = []  # 대화 기록 저장
    
    while True:
        content = input("사용자: ")
        if content == "종료":
            break
    
        messages.append({"role":"user", "content":content})
    
        response = client.chat.completions.create(
            model="gpt-4o-mini",
            messages=messages
        )
    
        answer = response.choices[0].message.content
        print("AI:", answer)
        messages.append({"role":"assistant", "content":answer})
    

    3. Python 기반 구현 실습

    3.1 환경 준비

    pip install openai python-dotenv
    

    3.2 .env 파일 생성

    OPENAI_API_KEY=sk-xxxxxxxx
    

    3.3 기본 코드

    from openai import OpenAI
    import os
    from dotenv import load_dotenv
    
    load_dotenv()
    api_key = os.getenv("OPENAI_API_KEY")
    client = OpenAI(api_key=api_key)
    
    messages = [{"role":"user", "content":"봄에 대해 알려줘"}]
    
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=messages
    )
    
    print(response.choices[0].message.content)
    

    4. [실습] Streamlit 기반 챗봇

    4.1 Streamlit 설치

    pip install streamlit
    

    4.2 단일 질문 챗봇

    # st_main_01.py
    import streamlit as st
    from openai import OpenAI
    import os, dotenv
    
    dotenv.load_dotenv()
    client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
    
    st.title("AI Chatbot")
    
    user_question = st.text_input("질문을 입력하세요:")
    
    if st.button("질문하기"):
        response = client.chat.completions.create(
            model="gpt-4o-mini",
            messages=[{"role":"user","content":user_question}],
            max_tokens=100
        )
        st.write(response.choices[0].message.content)
    

    실행:

    streamlit run st_main_01.py
    

    4.3 Spinner 적용 (로딩 UI)

    with st.spinner("답변 준비 중..."):
        response = client.chat.completions.create(...)
    

    4.4 대화 히스토리 유지 챗봇

    Streamlit의 st.session_state를 이용해 messages를 보존할 수 있습니다.


    5. [실습] Gradio 기반 챗봇

    5.1 Gradio 설치

    pip install gradio
    

    5.2 기본 챗봇

    import gradio as gr
    
    def respond(message, history):
        return history + [(message, "응답 예시")]
    
    demo = gr.ChatInterface(fn=respond, title="기본 챗봇")
    demo.launch()
    

    5.3 영화 추천 챗봇 (프롬프트 설계)

    movie_prompt = """
    당신은 영화 추천 전문가입니다.
    사용자의 입력(배우, 감독, 영화 제목, 연령대 등)에 따라 3~5편 영화를 추천하세요.
    """
    

    Gradio UI와 OpenAI API 연동 → 실습 코드 포함.


    6. 응용 사례: 주식 분석 챗봇

    • yfinance 라이브러리로 주가 데이터 수집
    • AI가 통계 요약 + 투자 관점 분석
    import yfinance as yf
    df = yf.download("AAPL", period="30d")
    print(df.tail())
    

    AI 응답 예시:

    AAPL 최근 30일 주가 요약:
    - 최고가: 198.32
    - 최저가: 184.10
    - 평균 종가: 191.50
    → 단기적으로 상승세, 그러나 변동성 주의 필요.
    

    7. 활용 시나리오 확장

    • 교육: 수학 문제 튜터, 프로그래밍 과외
    • 헬스케어: 건강 상담 챗봇
    • 금융: 주식/암호화폐 리포트 자동 생성
    • 엔터테인먼트: 영화·음악 추천, 대화형 게임 NPC
    • 기업 서비스: 고객 FAQ 자동화

    8. 기술적 고려사항

    • 토큰 관리: 긴 대화 시 메시지 누적 → max_tokenscontext window 고려
    • 에러 처리: RateLimitError, AuthenticationError 대비
    • 보안: API Key는 .env로 관리, 절대 코드에 하드코딩 금지

    부록

    A. 주요 파라미터 튜닝 팁

    • temperature=0.2 → 정밀한 요약/분석
    • temperature=0.9 → 창의적 글쓰기

    B. 토큰 계산 예시

    import tiktoken
    enc = tiktoken.encoding_for_model("gpt-4o-mini")
    print(len(enc.encode("안녕하세요")))
    

    C. Playground vs API 비교

    • Playground: 시각적 실험 → 빠른 테스트
    • API: 코드화 → 제품/서비스에 통합 가능

    9. 결론

    본 화이트 페이퍼는 Playground 학습 → Python API → Streamlit/Gradio UI → 응용 사례로 이어지는 전 과정을 다뤘습니다.
    이 접근법을 따르면 누구나 기초 실습 → 서비스 프로토타입 제작 → 산업 응용까지 확장할 수 있습니다.

    대화형 AI는 교육·금융·엔터테인먼트 분야에서 빠르게 확산 중이며, OpenAI Chat API는 이를 구현할 수 있는 가장 강력하고 직관적인 도구 중 하나입니다.