正確なソース参照 (Source Grounding)
抽出されたすべてのデータは元のテキストの正確な位置にリンクされ、検証が容易です。
Gemini、OpenAI、Ollama ローカルモデルを活用して、あらゆるテキストからデータを抽出するための開発者向けハンドブック。
非公式ガイド
これば開発者によって維持されているコミュニティガイド(Unofficial Guide)であり、Google 公式ではありません。
公式ドキュメントは優れていますが、ローカルモデルの導入やコスト最適化、実践的なユースケースについては情報が不足しがちです。
このガイドは、実際の開発現場での経験に基づき、Ollama の設定や長文ドキュメントの処理など、実務で役立つノウハウを提供します。
30秒で最初の抽出タスクを実行しましょう。
pip でインストールします。Python 3.9 以上が必要です。
pip install langextractデフォルトでは Google Gemini が使用されます。Google AI Studio からキーを取得してください。
export LANGEXTRACT_API_KEY="your-api-key-here"簡単なテキストからキャラクター情報を抽出します。Few-shot Example の提供が必要です。
import langextract as lx
# 抽出プロンプトを定義
prompt = "キャラクターとその感情を抽出してください。"
# モデルをガイドするための Few-shot Example
examples = [
lx.data.ExampleData(
text="ロミオ: おお、向こうの窓から漏れるあの光は何だ?",
extractions=[
lx.data.Extraction(
extraction_class="キャラクター",
extraction_text="ロミオ",
attributes={"感情状態": "驚嘆"}
),
]
)
]
# 入力テキスト
text = "ジュリエットは星空を見上げ、ロミオを想っていた。"
# 抽出を実行 (デフォルトの Gemini Flash モデルを使用)
result = lx.extract(
text_or_documents=text,
prompt_description=prompt,
examples=examples,
model_id="gemini-2.5-flash",
)
print(result.extractions)
print(result.extractions)LangExtract のキラー機能です。検証を容易にするためのインタラクティブな HTML レポートを生成します。
# 1. JSONL として保存
lx.io.save_annotated_documents([result], output_name="extraction_results.jsonl", output_dir=".")
# 2. インタラクティブな HTML を生成
html_content = lx.visualize("extraction_results.jsonl")
with open("visualization.html", "w") as f:
f.write(html_content.data if hasattr(html_content, 'data') else html_content)異なるモデルをどのように接続しますか?
プライバシー保護、コストゼロ。開発テストに最適です。
ollama pull gemma2:2bollama serveimport langextract as lx
result = lx.extract(
text_or_documents=text,
prompt_description=prompt,
examples=examples,
model_id="gemma2:2b", # Ollama provider を自動選択
model_url="http://localhost:11434",
fence_output=False,
use_schema_constraints=False
)複雑な推論タスクに適しています。依存関係のインストールが必要: pip install langextract[openai]
export OPENAI_API_KEY="sk-..."import os
import langextract as lx
result = lx.extract(
text_or_documents=text,
prompt_description=prompt,
examples=examples,
model_id="gpt-4o", # OpenAI provider を自動選択
api_key=os.environ.get('OPENAI_API_KEY'),
fence_output=True,
use_schema_constraints=False
)注意
OpenAI モデルは fence_output=True と use_schema_constraints=False が必要です。LangExtract は OpenAI 用の Schema 制約をまだ実装していないためです。
LangExtract は、DeepSeek (V3/R1)、Qwen (Alibaba)、Doubao (ByteDance) など、すべての OpenAI 互換 API をサポートしています。
import langextract as lx
result = lx.extract(
text_or_documents=text,
prompt_description=prompt,
examples=examples,
model_id="deepseek-chat",
api_key="your-api-key",
language_model_params={
"base_url": "https://api.deepseek.com/v1" # プロバイダーの URL に置き換え
},
fence_output=True,
use_schema_constraints=False
)
use_schema_constraints=False
)大規模なタスクでは、コストを節約するためにバッチモードを有効にすることをお勧めします。
result = lx.extract(
...,
language_model_params={"vertexai": True, "batch": {"enabled": True}}
)ローカル環境を汚さずに直接実行:
docker run --rm -e LANGEXTRACT_API_KEY="your-api-key" langextract python your_script.pyコンテキストウィンドウを超える書籍やPDFをどう処理するか? LangExtract は チャンク化 (Chunking) と 並列処理 のメカニズムを内蔵しています。
テキストを手動で分割する必要はありません。URL または長文を直接渡すだけです:
# 例:『ロミオとジュリエット』全編を処理
result = lx.extract(
text_or_documents="https://www.gutenberg.org/files/1513/1513-0.txt",
prompt_description=prompt,
examples=examples,
# コアパラメータ
extraction_passes=3, # 再現率 (Recall) を向上させるための複数回抽出
max_workers=20, # 速度向上のための並列ワーカー数
max_char_buffer=1000 # コンテキストバッファサイズ
)カルテから薬品名、投与量、頻度を構造化データとして抽出します。 完全な例を見る
トークン制限を超える長いテキスト(PDFや書籍など)を処理します。 完全な例を見る
日本語や中国語などの非英語テキストの処理。 完全な例を見る
Q: LangExtract と Docling の違いは何ですか? A: Docling は PDF やドキュメントを Markdown 形式に解析することに特化しています(レイアウト解析など)。一方、LangExtract はテキストから 構造化データ(JSON)を抽出すること に特化しています。これらを組み合わせるのが最強です:Docling で解析し、LangExtract でデータを抽出します。
Q: Azure OpenAI やその他の互換モデルは使えますか? A: はい、使えます。 LangExtract は OpenAI 互換 API を持つすべてのモデル(DeepSeek, Groq など)をサポートしています。base_url をプロバイダーのエンドポイントに変更するだけです。
Q: 長いドキュメント(書籍や長いPDF)は処理できますか? A: はい。LangExtract にはチャンク処理(Chunking)メカニズムが組み込まれています。長文抽出の例 をご覧ください。長いテキストを自動的に分割し、並列または順次処理して結果を統合できます。
Q: ローカル環境(オフライン)で動かせますか? A: はい、可能です。 Ollama と統合することで、Llama 3 や Gemma などのモデルをローカルで実行できます。これは 完全無料 であり、データが外部に送信されないため、プライバシー重視のデータ(医療記録や契約書)に最適です。
Q: LangExtract の利用は有料ですか? A: ライブラリ自体は 100% オープンソースで無料です。 コストがかかるのは LLM プロバイダー(Gemini, OpenAI)の API 利用料のみです。Ollama でローカルモデルを使用する場合は、完全に無料です。