Les fils de discussion r/aiagents montrent le modèle 2026 : des agents de codage qui citent des tickets GitHub ouverts et la section exacte de la documentation dans leurs réponses. Ce tutoriel construit cet agent en utilisant le SERP de Scavio avec les opérateurs site:github.com et site:docs.*.
Prérequis
- Python 3.10+
- Une clé API Scavio
- Une clé API LLM (Anthropic ou OpenAI)
Parcours
Étape 1: Construire un outil de tickets GitHub
site:github.com/ORG/REPO/issues renvoie les données en direct du suivi des tickets.
import requests, os
API_KEY = os.environ['SCAVIO_API_KEY']
def github_issues(repo, query):
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'query': f'site:github.com/{repo}/issues {query}', 'num_results': 10})
return r.json().get('organic_results', [])Étape 2: Construire un outil de recherche dans la documentation
site:docs.prisma.io ou similaire limite aux docs officielles.
def docs_search(domain, query):
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'query': f'site:{domain} {query}', 'num_results': 10})
return r.json().get('organic_results', [])Étape 3: Composer une boucle d'agent
Les deux outils s'exécutent en parallèle, les résultats sont fusionnés avant la synthèse de la réponse.
import anthropic
client = anthropic.Anthropic()
def research(repo, docs_domain, question):
issues = github_issues(repo, question)
docs = docs_search(docs_domain, question)
context = '\n'.join([f"ISSUE: {i['title']} {i['link']}" for i in issues[:5]])
context += '\n\n' + '\n'.join([f"DOC: {d['title']} {d['link']}" for d in docs[:5]])
msg = client.messages.create(
model='claude-sonnet-4-6',
max_tokens=1024,
messages=[{'role': 'user', 'content': f'{question}\n\n{context}'}])
return msg.content[0].textÉtape 4: Tester avec une question réelle
Pointez vers une bibliothèque et un dépôt que vous connaissez.
print(research('prisma/prisma', 'prisma.io', 'why does migrate dev hang on postgres?'))Étape 5: Ajouter un filtre de fraîcheur
Privilégier les tickets des 90 derniers jours.
from datetime import datetime, timedelta
def recent_issues(items):
cutoff = datetime.now() - timedelta(days=90)
# Assume each item includes date; filter accordingly
return itemsExemple Python
import os, requests
API_KEY = os.environ['SCAVIO_API_KEY']
def coding_research(repo, question):
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'query': f'site:github.com/{repo}/issues {question}'})
return r.json().get('organic_results', [])
print(coding_research('prisma/prisma', 'migrate dev hangs'))Exemple JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
export async function codingResearch(repo, question) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ query: `site:github.com/${repo}/issues ${question}` })
});
return (await r.json()).organic_results || [];
}Sortie attendue
Agent answers with inline citations to open GitHub issues and exact doc sections. Cuts debugging time materially for known-library bugs.