AI 부트캠프/챕터5(12.30~01.31)

TIL 75

musukie 2025. 1. 6. 22:33

Quizbot 모델

퀴즈를 생성하고 그를 저장하고, 사용자의 답변을 입력받고 그를 저장하고, 퀴즈 결과를 계산하고 그를 저장하기 위해 새로운 모델들을 만들었다. 기존에는 Quiz, Question, Choice 모델 3가지만 존재했다. 그러나 데이터베이스의 부담을 줄여야 할 것 같아서 퀴즈를 생성하고 나면 기존의 데이터들은 사라지고, 꼭 필요한 데이터만 남겨놓기 위해 모델을 따로 만들게 되었다.

class QuizSetting(models.Model):
    TYPE_CHOICES = [("4지선다", "4지선다"), ("단답형", "단답형"), ("OX", "OX")]
    DIFFICULTY_CHOICES = [("쉬움", "쉬움"), ("보통", "보통"), ("어려움", "어려움")]
    LEVEL_CHOICES = [("초급", "초급"), ("중급", "중급"), ("고급", "고급")]

    type = models.CharField(max_length=100, choices=TYPE_CHOICES)
    count = models.PositiveIntegerField()
    difficulty = models.CharField(max_length=100, choices=DIFFICULTY_CHOICES)
    level = models.CharField(max_length=100, choices=LEVEL_CHOICES)

class QuizResult(models.Model):
    # user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title = models.CharField(max_length=100)  # 퀴즈 제목
     description = models.TextField()  # 퀴즈들에 대한 전체적인 설명
    result = models.JSONField()

class QuizResultQuestion(models.Model):
    quiz_result = models.ForeignKey(QuizResult, on_delete=models.CASCADE, related_name="result_questions")
    question = models.JSONField()
    choice = models.JSONField() 
    answer = models.JSONField()

필요할 지도 몰라서 일단 모델에 대한 시리얼라이저도 작성해주었다.

from rest_framework import serializers
from .models import Quiz, Question, Choice

# 퀴즈
class QuizSerializer(serializers.ModelSerializer):
    class Meta:
        model = Quiz
        fields = '__all__'

# 문제
class QuestionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Question
        fields = ['content', 'answer_type']

class ChoiceSerializer(serializers.ModelSerializer):
    class Meta:
        model = Choice
        fields = ['content']

각각의 요청에 대한 url도 작성해주었다.

urlpatterns = [
    path('request/', views.QuizRequestView.as_view(), name='quiz-request'),
    path('<int:quiz_id>/', views.QuizAPIView.as_view(), name='quiz-detail'),
]

views.py 파일에 뷰도 만들어주었다. 뷰를 만드는 작업이 항상 제일 어렵다.
우선, QuizRequestiew를 만들어주었다. post 요청을 통해 퀴즈를 생성하고, get 요청을 통해 생성된 퀴즈를 조회할 수 있다.

QuizAPIView도 만들어주었다. post 요청을 통해 사용자의 답변을 제출할 수 있고, get 요청을 통해 사용자가 제출한 답변과 그에 해당하는 문제와 보기, 정답 여부 등을 조회할 수 있다. 특히, post 요청 함수 부분에는 사용자의 답변을 토대로 점수를 계산할 수 있는 로직도 추가하였다. is_correct라는 값을 통해 사용자가 정답을 맞췄을 경우를 구분하여 점수를 계산할 수 있다.

피드백 체인

피드백 체인을 구성하기 위해 혼자 여러 시도를 해보았다. 우선 지금은 퀴즈를 생성하는 llm과 그 체인이 만들어져있었다. 이와 연결되는 피드백 체인을 생성해야 했다.

llm을 배운 지 오래되다 보니, 다시 예전의 강의들을 복습하게 되었다. 복습하는 시간을 가진 후, 피드백 체인을 만들기 시작했다. 그러나 이미 다른 조원분이 만들어놓은 llm 체인에, 내가 만든 피드백 체인이 계속 연결되지 못했다. 각각 따로 실행하면 각각은 잘 실행되었지만, 이 둘을 연결하게 되면 문제가 계속 발생했다. 혼자서는 도무지 해결되지 않아서, 결국 다른 조원분들께 도움을 요청하기로 했다.

'AI 부트캠프 > 챕터5(12.30~01.31)' 카테고리의 다른 글

TIL 77  (0) 2025.01.07
TIL 76  (0) 2025.01.06
TIL 74  (0) 2025.01.06
TIL 73  (0) 2025.01.06
TIL 71  (0) 2025.01.02