Code Velocity
Kehittäjätyökalut

Ajettava Markdown: Dokumentaation testauksen mullistaminen Hugging Facen avulla

·8 min lukuaika·Hugging Face·Alkuperäinen lähde
Jaa
Hugging Facen logo koodinpätkillä ja 'runnable'-tunnisteella, joka edustaa ajettavien Markdown-esimerkkien konseptia.

Kun tämä lohko renderöidään, se näkyy tavallisena koodiesimerkkinä. Testauksen aikana se kuitenkin suoritetaan tavallisena Python-koodina. Tämä kaksoisluonne varmistaa, että dokumentaatio pysyy siistinä lukijoille samalla kun se tarjoaa vankkoja, testattavia esimerkkejä kehittäjille. Tämä lähestymistapa on erityisen vaikuttava monimutkaisilla aloilla, kuten tekoälyssä, missä esimerkit sisältävät usein monimutkaisia mallien lataus- ja päättelyvaiheita.

## Saumaton integraatio `pytest`iin ja edistyneet ominaisuudet

Hugging Facen lähestymistavan keskeinen erottava tekijä on sen saumaton integraatio modernien testauskehysten, erityisesti `pytest`in, kanssa. Kun `hf-doc-builder` on asennettu, `pytest` voi automaattisesti löytää ja suorittaa ajettavia lohkoja Markdown-tiedostoista, käsitellen jokaista lohkoa standardina testikohteena. Tämä tarkoittaa, että dokumentaation esimerkit voivat osallistua täysimääräisesti projektin olemassa olevaan testausinfrastruktuuriin hyödyntäen `pytest`in tehokkaita ominaisuuksia, kuten väittämiä, fixtuureja, virheenkorjaustyökaluja ja kattavaa raportointia.

### Suoritettavan dokumentaation kehitys: `doctest` vs. `doc-builder`

| Ominaisuus                     | `doctest` (Perinteinen)                               | `doc-builder` (Moderni ajettava Markdown)             |
| :--------------------------- | :---------------------------------------------------- | :---------------------------------------------------- |
| **Testausmenetelmä**         | Upottaa testit tulkkisessioina dokumentteihin         | Käsittelee dokumenttien pätkiä tavallisena Python-koodina testausta varten |
| **Integraatio**              | Standardikirjaston moduuli                            | `pytest`-lisäosa saumattomaan integraatioon            |
| **Testisyntaksi**            | `>>>`-kehotteet, odotetun tulosteen vastaavuus        | Standardi Python-koodi, `pytest`-väittämät           |
| **Joustavuus**                | Rajoitettu, herkkä tulostusvastaavuus                 | Korkea, tukee monimutkaisia testejä, dekoraattoreita, virheenkorjausta |
| **Dokumentaation puhtaus**   | Voi sotkea dokumentteja testimekaniikalla             | Säilyttää puhtaat dokumentit piilotetuilla direktiiveillä |
| **Virheenkorjaus**           | Merkkijonovertailu, vähemmän suora tarkastus          | Standardi Python-virheenkorjaus, täydet jäljityspinot |
| **Asetus/Purku**             | Voi lisätä "melua" esimerkkeihin                      | Hallitsee kontekstia tehokkaasti jatkolohkoilla      |
| **Totuuden lähde**           | Dokumentaation muoto ja upotetut testit               | Markdown-lähde, testattu standardilla Python-suorituksella |

`doc-builder` esittelee myös **jatkolohkot**, jotka ovat ratkaiseva ominaisuus monivaiheisissa opetusohjelmissa. Ne antavat kirjoittajille mahdollisuuden jakaa esimerkin useisiin näkyviin koodinpätkiin, kuten `runnable:test_basic` jota seuraa `runnable:test_basic:2`. Ratkaisevaa on, että nämä lohkot jakavat saman suorituskontekstin testien aikana, mikä mahdollistaa luonnollisen opetusvirran ilman, että kaikki koodi tarvitsee pakottaa yhteen pitkään lohkoon. Tämä joustavuus on elintärkeää käyttäjien ohjaamisessa monimutkaisen tekoälymallin käytön tai tiedonkäsittelyputkien läpi.

Esimerkiksi tekoälyagentin kehitysprosessi voisi sisältää useita vaiheita: agentin työkalujen määrittelyn, agentin alustamisen ja sitten kyselyn suorittamisen. Jatkolohkot mahdollistavat kunkin näistä vaiheista esittämisen selkeästi erillisissä dokumentaatioosioissa samalla kun ne suoritetaan yhtenä, koherenttina testisekvenssinä, samoin kuin edistyneitä agenttityönkulkuja on käsitelty artikkelissa [Operationalizing Agentic AI: Part 1](/fi/operationalizing-agentic-ai-part-1-a-stakeholders-guide).

## Puhtaan dokumentaation ylläpitäminen samalla kun varmistetaan vankka testaus

Yksi `doc-builder`in eleganttisimmista ratkaisuista on sen kyky pitää renderöity dokumentaatio puhtaana, vaikka lähde-Markdown sisältäisi testikohtaisia direktiivejä. Kehittäjät voivat upottaa kommentteja kuten `# doc-builder: hide` suoritettaville riveille, joiden ei pitäisi näkyä dokumentaatiossa, tai `# doc-builder: ignore-bare-assert` väittämille, jotka ovat osa testiä, mutta joiden kommenttia ei pitäisi renderöidä. Samoin `pytest`-dekoraattorit (`# pytest-decorator: ...`) poistetaan renderöinnin aikana.

Tämä varmistaa, että dokumentaatio keskittyy opetukseen ja selkeyteen, ilman että sitä sotkevat testauksen "boilerplate"-koodit. Käyttäjä näkee vain asiaankuuluvan koodin, kun taas taustajärjestelmä takaa sen toimivuuden. Tämä tasapaino on kriittinen kehittäjätyökalujen dokumentaatiossa, jossa sekä esteettinen miellyttävyys että absoluuttinen virheettömyys ovat ensisijaisen tärkeitä.

## Vaikutus suuriin tekoälyprojekteihin ja niiden ulkopuolelle

Massiivisille repositorioille, kuten Hugging Facen Transformers, joissa on satoja dokumentaatiosivuja ja tuhansia esimerkkejä, tämä ominaisuus on mullistava. Se automatisoi dokumentaation ajautumisen estämisen, ongelman, joka muuten vaatisi valtavaa manuaalista työtä tai johtaisi jatkuvaan rikkinäisten esimerkkien virtaan. Ajettava dokumentaatio auttaa pitämään dokumentaation ja koodikannan synkronoituna, ylläpitäen luotettavuutta mittakaavassa, jossa manuaalinen tarkistus on yksinkertaisesti mahdotonta. Tämä on linjassa tekoälyyhteisön laajempien pyrkimysten kanssa [Tekoälyagenttien arviointi tuotannossa](/fi/evaluating-ai-agents-for-production-a-practical-guide-to-strands-evals) ja varmistaa luotettavuuden.

Tuomalla suoritettavan dokumentaation `pytest`in ja hienostuneiden CI/CD-putkistojen moderniin aikakauteen Hugging Face osoittaa vahvaa sitoutumista kehittäjäkokemukseen ja koodin laatuun. Tavoite pysyy samana kuin yli kaksi vuosikymmentä sitten: dokumentaation esimerkkien tulisi toimia. Mutta nyt ne eivät ainoastaan havainnollista, kuinka koodin *tulisi* toimia, vaan jatkuvasti *todistavat*, että se toimii, edistäen luotettavampaa ja uskottavampaa ekosysteemiä tekoälykehitykselle.

Usein kysytyt kysymykset

What is the core problem Hugging Face's runnable Markdown addresses?
Hugging Face's runnable Markdown addresses the pervasive problem of 'documentation drift,' where code examples in documentation become outdated and silently break as libraries and APIs evolve. This leads to user frustration and diminishes the credibility of the documentation. By making documentation examples runnable and testable, the doc-builder ensures that these snippets are continuously validated against the codebase, guaranteeing that they always work as advertised. This proactive approach prevents broken examples, enhances user trust, and improves the overall developer experience by providing reliable resources.
How does runnable Markdown differ from Python's traditional `doctest` module?
While both `doctest` and runnable Markdown aim for executable documentation, they differ significantly in their approach. `doctest` embeds tests directly into documentation syntax, requiring examples to mirror interactive interpreter sessions with expected output. This often leads to documentation being cluttered with test mechanics. Hugging Face's runnable Markdown, in contrast, treats documentation snippets as normal Python code living within Markdown files. It integrates seamlessly with modern testing frameworks like `pytest`, allowing for complex assertions, debugging, and standard test infrastructure. This separation of concerns ensures documentation remains clean and readable, while testing remains powerful and flexible, avoiding the limitations of `doctest`'s brittle output matching and verbose setup/teardown.
What are 'continuation blocks' in Hugging Face's `doc-builder`?
Continuation blocks are a powerful feature in Hugging Face's `doc-builder` that allow authors to split complex code examples or tutorials across multiple visible Markdown snippets while maintaining a shared execution context during testing. This means that a setup defined in one runnable block can be reused and built upon in a subsequent block, without forcing the documentation to present everything as one long, monolithic code fence. For example, `runnable:test_basic` can define initial variables, and `runnable:test_basic:2` can then use those variables. This enhances readability and instructional flow in documentation, making it easier to present multi-step processes without sacrificing the integrity of the underlying testable code.
How does `doc-builder` integrate with existing testing frameworks like `pytest`?
Hugging Face's `doc-builder` integrates natively with `pytest`, transforming runnable Markdown blocks into standard `pytest` test items. With `hf-doc-builder` installed, `pytest` automatically discovers and executes these blocks within Markdown files. This integration means that documentation examples can leverage the full power of `pytest`, including its assertion mechanisms, fixtures, decorators, and debugging tools. Failures appear as normal test failures with comprehensive tracebacks, allowing developers to debug effectively. This approach avoids the need for a special-purpose testing mini-language, embedding documentation tests directly into the project's existing, robust test infrastructure.
How does `doc-builder` ensure documentation remains clean despite embedded test logic?
A key design principle of `doc-builder` is to prevent test mechanics from polluting the user-facing documentation. Authors can embed test-only directives, such as `# pytest-decorator: transformers.testing_utils.slow` or `# doc-builder: hide` for lines that should be executable but not displayed, directly within the Markdown source. When the documentation is rendered, `doc-builder` intelligently strips these directives and comments, presenting a clean, readable code snippet to the user. This allows developers to write comprehensive tests alongside their examples without compromising the clarity and brevity expected of good documentation, maintaining a clear separation between the source code for testing and the rendered content for users.
What are the benefits of runnable documentation for large AI projects like Hugging Face Transformers?
For large AI projects such as Hugging Face Transformers, which involve extensive documentation and thousands of code examples, runnable documentation offers immense benefits. It drastically reduces 'documentation drift' by continuously validating examples against the evolving codebase, ensuring they remain accurate and functional. This prevents user frustration caused by broken examples and builds trust in the documentation's reliability. By integrating with `pytest`, it allows these projects to manage documentation tests within their existing CI/CD pipelines, making manual review of examples unnecessary at scale. This automated validation is crucial for maintaining the quality and usability of documentation in rapidly developing and complex software ecosystems.
Can runnable Markdown be adopted by other projects outside of Hugging Face?
Yes, the principles and mechanisms behind Hugging Face's runnable Markdown, particularly its integration with standard Python testing tools like `pytest` and its focus on separating testing logic from displayed documentation, are highly applicable and beneficial for any software project. While the `doc-builder` itself is specific to Hugging Face, the underlying ideas represent a best practice in developer tools. Other projects can implement similar systems using existing tools or adapt `doc-builder`'s concepts to ensure their documentation examples are continuously tested and reliable. This approach is a general solution to a common problem across the software development landscape, making documentation more robust and trustworthy.

Pysy ajan tasalla

Saa uusimmat tekoälyuutiset sähköpostiisi.

Jaa