[ blog · use-case ]11 min read

Ayinde v Haringey 後の、引用に裏付けられた英国判例検索

Sarah Choy公開: 2026年5月3日読了 11 分
Ayinde v Haringey 後の、引用に裏付けられた英国判例検索

Ayinde v Haringey は英国リーガル AI の計算を一夜にして変えた。あるバリスタが LLM の生成した架空の判例 5 件を引用し、Bar Standards Board に付託された。ハルシネーションした引用には今や職業倫理上の帰結がある。引用に裏付けられた英国判例検索を作るための開発者ガイド — TNA Find Case Law、legislation.gov.uk、中立的引用(neutral citation)のパース、そして実用エージェントへの組み込み方を解説する。

要点

  • Ayinde v Haringey [2025] EWHC 1383 (Admin) は、ハルシネーションした判例引用を単なる品質問題ではなく職業倫理上の問題にした。
  • BAILII の利用規約はバルクのプログラム的アクセスを制限している。England & Wales の判決については、National Archives の Find Case Law サービスが正規の API だ。
  • legislation.gov.uk は時点指定(point-in-time)アクセスを備えた安定した Developer API を持つ — 「2024 年 6 月 30 日時点で施行されていた」が実際のクエリになるコンプライアンス業務には不可欠だ。
  • Stanford HAI の『Hallucination-Free?』研究は、Westlaw と Lexis+ AI が依然として 17〜33% の確率でハルシネーションすることを示した — 引用への裏付けはベンダー選びではなくアーキテクチャ上の答えだ。
  • API Pick UK Legal Search は判例法と一次立法に対するセマンティック検索を 1 つの POST にまとめる — 1 回 60 credits。

計算を変えた事件

2025 年 6 月 6 日、女王座部(King's Bench Division)の分院(Divisional Court)は 1 つの判決の中で 2 件の判断を言い渡した — Ayinde v The London Borough of HaringeyAl-Haroun v Qatar National Bank QPSC、中立的引用は [2025] EWHC 1383 (Admin)。どちらの事件でも、弁護人は存在しない典拠を引用する資料を提出していた。Ayinde では架空の判例が 5 件あった。法院は職業上の義務違反を認定し、実務家らをそれぞれ BSB と SRA に付託した。

48 時間以内に、あらゆる英国リーガルテックのロードマップの先頭に新しい項目が加わった:引用への裏付け(citation grounding)。品質上の気配りとしてではなく、規制上の必須事項としてだ。Stanford HAI の『Hallucination-Free?』研究(Magesh et al.、2024 年 5 月)は、主要ベンダーのツール — Lexis+ AI、Westlaw AI — がベンチマーク化されたクエリで 17〜33% の確率で引用をハルシネーションすることをすでに示していた。Ayinde はその学術的知見をコンプライアンス問題に変えた。

英国のリーガル製品に AI 機能を組み込む開発者にとって、アーキテクチャ上の教訓は明確だ:検索は権威あるソースから来なければならず、引用はソースまで検証可能でなければならず、システムは応答を裏付けられないときには回答を拒否しなければならない。それ以外はすべて、規制当局への付託が起こるのを待っているようなものだ。

これを正しく行うための、実用的な開発者ガイドを示す:どの API を使うべきか、それぞれの落とし穴は何か、そしてそれらを実用エージェントにどう配線するか。

権威あるソース

1. National Archives Find Case Law

The National Archives(TNA)が運営する。2003 年 4 月以降に言い渡された、高等法院、控訴院、英国最高裁判所、枢密院、いくつかの審判所からの判決をカバーする。文書は Akoma Ntoso(LegalDocML)XML 標準。パブリック API は caselaw.nationalarchives.gov.uk。バルクデータフィードは「計算的分析(computational analysis)」目的の申請制ゲート経由。

強み:England & Wales 判例法の権威あるソース、構造化された XML が判決構造(段落番号、引用、見出し)を保持、Open Government Licence の条件により帰属表示付きで再利用可。弱み:2003 年より前のカバレッジが限られる、バルクフィードには申請が必要、リーガル XML を扱った経験がないと LegalDocML のパースは重い。

2. legislation.gov.uk Developer API

TNA が運営する。英国の一次立法(議会制定法)、制定法上の命令、そして北アイルランド / スコットランド / ウェールズの相当物をカバーする。決定的に重要なのは、時点指定クエリに対応すること:「この条項は 2018 年 4 月 1 日にどうなっていたか」。

強み:安定、ドキュメントが充実、時点指定アクセス、OGL ライセンス。弱み:スキーマ(CLML)は独自仕様、すべての改正が履歴を通じて一律に追跡されているわけではない、施行日モデルに驚かされることがある。

3. BAILII(人間向け web 経由の読み取り専用)

長年運営されてきた法情報アグリゲーター。Find Case Law がカバーしない法域や文書タイプ(より古い判決、スコットランド / 北アイルランドの資料、一部の審判所決定)に不可欠だ。バルクスクレイピングは BAILII の利用規約により制限されている。API ではなく、人間が読むためのバックアップとして扱うこと。

英国判例法と一次立法に対するセマンティック検索を 1 つの POST エンドポイントで。JSON in / JSON out、1 回 60 credits、成功時のみ課金。タイトル、中立的引用、ソース URL、そしてセマンティック関連度でランク付けされたスニペットを返す。AI エージェントのツール呼び出し向けに設計されている。

横並びで見る

ソースは執筆時点のもの。商用導入の前に TNA とライセンス条件を確認すること。
Find Case Lawlegislation.gov.ukAPI Pick UK Legal Search
カバレッジ2003 年以降の E&W 判例法英国制定法 + SI、時点指定判例法 + 立法、セマンティック
形式Akoma Ntoso XMLCLML XML + JSON / AtomJSON、スニペット整形済み
検索キーワードキーワード + 構造セマンティック
認証パブリックは不要、バルクフィードはゲート制なしx-api-key
ライセンスOpen Government LicenceOpen Government LicenceAPI Pick TOS
適性コンプライアンス品質の信頼できる出所制定法参照、時点指定クエリAI エージェント検索、RAG 層

Ayinde を生き延びるアーキテクチャ

引用に裏付けられた最小構成のスタック:

Question → [LLM agent]
              ↓ tool_use(uk_legal_search)
            [API Pick UK Legal Search] → ranked authorities
              ↓ tool_use(extract_urls)
            [API Pick URL Extract] → full judgment / statute body
              ↓ Agent reads, drafts answer
              ↓ Citation-required prompt rule
          Answer with [Neutral Citation, Section/Paragraph]
              ↓ Final verification pass
          Refuse if citation can't be matched in extracted text

検証パスこそ、ほとんどのチームが失敗する箇所だ。モデルに「ソースを引用せよ」と頼むだけでは不十分 — 引用されたすべての典拠が抽出されたテキストに現れることをプログラムで検証しなければならない。現れなければ、回答を拒否するか、人間のレビューに回すために浮かび上がらせる。

動くコード

import re, requests
from anthropic import Anthropic

KEY = "pk_yourkey"
client = Anthropic()

def fetch_tool(path: str) -> dict:
    return requests.get(f"https://www.apipick.com{path}/tool-schema").json()["claude"]

TOOLS = [
    fetch_tool("/api/search/uk-legal"),
    fetch_tool("/api/extract"),
]

SYSTEM = """You are a UK legal research assistant. You answer questions about
England & Wales case law and UK primary legislation using the tools available.

Rules — non-negotiable:

1. Use uk_legal_search to find authorities relevant to the question.
2. For authorities you intend to cite, use extract_urls to retrieve the
   full text. Do not cite anything you have not extracted.
3. Cite every legal proposition with a neutral citation in standard form:
   [YYYY] EWHC|EWCA|UKSC NNN (Court), §[paragraph] — for cases.
   Section N(M) of the [Act Name] YYYY — for statutes, with point-in-time
   noted if relevant.
4. If the search returned no relevant authority, or the relevant text was
   not extracted, say so explicitly: "I could not retrieve a sufficient
   authority for this question. Please escalate to qualified counsel."
   Do not infer from training-data knowledge.
5. Distinguish ratio from obiter where it matters. Note when an authority
   is first instance, appellate, or Supreme Court.
6. For legislation, default to the in-force version. State the date you used.
7. This output is informational retrieval, not legal advice."""

def call_tool(b):
    paths = {"uk_legal_search": "/api/search/uk-legal", "extract_urls": "/api/extract"}
    r = requests.post(
        f"https://www.apipick.com{paths[b.name]}",
        json=b.input,
        headers={"x-api-key": KEY},
        timeout=60,
    )
    return {"type": "tool_result", "tool_use_id": b.id,
            "content": r.text, "is_error": r.status_code != 200}

NEUTRAL_CITATION = re.compile(r"\[(\d{4})\]\s+(EWHC|EWCA|UKSC)\s+\d+")

def verify_citations(answer: str, extracted_text: str) -> list[str]:
    """Return list of citations in the answer that don't appear in extracted text."""
    cites = NEUTRAL_CITATION.findall(answer)
    return [
        f"[{year}] {court}" for year, court in cites
        if f"[{year}] {court}" not in extracted_text
    ]

def legal_research(question: str) -> str:
    msgs = [{"role": "user", "content": question}]
    extracted_buffer = ""

    while True:
        r = client.messages.create(
            model="claude-sonnet-4-6",
            max_tokens=4096,
            system=SYSTEM,
            tools=TOOLS,
            messages=msgs,
        )
        msgs.append({"role": "assistant", "content": r.content})

        if r.stop_reason == "end_turn":
            answer = "\n".join(b.text for b in r.content if b.type == "text")
            unverified = verify_citations(answer, extracted_buffer)
            if unverified:
                return (
                    "REFUSED: the answer cited authorities that were not retrieved. "
                    f"Unverified: {unverified}. Escalate to qualified counsel."
                )
            return answer

        if r.stop_reason == "tool_use":
            results = []
            for b in r.content:
                if b.type != "tool_use":
                    continue
                tr = call_tool(b)
                if b.name == "extract_urls":
                    extracted_buffer += tr["content"]
                results.append(tr)
            msgs.append({"role": "user", "content": results})

print(legal_research(
    "What is the test for breach of duty by a public authority "
    "post Roberts v Soldiers, Sailors, Airmen and Families Association?"
))

このコードが、手抜きの実装がやらない 3 つのことをやっている:(1) 依拠する前に、引用するすべての典拠の全文を extract で取得する、(2) 中立的引用の文字列が、検索されたどのテキストにも実際に現れない回答を却下する、(3)「十分な典拠を取得できなかった」という拒否をシステムプロンプトに焼き込み、検索が失敗したときにモデルが上品な逃げ道を持てるようにする。

コスト上限

典型的なリーガルリサーチの呼び出し:

  • 検索 1 回 — 60 credits(約 $0.06)
  • 典拠 2〜4 件をカバーする extract 1 回 — 4〜8 credits(約 $0.004〜$0.008)
  • Claude への入力 約 6,000 + 出力 1,500 トークン — 約 $0.05

ざっくり言えば、引用付きで調査した回答 1 件あたり約 $0.12。小規模な社内法務チームが 1 日 100 問やるなら $12/日 — どんな商用リーガルテックのサブスクリプションよりはるかに安く、しかも監査証跡は自分で管理できる。

これがどこに一般化するか

「引用への裏付け」というアーキテクチャパターンは英国判例法だけに当てはまるものではない — それは、投資デューデリジェンスにおいてSEC 提出書類の RAGを信頼できるものにし、科学文献エージェントがハルシネーションした論文参照を避けられるようにするのと同じパターンだ。3 つのルールがそれらを束ねる:

  • まず検索、次に生成。検索されたコンテキストになかった引用をモデルに生成させてはいけない。
  • 決定論的に検証する。抽出テキストに対する正規表現は安価で、捏造のほとんどを捕まえる。
  • 上品に拒否する。モデルを役立つように訓練する前に、「確実には答えられません」と言うようにシステムプロンプトを訓練する。

Ayinde は、これらのルールが「エンジニアリングのベストプラクティス」から「ユーザーを BSB の前に立たせずに英国リーガル AI を出荷する唯一の方法」へと変わった瞬間だった。API Pick UK Legal Search はその検索層のビルディングブロックだ。残りはあなたが配線する番だ。

よくある質問

Ayinde v Haringey では実際に何が起きたのか?

2025 年 6 月、高等法院(Ritchie J)は、弁護人が LLM の生成した存在しない判例 5 件を引用した骨子(skeleton argument)を提出していたこと、さらに Al-Haroun v Qatar National Bank において別の実務家が架空の典拠をもう 1 件挙げていたことを認定した。両判決は Ayinde v Haringey & Al-Haroun v Qatar National Bank [2025] EWHC 1383 (Admin) として一括で言い渡された。法院はこの実務家らを Bar Standards Board および Solicitors Regulation Authority に付託した。この判決は今や、英国で『リーガル実務における AI ハルシネーション』が話題になるたびに引かれる標準的な典拠となっている。

BAILII をスクレイピングできるか?

できない。BAILII の利用規約はバルクのプログラム的アクセスを制限しており、運営者はこの点を明言している — Transparency Project による BAILII の立場の記録を参照のこと。正規のルートは England & Wales の判決に対する National Archives の Find Case Law サービスで、パブリック API と、申請を要する別個のバルクデータフィードを備えている。

Find Case Law と legislation.gov.uk の違いは?

Find Case Law(caselaw.nationalarchives.gov.uk)は裁判所の判決 — EWHC、EWCA、UKSC、各種審判所の決定 — をカバーする。legislation.gov.uk は一次・二次立法をカバーする:議会制定法(Acts of Parliament)、制定法上の命令(statutory instruments)、そして(コンプライアンス業務には決定的に重要な)時点指定の過去版だ。完全な英国リーガル RAG スタックには両方が必要だ。

なぜ時点指定の立法が AI エージェントにとって重要なのか?

ほとんどの法的問いは、特定の日付に法がどうだったか — 違反があったとされる日、契約が締結された日、当局が決定を下した時点 — についてのものだ。立法の現行版を返すと、あらゆる過去の問いに対して誤った答えになる。legislation.gov.uk の /data.feed?type=ukpga&prospective=true 系のエンドポイントがこれを解決する。日付をハルシネーションする AI リーガルツールの多くは、これを組み込んでいないために負ける。

このアウトプットは法的助言にあたるか?

あたらない。検索 API(我々のものを含む)のアウトプットは情報検索であって法的助言ではない。England & Wales で実務に従事するソリシタおよびバリスタは引き続き SRA / BSB の行為規範に拘束される。本記事が説明するアーキテクチャは、資格を持つ法的レビューを置き換えるのではなく支援するよう設計されている。Ayinde の先例がこの区別を譲れないものにしている。

この記事で使われている API

Sarah Choy
執筆
Sarah Choy
CEO, API Pick

API Pick の CEO。AI エージェントと LLM ワークフロー向けの本番運用可能な API について執筆。