PiLab-CAU / OpenSourceProject-2401

Example OpenSourceProject-2401
Apache License 2.0
10 stars 0 forks source link

[demo][9조] 일본 여행 advisor #21

Closed skwent77 closed 4 months ago

skwent77 commented 5 months ago

Tripper: OpenAI를 활용한 일본 여행 일정 생성 서비스


Tripper Mate

9조 프로젝트 개요

본 프로젝트는 OpenAI를 활용하여 일본 여행 일정을 생성하고 개선해주는 여행 계획 서비스입니다. few shot prompting 방식으로 프롬프트 튜닝을 진행한 상태고 그래서 여행 코스 형식이 일관됩니다. GPT로 여행정보 받는 과정에서 야스쿠니 신사 같이 한국인이 싫어할만한 관광지를 추천해주는데 저희는 추천 리스트에서 제거하는 방안을 moderation 고려중입니다.

개발 예정 추가 기능 (우선순위에 따라 적었습니다)

데모 링크

🔗 배포된(V1.2.0) 웹 서비스로 바로가기 Click ! 👈
화면 오른쪽 위에 가이드라인 존재하지만 밑의 4줄 설명은 꼭 읽어주세요.
항공편은 인천 국제 공항 출발 기준으로 조회를 합니다. 훗카이도(삿포로 안에 포함)나 간토(도쿄도의 1도 6현 포함) 같은 지역을 선택해주시면 비행기편을 조회할 수 있습니다. 간사이 공항 직항이나 시코쿠 공항은 도쿄 직항 항공편에 비해 잘 운행되지 않습니다. 해당 날짜에 오전에 출발하는 항공편이 여석이 없거나 아예 항공편이 없을 경우, 비행기 정보가 나오지 않습니다. 질문들에 대해, "너가 정해" 옵션과 "나 혼자 가" 옵션은 사용하지 말아주세요. form 입력값을 다 넣어주세요. 날짜도 기본 값 현재 날짜 사용하지 마시고, 꼭 선택해주세요. 일정 수정은 여행 코스 생성보다도 시간이 더 걸립니다. 일정 수정하고 나서 ngnix 에러가 뜨기도 하는데, baseUrl로 접근해서 본인의 채팅방을 다시 찾아들어간다면 수정된 코스 확인하실 수 있습니다. 본인의 채팅방은 동시 접속자가 없다면 네비게이션바 가장 위쪽에 있을 겁니다.

{baseUrl}/chat/{chat_id} 형식의 url로 접속하시면, 여러 채팅방의 내용을 확인하실 수 있습니다. 서버 안에 데이터베이스도 있기 때문에 여행 코스 생성하시면 db에 저장이 됩니다. 확인이 잘 안되는 경우 본인의 chat_id를 기억하고 있다가 3분 정도 후에 다시 baseUrl로 접속한 후에 방을 누르면 여행 코스 조회 가능합니다. 수정도 같은 방식으로 부탁드립니다. 여행 코스 성공 예시입니다.

예시 화면

🔗 코드 저장소 바로가기 Click ! 👈 (196 커밋...)

👷 버전 기록

버전
업데이트 내용
업데이트 날짜
v1.2.0 - 일정 수정 작업(프롬프트) 05.10 2:00
v1.0.2 - 프론트 재배포 05.10 1:00
v1.0.1 - 비행기 숙박 에러 수정 05.09 23:00
v1.0.0 - 홈 화면 및 여행 코스 생성 오픈 05.08 자정

Tripper의 주요특징

1. 개인화된 여행 일정 추천

2. 대화형 일정 수정 기능

3. 최신 여행 데이터 반영을 통한 더 나은 정보 제공

4. RAG 활용

5. 구글맵을 통한 여행일정 정보제공

💡 Tripper의 서비스 이용 법은 다음과 같습니다.

  1. 첫 화면에서 일정 생성하기를 누릅니다.
스크린샷 2024-06-21 오후 8 25 20
  1. 일정생성을 위한 정보를 입력합니다. 입력이 완료 되었으면 코스 생성을 누릅니다.
스크린샷 2024-06-21 오후 8 30 34

3.왼쪽 사이드 바에서 본인이 생성한 여행 일정을 눌러 일정을 확인합니다.

스크린샷 2024-06-21 오후 8 34 26

4.일정 수정을 원할 경우 일정 맨 마지막에 있는 텍스트 창을 통해 수정 요청을 합니다. 텍스트를 입력후 텍스트 오른쪽에 있는 새로고침 버튼을 누릅니다.

스크린샷 2024-06-21 오후 8 36 10

5.지도정보는 숙소(노란색), 일정(빨간색), 행사일정(초록색)에 대한 위치를 제공합니다. 마커를 누를 경우 상세 정보가 뜹니다.

스크린샷 2024-06-21 오후 8 38 12
  1. 지도정보 아래에는 지방별 행사정보를 보여줍니다.
스크린샷 2024-06-21 오후 8 39 52


GPT API 사용 원리

일단 저희가 제공하는 여행코스는 유저가 제출한 폼 정보 바탕으로 GPT의 chat completion api를 한 번 호출한 것입니다. 그 이후에는, 유저가 프롬프트로 여행 코스의 활동을 수정할 수 있습니다. 항공편과 숙박은 GPT로 받은 정보가 아니라서, 일자별 활동에 대해서만 수정이 가능합니다. GPT의 chat completion api를 호출하여 수정된 정보를 받아옵니다.



제안서 수정사항

팀원들의 언어 숙련도 문제로 구현 언어를 자바에서 파이썬으로 바꿨습니다. 프로젝트 제안 발표 때 학우분들이 주신 피드백은 다음과 같았습니다.

1) 기존의 GPT를 활용하여 여행 일정 생성하는 것과 차이점이 뭔지 모르겠다. (50%) - a),b),e)를 활용하여 해결 2) 사용자의 "취향"에 맞는 여행 정보를 보여주면 좋을 것 같은데 그럴 수 있을지 모르겠다. (40%) - e)를 활용하여 해결 3) GPT는 2021년 9월 이후의 정보는 알려주지 않는데, 여행 정보 추천은 GPT의 활용과 어울리지 않는다. (5%) - b),c) 를 활용하여 해결

1)은 peer review의 50% 정도가 지적해주신 사항이었습니다. 강의자료에서 듣기로 프로젝트 평가 요소에 창의성은 없었지만, 학우분들의 요청을 반영하여 제안서를 일부 수정했습니다.

저희가 고안해낸 위 피드백에서 제기한 부분들을 해결할 수 있는 방안은 다음과 같습니다. a) 일정 PDF로 만들어주는 기능
b) RAG를 활용하여, 21년 9월까지는 있었지만 그 이후에 사라진 호텔 정보 제거 c) skyscanner 활용하여 항공편 뿐만 아니라 호텔 정보까지 충분히 가져오기 d) 기존의 지피티가 주는 여행 정보에는 동선에 대한 고려가 충분하지 않기에, 동선은 시스템 프롬프팅으로 hallucination 방지 e) 사용자의 MBTI를 입력값으로 받고, 이 값을 충분히 활용하기 위해 미리 저장된 json 활용

💫 유의사항입니다.

  1. skyscanner 정책상 지난 날짜의 항공편 일정과 숙박 일정은 조회가 되지 않습니다.
  2. 10일 이상의 여행은 추천하지 않습니다.
  3. 일정 생성 시에는, 대화형 프롬프트가 제공되지 않고 기본적인 코스 생성 이후에 수정하는 부분에서 프롬프트가 제공됩니다.
  4. 채팅 사이드바는 아직 완전하지 않으니 본인이 생성한 채팅방 정보만 눌러주세요.
  5. 여행 일정이 무조건 출발 당일 오전부터 나오기 때문에, 일단 비행기를 오전 10시 이전 도착만 조회하도록 설정해둔 상태입니다.
  6. 처음화면에서 받은 정보를 GPT API를 통해 가공하지 않고 SKYSCANNER API를 통해 비행기와 숙소 정보를 가져오기 때문에 여행일수와 지역을 변경했을 때 비행기와 숙소 정보는 변하지 않으니 유의해주세요.

프로젝트 진행 상황

  1. (완료) 프론트와 서버 배포
  2. (완료) DB 서버에 세팅
  3. (예정) DB null 데이터 예외 처리
  4. (진행 중) Github Actions 적용
  5. (완료) GPT API Chat Completion 구현
  6. (예정) GPT chat hallucination
  7. (예정) GPT API Moderation
  8. (미정) Embedding 활용 여부, 항공편 왕복 검색 허용 여부



🔗 9조 프로젝트 발표자료 바로가기 Click !👈 🔗 최종디자인 바로가기 Click !👈

백엔드 기술 스택

NGiNX aws Jenkins docker
NGiNX aws  Github Actions docker

저희 일본 여행 서비스 아직 구현이 많이 안 된 부분이 많지만 즐겨주시면 감사하겠습니다. 데모 때, 본인이 생성하지 않은 채팅방 내용은 제발 누르지 말아주세요! 뒤로가기가 아직은 안 됩니다. 문의사항 있으시면 댓글로 남겨주셔도 되고 cau.tripper@gmail.com로 메일 주셔도 좋아요.

Tastypotato245 commented 5 months ago
image

화면이 안뜨다가, 새로고침 시 0.1초 동안만 노출되는 현상이 있습니다!!

스크린 샷 찍어보려했는데 잘 안되네요

현재 그래서 화면에 아무것도 안보입니다 ㅠㅠ

환경은

Macbook Air M1 | Chrome browser 입니다

skwent77 commented 5 months ago

아 네 규성님 안녕하세요. amazon cloudfront의 cors오류 때문이었습니다. 알려주셔서 감사합니다! 원래 저희 프로젝트에서 여행을 누구와 가냐고 묻는 질문은 몇명이서 가는지를 묻는 질문이었습니다. 번거로움을 드려 죄송합니다만, 누구와 가는 여행인가요에 숫자를 입력해주시면 감사하겠습니다. 예를 들어서, 숫자가 아니라 "친구"와 같은 문자열을 입력하면 failed to create form 경고문이 뜹니다.

sample image

image

너무 중요한 내용이다보니 상단 댓글에도 반영하겠습니다.

Tastypotato245 commented 5 months ago
image

ㅠㅠ 둘이서 간다니까 같이 갈 사람 없냐 그래요 ㅠㅠㅠ

image

위 두개에는 숫자만 적고 여행 스타일 식도락 여행으로 적었더니 안되네용

image

그리고 오마카세로 다 너보고 정하라 했는데 이것도 역시 안되네용 ㅠㅠ

image image

해결 되면 다시 하러 오겠습니다!~~~

skwent77 commented 5 months ago
  • 채팅방 생성시 하나라도 '너가 정해'를 선택하면 계속 오류가 발생합니다.
  • 05-08 오전 11:43 기준 chat 페이지에 접속하더라도, 쳇이 생성되지 않습니다. image
  • 자바스크립트 콘솔 오류도 혹시 몰라 첨부합니다 image

제가 오늘 오전에 데모 링크 바로 하단에 사용 가이드에 "너가 정해" 옵션은 사용하면 안 된다고 적어놨습니다.ㅜ 미리 적어놓지 못해서 죄송합니다. 데모 링크 하단의 유의사항 꼭 참고해주세요.

Tastypotato245 commented 5 months ago

제가 오늘 오전에 데모 링크 바로 하단에 사용 가이드에 "너가 정해" 옵션은 사용하면 안 된다고 적어놨습니다.ㅜ 미리 적어놓지 못해서 죄송합니다. 데모 링크 하단의 유의사항 꼭 참고해주세요.

아 그렇군요 날짜에 너가 정해가 있었네요 다시 해보겠습니다!! 빠른 응답 감사합니다

image

이젠 다른 오류가 뜨네요!!

서버 안정화 되면 다시 즐기러 오겠습니다!!

skwent77 commented 5 months ago

아 네 규성님 지금 amazon 무료 ec2라서 그런지 서버에 문제가 있어서 서버 새로 해서 재배포 후 말씀드리겠습니다. 아 지금 댓글 다시 보니 "너가 정해" 옵션 하셨는데 날짜도 마찬가지로 "너가 정해" 누르면 안 됩니다. 좀 더 자세히 말씀 드리면 null 정보가 지금 들어오는데, 그 case에 대한 처리가 안 되어 있어서 첫번째 에러가 뜬 것이고, 두번째 form fail 에러도 이미 db에 null레코드들이 들어있어서 발생한 거였습니다.

euije commented 5 months ago

안녕하세요~ 서비스를 사용하니까 정말 일본여행이 가고 싶어지네요~~ 첫번째 form을 입력했는데, Success창이 뜨고 여행코스 화면으로 넘어가지 않네요 ㅜㅜ 혹시 어떻게 확인해야할 수 있는 걸까요??

스크린샷 2024-05-08 오후 7 11 39
skwent77 commented 5 months ago

안녕하세요~ 서비스를 사용하니까 정말 일본여행이 가고 싶어지네요~~ 첫번째 form을 입력했는데, Success창이 뜨고 여행코스 화면으로 넘어가지 않네요 ㅜㅜ 혹시 어떻게 확인해야할 수 있는 걸까요?? 아 네네 안녕하세요. 왼쪽 채팅방 리스트에서 만드신 것 확인 가능하십니다. (5.8 수정) DB 레코드 한번 정리했기에 첨언을 하자면 여행 날짜 선택 오늘 날짜로 하셔도 좋은데 9일이나 그 이후 것으로 하면 됩니다. "너가 정해"는 안 됩니다. form정보는 잘 입력해주셨어요.

yjyoo3312 commented 5 months ago
image

저도 일본 여행 일정 잘 테스트 해보았습니다:) 일정 템플릿은 잘 만들어졌으나 지역이 약간 섞이는 것 같군요. 나중에는 채팅을 기반으로 하여 일정을 조금씩 수정할 수 있는 것을 목표로 하시는 것일까요?

kendsi commented 5 months ago

저도 일본 여행 일정 잘 테스트 해보았습니다:) 일정 템플릿은 잘 만들어졌으나 지역이 약간 섞이는 것 같군요. 나중에는 채팅을 기반으로 하여 일정을 조금씩 수정할 수 있는 것을 목표로 하시는 것일까요?

피드백 감사합니다 교수님! 나중에는 채팅을 기반으로 일정을 일부분 수정하는 기능을 추가할 예정입니다. 그리고 일정으로 나온 지역은 일단 선택하신 오키나와/규슈 지방내에 존재하지만, 오키나와와 규슈의 거리가 하루만에 이동하기에는 너무 먼 것을 확인했습니다. 추후에 두 지역을 따로 분리할 생각입니다.

MarcelMaxx commented 5 months ago

웹 링크를 열 수 없네요. Respond code는 200인데..

Screenshot 2024-05-10 at 12 45 59 AM (2) Screenshot 2024-05-10 at 12 45 40 AM

[Safari/Chrome]

skwent77 commented 5 months ago

아 네 안녕하세요! 저희가 공지를 하고 작업을 했어야 했는데 프론트 재배포 중이었습니다. 정말 죄송합니다. 아무래도 밤 시간이다보니 이용자가 없을 것이라고 생각했어요. v1.0.2 지금 배포된 상태입니다.

MarcelMaxx commented 5 months ago

이젠 잘 동작됐어요! 다름이 아니라 웹 설계가 진짜 멋있네요ㅋㅋ

skwent77 commented 5 months ago

이젠 잘 동작됐어요! 다름이 아니라 웹 설계가 진짜 멋있네요ㅋㅋ

ㅎㅎ 감사합니다. 이제 일정 수정도 되니까, 한 번 더 놀러오세요!

skwent77 commented 5 months ago

@euije @WickedFoxes @Tastypotato245 혹시 시간 되시면 다시 한번 저희 프로젝트 놀러오세요! 초반에 문제점 잘 알려주셔서 빠르게 수정하고 재배포 할 수 있었습니다. 정말 감사드립니다! 그리고 규성님 응원합니다.

yjyoo3312 commented 5 months ago
image

프롬프트가 추가되어서 여러가지 옵션 (1일 점심, 저녁, 2일 맥주) 추가해 봤는데 프롬프트에 맞게 일정이 잘 변경이 되는군요! 여기에 나중에는 추가된 장소 (이를테면 삿포로맥주박물관) 에 대한 간략한 설명 정도도 확인할 수 있게 해주면 좋지 않을까 싶습니다

LUCETE012 commented 5 months ago

5조 김여진입니다☘️

처음 일정을 정할 떄 일본 지역을 일본 지도에서 선택하면 어떨까 하는 생각이 들었습니다 ! 내가 가려는 쪽이 어디쪽인지 따로 찾아보지않아도 위치까지 확인할 수 있으면 좋을 것 같아요 !

일정이 생성되는 동안 귀여운 이모티콘이 움직이는 효과를 줘서 기다리는데 지루하지 않을 수 있었습니다.

여행 피드백 내용을 잘 수정하는 것 같습니다 !

image

일정을 지도에 위치를 표시하고 그 장소에 대한 정보도 나오면 더 좋을 것 같습니다 !!

kendsi commented 5 months ago

@LUCETE012

피드백 감사합니다! 말씀해주신 것들 중 지역 선택 시 지도를 사용하는 것은 충분히 추가 가능할 것 같습니다. 하지만 gpt가 생성한 일정을 동적으로 지도에 표시하기 위해서는 추가적인 서드파티 api가 필요할 것으로 보여, 팀원들과 논의가 필요해 당장 확답을 드리지는 못하겠습니다. 그래도 긍정적으로 검토해보겠습니다.

skwent77 commented 5 months ago

아 네 안녕하세요 여진님. 9조 백엔드 팀의 신재현입니다. 프로젝트 기능 추가 관련 의견 감사드립니다 일본에 관한 정보가 부족한 사람들을 위해서 지도를 보여주는 정도는 가능하지만, 말씀하신 것처럼 일정을 지도에 표시하려면 Google Map api가 필요할 것으로 보입니다. 저희 조는 Skyscanner API를 사용하고 있는데요. 협력기업이 아닌, 학생 개발자들에게 공식 API를 열어주지 않더라고요. 저희가 사용하는 버전은 API request 속도가 상당히 느립니다. aws ec2 t2.small 서버 스펙을 생각하면 구글 맵까지 연동하는 것은 리소스 로드가 임계를 넘어설 것 같습니다. 도커 기반의 컨테이너 환경을 유지해야할지도 고민하고 있을 정도입니다 😂 학기가 끝나고 나서 저희가 좀 더 공부를 해서 서버 스펙을 키우고 메모리 오버헤드 문제를 극복 할 수 있을 때 기능 추가가 가능할 것 같습니다.

skwent77 commented 5 months ago

현재 skyscanner api를 제공하는 측에서 대대적인 api 변경이 있어서, 서버 잠시 중단하고 로컬에서 작업중입니다. 이용에 불편을 드려 죄송합니다. 6월 5일 https://japan.visit-with-tripper.site/ 재배포 했습니다