Skip to main content

A package for building RAG-based LLM pipelines

Project description

Bombay Pipeline

Bombay는 RAG (Retrieval-Augmented Generation) 기반의 LLM (Large Language Model)을 쉽게 구축하고 활용할 수 있도록 하는 파이프라인 구축 시스템입니다. 현재 Python 3.12 이상 버전에서 Stable 합니다. 다른 버전에 대해서는 추후 단위테스트를 할 예정입니다.

주요 기능

  • 다양한 모델 지원: 다양한 임베딩 모델과 질의 모델을 지원하여 유연성을 제공합니다. 현재는 OpenAI의 Embedding 모델과 GPT 모델을 지원하며, 추후 더 많은 모델이 추가될 예정입니다.
  • 벡터 데이터베이스 통합: Hnswlib과 ChromaDB와 같은 고성능 벡터 데이터베이스를 추상 클래스를 통해 쉽게 세팅할 수 있도록 지원합니다. 추후 온프레미스 뿐만 아니라 클라우드 환경의 벡터 데이터베이스도 지원할 예정입니다.
  • 문서 관리: 문서 추가, 업데이트, 삭제 인터페이스를 통합된 인터페이스로 제공합니다. 해당 CRUD 기능은 테스트 진행 중입니다.

설치 및 운영환경

  1. 해당 라이브러리를 pip으로 설치:
$ pip install bombay

사용 방법

1. Bombay 프로젝트 생성

Bombay CLI를 사용하여 새 프로젝트를 생성할 수 있습니다. 다음 명령어를 사용하여 CLI를 실행합니다:

$ bombay

프로젝트 생성 과정에서는 프로젝트 이름, 임베딩 모델, 질의 모델, 벡터 데이터베이스 등을 선택할 수 있습니다. 추후 세부기능을 업데이트 할 예정이며 현재 간단하게 지원되는 템플릿은 다음과 같습니다:

  • Basic: 최소한의 설정으로 기본적인 파이프라인을 생성합니다.
  • Chatbot: 대화형 단일 채팅 기능을 포함한 파이프라인을 생성합니다.
  • Web App: FastAPI를 사용하여 웹 애플리케이션으로 파이프라인을 생성합니다.

생성된 프로젝트는 다음과 같은 디렉토리 구조를 가집니다:

<project_name>/
├── main.py
└── .env

main.py 파일은 선택한 템플릿에 따라 생성된 RAG 파이프라인 코드를 포함하고 있습니다. .env 파일에는 환경변수 키가 저장됩니다.

2. Bombay 파이프라인 이해하기

create_pipeline() 함수를 사용하여 Bombay 파이프라인을 생성합니다. 이 함수는 Bombay 파이프라인의 구성 요소를 설정하고 초기화하는 역할을 합니다. 다음 매개변수를 설정할 수 있습니다:

  • embedding_model_name: 사용할 임베딩 모델의 이름입니다. 현재는 'openai'만 지원되며, OpenAI의 text-embedding-ada-002 모델을 사용합니다. 이 모델은 텍스트를 고정 길이의 벡터로 변환하는 역할을 합니다.
  • query_model_name: 사용할 질의 모델의 이름입니다. 현재는 'gpt-3'만 지원되며, OpenAI의 gpt-3.5-turbo 모델을 사용합니다. 이 모델은 검색된 문서를 기반으로 질의에 대한 응답을 생성하는 역할을 합니다.
  • vector_db: 사용할 벡터 데이터베이스의 이름입니다. 'hnswlib' 또는 'chromadb'를 선택할 수 있습니다. 벡터 데이터베이스는 임베딩 벡터를 저장하고 유사도 기반 검색을 수행하는 역할을 합니다.
  • api_key: OpenAI API 키를 할당합니다. OpenAI의 임베딩 모델과 질의 모델을 사용하기 위해 필요합니다.
  • similarity: 유사도 측정 방식을 설정합니다. 기본값은 'cosine'입니다.
  • use_persistent_storage: ChromaDB 사용 시, 데이터 지속성 여부를 설정합니다. 기본값은 False입니다. True로 설정하면 ChromaDB가 데이터를 디스크에 영구적으로 저장하여 프로그램 종료 후에도 데이터를 유지할 수 있습니다.

예시:

from bombay.pipeline import create_pipeline

pipeline = create_pipeline(
    embedding_model_name='openai',
    query_model_name='gpt-3',
    vector_db='chromadb',
    api_key='YOUR_API_KEY',
    similarity='cosine',
    use_persistent_storage=True
)

위 예시에서는 OpenAI의 임베딩 모델과 GPT-3 질의 모델을 사용하고, ChromaDB를 벡터 데이터베이스로 설정하며, 유사도를 'cosine'으로 설정하고 데이터 지속성을 활성화하여 Bombay 파이프라인을 생성합니다.

3. 문서 추가

생성된 Bombay 파이프라인에 문서를 추가하려면 add_documents() 메서드를 사용합니다. 이 메서드는 문서 리스트를 입력받아 임베딩을 생성하고 벡터 데이터베이스에 저장합니다.

예시:

documents = [
    "고양이는 포유류에 속하는 동물입니다.",
    "고양이는 약 6,000년 전부터 인간과 함께 살아온 것으로 추정됩니다.",
    "고양이는 예민한 청각과 후각을 가지고 있어 작은 움직임이나 냄새도 쉽게 감지할 수 있습니다.",
    "고양이는 앞발에 5개, 뒷발에 4개의 발가락이 있습니다.",
    "고양이는 수면 시간이 많아 하루 평균 15~20시간을 잡니다.",
    "고양이는 점프력이 뛰어나 자신의 몸길이의 최대 6배까지 뛰어오를 수 있습니다."
]

pipeline.add_documents(documents)

위 예시에서는 고양이에 대한 6개의 문서를 리스트 형태로 정의하고, add_documents() 메서드를 사용하여 Bombay 파이프라인에 추가합니다.

4. 검색 및 응답 생성

run_pipeline() 함수를 사용하여 질의에 대한 응답을 생성합니다. 이 함수는 Bombay 파이프라인의 전체 프로세스를 실행하며, 다음 단계를 수행합니다:

  1. 질의 임베딩: 입력된 질의를 임베딩 모델을 사용하여 벡터로 변환합니다.
  2. 관련 문서 검색: 질의 벡터를 사용하여 벡터 데이터베이스에서 유사도가 높은 문서를 검색합니다.
  3. 응답 생성: 검색된 관련 문서를 기반으로 질의 모델을 사용하여 응답을 생성합니다.

예시:

query1 = "고양이는 어떤 동물인가요?"
result1 = run_pipeline(pipeline, documents, query1, k=2)

print("Query 1:")
print(f"Question: {result1['query']}")
print(f"Relevant Documents: {result1['relevant_docs']}")
print(f"Answer: {result1['answer']}")

query2 = "고양이의 수면 시간은 어떻게 되나요?"
result2 = run_pipeline(pipeline, documents, query2, k=1)

print("\nQuery 2:")
print(f"Question: {result2['query']}")
print(f"Relevant Documents: {result2['relevant_docs']}")
print(f"Answer: {result2['answer']}")

위 예시에서는 두 개의 질의를 정의하고, run_pipeline() 함수를 사용하여 각 질의에 대한 응답을 생성합니다.

첫 번째 질의 "고양이는 어떤 동물인가요?"에 대해서는 k=2로 설정하여 상위 2개의 관련 문서를 검색하고, 검색된 문서를 기반으로 응답을 생성합니다.

두 번째 질의 "고양이의 수면 시간은 어떻게 되나요?"에 대해서는 k=1로 설정하여 가장 유사한 1개의 관련 문서를 검색하고, 검색된 문서를 기반으로 응답을 생성합니다.

실행 결과 예시:

Query 1:
Question: 고양이는 어떤 동물인가요?
Relevant Documents: ['고양이는 포유류에 속하는 동물입니다.', '고양이는 약 6,000년 전부터 인간과 함께 살아온 것으로 추정됩니다.']
Answer: 고양이는 포유류에 속하는 동물로, 약 6,000년 전부터 인간과 함께 살아온 것으로 추정됩니다.

Query 2:
Question: 고양이의 수면 시간은 어떻게 되나요?
Relevant Documents: ['고양이는 수면 시간이 많아 하루 평균 15~20시간을 잡니다.']
Answer: 고양이는 수면 시간이 많아 하루 평균 15~20시간을 잡니다.

설계 원칙 및 패턴

본 Bombay 파이프라인은 다음과 같은 소프트웨어 공학 원칙과 디자인 패턴을 활용하여 설계되었습니다:

추상화(Abstraction)와 인터페이스(Interface)

  • VectorDB, EmbeddingModel, QueryModel 추상 클래스를 정의하여 벡터 데이터베이스, 임베딩 모델, 질의 모델에 대한 추상화 제공
  • 다양한 구현체를 유연하게 사용할 수 있도록 인터페이스 설계

팩토리 패턴(Factory Pattern)

  • create_pipeline 함수는 팩토리 패턴의 역할 수행
  • 주어진 인자에 따라 적절한 임베딩 모델, 질의 모델, 벡터 데이터베이스 선택하여 RAG 파이프라인 생성

어댑터 패턴(Adapter Pattern)

  • OpenAIEmbeddingOpenAIQuery 클래스는 어댑터 패턴 사용
  • OpenAI의 API를 추상화된 인터페이스에 맞게 적용

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bombay-0.1.4.tar.gz (14.4 kB view details)

Uploaded Source

Built Distribution

bombay-0.1.4-py3-none-any.whl (11.9 kB view details)

Uploaded Python 3

File details

Details for the file bombay-0.1.4.tar.gz.

File metadata

  • Download URL: bombay-0.1.4.tar.gz
  • Upload date:
  • Size: 14.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.2

File hashes

Hashes for bombay-0.1.4.tar.gz
Algorithm Hash digest
SHA256 b0de9bd7be71f8510bab831cff1fad31b251036a133cc8a15989c40c149e4da8
MD5 b120e6e27cd5a466953b7c8645d3b276
BLAKE2b-256 d273e402f07a93addae337b42ba27fe37171df2de9a6b3309441b5e1ce3b304f

See more details on using hashes here.

File details

Details for the file bombay-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: bombay-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 11.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.2

File hashes

Hashes for bombay-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 a3dd28ae7adba3f99fc206487b9a49530334dff732388483dcd056801c2d8528
MD5 47836674bae5febb68fec46d23bcba4e
BLAKE2b-256 2cb1317dfcb5ea40e997a59389448e8e79a3bdbd3e396a9a1b6e26afd48edb78

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page