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가 없으면 아래 오류가 발생합니다.
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 | https://api.openai.com/v1/chat/completions |
Updated legacy models (2023) | gpt-3.5-turbo-instruct , babbage-002 , davinci-002 | https://api.openai.com/v1/completions |
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을 사용하시면됩니다.
gunicorn을 이용한 배포 방법
Chat GPT로 챗봇 만들기
Chat GPT로 챗봇 이미지 생성하기
Vertex AI로 챗봇 만들기
Google AI studio(Gemini) 로 챗봇 구현
Claude로 챗봇 만들기
챗팅창 화면 꾸미기