이 프로젝트는 Langchain을 Fastapi와 비동기식으로 확장 가능한 방식으로 통합하여 PostgreSQL/PGVector를 사용하여 문서 색인화 및 검색을위한 프레임 워크를 제공합니다.
파일은 file_id 에 의해 임베딩으로 구성됩니다. 기본 사용 사례는 LibreChat과의 통합이지만이 간단한 API는 모든 ID 기반 사용 사례에 사용할 수 있습니다.
ID 접근법을 사용하는 주된 이유는 파일 레벨에 임베딩을 사용하는 것입니다. 이는 LibreChat에서 수행 한 것과 같이 데이터베이스에 저장된 파일 메타 데이터와 결합 될 때 대상 쿼리를 만듭니다.
API는 시간이 지남에 따라 진화하여 다양한 쿼리/재 등급 방법, 임베딩 모델 및 벡터 저장소를 사용합니다.
.env 파일을 구성하십시오docker compose up (또한 Rag API 시작)docker compose -f ./db-compose.yaml up 에만 Docker를 사용하십시오.docker compose up (PSQL/PGVECTOR를 시작)docker compose -f ./api-compose.yaml up 에 Docker를 사용하십시오.DB_HOST 설정하십시오.pip install -r requirements.txt
uvicorn main:app응용 프로그램을 실행하려면 다음 환경 변수가 필요합니다.
RAG_OPENAI_API_KEY : OpenAI API 임베딩의 API 키 (기본 설정을 사용하는 경우).
OPENAI_API_KEY 작동하지만 RAG_OPENAI_API_KEY LiberChechat 설정과 충돌하지 않기 위해 그것을 무시합니다. RAG_OPENAI_BASEURL : (선택 사항) OpenAI API 임베딩의 기본 URL
RAG_OPENAI_PROXY : (선택 사항) OpenAI API 임베딩에 대한 프록시
VECTOR_DB_TYPE : (선택 사항) 벡터 데이터베이스 유형을 선택하고 pgvector 의 기본값을 선택합니다.
POSTGRES_DB : (선택 사항) PostgreSQL 데이터베이스의 이름은 VECTOR_DB_TYPE=pgvector 일 때 사용됩니다.
POSTGRES_USER : (선택 사항) PostgreSQL 데이터베이스에 연결하기위한 사용자 이름입니다.
POSTGRES_PASSWORD : (선택 사항) PostgreSQL 데이터베이스에 연결하기위한 비밀번호.
DB_HOST : (선택 사항) PostgreSQL 데이터베이스 서버의 호스트 이름 또는 IP 주소.
DB_PORT : (선택 사항) PostgreSQL 데이터베이스 서버의 포트 번호.
RAG_HOST : (선택 사항) API 서버가 실행되는 호스트 이름 또는 IP 주소. 기본값 "0.0.0.0"
RAG_PORT : (선택 사항) API 서버가 실행되는 포트 번호. 기본값은 포트 8000으로.
JWT_SECRET : (선택 사항) 요청에 대한 JWT 토큰을 확인하는 데 사용되는 비밀 키.
COLLECTION_NAME : (선택 사항) 벡터 스토어의 컬렉션 이름입니다. 기본값은 "TestCollection"입니다.
CHUNK_SIZE : (선택 사항) 텍스트 처리를위한 청크의 크기. 기본값은 "1500"입니다.
CHUNK_OVERLAP : (선택 사항) 텍스트 처리 중 청크 간의 중첩. 기본값은 "100"입니다.
RAG_UPLOAD_DIR : (선택 사항) 업로드 된 파일이 저장된 디렉토리. 기본값은 "./uploads/"입니다.
PDF_EXTRACT_IMAGES : (선택 사항) PDF 파일에서 이미지를 추출할지 여부를 나타내는 부울 값. 기본값은 "false"입니다.
DEBUG_RAG_API : (옵션) 서버 콘솔에 더 많은 장황한 로깅 출력을 표시하고 PostgresQL 데이터베이스 경로를 활성화하려면 "true"로 설정되었습니다.
CONSOLE_JSON : (선택 사항) 클라우드 로깅 집계에 대한 JSON으로 로그인 "true"로 설정
EMBEDDINGS_PROVIDER : (선택 사항) "Openai", "Bedrock", "Azure", "Huggingface", "HuggingFacetei"또는 "Ollama", "Huggingface"는 sentence_transformers를 사용합니다. "OpenAi"의 기본값
EMBEDDINGS_MODEL : (선택 사항) 구성된 제공자로부터 사용할 유효한 임베딩 모델을 설정합니다.
RAG_AZURE_OPENAI_API_VERSION : (선택 사항) 기본값은 2023-05-15 입니다. Azure Openai API의 버전.
RAG_AZURE_OPENAI_API_KEY : (선택 사항) Azure OpenAi 서비스의 API 키.
AZURE_OPENAI_API_KEY 작동하지만 RAG_AZURE_OPENAI_API_KEY librechat 설정과 충돌하지 않기 위해 그것을 무시합니다. RAG_AZURE_OPENAI_ENDPOINT : (선택 사항) 자원을 포함한 Azure OpenAi 서비스의 엔드 포인트 URL.
https://YOUR_RESOURCE_NAME.openai.azure.com .AZURE_OPENAI_ENDPOINT 작동하지만 RAG_AZURE_OPENAI_ENDPOINT LibreChat 설정과 충돌하지 않기 위해이를 무시합니다. HF_TOKEN : (선택 사항) huggingface 옵션에 필요한 경우.
OLLAMA_BASE_URL : (선택 사항) 기본값 http://ollama:11434 .
ATLAS_SEARCH_INDEX : (선택 사항) atlas mongodb를 사용하는 경우 벡터 검색 인덱스의 이름, vector_index 로 기본값
MONGO_VECTOR_COLLECTION : mongodb의 경우 더 이상 사용되지 않음, ATLAS_SEARCH_INDEX 및 COLLECTION_NAME 사용하십시오
AWS_DEFAULT_REGION : (선택 사항) 기본값은 us-east-1 에 대한 기본값입니다
AWS_ACCESS_KEY_ID : (선택 사항) 기반암 임베딩에 필요합니다
AWS_SECRET_ACCESS_KEY : (선택 사항) 기반암 임베딩에 필요합니다
응용 프로그램을 실행하기 전에 이러한 환경 변수를 설정하십시오. .env 파일 또는 시스템 환경 변수로 설정할 수 있습니다.
기본 PGVector를 사용하는 대신 Atlas MongoDB를 벡터 데이터베이스로 사용할 수 있습니다. 그렇게하려면 다음 환경 변수를 설정하십시오
VECTOR_DB_TYPE = atlas-mongo
ATLAS_MONGO_DB_URI = <mongodb+srv://...>
COLLECTION_NAME = <vector collection>
ATLAS_SEARCH_INDEX = <vector search index> ATLAS_MONGO_DB_URI 는 librechat에서 사용하는 것과 동일하거나 다를 수 있습니다. 동일하더라도 $COLLECTION_NAME 컬렉션은 LibreChat에서 사용하는 모든 컬렉션과 분리 된 완전히 새로운 것입니다. 또한 위의 컬렉션에 대한 벡터 검색 색인을 작성하십시오 (다음 JSON과 함께 $ATLAS_SEARCH_INDEX 할당하십시오).
{
"fields" : [
{
"numDimensions" : 1536 ,
"path" : " embedding " ,
"similarity" : " cosine " ,
"type" : " vector "
},
{
"path" : " file_id " ,
"type" : " filter "
}
]
}문서화 된 4 가지 방법 중 하나를 따라 벡터 인덱스를 생성하십시오.
RDS Postgres 인스턴스 가이 요구 사항을 준수하는지 확인하십시오.
The pgvector extension version 0.5.0 is available on database instances in Amazon RDS running PostgreSQL 15.4-R2 and higher, 14.9-R2 and higher, 13.12-R2 and higher, and 12.16-R2 and higher in all applicable AWS Regions, including the AWS GovCloud (US) Regions.
Rag API로 RDS Postgres를 설정하려면 다음을 수행 할 수 있습니다.
제공된 AWS 문서를 사용하여 RDS 인스턴스/클러스터를 만듭니다.
RDS 콘솔 또는 IAC 솔루션 출력에서 엔드 포인트 연결 문자열을 사용하여 RDS 클러스터에 로그인하십시오.
로그인은 마스터 사용자를 통해입니다.
rag_api 용 전용 데이터베이스 생성 : create database rag_api; .
해당 데이터베이스의 전용 사용자 역할을 작성하십시오 : create role rag;
방금 만든 데이터베이스로 전환하십시오 : c rag_api
벡터 확장 활성화 : create extension vector;
위에 제공된 문서를 사용하여 RDS Postgres 인스턴스 클러스터에 연결 문자열을 설정하십시오.
참고 :
create role x with superuser;다음 명령을 실행하여 Black Code Formatter를 사용하는 사전 커밋 포맷터를 설치하십시오.
pip install pre-commit
pre-commit install