ハルシネーションを許さない。LangExtractで実現する根拠(ソース)付きの情報抽出の実践


ハルシネーションを許さない。LangExtractで実現する根拠(ソース)付きの情報抽出の実践

google/langextract

2025-12-24

「彼女の下着は何色?」という、一歩間違えれば通報案件の問いを、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文字目に『真っ白なレースの下着』と書いてあります!」 と、システムが完璧な証拠を突きつけてくれるようになります。


google/langextract




AIアプリケーション開発のためのレシピブック

今日は「Haystack」という、AIの世界で最近話題の新しいカクテルを紹介させてください。これ、ただのAIじゃなくて、色々なAIの材料を組み合わせて、お客様の好みにぴったりの一杯を作り出すためのツールなんです。ソフトウェアエンジニアの視点から言えば、Haystackは例えるなら「AIアプリケーション開発のためのシェイカーとレシピブック」です。


動画ファイルが賢くなる?NLPとOpenCVでテキスト検索を可能にする「memvid」とは

「memvid」は、Olow304/memvid というGitHubリポジトリで公開されている、Pythonで書かれたライブラリです。NLP(自然言語処理)とOpenCV(コンピュータービジョンライブラリ)を組み合わせて、テキスト情報を動画ファイル(MP4)の中に効率的に保存し、高速な意味検索を可能にします。


サーバーレス&シングルファイル!Pythonライブラリ「memvid」で実現する最小構成のAI長期記憶

Aさん(部長)「いや〜、最近のAIエージェントは物忘れがひどくて困るよ。昨日の打ち合わせ内容を忘れて、また同じ質問をしてくるんだ。まるで私のスライスショットの癖を忘れて、毎回池に打ち込むキャディみたいだよ!」Bさん(エンジニア)「部長、それは『長期記憶』が足りないんですよ。普通はRAG(ラグ)っていう複雑な仕組みを作るんですけど、データベースを立てたり、ベクトル検索の設定をしたり……。例えるなら、パター一本でいいのに、わざわざ大型ダンプカーで芝を整えに行くような手間がかかるんです。」


ソフトウェアエンジニア必見!Parlantで始める自律型AIエージェント入門

想像してみてください。あなたは巨大な湖(=現実世界の複雑なタスク)で、一人でたくさんの魚(=タスクの実行)を釣ろうとしています。これまでは、魚を一匹一匹、網で捕まえていたかもしれません。しかし、もし、あなたが指示を出すだけで、自動で複数の網を使いこなし、最適な場所で、効率よく魚を釣り上げてくれる優秀な「釣り名人」がいたらどうでしょう?


【ソフトウェアエンジニア向け】FastAPIとReactを即座に動かす魔法のテンプレート

先輩おい、新人!新しいプロジェクト、明日から始めろってさ。新人え、明日からですか!?先輩そう。フロントエンドはReact、バックエンドはFastAPI、データベースはPostgreSQLだって。Dockerコンテナで動かして、GitHub Actionsで自動デプロイも組んどけ。しかも本番環境はSSL証明書がいるからLet's Encryptで自動化しろってさ。


【ソフトウェアエンジニア向け】ルパン三世に学ぶ、最強の自動取引ボット「Freqtrade」入門

「今から、とっておきの話をしようぜ。」「ヤツらの名は Freqtrade。」「ヤツらは、フリーでオープンソースの、暗号通貨取引を自動化する最強の味方だ。まるで、手練れの金庫破りみたいに、24時間365日、眠らずに取引してくれるんだぜ。お前も、もう夜中に価格を気にする必要はない。」


ソフトウェアエンジニア必見! MCPでAI開発の密室を突破する

おいおい、一体どういうことだ!? この部屋は完全に密室じゃないか!…おっと、すみません。ついドラマの役に入り込んでしまいました。でも、この密室、実は我々ソフトウェアエンジニアの目の前にある「AI開発の密室」かもしれません。「ん? AIの密室ってどういうこと?」と、あなたは首を傾げていますね。ご説明しましょう。


Pythonパッケージ管理の新境地:Poetryの魅力

夜の帳が降り、キーボードの光だけが部屋を照らす。君は、Pythonのプロジェクトを始めようと、指を静かに滑らせる。しかし、そこには常に付きまとう悩ましい問題があった。そう、依存関係の管理だ。requirements. txt と virtualenv を駆使しても、その関係性は複雑で、絡み合う糸のように、いつの間にか君を縛り付けてしまう。


ソフトウェアエンジニア必見!リアルタイム音声クローンで創造する未来のサービス

今回ご紹介するのは、GitHubで公開されているCorentinJさんの「Real-Time-Voice-Cloning」です。一言で言うと、「たった5秒で声色をコピーして、まるで魔法のように好きな言葉をしゃべらせる」という、夢のような技術なんです。


ソフトウェアエンジニア必見!PyTorch導入ガイドとGPU活用で実現する高速ディープラーニング

PyTorchは、FacebookのAI研究グループによって開発された、Pythonベースのオープンソース機械学習ライブラリです。特に深層学習(ディープラーニング)の研究や開発で非常に人気があります。ユーザーさんが指定してくださった説明にあるように、その核となる要素は以下の2点です。