: 챗봇 input 이 들어오면 RAG와 CHATGPT API를 이용하여 적절한 답변을 반환하는 AI 서버 개발
가상환경을 원한다면, 가상 환경 만들고 activate
python -m venv {가상환경이름}
source {가상환경이름}/bin/activate
python 및 필요한 라이브러리들 설치
pip install requirements.txt
postman에 가입한다. 링크
RAG에서 검색하고 싶은 PDF 파일 구비
mongo DB 설치 참고
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를 꺼주세요. ~~
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew tap mongodb/brew
brew install mongodb-community@7.0
# 백그라운드 자동 실행 설정
brew services start mongodb/brew/mongodb-community
# 1회성 수동 실행 코드
mongod --config /opt/homebrew/etc/mongod.conf --fork
brew services list
mongosh
brew services stop mongodb/brew/mongodb-community
RAG 옵션이 바뀌었거나, rag markdown 문서가 업데이트 되었을 때 /data/retrievers/faiss_index 내의 파일들을 삭제해줍니다.
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("검색기 로드 끝")
app 실행
터미널에 다음 명령어를 실행 : python app.py
그러면 터미널에 localhost:5001에 서빙이 잘 되었다는 메시지가 뜬다.
(test)postman에 로그인해서 테스트를 위한 HTTP request를 생성해준다.
(1) API 요청 유형을 선택한다. - POST 유형 선택한다.
(2) API 엔드포인트 주소 선택 - http://127.0.01:5001/conv으로 설정한다.
(3) Request 데이터 정의 - 아래와 같이 json 형식으로 전달할 데이터를 정의함
{
"content": "판교 날씨"
}
(4) 전송 버튼 클릭
app.py
: 메인 함수, 답변 출력하는 AI flask 서버 정의
document_retriever.py
: 검색 증강(RAG)를 위한 함수
get_weather.py
: 날씨 정보를 얻어오는 api(open weather api를 사용)
find_routes_v2.py
: 목적지와 출발지 간 최적 경로를 실시간으로 받아오는 역할(kakaomap, tmap api 사용)
error_handler.py
: flask error handler를 정의
가져올 수 있는 정보: 강우량, 온도, 습도 ...
정해진 형식으로 출력을 교과서적으로
사용자 질문 예시
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
<필수>
weather: 주요 기상상태 요약해줌
main : 온도, 습도, 기압에 대한 구체적인 수치를 담고 있음
wind : 풍속 정보 담고 있음
clouds : 풍속 정보 담고 있음
<날씨에 따라서 가변적으로 들어오는 요소>
snow, rain : 지난 시간 동안의 강우량/강설량을 얻을 수 있다.
snow
문제: 다양한 유형의 교통 질문에 응답해야함.
chatgpt 실시간 데이터 연결이 안돼서, 사용자의 질문 의도에 맞는 적절한 API를 연결해주기 어려움
활용할 수 있는 API
실시간 길찾기: TMAP 대중교통 API
예시 질문:
<<<<<<< Updated upstream
MongoDB Compass 설치 링크 설치 : MongoDB Compass Download (GUI)
연결하기
"Advanced Connection Options" 항목의 "Authentication"
몽고 DB 데이터 로컬에서 확인
mongod
mongo
use chatbot_db # 데이터베이스 선택
show collections # 콜렉션 목록 확인
db.chat_history.find().pretty() # chat_history 콜렉션의 모든 데이터 확인