Los modelos de lenguaje grandes producen respuestas de mayor calidad cuando se basan en datos web actuales en lugar de depender únicamente de datos de entrenamiento. Este tutorial crea una canalización que obtiene resultados en vivo de Google para una pregunta de un usuario, formatea los resultados principales como contexto y los envía a GPT con instrucciones para responder utilizando solo las fuentes proporcionadas. El resultado es una respuesta citada y actualizada similar a Perplexity o Bing Chat, creada con menos de 50 líneas de Python.
Requisitos previos
- Python 3.10 o superior
- solicitudes de instalación de pip openai
- Una clave API de Scavio
- Una clave API de OpenAI
Guia paso a paso
Paso 1: Obtener resultados de búsqueda para la pregunta
Utilice la API de Scavio para obtener los mejores resultados orgánicos para la pregunta del usuario. Estos servirán como contexto de base.
import os
import requests
API_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
def fetch_context(question: str, n: int = 5) -> list[dict]:
r = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"query": question, "country_code": "us"}
)
r.raise_for_status()
return r.json().get("organic_results", [])[:n]Paso 2: Dar formato a los resultados como contexto
Convierta los resultados de la búsqueda en un bloque de contexto numerado al que el LLM pueda hacer referencia por número de fuente.
def format_context(results: list[dict]) -> str:
lines = []
for i, r in enumerate(results, 1):
lines.append(f"[{i}] {r.get('title', '')}")
lines.append(f" URL: {r.get('link', '')}")
lines.append(f" {r.get('snippet', '')}")
return "\n".join(lines)Paso 3: Enviar a GPT con instrucciones de conexión a tierra
Pase el contexto y la pregunta a GPT con un mensaje del sistema que requiere citar las fuentes por número.
from openai import OpenAI
client = OpenAI()
def ask_with_context(question: str, context: str) -> str:
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "Answer the question using ONLY the provided search results. Cite sources using [n] notation. If the results do not contain the answer, say so."},
{"role": "user", "content": f"Search results:\n{context}\n\nQuestion: {question}"}
],
temperature=0
)
return response.choices[0].message.contentPaso 4: Ejecutar todo el proceso
Encadene los pasos de búsqueda, formato y respuesta para cualquier pregunta del usuario.
def answer(question: str) -> str:
results = fetch_context(question)
context = format_context(results)
return ask_with_context(question, context)
print(answer("What are the best Python testing frameworks in 2026?"))Ejemplo en Python
import os
import requests
from openai import OpenAI
SCAVIO_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
client = OpenAI()
def fetch_context(question: str) -> list[dict]:
r = requests.post("https://api.scavio.dev/api/v1/search",
headers={"x-api-key": SCAVIO_KEY},
json={"query": question, "country_code": "us"})
r.raise_for_status()
return r.json().get("organic_results", [])[:5]
def format_context(results: list[dict]) -> str:
return "\n".join(f"[{i}] {r['title']}\n {r.get('snippet', '')}\n {r['link']}" for i, r in enumerate(results, 1))
def answer(question: str) -> str:
ctx = format_context(fetch_context(question))
resp = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "Answer using ONLY the search results. Cite with [n]."},
{"role": "user", "content": f"Results:\n{ctx}\n\nQuestion: {question}"}
], temperature=0)
return resp.choices[0].message.content
if __name__ == "__main__":
print(answer("What are the best Python testing frameworks in 2026?"))Ejemplo en JavaScript
const SCAVIO_KEY = process.env.SCAVIO_API_KEY || "your_scavio_api_key";
const { OpenAI } = require("openai");
const client = new OpenAI();
async function fetchContext(question) {
const res = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: { "x-api-key": SCAVIO_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ query: question, country_code: "us" })
});
const data = await res.json();
return (data.organic_results || []).slice(0, 5);
}
async function answer(question) {
const results = await fetchContext(question);
const ctx = results.map((r, i) => `[${i + 1}] ${r.title}\n ${r.snippet || ""}\n ${r.link}`).join("\n");
const resp = await client.chat.completions.create({
model: "gpt-4o",
messages: [
{ role: "system", content: "Answer using ONLY the search results. Cite with [n]." },
{ role: "user", content: `Results:\n${ctx}\n\nQuestion: ${question}` }
], temperature: 0
});
console.log(resp.choices[0].message.content);
}
answer("Best Python testing frameworks 2026").catch(console.error);Salida esperada
Based on search results, the top Python testing frameworks in 2026 are:
1. **pytest** - The most popular framework with extensive plugin support [1]
2. **Hypothesis** - Property-based testing gaining rapid adoption [2]
3. **Playwright for Python** - Leading choice for end-to-end browser testing [3]
Sources:
[1] https://example.com/python-testing-2026
[2] https://example.com/hypothesis-testing
[3] https://example.com/playwright-python