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 파이프라인 생성

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의 임베딩 모델과 질의 모델을 사용하기 위해 필요합니다.
  • use_persistent_storage: ChromaDB 사용 시, 데이터 지속성 여부를 설정합니다. 기본값은 False입니다. True로 설정하면 ChromaDB가 데이터를 디스크에 영구적으로 저장하여 프로그램 종료 후에도 데이터를 유지할 수 있습니다.

예시:

from bombay import create_pipeline

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

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

2. 문서 추가

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

예시:

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

pipeline.add_documents(documents)

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

3. 검색 및 응답 생성

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

단일 책임 원칙(Single Responsibility Principle)

  • 각 클래스는 단일 책임을 가지도록 설계
  • VectorDB는 벡터 데이터베이스 관련 기능, EmbeddingModel은 임베딩 관련 기능, QueryModel은 질의 관련 기능을 담당

개방-폐쇄 원칙(Open-Closed Principle)

  • 추상 클래스와 인터페이스 사용으로 새로운 구현체 추가는 개방, 기존 코드 수정 없이 확장 가능

의존 관계 주입(Dependency Injection)

  • BombayPipeline 클래스는 생성자를 통해 필요한 의존성(embedding_model, query_model, vector_db) 주입 받음
  • 의존성 관리와 테스트 용이성 향상

팩토리 패턴(Factory Pattern)

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

어댑터 패턴(Adapter Pattern)

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

템플릿 메소드 패턴(Template Method Pattern)

  • BombayPipeline 클래스의 search_and_answer 메소드는 템플릿 메소드 패턴과 유사한 구조
  • 일련의 알고리즘 단계를 정의하고, 각 단계는 하위 클래스 또는 의존성에 의해 구현

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.1.tar.gz (11.1 kB view details)

Uploaded Source

Built Distribution

bombay-0.1.1-py3-none-any.whl (8.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: bombay-0.1.1.tar.gz
  • Upload date:
  • Size: 11.1 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.1.tar.gz
Algorithm Hash digest
SHA256 1554700bf00549b79949196245bcfdc59f1e54ada001fb9d8edc3687cf10e68d
MD5 8cb0c404d7136da70767a3fc45547076
BLAKE2b-256 e5693de3373b95820d1dc479f46cddd1b5bffe6b3b8cf6f147e6161d8759c3b9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: bombay-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 8.0 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 2c49881a28b7798b16bc24685baae6be72e8f69f31d57612282b0516bbd7879d
MD5 d71fe0fb3c8b823c690f6c374fdda49e
BLAKE2b-256 71c06a6cb0ce0dc943e2b30bbd74ad4ca60c8876d1716aa1cba65fc1e83030c6

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