25

Week 1 핵심 패턴 총정리

Day 5: 제조 매뉴얼 Q&A 챗봇

학습 목표

Week 1 전체 학습 내용을 체계적으로 정리한다 각 패턴의 코드 스니펫을 빠르게 참조할 수 있다

Week 1 핵심 패턴 레퍼런스


패턴 1: API 기본 호출

from openai import OpenAI
from dotenv import load_dotenv

load_dotenv()
client = OpenAI()

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "system", "content": "제조 전문가 역할"},
        {"role": "user", "content": "질문 내용"}
    ],
    temperature=0.3,
    max_tokens=1500
)
answer = response.choices[0].message.content

패턴 2: 스트리밍

stream = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[...],
    stream=True
)

for chunk in stream:
    content = chunk.choices[0].delta.content
    if content:
        print(content, end="", flush=True)

패턴 3: 에러 처리 + 재시도

import time, random
from openai import RateLimitError, APITimeoutError

def safe_call(messages, max_retries=3):
    for attempt in range(max_retries):
        try:
            return client.chat.completions.create(
                model="gpt-4o-mini",
                messages=messages,
                timeout=30.0
            )
        except (RateLimitError, APITimeoutError) as e:
            if attempt == max_retries - 1:
                raise
            delay = (2 ** attempt) + random.uniform(0, 1)
            time.sleep(delay)

패턴 4: 비용 추적

usage = response.usage
input_cost = usage.prompt_tokens / 1e6 * 0.15
output_cost = usage.completion_tokens / 1e6 * 0.60
total_cost = input_cost + output_cost

패턴 5: Streamlit 챗봇

import streamlit as st

# 세션 초기화
if "messages" not in st.session_state:
    st.session_state.messages = []

# 히스토리 표시
for msg in st.session_state.messages:
    with st.chat_message(msg["role"]):
        st.markdown(msg["content"])

# 사용자 입력
if prompt := st.chat_input("질문"):
    st.session_state.messages.append({"role": "user", "content": prompt})

    # 스트리밍 응답
    with st.chat_message("assistant"):
        response = st.write_stream(generator())

    st.session_state.messages.append({"role": "assistant", "content": response})

패턴 6: 분야별 시스템 프롬프트

PROMPTS = {
    "CNC": "당신은 CNC 전문가입니다...",
    "PLC": "당신은 PLC 전문가입니다...",
}

system_prompt = PROMPTS[selected_domain]

패턴 7: 대화 히스토리 관리

MAX_HISTORY = 10
messages = st.session_state.messages[-MAX_HISTORY:]
api_messages = [{"role": "system", "content": system}] + messages

이 7가지 패턴을 조합하면 프로덕션급 제조 챗봇이 완성된다.

AI로 학습하기 — 꿀팁
🧪Week 1 핵심 패턴 — 취약 개념 집중 복습AI 학습 팁

Week 1 전체를 정리할 때 단순 재열거가 아니라 자신이 약한 개념을 집중 심화하는 방식으로 활용하세요.

Week 1 LLM 기초 학습 내용(토큰화, 프롬프트 기법 5종, API 비용 관리, Streamlit 챗봇 패턴)을 복습하는데, 저는 특히 'Few-shot 예시를 얼마나 넣어야 최적인지'와 '한국어 제조 문서의 토큰 효율 최적화'를 어떻게 해야 할지 아직 불명확합니다. 이 두 가지를 (1) 제조 현장 실제 예시(불량 보고서, 설비 점검 기록) 기반으로 직관적으로 설명하고, (2) 각각 최적값을 찾는 실험 방법, (3) 기억하기 쉬운 경험 법칙(rule of thumb)으로 정리해주세요.
이 팁이 도움이 됐나요?
핵심 포인트
  • API 기본 호출: model, messages, temperature, max_tokens
  • 스트리밍: stream=True + chunk 순회
  • 에러 처리: 지수 백오프 + 에러 분류
  • 비용 추적: usage.prompt_tokens / completion_tokens
  • Streamlit: session_state + chat_message + write_stream