[ blog · use-case ]11 min read

Поиск прецедентного права UK с привязкой к цитатам после Ayinde v Haringey

Sarah ChoyОпубликовано 3 мая 2026 г.11 мин чтения
Поиск прецедентного права UK с привязкой к цитатам после Ayinde v Haringey

Ayinde v Haringey за одну ночь изменило расклад для британского юридического ИИ. Барристер сослался на пять фейковых дел, сгенерированных LLM, и был направлен в Bar Standards Board. У галлюцинированных цитат теперь есть последствия для профессионального поведения. Вот руководство разработчика по построению поиска прецедентного права UK с привязкой к цитатам — TNA Find Case Law, legislation.gov.uk, парсинг нейтральных цитат и как подключить всё это к рабочему агенту.

Кратко

  • Ayinde v Haringey [2025] EWHC 1383 (Admin) сделало галлюцинированные цитаты дел вопросом профессионального поведения, а не просто проблемой качества.
  • Условия BAILII ограничивают массовый программный доступ; служба Find Case Law от National Archives — легитимный API для решений судов Англии и Уэльса.
  • У legislation.gov.uk есть стабильный Developer API с доступом на момент времени (point-in-time) — необходим для комплаенс-работы, где 'в силе на 30 June 2024' — реальный запрос.
  • Исследование 'Hallucination-Free?' Стэнфордского HAI показало, что Westlaw и Lexis+ AI всё ещё галлюцинируют в 17–33% случаев — привязка к цитатам это архитектурный ответ, а не выбор вендора.
  • API Pick UK Legal Search оборачивает семантический поиск по прецедентному праву и первичному законодательству в один POST — 60 кредитов за вызов.

Дело, которое изменило расклад

6 June 2025 Divisional Court отделения King's Bench вынес два решения в одном постановлении — Ayinde v The London Borough of Haringey и Al-Haroun v Qatar National Bank QPSC, нейтральная цитата [2025] EWHC 1383 (Admin). В обоих адвокат подал материалы со ссылками на прецеденты, которых не существовало; в Ayinde — пять сфабрикованных дел. Суд установил нарушение профессиональных обязанностей и направил практиков в BSB и SRA соответственно.

За 48 часов в каждой дорожной карте британского legal-tech появился новый пункт во главе списка: привязка к цитатам. Не как приятная мелочь для качества, а как регуляторная необходимость. Исследование Стэнфордского HAI 'Hallucination-Free?' (Magesh et al., May 2024) уже показало, что ведущие вендорские инструменты — Lexis+ AI, Westlaw AI — галлюцинируют цитаты в 17–33% случаев на бенчмарк-запросах. Ayinde превратило этот академический вывод в проблему комплаенса.

Для разработчиков, встраивающих ИИ-функции в британские юридические продукты, архитектурный урок ясен: выборка должна идти из авторитетных источников, цитаты должны быть проверяемы до источника, а система должна отказываться отвечать, когда не может обосновать ответ. Всё остальное — это готовящееся направление в регулятор.

Вот рабочее руководство разработчика, как делать это правильно: какие API использовать, в чём их подводные камни и как подключить их к рабочему агенту.

Авторитетные источники

1. National Archives Find Case Law

Под управлением The National Archives (TNA). Покрывает судебные решения, вынесенные с April 2003, Высоким судом, Апелляционным судом, Верховным судом UK, Тайным советом и рядом трибуналов. Документы в стандарте XML Akoma Ntoso (LegalDocML). Публичный API на caselaw.nationalarchives.gov.uk; bulk-data фид по заявке для целей 'computational analysis'.

Сильные стороны: авторитетный источник прецедентного права Англии и Уэльса, структурированный XML сохраняет структуру решения (номера абзацев, цитаты, заголовки), условия Open Government Licence разрешают повторное использование с указанием источника. Слабые стороны: ограниченное покрытие до 2003 года, нужна заявка для bulk-фида, LegalDocML тяжело парсить, если вы никогда не имели дела с юридическим XML.

2. legislation.gov.uk Developer API

Под управлением TNA. Покрывает первичное законодательство UK (акты парламента), подзаконные акты и эквиваленты Северной Ирландии / Шотландии / Уэльса. Критично, что поддерживает запросы на момент времени: 'как выглядело это положение на 1 April 2018'.

Сильные стороны: стабильный, хорошо документированный, доступ на момент времени, под лицензией OGL. Слабые стороны: схема (CLML) — отдельная вещь; не все поправки отслеживаются единообразно вглубь истории; модель даты вступления в силу может удивить.

3. BAILII (только чтение через человеческий веб)

Давний агрегатор юридической информации. Критичен для юрисдикций и типов документов, которые Find Case Law не покрывает (более старые решения, шотландские / североирландские материалы, отдельные решения трибуналов). Массовый скрейпинг ограничен условиями BAILII. Относитесь к нему как к читаемому человеком резерву, а не как к API.

Семантический поиск по прецедентному праву UK и первичному законодательству в одном POST-эндпоинте. JSON in / JSON out, 60 кредитов за вызов, оплата только за успех. Возвращает заголовок, нейтральную цитату, URL источника и сниппет, ранжированные по семантической релевантности. Спроектирован под tool calling ИИ-агентов.

Бок о бок

Источники на момент написания. Подтвердите условия лицензирования с TNA перед коммерческим развёртыванием.
Find Case Lawlegislation.gov.ukAPI Pick UK Legal Search
ПокрытиеПрецедентное право E&W с 2003Статуты UK + SI, на момент времениПрецеденты + законодательство, семантически
ФорматAkoma Ntoso XMLCLML XML + JSON / AtomJSON, сниппет заранее размечен
ПоискПо ключевым словамПо ключевым словам + структурныйСемантический
АутентификацияНет для публичного; bulk-фид по заявкеНетx-api-key
ЛицензияOpen Government LicenceOpen Government LicenceAPI Pick TOS
НазначениеИсточник истины уровня комплаенсаПоиск статутов, запросы на момент времениВыборка для ИИ-агентов, 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?"
))

Три вещи, которые этот код делает, а ленивые реализации — нет: (1) он подтягивает полный текст каждого процитированного прецедента через extract, прежде чем на него опираться, (2) он отклоняет ответы, чьи строки нейтральных цитат реально не встречаются ни в одном извлечённом тексте, (3) он зашивает отказ 'не удалось найти достаточный прецедент' в системный промпт, чтобы у модели был изящный выход, когда выборка не удалась.

Потолок стоимости

Типичный вызов юридического исследования:

  • 1 вызов поиска — 60 кредитов (~$0.06)
  • 1 вызов extract, охватывающий 2–4 прецедента — 4–8 кредитов (~$0.004–$0.008)
  • ~6 000 входных + 1 500 выходных токенов Claude — ~$0.05

Округлённо: ~$0.12 за проработанный ответ с цитатами. При 100 вопросах/день для небольшой внутренней юридической команды это $12/день — много ниже стоимости любой коммерческой legal-tech подписки, и вы контролируете журнал аудита.

Где это обобщается

Архитектурный паттерн 'привязки к цитатам' применим не только к прецедентному праву UK — это тот же паттерн, который делает RAG по отчётности SEC надёжным для инвестиционного due diligence и который позволяет агенту по научной литературе избегать галлюцинированных ссылок на статьи. Три правила объединяют их:

  • Сначала выборка, потом генерация. Никогда не позволяйте модели выдать цитату, которой не было в извлечённом контексте.
  • Проверяйте детерминированно. Regex по извлечённому тексту дёшев и ловит большую часть выдумывания.
  • Отказывайте изящно. Сначала научите системный промпт говорить 'я не могу надёжно ответить', а уже потом учите модель быть полезной.

Ayinde стало моментом, когда эти правила перешли из 'инженерной хорошей практики' в 'единственный способ выпустить британский юридический ИИ, не подставив пользователей под BSB'. API Pick UK Legal Search — это строительный блок поискового слоя; остальное вам предстоит собрать самим.

Часто задаваемые вопросы

Что на самом деле произошло в Ayinde v Haringey?

В June 2025 Высокий суд (судья Ritchie) установил, что адвокат подал skeleton argument со ссылкой на пять несуществующих дел, сгенерированных LLM, плюс ещё один сфабрикованный прецедент от отдельного практика в Al-Haroun v Qatar National Bank. Решения были вынесены вместе как Ayinde v Haringey & Al-Haroun v Qatar National Bank [2025] EWHC 1383 (Admin). Суд направил практиков в Bar Standards Board и Solicitors Regulation Authority. Это решение теперь — стандартный прецедент, на который ссылаются всякий раз, когда в UK заходит речь о 'галлюцинации ИИ в юридической практике'.

Могу ли я скрейпить BAILII?

Нет. Условия BAILII ограничивают массовый программный доступ, и оператор высказался об этом прямо — см. документацию Transparency Project о позиции BAILII. Легитимный путь — служба National Archives Find Case Law для решений судов Англии и Уэльса, у которой есть публичный API и отдельный bulk-data фид с доступом по заявке.

В чём разница между Find Case Law и legislation.gov.uk?

Find Case Law (caselaw.nationalarchives.gov.uk) покрывает судебные решения — EWHC, EWCA, UKSC и решения трибуналов. legislation.gov.uk покрывает первичное и вторичное законодательство: акты парламента, подзаконные акты и (что критично для комплаенс-работы) исторические версии на момент времени. Полноценному стеку UK legal RAG нужны оба.

Почему законодательство на момент времени важно для ИИ-агентов?

Большинство юридических вопросов — о том, каким право было на конкретную дату: в день предполагаемого нарушения, на дату подписания договора, в момент принятия решения ведомством. Возврат текущей версии законодательства даёт неверные ответы на любой исторический вопрос. Эндпоинты legislation.gov.uk вида /data.feed?type=ukpga&prospective=true решают это. Большинство юридических ИИ-инструментов, галлюцинирующих с датами, проваливаются именно потому, что не подключили это.

Считается ли этот вывод юридической консультацией?

Нет. Вывод любого retrieval-API (включая наш) — это информационная выборка, а не юридическая консультация. Солиситоры и барристеры, практикующие в Англии и Уэльсе, остаются связаны правилами поведения SRA / BSB. Архитектура, описанная в этом посте, призвана поддерживать — а не заменять — квалифицированную юридическую проверку. Прецедент Ayinde делает это различие безоговорочным.

API, использованные в статье

Sarah Choy
Автор
Sarah Choy
CEO, API Pick

Сара Чой — CEO API Pick. Пишет о продакшен-готовых API для AI-агентов и LLM-воркфлоу.