내가 원하는 채팅 모델 = 사용자와 대화를 기억하고 이전 대화내용을 기반으로 이후 대화내용을 이어가는 방식
1. 데이터 저장소 : 채팅을 저장하기 위한 관련 라이브러리나 파일 시스템을 다룰 수 있는 모듈을 추가로 가져와야 한다.
데이터베이스는 SQLite, PostgreSQL, mySQL 등이 존재한다. 각각에 맞는 라이브러리가 필요하다. 예를 들어 SQLAlchemy*를 사용한다고 하면, (SQLAlchemy가 뭔지 모른다면 조금 아래에 설명해두었다.)
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///your_database.db' # 데이터베이스 경로 설정
db = SQLAlchemy(app)
이렇게 사용한다.
2. 세션 관리 : 이전 대화를 관리하기 위한 Flask의 세션 관리 기능을 사용하거나 외부 세션 관리 시스템을 사용해야한다. 사용자 고유 id를 기반으로 세션을 구분하고 해당 세션에 대화 데이터를 저장한다.
from flask import session
app.secret_key = 'your_secret_key'
또는 Redis, Memcached같은 세션 저장소를 사용하는 확장 기능을 설치해서 사용한다.
3. 사용자와 대화할 모델 정의. 이 모델은 Flask 어플리케이션과 연동되어 사용자의 대화를 저장하고 필요할때 검색하거나 업데이트할때 사용된다.
class UserConversation(db.Model):
id = db.Column(db.Integer, primary_key=True) # 각 대화를 구별하기 위한 고유 ID
user_id = db.Column(db.String(80), unique=True, nullable=False) # 사용자를 구별하기 위한 고유 식별자
conversation = db.Column(db.Text, nullable=False) # 사용자의 대화 내용을 저장하는 필드
해당 코드의 UserConversation은 SQLAlchemy의 모델 클래스를 상속받아 정의되며 데이터베이스 테이블과 매핑된다.
id는 대화의 고유 식별자로 사용되며 데이터베이스에서 자동으로 관리된다. 각 대화 항목마다 고유한 숫자가 할당되어 순차적으로 증가한다.
user_id는 사용자를 구별하는데 사용된다. 이메일주소나 사용자명을 저장한다.
unique=True는 각 사용자 id가 테이블 내에서 유일해야하는 것을 의미한다. 중복 아이디가 안된다는 말이다.
conversation은 실제 사용자와 AI간 대화를 저장하는 필드이다. 텍스트 형식만 저장되며 nullable=False는 해당 필드가 비어 있으면 작동하지 않게 한다.
이런 모델을 사용하면 사용자별 대화 내용을 데이터베이스에 저장하고 이후 사용자가 새로운 메시지를 보낼 때 이전 대화 내용을 조회하여 AI가 이를 참조할 수 있게 한다. 그럼 AI가 이전 맥락을 이해하고 대화를 이어나갈 수 있게 된다. 데이터베이스에 대화내용을 저장하면 서버가 재시작되거나 충돌이 발생해도 대화 내용이 유지되어 동적 기억이 휘발되지 않는다.
4. 사용자 대화로직 저장 : 대화 상태를 저장하고, 새로운 대화가 시작될 때 상태를 검색하여 이전 상황을 반영하는 로직을 추가한다. 예로 SQLAlchemy를 사용하여 데이터베이스 관리 기능을 추가하면 import문에 다음을 추가할 수 있다.
from flask_sqlalchemy import SQLAlchemy
대화 로직 저장은 다음과 같다.
@app.route('/chat', methods=['POST'])
def chat():
user_id = request.json.get('user_id')
message = request.json.get('message')
# 기존 대화 내용 검색
conversation = UserConversation.query.filter_by(user_id=user_id).first()
# 대화 내용이 없다면 새로운 대화 시작
if not conversation:
conversation = UserConversation(user_id=user_id, conversation=message)
db.session.add(conversation)
else:
# 기존 대화 내용 업데이트
conversation.conversation += "\n" + message
db.session.commit()
# AI 모델로부터 응답 생성 (여기서는 예시로 처리함)
ai_response = generate_ai_response(conversation.conversation)
# AI 응답을 대화에 추가
conversation.conversation += "\n" + ai_response
db.session.commit()
return jsonify({'response': ai_response})
def generate_ai_response(conversation):
# 여기에 AI 대화 모델을 호출하는 코드를 구현합니다.
pass
해당 코드는 generate_ai_response 함수가 AI 대화 모델이 생성하는 응답을 받아오는 함수이다. 실제로 여기에 AI 모델을 통해 응답을 생성하고 반환하는 코드를 작성해야한다.
SQLAlchemy*
SQLAlchemy는 컴퓨터 프로그램이 데이터베이스에 쉽게 이야기를 할 수 있게 도와주는 도구이다.
데이터베이스는 많은 정보, 즉 사람들 아이디나 대화 내용을 정리해서 보관하는 곳이다.
컴퓨터는 데이터베이스와 이야기할때 컴퓨터 언어를 사용하는데 이걸 SQL이라고 한다.
SQL을 더 쉬운 방법으로 제공하는 도구가 SQLAlchemy이다.
즉, 개발자가 python이라는 프로그래밍 언어로 명령을 내리면 SQLAlchemy가 SQL로 바꿔서 데이터베이스에 전달해주는 것이다.
그럼 데이터베이스에서 요청한 python 프로그래밍에 따른 응답을 표시해주게 된다.
chatGPT-4o 사용 방법, 맥OS 설치, 맥OS 가상 환경 생성 (0) | 2024.05.18 |
---|---|
생성형AI 모델 GAN 어떻게 작동하는 걸까? (0) | 2024.04.06 |
[트렌드 아티클]생성형AI는 예술의 '창작'을 대체할 수 있을까? (0) | 2023.12.09 |
생성형AI img->vid 간단한 애니메이션 구현 (0) | 2023.12.07 |
생성형 AI 프롬프트 결과물 비교 (스테이블 디퓨전/DALL E/미드저니/ideogram) (1) | 2023.11.20 |