ハルシネーションを許さない。LangExtractで実現する根拠(ソース)付きの情報抽出の実践
「彼女の下着は何色?」という、一歩間違えれば通報案件の問いを、LangExtractがどう鮮やかに(かつ紳士的に)解決するのか……。コント仕立てのサンプルコードと一緒に見ていきましょう!
一言でいうと、「LLMを使って、超高精度かつ『証拠付き』でテキストを構造化データ(JSON等)にするライブラリ」です。
出典(ソース)の明確化
「この情報は元の文章の〇文字目〜〇文字目にあるよ」という位置情報を正確に返してくれます。
構造化の安定感
LLMの出力は揺れがちですが、スキーマ定義とfew-shot(少数の例示)で、ガチガチに固まったJSONを生成できます。
長文に強い
並列処理やチャンク分割が組み込まれており、長いドキュメントでも「情報の取りこぼし(Needle In A Haystack)」を最小限に抑えます。
まずは pip でサクッとインストールしましょう。
pip install langextract
※Google AI StudioなどのAPIキーが必要です。環境変数 LANGEXTRACT_API_KEY に設定しておくとスムーズです。
さて、ここからは「浮気を疑う彼氏 vs 証拠を突きつけるLangExtract」という設定で、実際にコードを動かしてみましょう。
あなたは探偵エンジニアです。ターゲットの「日記(非構造化データ)」から、「誰が」「何色の下着を」身につけていたか、証拠(原文の位置)付きで抜き出さなければなりません。
import langextract as lx
import os
# 1. 抽出したい項目の定義(プロンプト)
PROMPT = "登場人物の服装、特に下着の色に関する情報を抽出してください。"
# 2. Few-shot(例示)の作成:これで抽出精度が爆上がりします
examples = [
lx.data.ExampleData(
text="A子さんは情熱的な赤いランジェリーを選んだ。",
entities=[
{"person": "A子", "item": "ランジェリー", "color": "赤"}
]
)
]
# 3. 解析対象の「怪しい日記」(非構造化テキスト)
suspicious_diary = """
12月24日、晴れ。
今日は特別な日。彼女は「今日は清楚に行きたいの」と言って、
真っ白なレースの下着を身にまとっていた。
でも、クローゼットの奥には昨日着ていたであろう
黒いシルクのブラジャーが脱ぎ捨てられていたんだ……。
"""
# 4. 実行!
results = lx.extract(
text=suspicious_diary,
prompt=PROMPT,
examples=examples,
model_name="gemini-1.5-flash" # モデル名は適宜変更
)
# 5. 結果を表示(エンジニア的に構造化データを確認)
for doc in results:
for entity in doc.entities:
# entity.span で「原文のどこにあるか」が分かります!
print(f"【抽出】 誰: {entity.data['person']}, 色: {entity.data['color']}, アイテム: {entity.data['item']}")
print(f" └─ 証拠(原文): '{entity.text}' (位置: {entity.span})\n")
このコント(コード)の凄いところは、単に「白」と答えるだけでなく、「ここから抽出しました!」というスパン(文字位置)を保持している点です。
契約書解析
「有効期限」や「金額」を抽出する際、どの条文に基づいているか即座にハイライト表示できます。
医療・臨床記録
膨大なカルテから、副作用の記述を「原文の場所」と共にリスト化できます。
カスタマーサポート
お問い合わせ内容から、製品名と不具合状況を正確に構造化し、エビデンス付きでDBに登録できます。
LangExtractには、抽出結果をHTMLでリッチに表示する機能もあります。
# 抽出結果をHTMLとして保存(ブラウザで証拠をハイライト確認できる!)
html_content = lx.visualize(results)
with open("evidence_report.html", "w", encoding="utf-8") as f:
f.write(html_content)
google/langextract は、LLMの「なんとなくの回答」を、「信頼できる構造化データ」へと昇華させる強力なツールです。
「彼女の下着は何色か?」という問いに対しても、 「この日記の35文字目から45文字目に『真っ白なレースの下着』と書いてあります!」 と、システムが完璧な証拠を突きつけてくれるようになります。