Los hilos de r/aiagents muestran el patrón 2026: agentes de codificación que citan problemas abiertos de GitHub y la sección de documentación exacta en sus respuestas. Este tutorial construye ese agente utilizando el SERP de Scavio con los operadores site:github.com y site:docs.*.
Requisitos previos
- Python 3.10+
- Una clave API de Scavio
- Una clave API de LLM (Anthropic u OpenAI)
Guia paso a paso
Paso 1: Cree una herramienta de problemas de GitHub
site:github.com/ORG/REPO/issues devuelve datos del seguimiento de problemas en vivo.
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', [])Paso 2: Crear una herramienta de búsqueda de documentos
site:docs.prisma.io o restricciones similares a los documentos oficiales.
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', [])Paso 3: Componer un bucle de agente
Ambas herramientas se ejecutan en paralelo y los resultados se fusionan antes de la síntesis de las respuestas.
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].textPaso 4: Prueba con una pregunta real
Apunte a una biblioteca y realice un repositorio que conozca.
print(research('prisma/prisma', 'prisma.io', 'why does migrate dev hang on postgres?'))Paso 5: Añadir un filtro de frescura
Prefiere números de los últimos 90 días.
from datetime import datetime, timedelta
def recent_issues(items):
cutoff = datetime.now() - timedelta(days=90)
# Assume each item includes date; filter accordingly
return itemsEjemplo en 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'))Ejemplo en 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 || [];
}Salida esperada
Agent answers with inline citations to open GitHub issues and exact doc sections. Cuts debugging time materially for known-library bugs.