初心者 11 分法務

法務担当者:契約を分析する fuite

端的な回答

契約書をお使いの端末の外に出さずに分析するには、Ollamaでモデル(Qwen 3.5 9BまたはMistral Small 24B)を提供し、PDFからテキストを抽出して、指摘する各事項について該当箇所を一字一句そのまま引用するというルールを設けてください。その後、スクリプトで引用が契約書内に存在することを確認します。VRAMが24GB未満の場合、Ollamaのコンテキストウィンドウはデフォルトで4,000トークンに設定されているため、この値を引き上げてください。

契約書には、職業上の守秘義務や秘密保持契約の下では、どんなオンラインサービスにでも預けてよいとはいえない情報が含まれています。ローカルのパイプラインは、端末からデータを一切出さずにPDFを読み取り、確認すべき条項を示し、該当箇所を引用します。本ガイドでは、このパイプラインを構築し、引用の自動検証を追加するとともに、ツールにできないことも明確に説明します。

著者 Mohamed Meguedmi·更新 2026-09-30·Windows・macOS・Linuxでテスト済み

#契約書をオンラインチャットに送るべきではない理由

契約には名前、価格、交渉された条件、場合によっては個人情報が含まれます。AIサービスにその情報を送信することは、第三者にこれらの情報を送ることを意味し、利用規約によって定められた範囲内で行われるため、個人の機密保持の約束とは異なります。弁護士にとっては、倫理的な問題です。2026年3月にフランスのConseil national des barreauxが採択した「AIと倫理に関するガイド」では、専門家の秘密保持およびGDPRの遵守がプロフェッショナルの義務として挙げられています。このガイドの解釈者たちは、秘密は、顧客や案件に関する機密情報を、AIツールの利用においても一切公表しないことを義務づけていると指摘しています。

企業の法務担当者にとって、制約は契約にあります。取引先と締結した秘密保持契約では、その条項をAIサービス提供者に送信することは、ほぼ想定されていません。AIサービス各社の法人向けプランでは、データを再利用しないという保証が提供されていますが、確認すべきなのは宣伝文句ではなく、実際に締結した契約です。ローカルで分析すれば、この問題はなくなります。契約の本文は自分の端末の外に出ないため、申告すべき処理委託先も、正当性を説明すべきデータ移転もありません。

!
ローカルだからといって信頼できるとは限りません
ローカルでの処理は機密性の問題を解決しますが、正確性の問題は解決しません。スタンフォード大学が2024年に発表した、米国の商用法律調査ツールに関する研究では、最も優れたツールでも17%を超えるケースで誤った回答が見られました。これらは契約書を読み解くツールではありませんが、この割合は、自信たっぷりに文章を書くモデルでも間違えることがあると示しています。だからこそ、このガイドでは、モデルのすべての主張を、検証できる具体的な記述に基づかせることをルールとしています。

#コードを書かずに社内でPDFについてチャットする

ローカルAIキット

お使いのマシンで、プライベートかつ無料のChatGPTを1時間で構築 — LM Studio、Ollama、Open WebUI、ご自身のドキュメント、クラウド不要。

  • 永久に利用できるオンラインスペース
  • PDF + ファイル
  • 生涯アップデート

読者の中には、情報を一切システムの外に出さずに、フォルダに保存した契約書について質問したいだけの方もいます。方法は2つあります。1つ目はプログラミング不要で、Open WebUIやAnythingLLMのようなインターフェースを内部サーバーにインストールし、Ollamaに接続する方法です。PDFを読み込んで質問すると、ツールが必要な箇所を探し出します。これらのガイドは当サイトにあります。2つ目は、以下で説明する短いスクリプトを使う方法です。プロンプトと引用の検証を完全に制御できます。

このスクリプトは、具体的な質問を使って契約書を1件ずつ分析するのに適しています。文書検索機能を備えたインターフェースは、数十件の契約書からなるコーパスを対象に、例えば自動更新条項を含む契約書をすべて見つけたい場合に適しています。この後者の場合、品質はモデルだけでなく、文書の分割方法と検索にも左右されます。

どのようなアプローチがどのようなニーズに適するか
ニーズアプローチ注意点
10~25ページの契約書を読むスクリプトで直接処理し、契約書全体をコンテキストに入れるコンテキストウィンドウのサイズ(Ollama で確認)
20〜500件の契約書について質問するRAGインターフェース (Open WebUI, AnythingLLM)分割品質と検索品質
契約書のひな形と比較するプロンプトに2つのテキストを含むスクリプトコンテキストの倍増:メモリを確認
スキャンされた契約書まずOCRを実行しますノイズを含むテキストは引用を不正確にする

#最小限の構成:モデル、PDF リーダー、スクリプト

必要な要素は三つです。Ollamaがモデルをサーブします。pdfplumberやPyMuPDFなどのPDFリーダーがテキストを抽出します。約40行のPythonスクリプトがこれらを連携させます。モデルについては、ライブラリOllama内の二つの目安があります。Qwen 3.5は9Bパラメータで6.6 GB、コンテキスト長は256,000トークンとされています。Mistral Smallは24Bで14 GB、コンテキスト長は32,000トークンとされています。前者は8〜12 GBのGPUカードで動作し、後者は16 GB以上が必要です。ご自身の契約書三つで両方をテストしてください。フランス語の法的文書の理解度は契約書によって異なります。

コンテキストが落とし穴となるポイントです。Ollama はデフォルトでビデオメモリに基づいてウィンドウを固定します。24 GB未満の場合、ウィンドウは4,000トークンとなり、契約書のサイズよりはるかに小さくなります。20ページの契約書は数千語、つまりレイアウトによって1万5,000トークン以上になるため、これはご自身の文書で測定すべき桁数です。設定を変更しないと、契約書の冒頭がサイレントに切り捨てられ、モデルは一部の情報に基づいてのみ応答します。コンテキストウィンドウに関するガイドでは、このメカニズムを説明しています。

#ツールのインストール

モデルとライブラリ
ollama pull qwen3.5:9b   # ou mistral-small si vous avez 16 Go de VRAM
pip install pdfplumber requests

次に、PDF に選択可能なテキストが含まれているか確認してください。pdfplumber が空文字列を返す場合、そのファイルはスキャン画像なので、OCR 処理が必要です。品質の低い OCR 結果からテキストを作成する場合は、必ずそのことをユーザーに伝えてください。そうしないと、モデルが示す引用を検証できなくなります。

#初期確認を行うアシスタントのシステムプロンプト

プロンプトで役割、禁止事項、出力形式を定めます。重要なのは、引用を義務付けることです。根拠とする箇所をそのまま書き写す必要があるモデルは、情報を捏造することが少なくなり、引用をプログラムで検証することもできます。以下のプロンプトでは、この検証を容易にするために、構造化された出力を求めています。

system_prompt.txt
Tu assistes un juriste pour un premier repérage rapide dans un contrat
commercial de droit français.

RÈGLES
- Tu ne donnes jamais d'avis juridique. Tu signales des points à examiner.
- Pour chaque point, recopie MOT POUR MOT le passage du contrat concerné.
- Si le contrat ne traite pas un sujet demandé, écris explicitement : non traité.
- Ne suppose jamais l'intention des parties. Ne complète pas un passage manquant.

FORMAT : un JSON, liste d'objets {"point": ..., "citation": ..., "pourquoi": ...}

#完全なスクリプト(引用の検証を含む)

スクリプトは PDF を読み込み、コンテキストを広げてモデルに問い合わせ、スキーマによって JSON 形式を指定します。これは Ollama API の format フィールドで可能です。その後、空白を正規化してから、各引用が契約書の本文に実際に含まれているかを確認します。見つからない引用には別途印を付けます。これは、捏造や言い換えが行われた可能性を示すため、確認が必要です。

analyse_contrat.py
import json, re, sys, requests, pdfplumber

SYSTEM = open('system_prompt.txt', encoding='utf-8').read()
SCHEMA = {'type': 'array', 'items': {'type': 'object',
  'properties': {'point': {'type': 'string'}, 'citation': {'type': 'string'},
                 'pourquoi': {'type': 'string'}},
  'required': ['point', 'citation', 'pourquoi']}}

def lire_pdf(chemin):
    with pdfplumber.open(chemin) as pdf:
        return '\n'.join(p.extract_text() or '' for p in pdf.pages)

def norm(s):
    return re.sub(r'\s+', ' ', s).strip().lower()

def demander(question, contrat, modele='qwen3.5:9b'):
    r = requests.post('http://localhost:11434/api/chat', json={
      'model': modele, 'stream': False, 'format': SCHEMA,
      'messages': [{'role': 'system', 'content': SYSTEM},
                   {'role': 'user', 'content': 'CONTRAT :\n' + contrat + '\n\nQUESTION : ' + question}],
      'options': {'temperature': 0.1, 'num_ctx': 24576}})
    return json.loads(r.json()['message']['content'])

if __name__ == '__main__':
    texte = lire_pdf(sys.argv[1])
    if len(texte.strip()) < 500:
        sys.exit('PDF sans texte exploitable : passer par un OCR.')
    base = norm(texte)
    for p in demander('Liste les clauses à risque pour le signataire.', texte):
        ok = norm(p['citation']) in base
        print(('[OK]  ' if ok else '[CITATION INTROUVABLE]  ') + p['point'])
        print('      ' + p['citation'][:200])
→
なぜ機械的な検証が必要なのか
モデルは引用をわずかに書き換えたり、数値を変更したり、2つの文を統合したりすることがあります。一語一句照合しても、その指摘が妥当であることの証明にはなりませんが、最も危険な種類の誤りである「存在しない条項」を排除できます。そこから何らかの判断を下す前に、必ずPDF内の該当箇所を読み直してください。

#リスクを浮き彫りにする質問

漠然とした依頼ではなく、具体的な質問を、一度に一つのテーマに絞ってしてください。各回答では、契約書を引用するか、そのテーマが契約書では扱われていないことを明示する必要があります。以下は、ご自身の実務に合わせて調整できる、最初の質問リストです。

Non-concurrence
「契約に競業避止条項はありますか?その条項を、期間、地理的範囲、金銭的な補償とともに引用してください。」
責任
「責任はどのように制限されていますか?その制限は双方に適用されますか?どのような損害が除外されていますか?」
解約
「解約条件はどのようなものですか?解約の事前通知期間は双方で同じですか?」
自動更新
「自動更新の規定はありますか?更新を拒否するには、いつまでに、どのような形式で通知する必要がありますか?」
ペナルティ
「遅延、契約解除、債務不履行に対する違約金を一覧にしてください。これらは双方に適用されますか?」
準拠法
「どの法律が適用されますか?どの裁判所が管轄として指定されていますか?」
知的財産権
「成果物の所有権はどのように扱われますか? 譲渡、ライセンス、期間、対象地域についてはどうなっていますか?」
個人情報
「契約では個人データの処理が予定されていますか?処理の委託に関する条項はありますか?」

#契約書を普段使っているひな形と比較する

貴社の事務所や企業における標準的な利用規約など、検証済みのテンプレートをお持ちの場合は、単独で読むよりも比較する方がより有用です。比較を行うことで、基準となる文書から逸脱している箇所を特定できます。モデルは2つのテキストを処理するため、コンテキストに占める容量が2倍になります。Ollama に要求されるウィンドウサイズが十分であるか確認し、不足している場合は条項ごとに比較してください。

比較用プロンプト
Compare le CONTRAT proposé au MODÈLE de référence.
Liste les écarts en trois catégories :
1. Plus favorables au signataire que le modèle
2. Moins favorables au signataire que le modèle
3. Clauses présentes dans le modèle et absentes du contrat

Pour chaque écart, recopie mot pour mot les deux passages.

MODÈLE :
<<<
[texte du modèle]
>>>

CONTRAT :
<<<
[texte du contrat]
>>>

#ツールに頼る前に、自分の契約書で検証する

このアシスタントをワークフローに組み込む前に、何を見落とすかを測定してください。ご自身ですでに確認した契約書を5件用意し、そのうち1件には、例えば目立たない自動更新条項など、ご自身がよく把握している条項を意図的に含めてください。同じ質問リストで質問し、実際に存在する条項を見つけられた数、指摘された不要な事項の数、出典を確認できない引用の数を数えてください。

  1. 01
    既知の 5 つの契約を選択する
    契約の種類を変えてください。サービス提供契約、供給契約、事業用賃貸借契約、非典型的な雇用契約などです。一種類の文書だけでは、全般的な堅牢性は判断できません。
  2. 02
    自分で確認項目をリストにまとめる
    ツールを実行する前に、各契約に含まれていると想定する条項を一覧にしてください。この一覧が、評価の際に正解として扱う基準になります。
  3. 03
    再現率とノイズを比較する
    検出されるべき条項のうちツールが実際に見つけた数と、誤って指摘した項目の数を数えてください。条項の3分の1を見逃すツールは、確認事項を思い出すための補助にはなっても、フィルターにはなりません。
  4. 04
    読み返し時間を計測する
    指摘された点とその引用箇所を読み直すのにかかる時間を測ってください。この確認に全文を読むのとほぼ同じ時間がかかるなら、時間短縮の効果は小さいです。
  5. 05
    利用目的の決定
    このツールは、一次選別、ひな形との比較、特定の条項の確認など、実際に役立つ作業に限って使ってください。重要度の高い契約には使わないでください。そうした契約は、いずれにしても全文を読む必要があります。

#制限と安全対策

弁護士ではありません
モデルは、最近の判例も、条項の意味を変える微妙な文言の違いも把握していません。初期の選別は行いますが、判断を下すのは法律専門家です。
存在しない条項の捏造
小規模なモデルは、契約書に存在しない条項を説明してしまうことがあります。引用を必須にすることとスクリプトによる検証は、このリスクを減らしますが、なくすことはできません。
長い契約書
コンテキストが許容する範囲を超えた場合は、セクションごとに分割し、それぞれについて質問するか、ドキュメント検索に移行してください。分割戦略に関するガイドでは、選択肢が詳しく説明されています。
スキャン
画像だけで構成されたPDFにはOCRが必要です。OCRで得られたテキストには誤りが含まれるため、引用の検証に不確実さが生じます。
ログ記録
保護されていないファイルに契約内容や回答を保存しないでください。コンピュータのセキュリティおよびディスク暗号化は依然として必要です。プライバシーチェックリストは確認すべきポイントを示しています。
FAQ
文書をインターネットに送信せずに、AI で契約書を分析できますか?+
はい。Ollamaが手元のマシン上でモデルを提供し、PDFリーダーがテキストを抽出し、スクリプトがモデルに問い合わせます。データは一切その端末の外に出ません。ローカル実行で解決できるのは機密性の問題であり、正確性の問題ではありません。該当箇所を引用するというルールを守り、結論を出す前に各項目を契約書で確認してください。
契約書を社内の情報システムの外に出さずに、PDFについてチャットで質問する仕組みを社内で使うにはどうすればよいですか?+
Open WebUIまたはAnythingLLMを内部サーバーにインストールし、Ollamaに接続した後、PDFファイルをアップロードしてください。ドキュメント検索機能は必要な箇所を特定し、モデルはその内容を引用して回答します。アクセスを認証で制御し、ネットワークを制限してください。ドキュメントはすべてあなたのインフラ内に残ります。
フランス語の契約書を読むには、どのローカルモデルを使えばよいですか?+
妥当な候補は2つです。8~12GBのカードにはQwen 3.5 9B(6.6GB、公称256,000トークン)、16GB以上にはMistral Small 24B(14GB、公称32,000トークン)が候補になります。総合ランキングではなく、ご自身の契約書3件で両者を比較してください。
30ページの契約書は、モデルのコンテキストウィンドウに収まりますか?+
20〜30ページの契約書なら、多くの場合は収まります。ただし、Ollamaのコンテキストウィンドウを拡大することが条件です。VRAMが24GB未満の場合、デフォルトでは4,000トークンに設定されています。文書の実際のトークン数を測定してください。メモリで扱える範囲を超える場合は、セクションごとに分割してください。
モデルが存在しない条項を作り出すことはありますか?+
はい、特に小型モデルではその可能性があります。対策は、一字一句そのまま引用するよう求め、その引用が契約書の本文に含まれているかをスクリプトで確認することです。見つからない引用は、内容が捏造されたことを示します。そこから何らかの結論を導く前に、必ずPDFの該当箇所を読み直してください。
AIによる分析は弁護士によるレビューの代わりになりますか?+
いいえ。AIによる分析は、検討すべき点とその該当箇所を見つけるための一次的な選別に役立ちます。最近の判例や交渉の背景は把握していません。特に重大な問題や通常とは異なる条項については、引き続き法律の専門家が分析の責任を負います。
このガイドは役に立ちましたか?

ご意見、誤りのご指摘、補足はありますか?ぜひお知らせください。皆さんにとってより良いガイドにするために役立ちます。