Auditez l'utilisation des tokens par outil en enveloppant chaque appel d'outil avec une mesure de la taille d'entrée/sortie et en enregistrant les résultats dans un stockage structuré. Les outils de recherche sont souvent les plus grands consommateurs de tokens dans les workflows d'agent car ils renvoient des extraits HTML verbeux et des métadonnées. Savoir exactement combien de tokens chaque appel de recherche Scavio contribue vous aide à définir des budgets, élaguer les champs inutiles et réduire les coûts. Ce tutoriel construit une couche d'audit légère qui se situe entre votre agent et ses outils.
Prérequis
- Python 3.8+ installé
- bibliothèque requests installée
- Une clé API Scavio depuis scavio.dev
- bibliothèque tiktoken installée (pip install tiktoken)
Parcours
Étape 1: Configurer le compteur de tokens
Utilisez tiktoken pour compter les tokens dans l'entrée (requête) et la sortie (résultats) de l'outil pour chaque appel API.
import tiktoken, os, requests, json, time
API_KEY = os.environ['SCAVIO_API_KEY']
enc = tiktoken.get_encoding('cl100k_base')
def count_tokens(text: str) -> int:
return len(enc.encode(text))
audit_log = []Étape 2: Envelopper l'appel de recherche avec l'audit
Créez une fonction de recherche audité qui mesure les tokens avant et après chaque appel et ajoute le résultat au journal d'audit.
def audited_search(query: str, platform: str = 'google') -> dict:
input_tokens = count_tokens(json.dumps({'platform': platform, 'query': query}))
start = time.monotonic()
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': platform, 'query': query}, timeout=15)
latency_ms = round((time.monotonic() - start) * 1000)
data = resp.json()
output_text = json.dumps(data)
output_tokens = count_tokens(output_text)
audit_log.append({
'tool': 'search', 'platform': platform, 'query': query,
'input_tokens': input_tokens, 'output_tokens': output_tokens,
'total_tokens': input_tokens + output_tokens, 'latency_ms': latency_ms,
'timestamp': time.time(),
})
return dataÉtape 3: Exécuter plusieurs requêtes et collecter des données
Exécutez un lot de requêtes représentatives pour constituer le journal d'audit avec des données d'utilisation réelles.
test_queries = [
('best crm for startups 2026', 'google'),
('wireless earbuds under 50', 'amazon'),
('python async tutorial', 'youtube'),
('is scavio api good', 'reddit'),
]
for query, platform in test_queries:
audited_search(query, platform)
time.sleep(0.5)
print(f'Collected {len(audit_log)} audit records')Étape 4: Générer le rapport d'utilisation
Agrégez le journal d'audit pour afficher le total des tokens par outil, la moyenne des tokens par appel, et identifier les requêtes les plus coûteuses.
def generate_report(log: list) -> None:
total = sum(e['total_tokens'] for e in log)
print(f'Total token usage: {total:,}')
print(f'Average per call: {total // max(len(log), 1):,}')
print(f'\nPer-platform breakdown:')
platforms = {}
for e in log:
p = e['platform']
platforms[p] = platforms.get(p, 0) + e['total_tokens']
for p, tokens in sorted(platforms.items(), key=lambda x: -x[1]):
print(f' {p}: {tokens:,} tokens ({len([e for e in log if e["platform"] == p])} calls)')
print(f'\nMost expensive query:')
top = max(log, key=lambda x: x['total_tokens'])
print(f' "{top["query"]}" on {top["platform"]}: {top["total_tokens"]:,} tokens')
generate_report(audit_log)Exemple Python
import tiktoken, requests, os, json, time
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
enc = tiktoken.get_encoding('cl100k_base')
def audited_search(query, platform='google'):
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': platform, 'query': query}).json()
tokens = len(enc.encode(json.dumps(data)))
print(f'{platform}:{query} -> {tokens} tokens')
return data
audited_search('best crm 2026')
audited_search('wireless earbuds', 'amazon')Exemple JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function auditedSearch(query, platform = 'google') {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H, body: JSON.stringify({platform, query})
});
const data = await r.json();
const chars = JSON.stringify(data).length;
console.log(`${platform}:${query} -> ~${Math.ceil(chars / 4)} tokens`);
return data;
}
await auditedSearch('best crm 2026');Sortie attendue
A token usage report showing total tokens consumed per platform, average tokens per API call, and the most expensive individual query.