La base de búsqueda significa brindarle a su agente de inteligencia artificial acceso a resultados web en vivo para que pueda responder preguntas sobre eventos actuales, precios y cambios recientes sin alucinar. No necesita LangChain, LlamaIndex ni ningún marco: una función simple de Python que llama a una API de búsqueda e inyecta resultados en el mensaje funciona igual de bien. Este tutorial lleva a un principiante de cero a un agente en tierra en menos de 15 minutos utilizando solo la biblioteca de solicitudes y la API de Scavio a $0,005 por búsqueda.
Requisitos previos
- Python 3.8+ instalado
- solicita biblioteca instalada (solicitudes de instalación de pip)
- Una clave API de Scavio de scavio.dev (250 créditos gratis/mes)
- Cualquier clave API de LLM (OpenAI, Anthropic, etc.) o un modelo local
Guia paso a paso
Paso 1: Obtenga su clave API y pruébela
Regístrese en scavio.dev y copie su clave API. Pruébelo con un simple comando curl o un script de Python para asegurarse de que funciona.
import requests, os
API_KEY = os.environ.get('SCAVIO_API_KEY', 'your_key_here')
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY, 'Content-Type': 'application/json'},
json={'query': 'hello world', 'country_code': 'us'})
if resp.status_code == 200:
results = resp.json().get('organic_results', [])
print(f'API works. Got {len(results)} results.')
else:
print(f'Error: {resp.status_code} - {resp.text}')Paso 2: Escribe la función de búsqueda
Cree una función única que responda una pregunta y devuelva resultados de búsqueda formateados. Este es el núcleo de su sistema de conexión a tierra: solo 10 líneas de código.
def search_web(question: str) -> str:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY, 'Content-Type': 'application/json'},
json={'query': question, 'country_code': 'us'})
if resp.status_code != 200:
return 'Search failed. Answer from your own knowledge.'
results = resp.json().get('organic_results', [])[:5]
if not results:
return 'No results found.'
return '\n'.join(
f'{r["title"]}\n{r.get("snippet", "")}\nSource: {r["link"]}\n'
for r in results
)Paso 3: Construya el mensaje fundamentado
Combine los resultados de la búsqueda con la pregunta del usuario en una plantilla de mensaje. Dígale al LLM que utilice los resultados de la búsqueda y cite las fuentes.
def make_prompt(question: str) -> str:
search_results = search_web(question)
return f"""Answer the following question using ONLY the search results below.
If the results do not contain enough info, say so.
Cite your sources with URLs.
Search Results:
{search_results}
Question: {question}
Answer:"""
# Test it:
prompt = make_prompt('What is the cheapest CRM in 2026?')
print(prompt)Paso 4: Conéctese a su LLM
Pase el mensaje fundamentado a cualquier LLM. Este ejemplo utiliza OpenAI pero funciona de manera idéntica con Anthropic, Ollama local o cualquier API de chat.
from openai import OpenAI
client = OpenAI() # uses OPENAI_API_KEY env var
def ask(question: str) -> str:
prompt = make_prompt(question)
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': prompt}],
max_tokens=500
)
return response.choices[0].message.content
# Your first grounded query:
answer = ask('What is the cheapest CRM in 2026?')
print(answer)Paso 5: Agregar un bucle de conversación
Convierta la consulta única en un agente conversacional. Cada mensaje de usuario se basa en nuevos resultados de búsqueda.
def chat_loop():
print('Grounded Agent (type "quit" to exit)')
print(f'Search cost: $0.005 per question\n')
while True:
question = input('You: ').strip()
if question.lower() in ('quit', 'exit', 'q'):
break
if not question:
continue
answer = ask(question)
print(f'\nAgent: {answer}\n')
if __name__ == '__main__':
chat_loop()Ejemplo en Python
import os, requests
from openai import OpenAI
API_KEY = os.environ['SCAVIO_API_KEY']
client = OpenAI()
def search_web(question: str) -> str:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY, 'Content-Type': 'application/json'},
json={'query': question, 'country_code': 'us'})
results = resp.json().get('organic_results', [])[:5]
return '\n'.join(f'{r["title"]}\n{r.get("snippet", "")}\nSource: {r["link"]}' for r in results)
def ask(question: str) -> str:
ctx = search_web(question)
prompt = f'Use these search results to answer:\n\n{ctx}\n\nQuestion: {question}'
resp = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': prompt}],
max_tokens=500)
return resp.choices[0].message.content
if __name__ == '__main__':
print(ask('Best free CRM 2026'))Ejemplo en JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
async function searchWeb(question) {
const resp = 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: question, country_code: 'us' })
});
const data = await resp.json();
return (data.organic_results || []).slice(0, 5)
.map(r => `${r.title}\n${r.snippet || ''}\nSource: ${r.link}`).join('\n\n');
}
async function main() {
const question = 'Best free CRM 2026';
const context = await searchWeb(question);
console.log(`Search context (cost: $0.005):\n${context}`);
// Pass context + question to your LLM of choice
}
main().catch(console.error);Salida esperada
API works. Got 10 results.
Grounded Agent (type "quit" to exit)
Search cost: $0.005 per question
You: What is the cheapest CRM in 2026?
Agent: Based on search results, HubSpot CRM remains the most popular
free option in 2026 with unlimited users. For paid plans, Freshsales
starts at $9/user/month. Zoho CRM offers a free tier for up to 3 users.
Source: https://www.hubspot.com/pricing
Source: https://www.freshworks.com/crm/pricing/