[ blog · use-case ]11 min read

Wyszukiwanie brytyjskiego orzecznictwa oparte na cytatach po sprawie Ayinde v Haringey

Sarah ChoyOpublikowano 3 maja 202611 min czytania
Wyszukiwanie brytyjskiego orzecznictwa oparte na cytatach po sprawie Ayinde v Haringey

Sprawa Ayinde v Haringey z dnia na dzień zmieniła kalkulację dla brytyjskiej AI prawniczej. Barrister powołał pięć fałszywych spraw wygenerowanych przez LLM i został skierowany do Bar Standards Board. Halucynowane cytaty niosą teraz konsekwencje dyscyplinarne. Oto przewodnik dla programisty, jak zbudować wyszukiwanie brytyjskiego orzecznictwa oparte na cytatach — TNA Find Case Law, legislation.gov.uk, parsowanie neutralnych cytatów oraz jak podłączyć to do działającego agenta.

TL;DR

  • Sprawa Ayinde v Haringey [2025] EWHC 1383 (Admin) uczyniła z halucynowanych cytatów orzecznictwa kwestię dyscyplinarną, a nie tylko problem jakości.
  • Warunki BAILII ograniczają masowy dostęp programistyczny; usługa Find Case Law prowadzona przez The National Archives to legalne API dla orzeczeń Anglii i Walii.
  • legislation.gov.uk ma stabilne Developer API z dostępem point-in-time — niezbędne w pracy nad zgodnością, gdzie 'obowiązujące w dniu 30 czerwca 2024' to realne zapytanie.
  • Badanie 'Hallucination-Free?' Stanford HAI wykazało, że Westlaw i Lexis+ AI wciąż halucynują w 17–33% przypadków — oparcie na cytatach to odpowiedź architektoniczna, a nie wybór dostawcy.
  • API Pick UK Legal Search opakowuje wyszukiwanie semantyczne po orzecznictwie i ustawodawstwie pierwotnym w jednym POST — 60 kredytów za wywołanie.

Sprawa, która zmieniła kalkulację

6 czerwca 2025 roku Divisional Court w King's Bench Division wydał dwa orzeczenia w jednym rozstrzygnięciu — Ayinde v The London Borough of Haringey oraz Al-Haroun v Qatar National Bank QPSC, cytat neutralny [2025] EWHC 1383 (Admin). W obu przypadkach obrona złożyła materiały powołujące precedensy, które nie istniały; w sprawie Ayinde — pięć zmyślonych spraw. Sąd stwierdził naruszenie obowiązków zawodowych i skierował prawników odpowiednio do BSB i SRA.

W ciągu 48 godzin każda brytyjska mapa drogowa legal-tech miała na szczycie nowy punkt: oparcie na cytatach. Nie jako miły dodatek jakościowy, lecz jako konieczność regulacyjna. Badanie 'Hallucination-Free?' Stanford HAI (Magesh et al., maj 2024) już wcześniej wykazało, że wiodące narzędzia dostawców — Lexis+ AI, Westlaw AI — halucynują cytaty w 17–33% przypadków w zapytaniach benchmarkowych. Ayinde zamieniła to akademickie odkrycie w problem zgodności.

Dla programistów wbudowujących funkcje AI w brytyjskie produkty prawnicze lekcja architektoniczna jest jasna: wyszukiwanie musi pochodzić ze źródeł autorytatywnych, cytaty muszą być weryfikowalne wobec źródła, a system musi odmówić odpowiedzi, gdy nie potrafi jej oprzeć na źródle. Wszystko inne to skierowanie do regulatora czekające, aż się wydarzy.

Oto praktyczny przewodnik dla programisty, jak zrobić to jak należy: których API użyć, jakie mają pułapki i jak podłączyć je do działającego agenta.

Źródła autorytatywne

1. National Archives Find Case Law

Prowadzone przez The National Archives (TNA). Obejmuje orzeczenia sądowe wydane od kwietnia 2003 roku przez High Court, Court of Appeal, UK Supreme Court, Privy Council oraz kilka trybunałów. Dokumenty w standardzie XML Akoma Ntoso (LegalDocML). Publiczne API pod adresem caselaw.nationalarchives.gov.uk; kanał danych masowych przez wniosek podlegający zatwierdzeniu do celów „analizy obliczeniowej".

Mocne strony: autorytatywne źródło dla orzecznictwa Anglii i Walii, ustrukturyzowany XML zachowuje strukturę orzeczenia (numery akapitów, cytaty, nagłówki), warunki Open Government Licence pozwalają na ponowne wykorzystanie z podaniem źródła. Słabe strony: ograniczony zasięg sprzed 2003 roku, wymagany wniosek do kanału masowego, LegalDocML jest ciężki w parsowaniu, jeśli nigdy nie miałeś do czynienia z prawniczym XML.

2. Developer API legislation.gov.uk

Prowadzone przez TNA. Obejmuje brytyjskie ustawodawstwo pierwotne (Acts of Parliament), statutory instruments oraz odpowiedniki dla Irlandii Północnej / Szkocji / Walii. Co kluczowe, obsługuje zapytania point-in-time: „jak ten przepis wyglądał 1 kwietnia 2018".

Mocne strony: stabilne, dobrze udokumentowane, dostęp point-in-time, licencja OGL. Słabe strony: schemat (CLML) rządzi się własnymi prawami; nie wszystkie nowelizacje są jednolicie śledzone wstecz w czasie; model daty wejścia w życie potrafi zaskoczyć.

3. BAILII (tylko do odczytu przez ludzki web)

Od dawna działający agregator informacji prawnej. Krytyczny dla jurysdykcji i typów dokumentów, których Find Case Law nie obejmuje (starsze orzeczenia, materiały szkockie / północnoirlandzkie, niektóre decyzje trybunałów). Masowy scraping jest ograniczony warunkami BAILII. Traktuj go jako zapasowe źródło czytelne dla człowieka, a nie jako API.

Wyszukiwanie semantyczne po brytyjskim orzecznictwie i ustawodawstwie pierwotnym w jednym endpoincie POST. JSON na wejściu / JSON na wyjściu, 60 kredytów za wywołanie, rozliczanie tylko przy sukcesie. Zwraca tytuł, cytat neutralny, adres URL źródła oraz fragment uszeregowany według trafności semantycznej. Zaprojektowane do wywoływania narzędzi przez agentów AI.

Zestawienie obok siebie

Źródła w momencie pisania. Potwierdź warunki licencyjne z TNA przed wdrożeniem komercyjnym.
Find Case Lawlegislation.gov.ukAPI Pick UK Legal Search
ZakresOrzecznictwo E&W od 2003Ustawy + SIs UK, point-in-timeOrzecznictwo + ustawodawstwo, semantyczne
FormatAkoma Ntoso XMLCLML XML + JSON / AtomJSON, fragment wstępnie uformowany
WyszukiwanieSłowa kluczoweSłowa kluczowe + strukturalneSemantyczne
UwierzytelnianieBrak dla części publicznej; kanał masowy po wnioskuBrakx-api-key
LicencjaOpen Government LicenceOpen Government LicenceTOS API Pick
DopasowanieŹródło prawdy klasy complianceWyszukiwanie ustaw, zapytania point-in-timeWyszukiwanie dla agenta AI, warstwa RAG

Architektura, która przetrwa Ayinde

Minimalny opłacalny stos oparty na cytatach:

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

Przebieg weryfikacyjny to miejsce, w którym zawodzi większość zespołów. Nie wystarczy poprosić model, żeby „podał źródła" — trzeba programistycznie zweryfikować, że każdy powołany precedens pojawia się w wyekstrahowanym tekście. Jeśli się nie pojawia, odrzuć odpowiedź albo przekaż ją do weryfikacji przez człowieka.

Działający kod

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?"
))

Trzy rzeczy, które robi ten kod, a których nie robią leniwe implementacje: (1) pobiera pełny tekst każdego powołanego precedensu przez extract, zanim się na nim oprze, (2) odrzuca odpowiedzi, których ciągi cytatów neutralnych nie pojawiają się faktycznie w żadnym pobranym tekście, (3) wpieka w system prompt odmowę „Nie udało mi się pobrać wystarczającego precedensu", aby model miał eleganckie wyjście, gdy wyszukiwanie zawiedzie.

Pułap kosztów

Typowe wywołanie badania prawnego:

  • 1 wywołanie wyszukiwania — 60 kredytów (~$0.06)
  • 1 wywołanie extract obejmujące 2–4 precedensy — 4–8 kredytów (~$0.004–$0.008)
  • ~6000 tokenów wejściowych + 1500 wyjściowych Claude — ~$0.05

W zaokrągleniu: ~$0.12 za zbadaną odpowiedź z cytatami. Przy 100 pytaniach dziennie dla małego wewnętrznego zespołu prawnego to $12 dziennie — znacznie poniżej kosztu jakiejkolwiek komercyjnej subskrypcji legal-tech, a ty kontrolujesz ślad audytowy.

Gdzie to się uogólnia

Wzorzec architektoniczny „oparcia na cytatach" nie dotyczy wyłącznie brytyjskiego orzecznictwa — to ten sam wzorzec, który sprawia, że RAG na raportach SEC jest wiarygodny w due diligence inwestycyjnym i który pozwala agentowi literatury naukowej uniknąć halucynowanych odniesień do publikacji. Jednoczą je trzy zasady:

  • Najpierw pobierz, potem generuj. Nigdy nie pozwól modelowi wytworzyć cytatu, którego nie było w pobranym kontekście.
  • Weryfikuj deterministycznie. Regex po wyekstrahowanym tekście jest tani i wyłapuje większość konfabulacji.
  • Odmawiaj z gracją. Wytrenuj system prompt, by mówił „Nie potrafię odpowiedzieć wiarygodnie", zanim wytrenujesz model, by był pomocny.

Ayinde była momentem, w którym te zasady przeszły z „dobrej praktyki inżynierskiej" w „jedyny sposób na wypuszczenie brytyjskiej AI prawniczej bez postawienia użytkowników przed BSB". API Pick UK Legal Search to klocek warstwy wyszukiwania; resztę musisz podłączyć sam.

Najczęściej zadawane pytania

Co tak naprawdę wydarzyło się w sprawie Ayinde v Haringey?

W czerwcu 2025 roku High Court (Ritchie J) ustalił, że obrona złożyła skeleton argument powołujący pięć nieistniejących spraw wygenerowanych przez LLM, plus kolejny zmyślony precedens powołany przez odrębnego prawnika w sprawie Al-Haroun v Qatar National Bank. Orzeczenia wydano łącznie jako Ayinde v Haringey & Al-Haroun v Qatar National Bank [2025] EWHC 1383 (Admin). Sąd skierował prawników odpowiednio do Bar Standards Board i Solicitors Regulation Authority. Orzeczenie to jest dziś standardowym precedensem powoływanym za każdym razem, gdy w Wielkiej Brytanii pojawia się temat 'halucynacji AI w praktyce prawniczej'.

Czy mogę scrapować BAILII?

Nie. Warunki BAILII ograniczają masowy dostęp programistyczny, a operator wypowiedział się na ten temat wprost — zob. dokumentację Transparency Project dotyczącą stanowiska BAILII. Legalną drogą jest usługa Find Case Law prowadzona przez The National Archives dla orzeczeń Anglii i Walii, która ma publiczne API oraz odrębny, udostępniany po złożeniu wniosku kanał danych masowych.

Jaka jest różnica między Find Case Law a legislation.gov.uk?

Find Case Law (caselaw.nationalarchives.gov.uk) obejmuje orzeczenia sądowe — decyzje EWHC, EWCA, UKSC oraz trybunałów. legislation.gov.uk obejmuje ustawodawstwo pierwotne i wtórne: Acts of Parliament, statutory instruments oraz (co kluczowe dla pracy nad zgodnością) historyczne wersje point-in-time. Kompletny brytyjski prawniczy stos RAG potrzebuje obu.

Dlaczego ustawodawstwo point-in-time ma znaczenie dla agentów AI?

Większość pytań prawnych dotyczy tego, jakie prawo obowiązywało w konkretnym dniu — w dniu domniemanego naruszenia, w dacie podpisania umowy, w chwili wydania decyzji przez organ. Zwrócenie aktualnej wersji ustawy daje błędne odpowiedzi na każde pytanie historyczne. Rozwiązują to endpointy w stylu /data.feed?type=ukpga&prospective=true z legislation.gov.uk. Większość prawniczych narzędzi AI halucynujących daty zawodzi, bo nie podłączyła tego elementu.

Czy ten wynik liczy się jako porada prawna?

Nie. Wynik z jakiegokolwiek API wyszukującego (w tym naszego) to wyszukiwanie informacji, a nie porada prawna. Solicitorzy i barristerzy praktykujący w Anglii i Walii pozostają związani regułami postępowania SRA / BSB. Architektura opisana w tym wpisie ma wspierać — a nie zastępować — wykwalifikowaną weryfikację prawną. Precedens Ayinde czyni to rozróżnienie niepodlegającym negocjacji.

API użyte w tym artykule

Sarah Choy
Autor
Sarah Choy
CEO, API Pick

Sarah Choy jest CEO API Pick. Pisze o budowaniu produkcyjnych API dla agentów AI i przepływów pracy z LLM.