1 of 24

Streamlit 과

Langchain으로 나만의 웹서비스 개발하기

AIFactory

Data Scientist 최재혁

2 of 24

AIFactory Data Scientist (2022.04 ~ Current)

LLM, Controllable Text Generation, RAG

Github : https://github.com/choijhyeok

최재혁

3 of 24

ML/DL 웹 배포?

  • 개인 프로젝트 배포 시 비용 발생

  • 특정 cloud 사용방법

  • Web에 대한 이해

Python 친화적, 무료, 쉬운 사용

4 of 24

ML/DL 웹 배포?

5 of 24

ML/DL 웹 배포?

  • Python 친화적인 프레임워크

  • 사용하기 쉬운 인터페이스

  • 빠른 Prototype 개발 및 수정 가능

Streamlit은 무료 클라우드 지원

6 of 24

Streamlit?

Python 기반 빠른 적용성

다른 Cloud 이식성

무료 Cloud 제공

Secret key 관리 기능

1G ~ 3G 리소스 가능

Cloud 사용 시 코드 공개

Queue 지원하지 않음

장점

단점

7 of 24

Streamlit 배포

Secret Key 설정

Cloud Deploy

Github Repo 선택

Steramlit 시작 py 설정

8 of 24

Hash Trip?

인스타그램처럼 쉬운 HashTag 기반 여행 정보 조회

관광지, 숙소, 행사 등 8가지 분야 검색

유전 알고리즘을 통한 사용자 선호도, 거리 기반 경로 추천

ChatGPT 사용자 테마 기반 추천

검색한 모든 과정을 PDF로 제공

9 of 24

Hash Trip Road Map

10 of 24

Html, Css, JS

11 of 24

Page1 : 사용방법 설명

12 of 24

App Gallery

13 of 24

Packages

  • Streamlit-extras
  • Streamlit_js_eval
  • Streamlit_vertical_slider
  • Streamlit_folium

…….

14 of 24

VectorDB, Langchain

VectorDB

  • 검색 항목별 VectorDB 관리 (관광지, 숙박, 문화시설 등)
  • metadata에 해당 관광지 이미지 url, 좌표, 주소 등 정보 입력

15 of 24

VectorDB, Langchain

Langchain

  • 조회 항목 중에서 추천 수만큼 추천하도록 Prompt 설정
  • 조회 항목수가 추천 수 보다 적다면 추천수에 맞게 출력

16 of 24

Page2 : 여행검색 및 조회

17 of 24

DEAP

  • 유전 알고리즘을 쉽게 구현할 수 있는 Python Package

    • 무인도에 가는 여행을 한다고 했을 때, 어떤 음식을 가져갈 것인지, 어떤 도구를 가져갈 것인지, 어떤 경로로 이동할 것인지 결정해야 하며 해당 결정이 여행의 성공 여부를 결정

    • 가장 최적의 해를 찾게 해주는 것이 유전 알고리즘

  • 개별 지역 간 거리는 위도, 경도를 haversine을 통한 직선거리로 계산

추천된 내용별 사용자 선호도 점수

최대 여행 가능한 거리

18 of 24

Page3 : 선호도 및 여행거리 입력

19 of 24

PDF with weasyprint

  • PDF를 만드는 많은 Python Package 존재
    • layout부터, 공백까지 모두 코딩으로 처리해야 함..

  • Notion은 어떻게 PDF를 만들까?
    • Notion에서는 PDF로 export 하는 기능이 존재
    • Notion의 페이지에서 미리 html을 작성하고 반복하는 구조로 작동
      • div, p 이런 웹페이지 tag들의 규칙성이 존재

미리 반복되는 html 몇 개를 정의하고

게시물이 늘어나면 동적으로 구성해서 해결

Notion

20 of 24

PDF with weasyprint

  • 앞에서 미리 지정한 규칙에 사용자가 조회한 게시물을 규칙별로 적용
    • 숙소는 숙소끼리 해당 규칙에서 loop
    • 여행지는 여행지끼리 loop
    • … 원하는 규칙의 HTML을 최종 생성

  • 생성된 String을 html 규칙에 맞춰서 문자열 변형
    • <head>, <body> 등 html 규칙에 맞게 String 내용 변경

  • 사용할 CSS에 id, class <head>에 적용

21 of 24

PDF with weasyprint

22 of 24

PDF with weasyprint

  • Weasyprint?
    • HTML, CSS를 통해서 PDF를 생성하는 python package
    • Python의 String으로 만든 html도 변환 가능
    • 페이지를 넘어가면 자동으로 다음 페이지로 생성

23 of 24

Page4 : 경로기반 추천, PDF 다운

24 of 24

Thank You

cjhyeok@aifactory.page

모든 코드는 아래 github에서 확인할 수 있습니다.

( ⭐ 눌러주시면 감사합니다 ^.^)

https://github.com/choijhyeok/HashTrip