kakaotech-bootcamp-11 / kakaotech-bootcamp-11-ktb-11-project-1-chatbot-nlp-server

0 stars 0 forks source link

프로젝트 목표

AI 파트의 목표

: 챗봇 input 이 들어오면 RAG와 CHATGPT API를 이용하여 적절한 답변을 반환하는 AI 서버 개발

참고 블로그

사전 준비

  1. 가상환경을 원한다면, 가상 환경 만들고 activate

    python -m venv {가상환경이름}
    source {가상환경이름}/bin/activate
  2. python 및 필요한 라이브러리들 설치

    • python version 은 3.12.4 로 설치하기
    • 라이브러리 설치 pip install requirements.txt
  3. postman에 가입한다. 링크

  4. RAG에서 검색하고 싶은 PDF 파일 구비

    • 11조 -> 보안 문제로 지은에게 문의 주시면 pdf 파일을 드리겠습니다
    • ~~pdf 파일을 data 디렉토리 내에 넣음. ~~
  5. mongo DB 설치 참고

  6. API key 발급 받기 (11조 -> 다 발급 받지 마시고 지은에게 문의 주시면 환경 변수 파일을 드리겠습니다. ) 총 4개의 API 키가 필요하다(openweathermap, open ai, tmap, kakao map)
    각 사이트에 들어가서 API를 발급 받고, .env 파일을 만들어서 다음과 같이 지정해준다.

    OPENAI_API_KEY = sk-proj-xxx
    WEATHER_API_KEY= xxx ... 
    KAKAO_MAP_API_KEY1 = KakaoAK xxx..
    TMAP_API_KEY = xxx..
    LOCATION1 = Seongnam-si

~~5. 맥북이라면 airplay OFF를 꺼주세요. ~~

  1. MongoDB 설치 하기.
    • Mac
      1. 홈브류 설치 확인. 미설치시에만 아래 코드 실행
        /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
      2. 몽고DB tap 추가
        brew tap mongodb/brew
      3. 몽고 DB 설치
        brew install mongodb-community@7.0
      4. 몽고DB 서비스 시작
        # 백그라운드 자동 실행 설정
        brew services start mongodb/brew/mongodb-community
        # 1회성 수동 실행 코드
        mongod --config /opt/homebrew/etc/mongod.conf --fork
      5. 몽고DB 상태 확인
        brew services list
      6. 몽고DB쉘 실행 : 데이터베이스에 직접 접근하기 위한 명령어
        mongosh
      7. 몽고DB 종료
        brew services stop mongodb/brew/mongodb-community

서비스 실행

  1. RAG 옵션이 바뀌었거나, rag markdown 문서가 업데이트 되었을 때 /data/retrievers/faiss_index 내의 파일들을 삭제해줍니다.

  2. app.py 의 file_path 나의 pdf 이름으로 바꿔줌

    # 검색할 문서 로드 
    file_path = 'data/ktb_data_09.md'# PDF 경로를 지정해주기 - 추후에 모든 pdf 읽도록  바꾸도록 지정하기 
    try:
    retriever = my_retriever(file_path)
    except OpenAIError as e:
    raise e
    print("검색기 로드 끝")
  3. app 실행
    터미널에 다음 명령어를 실행 : python app.py
    그러면 터미널에 localhost:5001에 서빙이 잘 되었다는 메시지가 뜬다.

  4. (test)postman에 로그인해서 테스트를 위한 HTTP request를 생성해준다. postman UI

(1) API 요청 유형을 선택한다. - POST 유형 선택한다.
(2) API 엔드포인트 주소 선택 - http://127.0.01:5001/conv으로 설정한다.
(3) Request 데이터 정의 - 아래와 같이 json 형식으로 전달할 데이터를 정의함

{
    "content": "판교 날씨"
}

(4) 전송 버튼 클릭

주요 함수 설명

기타

날씨 API : OpenWeatherMap API

response 예시

{
  "base": "stations",
  "clouds": {
    "all": 3
  },
  "cod": 200,
  "coord": {
    "lat": 37.4386,
    "lon": 127.1378
  },
  "dt": 1722661444,
  "id": 1897000,
  "main": {
    "feels_like": 307.46,
    "grnd_level": 999,
    "humidity": 47,
    "pressure": 1006,
    "sea_level": 1006,
    "temp": 305.52,
    "temp_max": 306.81,
    "temp_min": 305.52
  },
  "name": "Seongnam-si",
  "sys": {
    "country": "KR",
    "id": 5513,
    "sunrise": 1722631035,
    "sunset": 1722681476,
    "type": 1
  },
  "timezone": 32400,
  "visibility": 10000,
  "weather": [
    {
      "description": "clear sky",
      "icon": "01d",
      "id": 800,
      "main": "Clear"
    }
  ],
  "wind": {
    "deg": 274,
    "gust": 3.26,
    "speed": 3.26
  }
}

활용할 정보

전체적인 정보는 다음과 같아: weather 객체 이용
세부 요소는 다음과 같다 : main, wind, clouds, rain, snow

<필수>

<날씨에 따라서 가변적으로 들어오는 요소>
snow, rain : 지난 시간 동안의 강우량/강설량을 얻을 수 있다.

snow

교통 API 연결

<<<<<<< Updated upstream

서비스 관리

사용자 대화 기록 관리

  1. MongoDB Compass 설치 링크 설치 : MongoDB Compass Download (GUI)

  2. 연결하기

    1. add new connection
    2. URL : --
    3. "Advanced Connection Options" 항목의 "Authentication"

      • username : admin
      • password : --
      • Authentication Database : admin

      alt text

  3. 몽고 DB 데이터 로컬에서 확인

    1. MongoDB 서버 실행 확인
      mongod
    2. MongoDB쉘 접근
      mongo
    3. data 베이스 선택 및 확인
      use chatbot_db  # 데이터베이스 선택
      show collections  # 콜렉션 목록 확인
      db.chat_history.find().pretty()  # chat_history 콜렉션의 모든 데이터 확인