Chat GPT로 챗봇 만들기
Chat GPT로 챗봇을 만들어 보겠습니다. 브라우저에서 실행되고 서버 설치는 불필요합니다. 실행하면 아래 화면과 같이 테스트할 수 있습니다.
Chat GPT로 챗봇 파이썬 코드
Chat GPT로 챗봇을 만드는 파이썬 코드입니다. "YOUR-API-KEY"는 Chat GPT API 홈페이지에서 생성하시면 됩니다. 회원가입하여 초기 크레딧이 제공되면 소진 전까지는 비용이 발생하지 않습니다. 크레딧으로 파인튜닝하시거나, 인터넷에 챗봇을 공개하시면 요금 폭탄이 발생할 수 있습니다. "YOUR-API-KEY" 누출 또한 요금 폭탄의 원인이 될 수 있으니 주의하시기 바랍니다. 얼마 이상 요금이 발생하지 않도록 설정이 가능하니 이용하시기 전 설정해두시는 것도 좋겠습니다.
pip install openai를 터미널에서 실행하여 라이브러리를 설치하셔야 합니다.
g_messageList 정의를 함수 밖, 글로벌 변수로 정의하여 챗봇이 대화 이력을 기억하여 답변을 하도록 구현되었습니다. 대화가 쌓일수록 토큰 양도 많아지므로 요금이 점점 더 많이 발생합니다.
model="gpt-3.5-turbo", 부분에 모델을 변경하면 용도에 맞는 모델 설정이 가능합니다.
사용 가능한 모델을 정리합니다.
# pip install openai
from flask import Flask, jsonify,render_template, request
from flask_socketio import SocketIO
CHAT_MODEL_CONTEXT = """
You are a student living in New York.
"""
from openai import OpenAI
client = OpenAI(api_key="YOUR-API-KEY")
g_messageList = [
{"role": "system", "content": CHAT_MODEL_CONTEXT}
]
completion = client.chat.completions.create(
model="gpt-3.5-turbo",
messages = g_messageList
)
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
@app.route('/')
def chat_ui():
return render_template('chat01.html')
@socketio.on('message')
def handle_message(data):
global jsonData
global chat
socketio.emit('message', data)
dicMessage ={}
dicMessage["role"] = "assistant"
dicMessage["content"] = data
g_messageList.append(dicMessage)
response = ""
if 1:
completion = client.chat.completions.create(
model="gpt-3.5-turbo",
messages= g_messageList
)
response = completion.choices[0].message
dicMessage ={}
dicMessage["role"] = "assistant"
dicMessage["content"] = response.content
g_messageList.append(dicMessage)
print(f"size dicMessage:{len(g_messageList)}")
socketio.emit('message', response.content)
else:
response=""
socketio.emit('message', response)
if __name__ == '__main__':
socketio.run(app, debug=True, host='0.0.0.0', port=5000, allow_unsafe_werkzeug=True)
, allow_unsafe_werkzeug=True가 없으면 아래 오류가 발생합니다.
RuntimeError: The Werkzeug web server is not designed to run in production. Pass allow_unsafe_werkzeug=True to the run() method to disable this error.
Chat GPT로 챗봇 html 코드
chat01.html을 templates 폴더에 생성해두고 실행 후, 브라우저 주소 창에 localhost:5000으로 접속하시면 됩니다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Chat App</title>
<style>
#messages { list-style-type: none; margin: 0; padding: 0; }
#messages li { padding: 5px 10px; }
#messages li:nth-child(odd) { background: #eee; }
#message { margin-top: 10px; }
</style>
</head>
<body>
<ul id="messages"></ul>
<input id="message" autocomplete="off"><button onclick="sendMessage()">Send</button>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/3.1.3/socket.io.min.js"></script>
<script type="text/javascript">
var socket = io();
function sendMessage() {
var messageInput = document.getElementById('message');
socket.emit('message', messageInput.value);
messageInput.value = '';
}
socket.on('message', function(msg) {
var messages = document.getElementById('messages');
var li = document.createElement('li');
li.textContent = msg;
messages.appendChild(li);
window.scrollTo(0, document.body.scrollHeight);
});
var input = document.getElementById("message");
input.addEventListener("keyup", function(event) {
if (event.keyCode === 13) {
event.preventDefault();
sendMessage();
}
});
</script>
</body>
</html>
Chat GPT 모델 정리
MODEL FAMILIES | models |
---|---|
Newer models (2023–) | gpt-4 , gpt-4-turbo-preview , gpt-3.5-turbo |
Updated legacy models (2023) | gpt-3.5-turbo-instruct , babbage-002 , davinci-002 |
GPT-4: GPT-4는 최신의 대규모 언어 모델 중 하나로, 그 전버전인 GPT-3.5에 비해 더 많은 데이터로 학습되었으며, 더욱 복잡한 언어 이해 및 생성 능력을 가집니다. 이 모델은 더 정교한 문맥 이해, 더 나은 텍스트 생성, 그리고 전문적인 지식 영역에서도 향상된 성능을 제공합니다.
GPT-4-turbo-preview: GPT-4의 더 빠른 변형으로, 특히 대화형 애플리케이션을 위해 설계되었습니다. 이 모델은 GPT-4의 강력한 언어 처리 능력을 유지하면서 응답 시간을 단축시키고, 비용 효율성을 높이는 것을 목표로 합니다.
GPT-3.5-turbo: GPT-3.5 버전을 기반으로 하는 또 다른 변형으로, 기존 GPT-3.5 모델에 비해 더 빠르고 경제적인 운영이 가능합니다. 이 모델은 특히 대규모 언어 모델을 사용하는 애플리케이션에 적합하며, 빠른 응답 속도를 요구하는 환경에서 유용합니다.
GPT-3.5-turbo-instruct: 이 버전은 GPT-3.5-turbo 모델을 기반으로 하면서, 사용자의 지시에 더 잘 따르도록 최적화되었습니다. 이는 사용자가 더 명확하고, 직접적인 결과를 얻을 수 있게 돕습니다.
Babbage-002: Babbage 모델 시리즈 중 하나로, 특정 작업에 대한 중간 수준의 성능을 제공합니다. 이 모델은 대규모 언어 모델보다 작아서 비용 효율적이며, 여전히 다양한 언어 처리 작업에 충분한 성능을 제공합니다.
Davinci-002: Davinci 모델 시리즈 중 하나로, GPT-3 시리즈의 고성능 버전입니다. 이 모델은 복잡한 언어 이해와 생성 작업에 적합하며, 광범위한 주제와 문맥에 대해 높은 수준의 성능을 보여줍니다.
Chat GPT로 챗봇 파인튜닝하기
아래 코드 부분에 챗봇의 사전 교육자료를 넣어둘 수 있습니다.
CHAT_MODEL_CONTEXT = "You are a student living in New York."
그러나, 내용이 많아지면 질문할 때마다 이 내용이 항상 전달되므로 요금이 과다 발생할 수 있습니다. 또한 context(사전 교육 자료)의 용량이 커지면 답변 응답 속도가 점점 느려집니다. 이것을 해결하기 위해서는 파인 튜닝이 필요합니다. 파인튜닝은 chat GPT 파인튜닝 홈페이지에서 가능합니다.
아래와 같이 json파일을 생성하여 위 링크에 파인튜닝을 생성하여 업로드하시면 학습을 시작합니다.
{"messages": [{"role": "user", "content": "req1"}, {"role": "assistant", "content": "res1"}]}
{"messages": [{"role": "user", "content": "req2"}, {"role": "assistant", "content": "res2"}]}
아래 사항이 지켜지지 않으면 학습 중 fail이 발생합니다.
-
개행문자는 '\r\n'이 아니고 '\n' 만 사용한다.
-
위 예시 처럼 큰 따옴표를 써야한다. 스트링 내부에 인용부호를 쓸려면 작은 따옴표를 사용한다.
-
UTF-8로 저장한다.
학습이 success하면 아래 코드를 수정하면 됩니다. 파인튜닝 홈페이지 Model 항목에 'ft:' 로 시작하는 스트링을 'gpt-3.5-turbo' 자리에 붙여넣기한 후 실행하면 됩니다.
model="gpt-3.5-turbo",
Chat GPT로 챗봇을 만드는 코드를 배포하실 때는 gunicorn을 사용하시면됩니다.
그러나, 내 PC로 배포하는 것은 IP도 바뀌고 계속 켜두기 어려우니 서버에 올리는 방법이 있겠습니다만 비용이 발생하니, 아래 방법이 있습니다.
-
구름IDE를 이용하는 방법 (구름IDE API서버 만들기 2)
-
colab에 ngrok을 이용하는 방법 (코랩 이용 API서버 만들기 1)
gunicorn을 이용한 배포 방법
Chat GPT로 챗봇 만들기
Chat GPT로 챗봇 이미지 생성하기
Vertex AI로 챗봇 만들기
Google AI studio(Gemini) 로 챗봇 구현
Claude로 챗봇 만들기
챗팅창 화면 꾸미기
텔레그램으로 챗GPT 봇 만들기