Una publicación de r/AI_Agents preguntaba específicamente sobre las herramientas para un LLM Wiki estilo Karpathy: búsqueda, scraping, MCP, ingestión. Esto recorre la pila mínima con costos verificados en línea.
Requisitos previos
- Python 3.10+
- Clave API de Scavio
- Nivel gratuito de Qdrant Cloud o Qdrant autohospedado
- Una API LLM (Claude/OpenAI/DeepSeek)
Guia paso a paso
Paso 1: Descubra fuentes mediante la búsqueda de Scavio
Para un tema, obtenga SERP principales + hilos principales de Reddit + videos principales de YouTube.
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def discover(topic):
return {
'web': requests.post('https://api.scavio.dev/api/v1/search', headers=H, json={'query': topic}).json(),
'reddit': requests.post('https://api.scavio.dev/api/v1/reddit/search', headers=H, json={'query': topic}).json(),
'youtube': requests.post('https://api.scavio.dev/api/v1/youtube/search', headers=H, json={'query': topic}).json(),
}Paso 2: Extraiga rebajas limpias para las principales fuentes
Por fuente, /extract devuelve una rebaja lista para incrustar.
def extract(url):
return requests.post('https://api.scavio.dev/api/v1/extract',
headers=H, json={'url': url, 'format': 'markdown'}).json()Paso 3: Incrustar y almacenar en Qdrant
Rebaja de fragmentos, incrustación y inserción con la URL de origen como carga útil.
from qdrant_client import QdrantClient
from qdrant_client.models import PointStruct
client = QdrantClient(url='https://your-qdrant.cloud')
# embed_fn = your embedding function (OpenAI/Cohere/Jina)
for i, chunk in enumerate(chunks):
client.upsert(collection_name='wiki', points=[PointStruct(
id=i, vector=embed_fn(chunk), payload={'text': chunk, 'url': source_url})])Paso 4: Consulta con solicitud de cita
LLM emite [N] marcadores vinculados a URL de origen de fragmentos.
def answer(question, k=5):
hits = client.search(collection_name='wiki', query_vector=embed_fn(question), limit=k)
sources = [{'i': i+1, 'text': h.payload['text'], 'url': h.payload['url']} for i, h in enumerate(hits)]
prompt = f'Question: {question}\nSources:\n' + '\n'.join(f'[{s["i"]}] {s["url"]}: {s["text"][:300]}' for s in sources)
prompt += '\nAnswer with [N] citations referencing sources.'
return llm.complete(prompt), sourcesPaso 5: Renderizar con citas en las que se puede hacer clic
[1] se convierte en un enlace a la URL de origen.
import re
def render(answer, sources):
for s in sources:
answer = answer.replace(f'[{s["i"]}]', f'[[{s["i"]}]]({s["url"]})')
return answerEjemplo en Python
# Cost per question: ~5 search credits + ~3 extract credits + 1 LLM call = ~$0.04-0.10Ejemplo en JavaScript
// Same flow in TS using qdrant-js + Scavio fetch calls.Salida esperada
LLM Wiki agent that pulls from Google + Reddit + YouTube under one Scavio key, embeds into Qdrant, answers with clickable citations. Stack cost: Scavio $30 + Qdrant Cloud ~$25 + LLM tokens.