Vertex AI로 챗봇 만들기

Vertex AI로 챗봇을 만들어 보겠습니다. Vertex AI는 구글이 만든 언어 모델입니다. Google AI studio는 진입 장벽을 낮춘 언어 모델입니다. Vertex AI는 상용 서비스 개발을 위한 언어 모델입니다.

Vertex AI는 보안에 철저히 신경 쓴 느낌입니다. API를 실행하기 위해서는 절차가 많은 편입니다만 Google Cloud를 사용하면 API key 조차도 필요가 없습니다. 회원가입하면 크레디트가 제공되므로 회원가입하셔서 테스트해 보시기 바랍니다. 요금 폭탄은 주의하세요. 체험 기간 동안은 요금이 초과되어도 과금되지는 않는 것 같아요.

브라우저에서 실행하면 위와 같이 확인할 수 있습니다.

Vertex AI로 챗봇 만드는 파이썬 코드

구글 클라우드 계정이 만들어 졌다면 Compute Engine에서 VM을 만들고 project도 만들어야합니다.
project는 여기 홈페이지에서 만들 수 있습니다.

만들어진 project 명을 아래 ‘myproject’에 입력해줍니다.

location는 모델이나 데이터 셋의 위치를 입력합니다.

# pip install google-generativeai
#!pip install --upgrade google-cloud-aiplatform

from flask import Flask, render_template
from flask_socketio import SocketIO

import vertexai
from vertexai.language_models import ChatModel, InputOutputTextPair


app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)

# location에는 자신이 생성한 프로젝트의 위치를 입력해줘야함
vertexai.init(project="myproject", location="us-central1")
chat_model = ChatModel.from_pretrained("chat-bison-32k@002")
parameters = {
    "max_output_tokens": 1024,
    "temperature": 0.9,
    "top_p": 1
}
chat = chat_model.start_chat(
    context="""""",
    examples=[
        InputOutputTextPair(
            input_text="""my request 1""",
            output_text="""your response 1"""
        ),
        InputOutputTextPair(
            input_text="""my request 2""",
            output_text="""your response 2"""
        )
    ]
)


@app.route('/')
def chat_ui():
    # 'chat01.html'은 실제 채팅 UI를 구성하는 HTML 파일이어야 합니다.
    return render_template('chat01.html')

@socketio.on('message')
def handle_message(data):
    print('Received message:', data)
    socketio.emit('message', data)
    # 클라이언트로부터 받은 메시지를 처리하고 응답을 전송합니다.
    # 예제에서는 단순히 받은 메시지를 그대로 다시 보냅니다.
    response = chat.send_message(data, **parameters)
    print(f"Response from Model: {response.text}")

    socketio.emit('message', response.text)

if __name__ == '__main__':
    socketio.run(app, debug=True, host='0.0.0.0', port=80, allow_unsafe_werkzeug=True)

Vertex AI로 챗봇 만들기 html 코드

<!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>

Vertex AI로 챗봇 만들기 파인튜닝

파인튜닝 자료의 json파일은 아래 조건을 만족해야합니다.

  • 개행문자는 ‘\r\n’이 아니고 ‘\n’ 만 사용한다.
  • 위 예시 처럼 큰 따옴표를 써야한다. 스트링 내부에 인용부호를 쓸려면 작은 따옴표를 사용한다.
  • UTF-8로 저장한다.

위 사항이 지켜지지 않으면 학습 중 아래 오류가 발생합니다.

The DAG failed because some tasks failed. The failed tasks are: 

Chat GPT로 챗봇 만들기
Vertex AI로 챗봇 만들기
Google AI studio(Gemini) 로 챗봇 구현
Claude로 챗봇 만들기
챗팅창 화면 꾸미기

Leave a Comment