이 프로젝트는 사용자가 PDF 문서를 업로드하고 컨텐츠에서 벡터 임베딩을 생성 한 다음 텍스트 쿼리를 사용하여 문서 내에서 정보를 검색 할 수있는 간단한 웹 응용 프로그램을 제공합니다. OpenAi의 임베딩 및 언어 모델은 벡터 임베드 및 정보 검색을 만드는 데 사용됩니다.
PDF 문서 수집 : 사용자는 웹 인터페이스를 통해 정보 검색을 위해 PDF 문서를 업로드 할 수 있습니다.
벡터 임베딩 생성 : 텍스트 내용은 PDF에서 추출되어 Langchain을 사용하여 작은 청크로 분할됩니다. OpenAI의 텍스트 임베딩 모델 (예 : Text-embedding-ADA-002)을 사용하여 각 청크에 대해 임베딩이 생성됩니다.
벡터 데이터베이스 스토리지 : 유사성 검색을 위해 생성 된 벡터 임베드를 Pinecone과 같은 벡터 데이터베이스에 저장하십시오.
사용자 쿼리 개선 : OpenAI의 채팅 완료 API를 사용하여 사용자 쿼리가 개선되어 검색 정확도를 향상시킵니다.
정보 검색 : 사용자는 텍스트 쿼리를 입력하여 업로드 된 문서 내에서 정보를 검색 할 수 있습니다. 이 시스템은 쿼리 임베딩과 벡터 유사성을 기반으로 관련 텍스트 청크를 검색합니다.
응답 생성 : 검색된 텍스트 청크, 컨텍스트 (이전 쿼리 및 응답) 및 사용자의 쿼리를 기반으로 OpenAI 모델 (GPT-4O, GPT-4 또는 GPT-3.5-Turbo)을 사용하여 응답이 생성됩니다. 사용자는 웹 인터페이스를 통해 OpenAI 모델을 선택할 수 있습니다. 모델 선택은 응답 스타일, 세부 사항 및 정확도에 영향을 줄 수 있습니다.
요구 사항 .txt 파일에는 필요한 Python 패키지와 응용 프로그램을 실행하는 데 필요한 버전이 나와 있습니다. 각 패키지의 분석은 다음과 같습니다.
플라스크 : 웹 애플리케이션 구축을위한 가벼운 파이썬 웹 프레임 워크.
PENECONE-CLIENT : 애플리케이션에 사용 된 벡터 데이터베이스 인 PENECONE과 상호 작용하기위한 공식 Python 클라이언트 라이브러리.
OpenAI : OpenAI API의 공식 Python 클라이언트 라이브러리는 텍스트 임베딩을 생성하고 OpenAI의 언어 모델과 상호 작용하는 데 사용되었습니다.
PYPDF2 : PDF 파일에서 텍스트를 추출하기위한 Pure-Python 라이브러리.
Langchain : 텍스트 분할 및 청킹을 위해 응용 프로그램에 사용되는 대형 언어 모델로 응용 프로그램을 구축하기위한 프레임 워크.
Numpy : 다차원 배열 및 벡터로 작업하는 데 사용되는 Python의 과학 컴퓨팅 패키지.
이러한 종속성을 설치하려면 새로운 Python 가상 환경을 만들고 다음 명령을 실행할 수 있습니다.
PIP 설치 -R 요구 사항 .txt
OpenAI 및 Pinecone과 통합하려면 이러한 플랫폼에 대한 각 API 키, 호스트 (Pinecone) 정보를 얻고 구성해야합니다. Linux에서 OpenAi 및 Pinecone API 키를 설정하고 Pinecone 호스트를 환경 변수로 설정하십시오. 다음 Linux 명령을 사용하여 이러한 변수를 내보내십시오.
내보내기 OpenAi_api_key = 'your-openai-api-key'
Export pinecone_api_key = 'your-pinecone-api-key'
PENECONE_HOST = 'your-pinecone-host'내보내기
유효한 API 키가있는 OpenAI 계정이 있는지 확인하십시오. OpenAI 플랫폼 (https://platform.openai.com/)에서 API 키를 생성하거나 얻을 수 있으며 (https://platform.openai.com/organization/api-keys)를 관리 할 수 있습니다. 또한이 예제는 유료 OpenAI 계정이 필요하므로 계정에 충분한 사용 할당량이 있는지 확인하십시오.
PENECONE 환경 (PENECONE FREE 계정 사용 https://www.pinecone.io/) : 1) Pinecone Index가 사용됩니다. 2) 치수 : 1536 3) 호스트 유형 : 서버리스.
Centos Linux Release 8.5.2111은 Linux OS로 사용됩니다. 공개 IP (선택 사항)가있는 클라우드 Linux VM이 웹 인터페이스에 대해 테스트되었습니다. 로컬 IP도 사용할 수 있습니다. 프로젝트 종속성을 분리하기 위해 파이썬 가상 환경 (선택 사항이지만 권장)을 만듭니다.
이 응용 프로그램은 파이썬 웹 프레임 워크 인 플라스크로 구축 된 웹 인터페이스를 제공합니다. 사용자는 PDF 문서를 업로드하고 쿼리를 입력하고 사용할 OpenAI 언어 모델 (GPT-3.5-Turbo, GPT-4 또는 GPT-4O)을 선택하고 업로드 된 PDF 문서에서 추출한 정보를 기반으로 자세한 응답을받을 수 있습니다.
PDF 문서 수집 및 벡터 임베딩 생성
응용 프로그램은 사용자가 PDF 문서를 업로드 할 수있는 웹 인터페이스를 제공합니다. PDF 파일을 업로드하면 텍스트 내용을 문서에서 추출하고 Langchain 라이브러리에서 recursiveCharacterTexTsplitter를 사용하여 작은 청크로 분할됩니다. 이 분할 프로세스는 텍스트를 컨텍스트를 유지하면서 관리 가능한 청크로 나뉘어 지도록합니다.
다음으로, OpenAi의 텍스트-엠 베딩 -DADA-002 모델을 사용하여 각 텍스트 청크에 대해 벡터 임베딩이 생성됩니다. 이 내장은 텍스트의 의미 론적 의미를 포착하여 효율적인 유사성 검색을 가능하게하는 고차원 벡터입니다.
벡터 임베딩 보관 Pinecone
생성 된 벡터 임베딩은 해당 텍스트 청크 및 페이지 번호와 함께 Pinecone 벡터 데이터베이스에 저장됩니다. Pinecone은 고차원 벡터를 저장하고 쿼리하도록 설계된 확장 가능하고 효율적인 벡터 데이터베이스입니다.
쿼리 처리
사용자가 웹 인터페이스를 통해 쿼리를 제출하면 응용 프로그램은 다음 단계로 처리합니다.
쿼리 정제 :
사용자의 쿼리는 OpenAI의 언어 모델 (예 : GPT-3.5-Turbo, GPT-4 또는 GPT-4O)으로 전송되어 검색 정확도를 높이기 위해 쿼리를 개선하고 개선합니다.
쿼리를위한 임베딩 생성
정제 된 쿼리는 OpenAI의 텍스트-엠 베드 딩 -ADA-002 모델을 사용하여 벡터 임베딩으로 변환됩니다.
유사성 검색 :
쿼리 임베딩은 벡터 유사성을 기반으로 가장 의미 적으로 유사한 텍스트 청크에 대해 Pinecone Vector 데이터베이스를 검색하는 데 사용됩니다.
참고 : PENECONE 인덱스를 쿼리하고 상단 결과를 검색하기 위해 다음 코드가 사용됩니다 (App.Py)
#유스 케이스를 기준으로 Top_k 값을 조정하고 실험하십시오.
results = pinecone_index.query (vector = padded_query_vector.tolist (), top_k = 1, includ_metadata = true)
TOP_K 매개 변수는 쿼리에서 반환 할 상단 결과 수를 지정합니다. TOP_K 값을 조정하면 쿼리 응답의 품질에 영향을 줄 수 있습니다. TOP_K 값이 높을수록 더 포괄적 인 결과를 제공 할 수 있지만 관련 데이터가 덜 소개 될 수도 있습니다. 반대로, TOP_K 값이 낮을수록 결과가 더 정확하지만 결과가 적습니다. 특정 사용 사례에 대한 최적의 균형을 찾기 위해 다른 Top_k 값을 실험하는 것이 중요합니다. 또한, TOP_K 값을 늘리면 특히 결과를 처리하기 위해 유료 OpenAI 모델을 사용할 때 비용에 영향을 줄 수 있습니다. TOP_K 값이 높을수록 모델이 더 많은 데이터를 전송하고 처리하여 사용 비용이 증가 할 수 있습니다.
참고 : score_threshold 매개 변수는 쿼리 응답의 품질에 영향을 줄 수있는 결과에 필요한 최소 관련성 점수를 결정합니다. 따라서 사용 사례 및 실험 (App.Py)에 따라 임계 값을 조정하십시오.
#사용 사례에 따라 임계 값을 조정하십시오
score_threshold = 0.65
응답 생성 :
데이터베이스에서 검색된 관련 텍스트 청크는 이전 컨텍스트 (있는 경우) 및 원래 사용자 쿼리와 결합됩니다. 그런 다음이 정보는 OpenAI의 언어 모델 (쿼리 정제에 사용 된 것과 동일한 모델)으로 전송되어 포괄적이고 상황에 맞는 응답을 생성합니다.
상황 인식 응답 :
응용 프로그램은 이전 쿼리 및 응답의 컨텍스트를 유지합니다. 이러한 맥락은 응답 생성 단계에서 OpenAI의 언어 모델로 전달되며, 생성 된 응답이 대화 이력을 고려하고 정확하고 상황에 맞는 정보를 제공하도록합니다.
응용 프로그램을 실행하려면 다음 단계를 따르십시오.
파이썬 가상 환경 활성화 (선택 사항) : (VENV) [user@host project_directory]#
app.py 스크립트 : Python app.py를 실행하십시오
응용 프로그램은 포트 5000에서 실행되기 시작하며 다음과 비슷한 출력이 표시 될 수 있습니다.
응용 프로그램이 포트 5000에서 들어오는 연결을 적극적으로 듣고 있는지 확인하십시오.
netstat -aultpn | Grep -I 5000 TCP 0 0 0.0.0.0:5000 0.0.0.0 :* 525661/Python 듣기
http://127.0.0.1:5000/ (로컬 액세스 용)
http : // vm public IP : 5000/(인터넷을 통해 원격 액세스 용)
참고 : 공개 IP를 통해 응용 프로그램에 액세스하려는 경우 VM 방화벽을 통해 포트 5000에서 들어오는 트래픽을 허용하십시오. 이를 통해 공개 IP 통신이 허용되도록하고 원격으로 웹 인터페이스에 액세스 할 수 있습니다.
또한 업로드 된 PDF 파일이 포함 된 Linux 시스템의 폴더에는 동일한 이름의 PDF 파일이 포함되어 있지 않도록하십시오. 파일이 이미 존재하면 덮어 씁니다.
PDF 파일을 선택하고 '업로드'버튼을 사용하여 업로드하십시오.
"프로세스 파일"을 클릭하십시오 (이 단계에서는 벡터 임베드가 Pinecone 데이터베이스에 생성되어 저장됩니다).
검색 쿼리를 입력하십시오. 드롭 다운 메뉴에서 OpenAI 언어 모델을 선택하십시오.
쿼리 응답을 확인하십시오. 후속 쿼리를 제출하십시오.
완료되면 '종료 세션'을 클릭하십시오 (데이터베이스에서 업로드 된 파일 및 벡터 임베드를 삭제합니다).
Linux Macine에서 Ctrl+C를 눌러 응용 프로그램 (App.Py)을 닫으십시오.