langchain 공부

Document, BaseMedia 내부 분석

필만이 2024. 11. 9. 14:09

이 두 클래스는 상속 관계에 있으며, 데이터와 메타데이터를 관리하기 위한 계층 구조를 형성합니다. BaseMedia미디어 데이터에 대한 기본 구조와 속성을 정의하는 추상적인 베이스 클래스 역할을 하고, Document는 이를 확장하여 텍스트 문서 데이터와 관련된 구체적인 기능과 속성을 추가하는 역할을 합니다.

1. BaseMedia 클래스의 역할

BaseMedia는 미디어 데이터의 기본 구조를 정의하는 추상적이고 상위 개념의 클래스로, 다른 미디어 데이터 관련 클래스들이 상속받을 수 있도록 설계된 베이스 클래스입니다. 여기에는 데이터나 파일의 메타데이터와 ID와 같은 공통된 속성을 정의하고, 그 데이터를 구조화하거나 검색하는 데 필요한 기능을 제공합니다.

BaseMedia의 주요 특징:

  • ID: 각 미디어 데이터에 고유한 식별자를 부여할 수 있는 id 속성을 포함합니다.
  • 메타데이터: 미디어 데이터에 연결된 추가 정보를 metadata 속성으로 관리합니다.
  • 상속의 베이스 역할: BaseMedia는 다양한 미디어 데이터 유형에 대해 기본적인 속성과 기능을 정의함으로써, 이를 상속받는 클래스들이 공통 기능을 재사용하고 추가 기능을 구현할 수 있도록 합니다.

예시 코드

from typing import Optional

# BaseMedia 클래스가 다양한 미디어 유형의 기본 데이터와 메타데이터를 관리하는 예시
media_data = BaseMedia(
    id="12345",
    metadata={
        "source": "https://example.com",
        "author": "Alice",
        "license": "Creative Commons"
    }
)

print("Media ID:", media_data.id)                 # Media ID: 12345
print("Media Metadata:", media_data.metadata)      # Media Metadata: {'source': 'https://example.com', 'author': 'Alice', 'license': 'Creative Commons'}

# media_data 객체는 기본적으로 데이터나 파일의 메타정보만 저장하며, 미디어의 구체적인 내용을 다루지는 않음

이 예시에서는 BaseMedia를 사용하여 미디어 데이터의 ID와 메타데이터를 관리합니다. BaseMedia는 구체적인 데이터 내용보다는 해당 미디어의 메타정보를 저장하고 전달하는 데 중점을 둡니다. 다른 클래스들이 이를 상속받아 세부 구현을 추가할 수 있습니다.

2. Document 클래스의 역할

Document 클래스는 BaseMedia를 상속받아 텍스트 문서 데이터를 관리하기 위한 구체적인 구현을 제공하는 서브클래스입니다. BaseMedia에서 정의한 공통 속성(idmetadata)에 문서 데이터에 특화된 추가적인 속성(page_content)을 추가하고, 텍스트와 관련된 기능을 구현합니다.

Document의 주요 특징:

  • page_content 속성: 문서의 텍스트 내용을 저장하는 page_content 속성을 추가합니다. 이는 문서의 실제 데이터를 담고 있습니다.
  • 메타데이터 상속 및 확장: DocumentBaseMediametadata 속성을 상속받아 문서의 출처나 기타 관련 정보를 저장할 수 있습니다.
  • 특정 문서 유형 정의: 문서 데이터의 타입을 "Document"로 명시하여, 다양한 미디어 클래스들 사이에서 텍스트 문서임을 명확히 구분할 수 있습니다.

예시 코드

# Document 클래스가 텍스트 문서 데이터를 저장하고 메타데이터를 관리하는 예시
document = Document(
    page_content="This is a sample document.",
    metadata={
        "source": "https://example.com/docs/sample",
        "author": "Bob",
        "keywords": ["sample", "document", "text"]
    }
)

print("Document Content:", document.page_content)          # Document Content: This is a sample document.
print("Document Metadata:", document.metadata)             # Document Metadata: {'source': 'https://example.com/docs/sample', 'author': 'Bob', 'keywords': ['sample', 'document', 'text']}
print("Document Type:", document.type)                     # Document Type: Document

이 예시에서는 Document 클래스가 텍스트 문서 데이터를 직접 저장하고 이를 출력하는 역할을 합니다. page_content 속성에 문서의 본문 내용을 저장하고, metadata 속성을 통해 문서의 추가 정보(출처, 키워드 등)를 저장합니다.

BaseMediaDocument 클래스의 관계 및 역할 비교

클래스 역할 주요 속성 기능
BaseMedia 미디어 데이터를 관리하기 위한 기본 구조를 정의, 다른 미디어 클래스들의 상위 클래스 역할 id, metadata 공통 기능 제공
Document 텍스트 문서 데이터를 관리하기 위해 BaseMedia를 확장한 구체적인 클래스 page_content, type 문서 관련 기능
  • BaseMedia는 공통된 속성과 기본 기능을 정의하는 추상적인 베이스 클래스이며, 미디어 데이터 전반에 걸쳐 사용할 수 있는 구조를 제공합니다.
  • DocumentBaseMedia를 확장하여 텍스트 데이터를 담는 구체적인 클래스로, 텍스트 문서에 특화된 추가 속성과 메서드를 정의합니다.