상세 컨텐츠

본문 제목

동적기억장치 구현하기

AI와 동고동락, 좋은 파트너

by 쭈미k 2024. 4. 6. 12:43

본문

728x90
내가 원하는 채팅 모델 = 사용자와 대화를 기억하고 이전 대화내용을 기반으로 이후 대화내용을 이어가는 방식

 

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 프로그래밍에 따른 응답을 표시해주게 된다.

 

이런식으로 대화 데이터를 저장하고 세션을 관리하는 기능을 추가하면 다음번 대화를 진행할 수 있는 동적 기억 장치 구현이 가능하다.
그만큼 추가적인 코드와 시스템 설계가 필요되며, 보안과 프라이버시 관련 사항도 생각해야한다.

관련글 더보기