Поиск прецедентного права 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.
4. API Pick UK Legal Search
Семантический поиск по прецедентному праву UK и первичному законодательству в одном POST-эндпоинте. JSON in / JSON out, 60 кредитов за вызов, оплата только за успех. Возвращает заголовок, нейтральную цитату, URL источника и сниппет, ранжированные по семантической релевантности. Спроектирован под tool calling ИИ-агентов.
Бок о бок
| Find Case Law | legislation.gov.uk | API Pick UK Legal Search | |
|---|---|---|---|
| Покрытие | Прецедентное право E&W с 2003 | Статуты UK + SI, на момент времени | Прецеденты + законодательство, семантически |
| Формат | Akoma Ntoso XML | CLML XML + JSON / Atom | JSON, сниппет заранее размечен |
| Поиск | По ключевым словам | По ключевым словам + структурный | Семантический |
| Аутентификация | Нет для публичного; bulk-фид по заявке | Нет | x-api-key |
| Лицензия | Open Government Licence | Open Government Licence | API 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, использованные в статье
Сара Чой — CEO API Pick. Пишет о продакшен-готовых API для AI-агентов и LLM-воркфлоу.