실습: Python으로 첫 LLM API 호출하기
Day 1: LLM 개요 & 제조 AI 비전
실습: Python으로 첫 LLM API 호출하기
LLM 기초 > Day 1: LLM 개요 & 제조 AI 비전
- OpenAI API 키를 설정할 수 있다
- Python으로 LLM에 질문을 보내고 응답을 받을 수 있다
- 제조 도메인 질문으로 LLM을 테스트할 수 있다
- 첫 호출이 실패했을 때 401과 429를 구분해 원인을 좁힐 수 있다
실습: 나의 첫 LLM API 호출
오늘의 목표: Python으로 LLM에게 제조 관련 질문을 해보자.
Step 1: 환경 설정
주차 첫 과제 "시작하기 전에"에서 가상환경과 패키지 설치를 마쳤다면 이 단계는 건너뛴다.
# 가상환경 생성
python -m venv mfg-ai
source mfg-ai/bin/activate # macOS·리눅스
mfg-ai\Scripts\Activate.ps1 # 윈도우 PowerShell
# 이번 주에 쓰는 패키지 (tiktoken은 Day 3, streamlit은 Day 4부터 쓴다)
pip install openai python-dotenv tiktoken streamlit
윈도우에서 Activate.ps1이 차단되면 Set-ExecutionPolicy -Scope CurrentUser RemoteSigned를
먼저 실행한다.
Step 2: API 키 설정
키를 만드는 것만으로는 호출이 되지 않는다. 결제 수단과 크레딧을 등록하지 않은 새 계정은
첫 호출에서 429(insufficient_quota)로 거절된다. platform.openai.com에서 순서를 지킨다.
- Billing에서 결제 수단을 등록하고 크레딧을 충전한다
- API keys에서 Create new secret key (창을 닫으면 키를 다시 볼 수 없다)
- 사용량 한도(Usage limits)를 낮게 걸어 둔다
.env 파일은 편집기에서 만들어 UTF-8로 저장한다. PowerShell의 echo "..." > .env는
파일을 UTF-16으로 기록해 python-dotenv가 키를 읽지 못하고, 화면에는 401만 뜬다.
OPENAI_API_KEY=sk-여기에-실제-키-입력# .gitignore에 추가 (필수!)
echo ".env" >> .gitignore
막히면 "시작하기 전에"의 3~5절로 돌아간다. 첫날 이탈은 거의 전부 이 세 절 안에 있다.
Step 3: 첫 번째 코드 작성
아래 코드를 first_llm.py로 저장하고 실행하세요.
Step 4: 3가지 제조 질문 테스트
코드를 실행한 후, 다음 질문들을 바꿔가며 테스트하세요:
- "CNC 가공에서 채터링이 발생하는 원인은?"
- "사출 성형에서 웰드라인을 줄이는 방법은?"
- "PLC 래더 로직에서 자기유지회로란?"
각 질문의 응답 품질과 정확성을 직접 판단해보세요. 답에 나온 수치(절삭 속도, 온도, 압력)는 그대로 믿지 말고, 아는 것 하나를 골라 사실인지 확인해보세요. 이 챗봇은 어떤 문서도 읽지 않고 답합니다.
힌트 보기
- • AuthenticationError(401)는 키가 틀렸거나 .env를 못 읽은 것입니다. 윈도우라면 .env 인코딩이 UTF-8인지 확인하세요
- • RateLimitError(429)에 insufficient_quota가 붙어 있으면 잔액이 없다는 뜻이라 재시도해도 풀리지 않습니다. Billing에서 크레딧을 확인하세요
- • temperature=0.3이면 일관된 답변, 0.9면 창의적 답변이 나옵니다
- • max_tokens은 출력 제한이지 입력 제한이 아닙니다
- • response.usage로 토큰 사용량을 확인할 수 있습니다
정답 보기
AI에게 첫 LLM API 호출 코드의 네트워크 타임아웃·Rate Limit·키 미설정 상황을 시뮬레이션하는 테스트를 제안해달라고 요청하세요.
이 Python OpenAI API 호출 코드에서 API 키 미설정, 네트워크 타임아웃, Rate Limit 429 응답 각각에서 어떻게 동작하는지 확인할 수 있는 단위 테스트 케이스를 제안해줘. 제조 도메인 Q&A 시나리오 기준으로 작성해줘. 잔액 부족으로 난 429와 호출 속도 때문에 난 429를 구분하는 케이스도 넣어줘.