파이썬으로 chatgpt 웹앱 만들기

들어가며..

먼저 Shreyashankar의 GPT3 샌드박스 GitHub 저장소를 참고하면서 시작하겠습니다. 해당 유저의 저장소에 있는 README.md 파일은 이 프로젝트에 많은 도움을 주는 문서가 있고, 이 문서를 참고해 약간의 수정을 더해 앱을 만들어 보겠습니다.

깃허브 저장소 클론하기

일반적으로 프로젝트를 생성할 디렉토리(경로)에 깃 저장소를 복제합니다. 터미널에 다음 명령어를 실행 하시기만 하면 됩니다.

$ git clone https://github.com/shreyashankar/gpt3-sandbox.git

가상환경(Virtual Environment) 설정하기

프로젝트의 성공을 보장하고 싶다면 가상 환경을 사용하는 것을 적극 권장합니다. 기본적으로 가상 환경은 파이썬 인터프리터의 복제본으로, 시스템의 글로벌 파이썬 인터프리터에 영향을 주지 않고 패키지를 비공개로 설치할 수 있습니다. 가상 환경을 사용하면 모든 종속 요소와 사이트 패키지가 한 위치에 보관되므로 코드를 체계적으로 정리하고 복제 가능성을 높일 수 있습니다.

가상 환경을 설정하는 방법은 여러 가지가 있지만 다음 명령을 사용하는 것이 좋습니다. 가상 환경의 이름을 ‘venv’로 지정하고, -m venv 옵션을 사용하여 원하는 이름을 인수로 전달하면서 독립 실행형 스크립트로 venv 패키지를 실행할 수 있습니다.

대부분의 사람들이 일반적으로 가상 환경 폴더의 이름을 ‘venv’로 지정하지만, 원하는 이름을 선택할 수 있다는 점에 유의하세요. 명령을 실행하기 전에 현재 디렉터리가 gpt3-sandbox로 설정되어 있는지 확인하기만 하면 됩니다.

$ python -m venv venv

명령을 실행 하신 뒤에는 gpt3-sandbox 안에 venv라는 하위 경로가 생성됩니다.

다음 단계는 가상 환경을 활성화하는 것입니다. 이를 위해 다음 명령을 실행합니다:

$ source venv/bin/activate

[][]이제 설정 프로세스가 완료되었습니다. 코드를 변경하기 전에 항상 가상 환경을 활성화해야 한다는 점을 잊지 마세요. 그렇지 않으면 오류가 발생할 수 있습니다.

가상 환경 사용의 장점 중 하나는 필요한 모든 패키지와 종속 요소를 한 곳에 설치하여 코드를 쉽게 공유하고 업데이트할 수 있다는 것입니다. 패키지를 설치하기 위해 pip 명령을 사용하겠습니다.

pip를 사용하여 패키지를 다운로드하는 과정은 간단합니다. 먼저 터미널을 열고 가상 환경이 있는 디렉토리로 이동합니다. 가상 환경을 활성화한 다음 적절한 명령을 입력하여 원하는 패키지를 다운로드하도록 pip에 지시합니다.

pip가 패키지 다운로드를 완료하면 가상 환경의 사이트-패키지 디렉터리에 패키지가 자동으로 설치되며, 이 디렉터리에서 Python 코드로 쉽게 액세스할 수 있습니다.

pip install <package>

이제 패키지들을 열어보겠습니다.

(venv) $ pip install openai

(venv) $ pip install python-dotenv

클론이 완료된 Github 저장소에는 이미 프로젝트에 필요한 모든 Dependency들이 나열된 Requirements.txt 파일(api 폴더에서 찾을 수 있음)이 포함되어 있습니다. 가상 환경이 저희가 원하던 대로 제대로 세팅 됐는지 확인하기 위해서 터미널에서 다음 명령어를 실행해주세요:

pip install -r api/requirements.txt

Yarn 설치하기

프로젝트를 진행하려면 파이썬의 pip처럼 버전과 패키지를 관리해주는 자바스크립트 패키지 관리자 Yarn이 필요합니다. Yarn은 React를 사용하여 빌드되는 프론트엔드 애플리케이션에 실무에서 각광받습니다.

Yarn을 설치하려면 시스템에 설치할 때 Node.js와 함께 Yarn을 자동으로 설치하는 npm 패키지 관리자를 사용하는 것이 좋습니다.

npm install yarn

이전 명령어에 문제가 있는 경우 Homebrew를 사용하여 환경 문제를 해결할 수 있습니다. Homebrew 패키지 관리자를 사용해서 Yarn을 설치하는 게 일반적으로 가장 안정적입니다. 또 만약 Node.js가 설치되어 있지 않은 경우에도 Yarn과 함께 설치되므로 편리합니다.

brew install yarn

yarn 설치를 완료 하셨다면, 이제 root 경로에서 ‘yarn install’ 명령어를 실행해주세요. 이 과정을 딱 한 번만 수행하시면, 저희 프로젝트에 필요한 환경 설정이 모두 완료됩니다.

OpenAI API 키 발급받기

GPT3를 제대로 활용하기 위해서는 OpenAI의 API 키가 필요합니다. API 키는 OpenAI 공식 웹사이트에 가입 하신 후에 발급 받으실 수 있습니다. 여기서 유의할 점은 API 키는 반드시 안전하게 보관되어야 한다는 점입니다. API 키를 얻는 방법은 이전 포스팅을 참고해주세요.

Add Your Heading Text Here

config 설정 파일을 사용하는 것도 좋지만, 보통 일반적으로 API Secret키를 .env 파일에 저장하는 것이 좋습니다. 그 이유는 Api Key가 유출되어 악의적으로 사용되지 않도록 보호하기 위해서입니다. .env 파일(environment)에 저장하면 코드에서 변수로 가져올 수 있습니다. 하지만 .env 파일을 만든 후에는 GitHub에 업로드할 때 반드시 이 파일을 .gitignore 파일에 추가해야 한다는 걸 꼭 잊지 말고 기억해주세요.

여러분의 프로젝트 폴더에 새 .env 파일을 만들려면 다음 코드 줄을 추가하신 뒤,  “your-super-secret-api-key”를 실제 API 키로 바꾸기만 하면 됩니다:

export OPENAI_KEY=your-super-secret-api-key

최종적으로 GitHub에 파일을 업로드할 때 .env 파일이 같이 업로드되지 않도록 꼭 gitignore 파일을 수정해주세요. 굉장히 중요하므로 반드시 기억해주시기 바랍니다. 그 어떤 상황에서도 API  Secret 키가 외부에 노출되지 않도록 주의하셔야 합니다..

새로운 Git 저장소 만들기

GitHub에 웹 애플리케이션을 위한 새 리포지토리를 만들어 보겠습니다. 시작하려면 GitHub 데스크톱 앱을 열고 상단의 “파일” 메뉴로 이동합니다. 거기에서 “새 리포지토리” 옵션을 찾을 수 있습니다. 리포지토리 이름을 “gpt3-코드명”으로 지정하고 “리포지토리 만들기” 버튼을 누르기 전에 Python gitignore 파일을 포함해야 합니다. 이렇게 하면 가상 환경과 기밀 API 액세스 토큰이 포함된 .env 파일을 GitHub에 업로드하는 것을 방지할 수 있습니다.

데스크톱 앱을 시작하면 외부 편집기에서 리포지토리를 열도록 선택할 수 있습니다. 이미 설치했다면 Visual Studio Code가 기본 옵션으로 설정되어 있을 것입니다. 버튼을 클릭하여 계속 진행합니다.

GPT-3에 대해

GPT-3의 복잡성과 작동 방식에 대해 너무 많은 시간을 할애하지 않겠습니다. 그 이유는 부분적으로는 제가 아직 완전히 이해하지 못했기 때문이기도 하지만, 더 자세히 알고 싶은 분들을 위한 문헌이 풍부하기 때문입니다. 배경 지식을 제공하기 위해 Twilio 블로그 게시물 원본에서 발췌한 내용을 공유하겠습니다.

GPT-3(Generative 사전 학습형 트랜스포머 3)는 방대한 텍스트 코퍼스로 학습된 매우 진보된 언어 모델입니다. 내부 작동 방식은 복잡하지만 작동 방식은 의외로 간단합니다. 텍스트를 입력하면 모델이 비슷한 스타일과 구조의 추가 텍스트를 생성합니다.

GPT-3는 비결정론적 엔진으로 간주되는데, 동일한 입력이 있어도 엔진을 여러 번 실행하면 다양한 응답을 생성할 수 있기 때문입니다.

더 자세한 지식이 필요하신 분은 “OpenAI의 GPT-3 언어 모델에 대한 최종 가이드”를 읽어보시기 바랍니다.

Add Your Heading Text Here

OpenAI 플레이그라운드는 GPT3의 복잡성을 탐구할 수 있는 플랫폼 역할을 합니다. 이 과정의 기본 개념은 학습할 예제를 제공함으로써 GPT3 엔진을 훈련하거나 프라이밍하는 것입니다. 몇 가지 예제만 있어도 GPT3는 부족한 부분을 채우고 학습한 내용을 재현할 수 있습니다.

기본 텍스트 영역은 텍스트 예제를 제공하는 곳이고, 오른쪽 사이드바는 원하는 텍스트 출력을 수정하기 위해 변수를 변경하는 곳입니다.

인상적이지 않나요? 잠시 시간을 내어 오른쪽 사이드바를 살펴보고 이것이 어떻게 플레이그라운드의 반응을 유도하는지 살펴보겠습니다. Twilio의 얼티밋 가이드와 제가 직접 작성한 내용을 바탕으로 이해하기 쉽도록 몇 가지 핵심 사항을 강조하겠습니다.

엔진: OpenAI는 네 가지 엔진 중에서 선택할 수 있으며, 이는 의심할 여지없이 GPT3의 블랙박스 측면입니다. 가장 “진보되고 유능한” 것으로 선전되어 왔기 때문에 다양한 온라인 소스의 추천을 바탕으로 Davinci를 계속 사용하겠습니다.

Response Length(응답 길이): 이 매개변수는 생성되는 텍스트의 양을 조절합니다. Microsoft Word나 Google 문서에서와 같이 글자 수를 생각하면 됩니다. 예를 들어 150으로 설정하면 GPT3는 텍스트에 150개의 토큰을 추가하며, 토큰은 단어 또는 문장 부호로 표시됩니다.

Temperature: 이 설정은 생성된 텍스트의 무작위성을 제어합니다. 온도가 높을수록 출력을 예측할 수 없게 됩니다. 값이 0이면 엔진이 결정론적이어서 주어진 입력에 대해 동일한 출력을 생성한다는 의미입니다. 값이 1이면 엔진이 더 많은 위험을 감수하여 더 창의적인 결과물을 생성한다는 의미입니다.

Top P: 이 파라미터는 GPT3에서 생성되는 텍스트의 무작위성과 창의성에도 영향을 줍니다. 하지만 온도보다는 덜 자주 사용됩니다. OpenAI의 문서에서는 온도와 상위 P 중 하나만 사용할 것을 권장하므로, 하나를 선택할 경우 다른 하나는 1로 설정해야 합니다.

빈도 페널티: 이 매개변수는 이미 여러 번 사용된 단어가 다시 선택될 확률을 낮추는 방식으로 작동합니다.

현재 상태 페널티: 이 매개변수는 단어가 얼마나 자주 사용되었는지는 고려하지 않고 해당 단어가 텍스트에 나타나는지 여부만 고려합니다. 이렇게 하면 단어가 덜 반복되고 자연스러워집니다.

Twilio 얼티밋 가이드에 따르면 “이 두 옵션의 차이는 미묘하지만, 빈도 페널티는 단어 반복을 방지하는 방법이고, 현재 상태 페널티는 주제 반복을 방지하는 방법이라고 생각하면 됩니다.”라고 설명합니다.

베스트 오브: 이 매개변수는 쿼리에 대해 여러 개의 응답을 생성하는 데 사용되며, Playground에서 가장 적합한 응답을 선택하여 표시합니다. 기본값을 사용하는 것이 좋습니다.

시퀀스 중지: 이 매개변수는 응답 길이 매개변수가 허용하는 최대 길이에 도달할 경우 GPT3가 문장 중간에 끊어지는 것을 방지하는 데 도움이 됩니다. 중지 시퀀스는 GPT3가 특정 지점에서 중지하도록 효과적으로 지시하며, 결과 텍스트에는 중지 시퀀스가 포함되지 않습니다.

텍스트 시작: 이 매개변수는 사용자가 입력한 후 GPT3에 요청을 보내기 전에 자동으로 텍스트를 추가하여 봇을 만들 때 유용하게 사용할 수 있습니다.

텍스트 다시 시작: 이 매개변수는 모델 생성 후 패턴화된 구조를 계속하기 위해 텍스트를 추가하므로 접두사를 입력하지 않아도 됩니다.

항상 그렇듯이 이러한 각 매개변수의 기능을 이해하는 가장 좋은 방법은 실험해 보는 것입니다. 값을 변경하고 플레이그라운드에서 텍스트 출력이 어떻게 바뀌는지 관찰하세요.

코드명 도구 사용자 지정하기: 웹 애플리케이션의 경우, GPT3가 학습할 수 있는 다양한 예제를 제공합니다. GPT3는 기본적으로 기록된 모든 인터넷 데이터를 의미하는 정보 ‘말뭉치’를 기반으로 학습한다는 점을 기억하세요. 따라서 몇 가지 예제만 있으면 도구의 수명을 늘릴 수 있습니다

 

기능을 제대로 이해하려면 항상 다양한 방법을 시도해보고 Playground에서 결과로 출력되는 텍스트를 면밀히 관찰하는 것이 좋습니다. 가장 효과적인 학습 방법은 직접 실험해보는 것입니다.

Codenames 도구 맞춤 설정

웹 앱의 목표는 GPT3가 학습에 사용할 수 있는 다양한 예제를 제공하는 것입니다. GPT3는 인터넷 전체를 아우르는 방대한 양의 정보, 즉 코퍼스로 알려진 정보를 학습한다는 점을 명심해야 합니다. 따라서 몇 가지 예제만 제공해도 효과적인 도구가 될 수 있습니다.

우리의 주요 작업은 특정 접두사를 사용하여 GPT3에 프롬프트하는 것이며, 여기서 중요한 단어는 “프롬프트”입니다. 각 예제가 입력에 대한 답과 출력에 대한 단서로 시작하는 방식이 눈에 띕니다. 이 패턴은 GPT3 엔진이 빠르게 이해합니다.

제출 버튼을 누르면 스파이 마스터 단서를 볼 수 있습니다!

Add Your Heading Text Here

API 폴더 안에는 웹 애플리케이션을 구성하는 데 필요한 모든 구성 요소가 있습니다. 대부분을 그대로 활용할 수 있습니다.

하지만 수정이 필요한 유일한 부분은 .env 파일에서 OpenAI API 키를 참조하는 것입니다. 이를 위해 이전에 pip를 사용하여 설치한 dotenv 패키지를 사용할 것입니다. demo_web_app.py 파일의 시작 부분에 다음 코드를 추가하면 이 작업을 수행할 수 있습니다:

from dotenv import load_dotenv
import os
load_dotenv()

패키지를 임포트하고 dotenv 함수를 호출하여 환경 변수를 로드합니다. 그런 다음 .env 파일에 액세스하기 위해 KEY_NAME을 업데이트합니다:

KEY_NAME = os.getenv(‘OPENAI_KEY’)

.env 파일에서 OPENAI_KEY 변수를 내보냈으므로 이를 참조할 것입니다.

마지막으로 demo_web_app() 함수를 수정하려고 합니다. 키 이름 변수를 직접 호출하기 때문에 설정 호출을 없애고 대체할 수 있습니다:

set_openai_key(KEY_NAME)

본 포스팅은 아직 작성 중에 있습니다… 조금만 기다려주세요.