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)に送信します。
- 確率回答 – 決定モデルは、可能な各回答の確率分布を返し、しきい値を設定できます。
- バッチ処理 – ドキュメントのすべての段落を読み取り(検索ステップなし)、オプションでユーザー定義のバッチサイズで処理します。
仕組み(概要)
- コンテンツをラップします
Documentオブジェクトに(プレーンテキスト、画像、またはその両方)。 - 抽出する内容を宣言します:
- アスペクトは、トピックに一致する段落/文全体を抽出します。
- コンセプトは、ドキュメント全体または特定のアスペクトから型付き値(文字列、数値、ブール値、ラベルなど)を抽出します。
- モデルを実行します:
DocumentLLMは LLM ベースの抽出用。DocumentDecisionModelは決定モデル抽出用。- または、各アスペクト/コンセプトを適切なモデルにルーティングするモデルグループ。
- 結果を取得します – 返された
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 に焦点を当てたプロジェクトです。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト