Skip to main content

Markdown AST dla agentów (Abstract Syntax Tree)

DLA AGENTÓW AIChatGPTClaude

Hierarchiczna, drzewiasta reprezentacja składni Markdown (standard mdast / Unified.js), która umożliwia systemom programistycznym i agentom AI deterministyczne analizowanie, transformowanie oraz bezpieczne edytowanie treści technicznych bez wykorzystania kruchych wyrażeń regularnych.

1. Przegląd koncepcji i problem systemowy

W nowoczesnej inżynierii agentowej Markdown stał się uniwersalnym standardem: w nim tworzone są prompty systemowe, pliki umiejętności (SKILL.md), dokumentacja, specyfikacje techniczne oraz instrukcje pamięci.

Jednak gdy agent lub skrypt działający w tle musi programowo edytować sekcję w 50-stronicowym przewodniku, używanie naiwnych manipulacji na stringach (string.replace) czy wyrażeń regularnych prowadzi do systemowego uszkodzenia bazy kodu:

  1. Naruszenie integralności bloków kodu: Próba zamiany wszystkich podwójnych gwiazdek lub nagłówków często „zaczepia” składnię Python/Bash znajdującą się wewnątrz bloków ```.
  2. Utrata powiązania z Frontmatter: Zwykły parser może łatwo pomylić separator YAML --- na początku pliku ze standardowym poziomym separatorem w treści tekstu.
  3. Zaburzenie hierarchii wcięć na listach: Automatyczne poprawki łamią zagnieżdżenie list, przekształcając schludny układ w syntaktyczną papkę.

Markdown AST (Abstract Syntax Tree) przekształca surowy tekst w deterministyczną strukturę danych typu drzewo, gdzie każdy element (nagłówek, link, wiersz tabeli) staje się ściśle typowanym obiektem.

2. Taksonomia architektoniczna i model mentalny

Standard mdast (Markdown Abstract Syntax Tree) w ekosystemie Unified.js opisuje dokument jako graf struktury drzewa z jasno zdefiniowaną typizacją węzłów:

  • 1. Węzeł korzeniowy (Root): Szczyt drzewa zawierający pełną tablicę węzłów potomnych (children), metadane dokumentu oraz współrzędne pozycji w pliku źródłowym.
  • 2. Węzły blokowe (Block Nodes): Jednostki strukturalne najwyższego poziomu:
    • heading: nagłówek z głębokością depth: 1..6.
    • paragraph: akapit tekstowy.
    • code: blok kodu z oznaczeniem języka (lang: "typescript") i surową zawartością.
    • table / tableRow / tableCell: struktury tabelaryczne.
    • blockquote: cytaty oraz alerty w stylu GitHub ([!NOTE]).
  • 3. Węzły inline (Inline Nodes): Elementy wewnątrz akapitów: text (czysty tekst), inlineCode, strong (pogrubienie), emphasis (kursywa), link (odnośnik z url i title).
  • 4. Transformatory (Visitors): Funkcje odwiedzające drzewo, wykorzystujące wzorzec Visitor (visit(tree, 'heading', (node) => { ... })) do mutacji lub filtrowania docelowych węzłów bez ryzyka naruszenia sąsiednich sekcji.

3. Pipeline techniczny i mechanika wewnętrzna

Potok przetwarzania dokumentu przez AST składa się z 4 etapów:

  1. Tokenizacja i parsowanie (remark-parse): Lekszer rozbija surowy string Markdown na tokeny i buduje zrównoważone drzewo składni JSON, gdzie każdy węzeł posiada dokładne współrzędne w tekście źródłowym (position: { start, end }).
  2. Transformacja AST (unified pipeline): Programowe pluginy lub skrypty agentowe przechodzą przez drzewo:
  • Wyodrębniają spis treści (TOC).
  • Automatycznie znajdują i walidują wszystkie odnośniki wewnętrzne [slug](file://...).
  • Modyfikują wyłącznie węzły tekstowe wewnątrz określonej podsekcji, ignorując bloki kodu.
  1. Sanityzacja schematu i most Rehype (opcjonalnie): Jeśli dokument ma być renderowany w interfejsie webowym (React), drzewo jest translatowane do hast (HTML AST) z weryfikacją bezpieczeństwa za pomocą rehype-sanitize.
  2. Stringifikacja (remark-stringify): Drzewo jest deterministycznie serializowane z powrotem do czystego, znormalizowanego pliku Markdown bez utraty formatowania ani artefaktów.

4. Praktyczne scenariusze inżynieryjne w produkcji

01. Bezpieczna automatyzacja lokalizacji (i18n) dokumentacji technicznej

Agent tłumaczy artykuł z angielskiego na polski. Zamiast wysyłać cały plik do LLM (gdzie model często psuje składnię kodu i łamie tagi systemowe), skrypt parsuje dokument do AST, wysyła do tłumaczenia wyłącznie węzły typu text wewnątrz paragraph, a następnie rekonstruuje plik. Bloki kodu, ścieżki systemowe i zmienne pozostają w 100% nietknięte.

02. Automatyczna cross-linking i generowanie grafu bazy wiedzy

Skrypt buduje drzewo AST dla wszystkich 100 artykułów słownika, znajduje w tekście wystąpienia kluczowych terminów platformy i deterministycznie przekształca je w klikalne odnośniki Markdown, gwarantując, że zamiana nie nastąpi wewnątrz nagłówków ani wstawek kodowych.

03. Strukturalne chunking hierarchiczny dla RAG

Parser dzieli 100-stronicowy manual ściśle według węzłów heading o głębokości 2. Jeśli sekcja zawiera podsekcje H3, są one zachowywane razem jako pojedynczy kontekstowy chunk z uwzględnieniem ścieżki nadrzędnej w metadanych.

5. Pułapki, typowe błędy i bezpieczeństwo

  • Rozbieżności formatowania przy serializacji (Formatting Drift): Różne konfiguracje remark-stringify mogą zamienić markery list z - na * lub zmienić wcięcia z tabulacji na spacje (np. z 2 na 4), tworząc masywny „brudny” Git Diff. Zawsze ustalaj rygorystyczne ustawienia formatowania przy zapisywaniu.
  • Utrata rozszerzonej składni (MDX/Custom Directives): Jeśli Twój Markdown korzysta z niestandardowych komponentów React lub dyrektyw (:::tabs), standardowy parser może zinterpretować je jako zwykły tekst lub uszkodzić drzewo. Używaj rozszerzenia micromark-extension-directive.
  • Zużycie pamięci przy ogromnych plikach: Budowanie AST dla monolitycznych plików o wielkości dziesiątek megabajtów może prowadzić do znacznego skoku zużycia RAM w procesie Node.js.
/ Najczęściej zadawane pytaniaSchema.org FAQPage

FAQ: Markdown AST dla agentów (Abstract Syntax Tree)

Markdown jest językiem znaczników zależnym od kontekstu. Wyrażenie regularne `^# (.*)` nie może rozróżnić, czy znak kratki znajduje się na początku linii artykułu, wewnątrz wieloliniowego bloku kodu bash (`# komentarz w kodzie`), czy też wewnątrz tagu HTML. Tylko parser składniowy (AST) buduje dokładne drzewo zagnieżdżenia, eliminując fałszywe dopasowania.
/ Linki wewnętrzne
Wszystkie hasła