Django templates은 html을 관리하는 용도라고 했다.
그래서 html 파일을 담고 있다.
한 가지 기억하면 좋을 건, chatbot/templates/chatbot/ooo.html 이런식으로 경로가 있을 것을 권장한다는 점.
AI chatbot 을 만들고 있다.
지난 번에는, chatroom.html을 작성하는 것까지 했다.
이번에는 chatroomlist.html을 작성해볼건데, 마찬가지로 chatGPT에게 물어볼 것이다.
참고로, 나는 결제해서 사용하고 있어서 GPT최신버전이다.
GPT에게, chatroomlist.html도 만들어줄래? 라고만 물어봤는데,
물론이죠! chatroomlist.html 파일은 각 채팅방의 목록을 보여주는 간단한 템플릿입니다. 각 채팅방을 클릭하면 해당 채팅방 페이지로 이동하도록 링크도 추가해드릴게요.
라고 답을 주었다.
기가 막힌다.
각 채팅방을 클릭하면 해당 채팅방 페이지로 이동하는 링크도 필요했는데, 그 기능도 추가해준다고 하니.
chatroomlist가 이렇게 딱.
4번 챗룸을 클릭하면
이렇게 잘 보여준다.
이제는, chatroom 안에서, 새로운 메시지를 입력할 수 있는 기능을 넣을 것이다.
그리고나서 나중에는, AI가 연동되어서 대답도 해주는 기능을 넣을 것이다. 일단 하나씩 차근 차근 하자.
이번에도 마찬가지로 chatGPT에게, 해당 기능을 구현해달라고 했고,
정말 약간의 수정만으로 완성이 되었다.
send를 보내면, 바로 리다이렉트에 리프레쉬가 되어서 바로 처리가 된 걸 보여준다.
그러면 이제는 메시지 send (질문 하는 기능, 말을 거는 기능) 하는 것을 했으니 응답을 가지고 오는 걸 해야 한다.
시작하기 전에, 공학의 두 기둥, 최적화와 복잡성 관리가 필요하다.
최적화라는 걸 내 대학 전공으로 많이 배웠던 것 같은데, 최적화가 뭐냐고 한 문장으로 설명하자면,
자원의 효율적 활용? 으로 생각하고 있다.
여기서, 복잡성 관리를 나는 그렇게 생각해본 적이 없는 것 같다.
복잡성 관리는 곧 모듈화라고 말한다.
모듈화를 해야, 복잡성 관리가 된다는 것.
자, 그러니까 모듈 단위로 생각을 해보자.
먼저,
응답을 하는 모듈 - 이 필요하다.
AI(LLM)와 소통하는 모듈 - 이 필요하다.
여기서, chatGPT한테 물어보자.
사용자가 메시지를 입력하는 경우 봇이 자동으로 랜덤한 응답을 하는 코드를 짜줘.
장고 프로젝트이며 뷰 코드와 모델 코드는 아래와 같아.
~~
라고 해서 프롬프트를 넣어보자.
BOT_RESPONSES = [
"안녕하세요! 어떻게 도와드릴까요?",
"좋은 하루 되세요!",
"제가 이해할 수 있도록 다시 한번 설명해 주세요.",
"알려주셔서 감사합니다!",
"흥미로운 질문이네요!",
"계속 대화해 주세요!",
"기다리고 있었어요! 질문이 있나요?"
]
이렇게 자동응답할 수 있도록 목록을 만들어주었다.
한 가지 공부하고 넘어갈 것은, 저렇게 처음부터 끝까지 다 대문자로, BOT_RESPONSES 라고 되어있는건 무슨 뜻으로 이해해야 하는걸까?
BOT_RESPONSES와 같이 변수명을 대문자로 표기하는 것은 **상수(constant)**로 사용된다는 의미를 전달하기 위해서입니다. 상수는 코드에서 변경되지 않는 고정된 값을 가리키며, 이와 같이 대문자로 표시함으로써 변수의 용도와 특성을 명확하게 알 수 있습니다.
왜 상수를 대문자로 표기할까?
- 가독성 향상: 대문자로 표기된 변수는 그 값이 일반적인 변수처럼 변경되지 않을 것이라는 의도를 전달합니다. 이는 코드 리뷰나 유지 보수 시 다른 개발자가 쉽게 이해할 수 있게 도와줍니다.
- 일관성 유지: 대부분의 프로그래밍 언어 및 코딩 스타일 가이드에서 상수는 대문자로 표기하도록 권장합니다. 이는 코드의 일관성을 높여 가독성을 높이는 데 기여합니다.
- 의미 전달: 상수를 대문자로 작성하면, 해당 변수의 값이 바뀌지 않을 것이라는 의미를 강조해줍니다. 이런 표기 방식은 특히 큰 프로젝트나 팀 작업에서 중요합니다.
상수의 일반적인 예시
상수는 보통 변경될 필요가 없는 값을 정의할 때 사용됩니다. 예를 들어:
- API_URL: 애플리케이션이 특정 API에 접근하는 경우 URL이 바뀌지 않는다면 API_URL이라는 상수로 정의해 관리할 수 있습니다.
- MAX_CONNECTIONS: 동시에 허용되는 최대 연결 수가 고정된 경우, MAX_CONNECTIONS로 정의해 사용할 수 있습니다.
- BOT_RESPONSES: 앞서 설정한 것처럼, 봇의 응답 목록이 고정된 경우, 상수로 정의해 코드의 의도를 명확히 표현할 수 있습니다.
파이썬에서 상수 사용에 대한 관례
파이썬에는 상수를 언어 차원에서 강제하지는 않지만, PEP 8 (Python의 스타일 가이드)에서는 상수를 대문자와 밑줄(_)로 구성된 이름으로 정의하라고 권장하고 있습니다. 이러한 관례를 따름으로써, 상수와 일반 변수 간의 차이를 명확히 구분할 수 있습니다.
요약하자면, BOT_RESPONSES를 대문자로 표기함으로써 **“이 값은 고정되어 변경되지 않는다”**는 의도를 전달하는 것이죠.
chatGPT의 도움을 받아서, 메시지를 보내면 자동으로 응답해주는 기능을 구현했다.
지금은 응답을 위한 목록에서 랜덤으로 골라서 응답해주는 것만 구현한 것.
그러면 다음은, AI(LLM) API와 연결하는 것이 필요하다.
AI(LLM) API 연결은 다음 포스팅으로.