TIL

👀Today I Learn

구현하기

  • urls.py
    • 가장 먼저 url을 구현
    • /chatbot/ 링크에서 에서 바로 이용할 수 있도록 하였음!
      from django.urls import path
      from . import views
    
      app_name = 'chatbot'
      urlpatterns = [
          path('', views.py_tutor, name='py_tutor'),
      ]
    
  • models.py
    • 모델은 유저의 질문과 챗봇의 답변만 설정하여 질문에 답변만 매칭되도록 구현

      from django.db import models
      
      class Chatbot(models.Model) :
          user_message = models.TextField()
          gpt_message = models.TextField()
      
  • bot.py
    • 내 질문에 답변을 해줄 챗봇 설정

      import openai
      from dotenv import load_dotenv
      import os
      
      # .env 파일에서 환경 변수 로드
      load_dotenv()
      
      # API Key 설정
      openai.api_key = os.getenv("OPENAI_API_KEY")
      
      def gpt(message) :
          prompt = """
          너는 파이썬 함수를 알려주는 서포터야.
          내가 파이썬 함수를 입력하면, 함수의 역할과 사용방법에 대해 알려주고 간단한 예시도 알려줘.
          """
          response = openai.ChatCompletion.create(
              model="gpt-3.5-turbo",
              messages=[
                  {
                      "role": "system", 
                      "content":prompt,
                  },
                  {
                      "role": "user",
                      "content":message,
                  }
              ]
          )
          return response['choices'][0]['message']['content']
      
  • view.py
    • 이 부분에서 고민을 많이 했는데, 답변이랑 질문이 같이 보이는게 좋을 것 같아서 히스토리 형식으로 10개만 보이도록 셋팅함!

      from django.shortcuts import render, redirect
      from .models import Chatbot 
      from .bot import gpt
      
      
      def py_tutor(request) :
          if request.method == 'POST' :
              user_message = request.POST.get('user_message')
              if user_message :
                  bot_response = gpt(user_message)
                  Chatbot.objects.create(user_message=user_message, gpt_message=bot_response)
                  chat_history = Chatbot.objects.all().order_by('-pk')[:10]
                  context ={
                      "chat_history" : chat_history,
                  }
                  return render(request, 'chatbot/chatbot.html', context)
          return render(request, 'chatbot/chatbot.html')
      
  • chatbot.html
    • html은 아직도 좀 어려워서 간단하게 아는 것들만 사용해서 구현(ChatGPT가 살짝 도와줬다.)
{% extends "base.html" %}

{% block content %}
    <h1>🤖hello! I'm Python Tutor</h1>
    <h2>모르는 파이썬 함수가 있다면 검색해보세요!</h2>
    <form method="POST">
        {% csrf_token %}
        <textarea name="user_message" rows="4" cols="50" placeholder="Ask me anything..."></textarea>
        <button type="submit">질문하기</button>
    </form>


        <ul class="history">
            {% for chat in chat_history %}
                <li class="history-item">
                    <p class="user-message"> 질문 : {{ chat.user_message }}</p>
                    <pre class="bot-response"> 답변 {{ chat.gpt_message }}</pre>
                </li>
            {% endfor %}


{% endblock content %}


에러 해결하기

APIRemovedINV1

  • runserver를 하고 처음 질문을 하니까 뜨는 오류..!

    Image

  • OpenAI의 ChatCompletion API가 이전 버전에서 제거되었거나 더 이상 지원되지 않음!

  • 💪해결하기

    • 0.28을 사용하라고 하여서 변경해주었음

      pip install openai==0.28
      

TemplateDoesNotExist

  • 템플릿을 찾을 수 없다는 오류가 떴다.

    Image

  • 💪해결하기

    • 이럴 땐 오타를 찾는게 최고라고 과제를 하면서 깨달아서 열심히 오타를 찾으로 다녀보니,
      • views.py에서 chatbot/chabot.html라고 적어놨다ㅠㅠ t 하나가 빠져버린..🥲 오타 조심해야지..

구현화면

  • 조금 꾸릿하지만 그래도 구현 완료!
    • HTML과 CSS가 해결되면 그래도 조금 낫지 않을까..
    • 여기에 질문시간을 추가하는 것도 좋을 것 같다.

      Image



💡Today I Thought

오늘의 체크리스트

  • 알고리즘 코드카타 256-260
  • SQL 코드카타 86-87
  • LLM 특강 내용 정리하기
  • LLM 과제
  • Docker 특강1 듣기
  • TIL 작성

회고

  Docker 강의까지 야무지게 듣는게 오늘 목표였는데, LLM 특강에서 과제가 나올거라고 누가 알았겠냐구요.. 생각보다 과제를 오래 붙잡고 있어서 오늘 목표는 다 못끝냈다.. 내일 시간내서 들어야지😭

  CH4가 시작되면서 조가 바뀌었다. 저번 조는 다같이 팀 노션도 호로록 작성하고, 간략한 것들을 정한 뒤에 학습을 시작했다. 이번 주차에는 팀과제가 있어서 조금 더 빡세게 공부해야할듯💪

댓글남기기