6.6. OpenAI LLM을 활용하여 AI 응답 생성

8분 37초부터 32분 40초까지 보시면 됩니다.

6.6.1. 본 라이브 #3 부터 실습을 시작하신다면?

먼저 직전 실습까지의 프로젝트 코드를 다운로드해주세요.

manage.py 파일이 있는 프로젝트 루트 경로에서 .env 파일을 생성하고, 아래와 같이 OPENAI_API_KEY 환경 변수를 설정해주세요.

.env 파일에 OPENAI_API_KEY 환경 변수 설정
OPENAI_API_KEY=sk-...

편하신 방법으로 가상환경을 생성해주시고, requirements.txt 파일에 명시된 라이브러리를 설치해주세요.

# uv 유틸리티 설치
python -m pip install --upgrade uv

# uv를 활용한 가상환경 생성 및 라이브러리 설치
uv venv
uv pip install -r requirements.txt

데이터베이스 마이그레이션을 진행하고, 관리자 계정을 생성하시고, 개발서버를 구동해주세요.

uv run python manage.py migrate
uv run python manage.py createsuperuser
uv run python manage.py runserver 0.0.0.0:8000

브라우저로 http://localhost:8000 에 접속하시면, http://localhost:8000/chat/ 페이지로 자동 이동합니다. 채팅창에 hello 라고 입력하시면 “입력하신 메시지는 5글자입니다.” 라는 응답을 받으시게 됩니다.

이제 실습 준비 끝입니다.

VSCode, PyCharm Professional 등 편하신 에디터로 프로젝트 루트 경로를 열어주세요.

이제 시작해보실까요? 😉

6.6.2. 미리보기

“입력하신 글자는 10 글자입니다.” 응답은 너무 부실하죠. 이제 OpenAI LLM을 통해 응답을 생성해봅시다. 서버 응답 루틴만 변경해주면 됩니다. 대화 내역은 관리하지 않기에 맥락은 유지되지 않구요. 매번 대화 메시지를 기반으로 응답을 생성합니다.

05-ai.gif

입력 메시지를 OpenAI LLM에게 전달하고, 그 응답을 화면에 추가합니다.

6.6.3. OpenAI LLM 호출

OpenAI API 호출을 위해 openai 패키지를 설치합니다.

requirements.txt 에 추가
openai
라이브러리 설치
# pip를 사용할 경우
python -m pip install openai

# uv를 사용할 경우
uv pip install openai

chat/ai.py 파일을 생성하고, 아래와 같이 make_ai_message 함수를 구현합니다. 시스템 프롬프트와 유저 메시지를 인자로 받아 OpenAI Chat Completion API를 호출하고 그 응답을 반환합니다. 모델은 비용이 저렴한 gpt-4o-mini 로 고정했습니다.

openai.OpenAi() 인스턴스 생성 시에 api_key 인자로 사용할 API Key를 지정할 수 있는 데요. 지정하지 않았으니, 튜토리얼 실습 준비 페이지에서 설정했던 OPENAI_API_KEY 환경 변수가 디폴트로 사용됩니다.

chat/ai.py 생성
 1from openai import OpenAI
 2
 3def make_ai_message(system_prompt: str, human_message: str) -> str:
 4    client = OpenAI()
 5
 6    completion = client.chat.completions.create(
 7        model="gpt-4o-mini",
 8        messages=[
 9            {"role": "system", "content": system_prompt},
10            {"role": "user", "content": human_message},
11        ],
12    )
13    ai_message = completion.choices[0].message.content
14    return ai_message

chat/views.py 에서는 make_ai_message 함수를 호출하여 생성된 응답을 ai_message 변수에 할당합니다.

chat/views.py 수정
 1from chat.ai import make_ai_message
 2
 3def reply(request):
 4    # ...
 5
 6    # BEFORE
 7    # ai_message = f"입력하신 메시지는 {len(human_message)} 글자입니다."
 8
 9    # AFTER
10    system_prompt = "당신은 친절한 AI 어시스턴트입니다."
11    try:
12        ai_message = make_ai_message(system_prompt, human_message)
13    except Exception as e:
14        ai_message = f"죄송합니다. 응답을 생성하는 중 오류가 발생했습니다. ({e})"

만약 아래와 같은 에러 메시지가 발생하면, 튜토리얼 실습 준비 페이지의 OPENAI_API_KEY 환경 변수 부분을 다시 확인해주세요.

오류

죄송합니다. 응답을 생성하는 중 오류가 발생했습니다. (The api_key client option must be set either by passing api_key to the client or by setting the OPENAI_API_KEY environment variable)

환경변수 개념이 익숙하지 않으시다면, 테스트 성격으로 client = OpenAI() 코드에 api_key 인자로 사용할 API Key를 하드코딩해서 동작을 확인해보세요. api_key 인자 지정 후에 잘 동작하신다면 API Key는 문제가 없습니다. 환경변수 이름을 잘못 지정했거나 관련 설정에서 오류가 있을 수 있습니다. 튜토리얼 실습 준비 페이지 내용을 다시 확인해주세요. 하지만 이 방법은 API Key 노출 위험이 있습니다. 동작을 테스트하신 후에 반드시 다시 하드코딩한 API Key를 삭제해주셔야만 합니다.