ドキュメント引用グラフをAIエージェントと共に構築する「cite」— 法律・研究・企業文書のオープン引用基盤
bash ファイル名.sh を実行してください(中身を一度確認してから実行すると安心です)。
(macOS / Linux 環境が必要) ドキュメント引用グラフをAIエージェントと共に構築する「cite」— 法律・研究・企業文書のオープン引用基盤
ひとことでいうと
cite(旧称 OpenContracts)は、文書どうしの「引用関係」をオープンなグラフ(ネットワーク図)として管理・共有できるプラットフォームです。法律文書・研究論文・規格書・社内ポリシーなど、あらゆる文書を「ノード(文書そのもの)」と「エッジ(どの文書がどれを引用しているか)」のつながりとして表現します。人間と AI エージェント(自律的に動く AI プログラム)が一緒に引用関係を構築・活用できる環境が整っており、MITライセンスで無償公開されているため、商用利用・改変・再配布が自由に行えます。単なる PDF ビューアではなく、引用グラフを育てていくための基盤(サブストレート)として設計されています。
こんな人におすすめ
法律・リーガルテック開発者 判例・法令・契約書の引用関係データベースを自前で構築したい開発者に最適です。Westlaw や Lexis のような閉じた(有料・非公開の)引用データベースに頼らず、オープンな引用グラフを自分たちで育てることができます。AI エージェントや検索ツールと組み合わせることで、法的調査の自動化にも応用できます。
学術研究者・図書館員 論文の引用ネットワークをコミュニティで管理・拡張していきたい研究者に向いています。人間とエージェントが同じグラフを参照しながら作業できるため、引用情報の精度を時間とともに高め続けることができます。既存の閉じたシステムに依存しない、オープンな引用基盤を目指す取り組みに加わることもできます。
エンタープライズ知識管理担当者 社内の仕様書・設計書・手順書の関連性をバージョン管理しながら整理したい担当者に役立ちます。LLM(大規模言語モデル)エージェントが「この設計書が参照している要件書はどれか」と引用グラフをたどりながら答えられる環境を構築でき、新入社員のオンボーディングや変更影響分析の効率化に直結します。
インストール・使い方
cite は Docker Compose(複数のプログラムをまとめて起動する仕組み)を使って動かします。データベース(PostgreSQL)・キャッシュ(Redis)・バックグラウンドワーカー(Celery)・画面(React/Vite)が一度に立ち上がります。
Step 1: ソースコードを手元に取得して設定ファイルを準備する
git clone https://github.com/Open-Source-Legal/OpenContracts.git
cd OpenContracts
mkdir -p .envs/.local
cp ./docs/sample_env_files/backend/local/.django ./.envs/.local/.django
cp ./docs/sample_env_files/backend/local/.postgres ./.envs/.local/.postgres
cp ./docs/sample_env_files/frontend/local/django.auth.env ./.envs/.local/.frontend
ターミナル(文字で命令を送る画面)に上記をコピー&ペーストして実行します。git clone でリポジトリ(ソースコードの置き場)をダウンロードし、サンプルの設定ファイルを所定の場所にコピーしています。
Step 2: 必要なイメージをビルドしてサービスを起動する
docker compose -f local.yml build
docker compose -f local.yml --profile fullstack up
build でコンテナ(アプリが動く独立した実行環境)を組み立て、up で全サービスを一斉に起動します。初回は数分かかることがあります。
Step 3: ブラウザでログインする
ブラウザ(Chrome や Firefox など)で http://localhost:3000 を開きます。ユーザー名 admin、パスワード Openc0ntracts_def@ult でログインできます。初期状態でサンプルコーパスを作成し、PDF をアップロードして引用アノテーションをすぐに試せます。
Step 4: AI エージェント用のエンドポイントを確認する
AI エージェントからの利用は /mcp/ エンドポイント(接続口)を使います。利用できる機能の一覧は /llms.txt と /.well-known/mcp.json で確認でき、コーパス検索・引用検索・アノテーション提案などの操作がプログラムから呼び出せます。
動かしてみた
実行環境として Python 3.12.13 が利用できることを確認しました。
プロジェクトの中身を見ると、model_preloaders/ フォルダ以下に各種 AI モデルのダウンローダーが整備されています。PDF を解析する Docling、固有表現(人名・法令名など)を認識する GLINER、文書を数値ベクトルに変換する埋め込みモデル、日本語処理にも対応できる spaCy の4種類が確認できました。
フロントエンド(画面側のプログラム)は Vite + TypeScript 構成で、frontend/.nvmrc によって Node.js のバージョンが固定されているため、環境差異によるトラブルが起きにくい設計になっています。CI(継続的インテグレーション=自動テストの仕組み)の設定ファイルも整備されており、本番環境・Redis 統合テストが自動で走るよう構成されていることも確認できました。コードスタイルは black・isort・mypy によって自動チェックされるため、品質が一定に保たれています。
ブラウザで試す
引用抽出の概念をブラウザ上でインタラクティブに体験できる Gradio デモも用意されています。テキストを貼り付けると、法令条文・判例・セクション参照などの引用パターンを自動検出し、引用グラフの JSON 表現として出力します。本格的な cite システム(PostgreSQL + Redis + AI エージェント連携)を試す前に、引用グラフがどのようなものか感触をつかむのに役立ちます。
実践のコツ — はじめの一歩
- まずサンプルコーパスを作ってみる: ログイン後、左サイドバーの「New Corpus」から文書をアップロードし、アノテーションツールで引用スパン(引用している箇所の範囲)を選択するだけで、最初のエッジ(文書間のつながり)が生まれます。
- モデルは事前にダウンロードしておく:
model_preloaders/のスクリプトを個別に実行してモデルをあらかじめ取得しておくと、起動がスムーズになります。Docling や GLINER は数百 MB 規模なので、初回起動前に済ませておくのがおすすめです。 - ランディングページの表示は環境変数で切り替える: 環境変数
REACT_APP_LANDING_VARIANTをdefaultまたはpublic-recordに設定するだけで、リビルド(再ビルド)なしにページの見た目を切り替えられます。 - API を探索するなら GraphQL から始める:
/graphql/エンドポイントではイントロスペクション(API が持つ機能の一覧取得)ができるため、エージェント開発時に利用可能なクエリを効率よく確認できます。 - デプロイ前に CI で動作確認する:
compose/test-production-ci.ymlを使うと本番想定の環境でテストを走らせられるため、本番に上げる前に問題を発見しやすくなります。
活用例
- AI エージェントのグラウンドトゥルース(正解データ)基盤: MCP エンドポイントを Claude や Cursor に接続し、「この条文が引用している法令を列挙して」とエージェントに問いかけると、引用グラフをたどりながら回答を生成できます。RAG(検索拡張生成)の精度を、引用関係という構造情報で大幅に引き上げられます。
- 法令・判例データベースの構築とオープン化: 国内外の法令テキストをコーパスとして取り込み、条文間の引用関係をアノテーションで積み上げます。パブリックコーパスとして公開し、コミュニティで育てる「法令版 OpenStreetMap」を目指す使い方ができます。
- 企業内ナレッジグラフの整備: 社内の仕様書・設計書・議事録の関連性をバージョン管理しながら管理し、エージェントが「この設計書が参照している要件書はどれか」を即答できる環境を構築できます。フォーク(分岐コピー)機能で部門ごとのカスタマイズにも対応できます。
- 研究論文の引用ネットワーク分析: 複数の論文をコーパスとして登録し、引用関係を可視化することで、特定テーマにおける影響力の高い論文や研究の流れを把握できます。セマンティック検索(意味に基づく検索)と組み合わせることで、関連研究の探索が格段に楽になります。
- 規格書・標準仕様の追跡管理: ISO や業界標準の仕様書をコーパスとして管理し、改訂のたびにバージョン差分と引用関係を記録することで、変更の影響範囲を素早く把握できます。
- 教育・学習コンテンツの構造化: 教科書や講義資料をコーパスとして登録し、概念間の参照関係をアノテーションで整理することで、学習者が関連知識をたどりやすい教材データベースを構築できます。
用語とポイント解説
コーパス(Corpus)
文書の集まりを管理する単位です。かんたんに言うと、テーマごとに文書をまとめたフォルダのようなものです。フォルダ階層・アクセス権限・バージョン管理が備わっており、git のようにフォーク・差分管理・履歴復元が行えます。
アノテーション 文書内の特定の範囲(スパン)に付与するラベルやメモのことです。かんたんに言うと、PDF にマーカーで印をつけながら「ここが引用元」と記録する作業です。テキストの座標情報まで対応しており、複数ページにまたがる範囲も正確に記録できます。
MCP(Model Context Protocol) AI エージェントが外部のツールやデータソースにアクセスするためのオープンな通信規約です。かんたんに言うと、AI が cite のデータを「読み書きするための共通の言葉」です。Claude や Cursor など MCP に対応した AI ツールから直接コーパスを検索・参照できます。
PAWLS AllenAI が開発した PDF アノテーション用のデータ形式です。かんたんに言うと、PDF のどこに何が書いてあるかを座標付きで記録するファイル形式です。テキストと位置情報を対応づけることで、精密なアノテーションが可能になります。
Docling PDF のレイアウトを解析するマイクロサービス(小さな独立したプログラム)です。かんたんに言うと、「PDF の中身を構造ごと読み取る専門家」です。単なるテキスト抽出ではなく、見出し・段落・表といったレイアウト情報付きで内容を取り出します。
GLINER 文書中の固有表現(人名・法令名・組織名など)を自動検出する NER モデルです。かんたんに言うと、「文章の中から重要な名前を自動で見つけるプログラム」です。法律文書に登場する条文名や判例名なども検出でき、引用グラフの精度向上に貢献します。
GraphQL
データを柔軟に取得・操作するための API クエリ言語です。かんたんに言うと、「欲しいデータの形を自分で指定して取り出せる問い合わせ方法」です。/graphql/ エンドポイントで引用グラフの検索・更新が行え、エージェント開発時に特に役立ちます。
Celery Python の非同期タスクキュー(後回しにしたい処理を順番に実行する仕組み)です。かんたんに言うと、「重い処理を裏でこなしてくれる作業員」です。文書の解析・埋め込みベクトルの生成といった時間のかかる処理をバックグラウンドで実行し、画面の動作を止めません。
RAG(Retrieval-Augmented Generation) 検索(Retrieval)で関連情報を取得してから、LLM が回答を生成(Generation)する手法です。かんたんに言うと、「答える前に資料を調べてから話す AI」の動き方です。cite の引用グラフと組み合わせることで、検索精度と回答の根拠が向上します。
ぜひ法令データベースの構築やエンタープライズ知識グラフの整備、研究論文の引用ネットワーク分析などに活用してみてはいかがでしょうか。