Le markdown prêt pour LLM compte car le gaspillage de tokens coûte réellement. Une page de documentation API typique transmet 8 000 tokens de HTML mais seulement 2 500 tokens de signal. Ce tutoriel utilise le point de terminaison extract de Scavio pour produire un markdown économique en tokens, prêt pour le contexte de l'agent.
Prérequis
- Python 3.10+ ou Node 20+
- Une clé API Scavio
Parcours
Étape 1: Appeler le point de terminaison extract
Scavio renvoie du markdown débarrassé de la navigation et du chrome.
import requests, os
API_KEY = os.environ['SCAVIO_API_KEY']
def to_markdown(url):
r = requests.post('https://api.scavio.dev/api/v1/extract',
headers={'x-api-key': API_KEY},
json={'url': url, 'format': 'markdown'})
return r.json().get('markdown', '')Étape 2: Mesurer les économies de tokens
Comparer la taille du HTML brut avec le markdown.
import tiktoken
enc = tiktoken.get_encoding('cl100k_base')
def compare(url):
md = to_markdown(url)
raw = requests.get(url).text
return {'raw_tokens': len(enc.encode(raw)), 'md_tokens': len(enc.encode(md))}Étape 3: Alimenter un agent LLM
Le markdown s'insère directement dans un message utilisateur.
import anthropic
client = anthropic.Anthropic()
def summarize(url):
md = to_markdown(url)
msg = client.messages.create(
model='claude-sonnet-4-6',
max_tokens=512,
messages=[{'role': 'user', 'content': f'Summarize in 5 bullets:\n{md[:6000]}'}])
return msg.content[0].textÉtape 4: Mettre en cache les pages fréquemment récupérées
Éviter les appels répétés pour les pages de documentation stables.
from functools import lru_cache
@lru_cache(maxsize=500)
def cached_markdown(url):
return to_markdown(url)Étape 5: Convertir par lots un plan de site
Parcourir un sitemap.xml pour une conversion en masse.
from xml.etree import ElementTree
def bulk(sitemap_url):
r = requests.get(sitemap_url)
urls = [e.text for e in ElementTree.fromstring(r.text).iter('{*}loc')]
return {u: to_markdown(u) for u in urls[:50]}Exemple Python
import os, requests
API_KEY = os.environ['SCAVIO_API_KEY']
def to_markdown(url):
r = requests.post('https://api.scavio.dev/api/v1/extract',
headers={'x-api-key': API_KEY},
json={'url': url, 'format': 'markdown'})
return r.json().get('markdown', '')
print(to_markdown('https://docs.prisma.io')[:500])Exemple JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
export async function toMarkdown(url) {
const r = await fetch('https://api.scavio.dev/api/v1/extract', {
method: 'POST',
headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ url, format: 'markdown' })
});
return (await r.json()).markdown || '';
}Sortie attendue
Clean markdown representation of the page, stripped of nav and cookies. Token count drops 40 to 60% versus raw HTML.