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 に焦点を当てたプロジェクトです。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト