shcherbak-ai/contextgem

Extract structured data and insights from documents using LLMs and decision models

ContextGem – LLM 및 결정 모델을 사용한 문서의 구조화된 추출

그것이 무엇인가 – 모든 텍스트(또는 이미지 포함) 문서에서 구조화된 사실을 끌어낼 수 있는 오픈 소스 Python 라이브러리입니다. 원하는 것(측면 및 개념)을 일반 언어로 설명하면 ContextGem이 프롬프트를 구축하고 적절한 모델을 호출하며 유형화된 출력을 검증하고 각 사실을 가져온 정확한 단락 또는 문장과 함께, 선택적으로 근거와 함께 반환합니다.

왜 중요한가 – 전통적인 LLM 파이프라인은 프롬프트를 수동으로 작성하고 검증 코드를 작성하며 답변을 소스에 수동으로 매핑해야 합니다. ContextGem은 이를 모두 재사용 및 직렬화 가능한 선언적 파이프라인으로 묶습니다. 또한 결정 모델을 지원합니다. 이는 폐쇄형 질문 유형(예/아니요, 레이블, 평점)에 답하고 확률을 반환하는 빠르고 저렴한 분류기로, 추론이 많은 LLM 호출과 저렴하고 높은 처리량의 모델을 혼합할 수 있습니다.

주요 기능

  • 프롬프트 작성 불필요 – 측면 또는 개념에 대한 설명을 작성하면 ContextGem이 프롬프트를 생성합니다.
  • 유형화되고 검증된 출력 – 문자열, 숫자, 날짜, 부울, 레이블, 평점 및 JSON 객체를 지원합니다.
  • 소스 추적 – 추출된 각 항목에는 가져온 단락/문장과 요청 시 간단한 근거가 포함됩니다.
  • 중첩 컨텍스트 – 측면(큰 섹션) 및 하위 측면을 정의한 다음 해당 섹션에 초점을 맞춘 개념을 첨부합니다.
  • 모델 라우팅 – 개방형 추출을 LLM(LiteLLM 경유)로 보내고 폐쇄형 질문 추출을 결정 모델(예: TypeSafe Jev, OpenAI Decisions API)로 보냅니다.
  • 확률 답변 – 결정 모델은 각 가능한 답변에 대한 확률 분포를 반환하여 임계값을 설정할 수 있습니다.
  • 일괄 처리 – 문서의 모든 단락을 읽고(검색 단계 없음) 선택적으로 사용자 정의 배치 크기로 처리합니다.

작동 방식(개요)

  1. 콘텐츠를 래핑합니다 Document 객체에(일반 텍스트, 이미지 또는 둘 다).
  2. 추출할 내용을 선언합니다:
    • 측면은 주제와 일치하는 전체 단락/문장을 추출합니다.
    • 개념은 전체 문서 또는 특정 측면에서 유형 값(문자열, 숫자, 부울, 레이블 등)을 추출합니다.
  3. 모델을 실행합니다:
    • DocumentLLM은 LLM 기반 추출용입니다.
    • DocumentDecisionModel은 결정 모델 추출용입니다.
    • 또는 각 측면/개념을 적절한 모델로 라우팅하는 모델 그룹.
  4. 결과를 얻습니다 – 반환된 Document에는 extracted_items가 포함되며 값, 소스 참조, 근거 및 (결정 모델의 경우) 확률 점수가 포함됩니다.

빠른 예제(LLM)

from contextgem import Document, Aspect, StringConcept, DocumentLLM

doc = Document(raw_text="...contract text...")

doc.add_aspects([Aspect(name="Payment terms", description="Clauses on payments")])

doc.add_concepts([
    StringConcept(
        name="Anomalies",
        description="Anomalous statements",
        add_references=True,
        reference_depth="sentences",
        add_justifications=True,
        justification_depth="brief",
    )
])

llm = DocumentLLM(model="openai/gpt-6-luna", api_key="…")
result = llm.extract_all(doc)
print(result.get_aspect_by_name("Payment terms").extracted_items)
print(result.get_concept_by_name("Anomalies").extracted_items)

측면은 정확한 지불 조항 단락을 반환하고 개념은 각 이상을 소스 문장 및 간단한 근거와 함께 반환합니다.

빠른 예제(결정 모델)

from contextgem import Document, Aspect, BooleanConcept, LabelConcept, DocumentDecisionModel

doc = Document(raw_text="...service agreement...")

doc.add_aspects([Aspect(name="Termination", description="Clauses on termination")])

doc.add_concepts([
    BooleanConcept(name="Termination for convenience", description="Can it be ended without cause?"),
    LabelConcept(
        name="Notice form",
        description="Form of termination notice",
        labels=["Written", "Email", "Any form", "Not specified"],
        classification_type="multi_class",
    ),
])

model = DocumentDecisionModel(model="typesafe/jev-latest", api_key="…")
result = model.extract_all(doc)
print(result.get_aspect_by_name("Termination").extracted_items)
print(result.get_concept_by_name("Termination for convenience").extracted_items)
print(result.get_concept_by_name("Notice form").extracted_items)

각 단락은 측면에 대한 예/아니요 확률을 얻고 개념은 선택된 레이블에 대한 확률을 반환합니다.

설치 – pip install -U contextgem(또는 uv add contextgem).

문서 및 리소스 – 전체 문서는 https://contextgem.shcherbak.ai 에 있으며, 빠른 시작 가이드, v1.0 마이그레이션 가이드 및 광범위한 테스트(단위, 속성 기반 및 참조 추출에 대한 평가)가 있습니다.


ContextGem은 LLM과 전문 결정 모델을 결합하여 문서에서 신뢰할 수 있고 추적 가능한 데이터 추출을 자동화하는 진정한 AI 중심 프로젝트입니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트