사용툴 분석

TypedDict의 개념과 langsmith

필만이 2024. 9. 8. 09:51

1. TypedDict의 개념

TypedDictPython 3.8에서 도입된 타입 힌팅 도구로, 딕셔너리에서 키와 값의 타입을 명시적으로 정의할 수 있게 해줍니다. 이는 런타임에서는 일반 딕셔너리처럼 동작하지만, 정적 타입 검사기(예: mypy, pyright)에서 키-값 쌍의 타입 일치 여부를 미리 검사할 수 있는 기능을 제공합니다.

주요 특징:

  • 딕셔너리에서 각 필드의 타입을 명시적으로 정의.
  • 타입 검사기를 통해 타입 불일치를 미리 확인.
  • 선택적 필드필수 필드를 구분할 수 있음.
  • 코드의 가독성유지보수성 향상.

예시:

from typing import TypedDict, NotRequired

# Person 딕셔너리를 정의
class Person(TypedDict):
    name: str
    age: NotRequired[int]  # 선택적 필드

person: Person = {"name": "Alice"}

2. TypedDict와 LangSmith의 관계

LangSmithLangChainLLM(대형 언어 모델)의 성능을 모니터링하고 피드백을 수집하여 모델을 개선하는 도구입니다. TypedDict와의 관계는 데이터 구조를 명확하게 정의함으로써 데이터의 타입 안전성을 제공하고, 피드백 데이터의 구조를 보다 체계적으로 관리하는 데 도움이 됩니다.

관계:

  • 데이터 스키마 정의: LangSmith에서 피드백 데이터LLM의 입력 및 출력 데이터를 TypedDict를 사용해 타입 안전성을 확보.
  • 타입 힌팅을 통한 오류 방지: 피드백이나 모델 입력 데이터에 대해 정적 타입 검사를 통해 잘못된 타입 사용을 방지할 수 있음.

예시:

from typing import TypedDict

# LLM 응답을 저장할 구조 정의
class LLMResponse(TypedDict):
    query: str
    response: str
    model_name: str
    timestamp: str

response: LLMResponse = {
    "query": "What is the capital of France?",
    "response": "Paris",
    "model_name": "gpt-4",
    "timestamp": "2024-09-05T14:30:00Z"
}

3. PDF 데이터를 기반으로 TypedDict 생성 코드 예시

아래 코드는 PDF 문서의 데이터를 추출한 후 TypedDict를 사용해 데이터를 구조화하는 방법입니다. PDF에서 데이터를 추출한 후, 이를 TypedDict로 구조화하여 타입 안전성을 보장합니다.

from typing import TypedDict, List
import pdfplumber  # PDF에서 데이터를 추출하는 라이브러리

# TypedDict 정의: PDF 데이터 구조
class PDFMetadata(TypedDict):
    title: str
    author: str
    pages: int

class PDFPage(TypedDict):
    page_number: int
    content: str

class PDFDocument(TypedDict):
    metadata: PDFMetadata
    pages: List[PDFPage]

# PDF 데이터를 읽어서 TypedDict로 변환하는 함수
def pdf_to_typeddict(file_path: str) -> PDFDocument:
    with pdfplumber.open(file_path) as pdf:
        # PDF 메타데이터 추출
        metadata = PDFMetadata(
            title=pdf.metadata.get("Title", "Unknown"),
            author=pdf.metadata.get("Author", "Unknown"),
            pages=len(pdf.pages)
        )

        # 각 페이지의 텍스트 추출
        pages = [
            PDFPage(page_number=i + 1, content=page.extract_text() or "")
            for i, page in enumerate(pdf.pages)
        ]

        # PDFDocument TypedDict 생성
        pdf_data: PDFDocument = {
            "metadata": metadata,
            "pages": pages
        }
        return pdf_data

# 사용 예시
pdf_file = "sample.pdf"
pdf_data = pdf_to_typeddict(pdf_file)

# 출력된 PDF 데이터 확인
print(pdf_data)

설명:

  • pdfplumber 라이브러리를 사용해 PDF에서 텍스트와 메타데이터를 추출.
  • 추출된 데이터를 TypedDict로 구조화하여 각 필드에 타입을 명확히 정의.
  • PDF의 메타데이터(제목, 저자, 페이지 수)와 페이지별 텍스트를 각각 TypedDict에 담음.

결론

  • TypedDict딕셔너리의 타입을 명확히 정의하여, 타입 안전성정적 타입 검사를 제공하는 도구입니다.
  • LangSmith와 함께 사용할 때, 피드백 데이터나 모델 입력 데이터를 체계적으로 관리할 수 있습니다.
  • PDF 데이터를 TypedDict로 변환함으로써, 데이터를 타입 안전하게 처리할 수 있습니다.