Una publicación de r/LocalLLaMA mostró a Qwen 9B/27B/35B alucinando con respuestas basadas en búsquedas web. La solución está escrita en JSON en lugar de HTML sin formato y una indicación de cita explícita. Esto sigue el patrón.
Requisitos previos
- Un LLM local vía Ollama / LM Studio / vLLM
- Clave API de Scavio
- Conciencia de los límites de la ventana de contexto (4K-32K típico de 9B-35B)
Guia paso a paso
Paso 1: Extraiga JSON escrito a través de Scavio
De 5 a 10 resultados por consulta, muy en el contexto del LLM local.
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def search(q):
r = requests.post('https://api.scavio.dev/api/v1/search', headers=H, json={'query': q}).json()
return r.get('organic_results', [])[:10]Paso 2: Formatear las fuentes como un bloque de citas numerado
Los LLM locales responden mejor a la numeración explícita.
def fmt_sources(results):
return '\n'.join(f'[{i+1}] {r["title"]} ({r["link"]}): {r["snippet"]}' for i, r in enumerate(results))Paso 3: Utilice un mensaje de cita estricto
Los LLM locales ignoran instrucciones más suaves; Sea explícito.
PROMPT = '''Answer using ONLY the sources below. Every claim must be followed by [N] where N is the source number.
If the sources do not answer the question, say "I don't know based on the provided sources."
Sources:
{sources}
Question: {question}'''Paso 4: Llame al LLM local vía Ollama
Estándar Ollama /api/generate.
import requests
def ask_local(q, results):
prompt = PROMPT.format(sources=fmt_sources(results), question=q)
r = requests.post('http://localhost:11434/api/generate',
json={'model': 'qwen2.5:32b', 'prompt': prompt, 'stream': False}).json()
return r['response']Paso 5: Verificación cruzada con la descripción general de la IA
Si la respuesta local de LLM no está de acuerdo con el conjunto de citas de descripción general de IA de Google, márquelo.
# Re-run the Scavio search with include_ai_overview: true.
# Compare the local LLM's claims against the AI Overview's citation set.
# Disagreement = potential hallucination, surface to the user.Ejemplo en Python
# Per query: 1-2 Scavio calls + 1 local LLM call. Cost: ~$0.005 + $0 (local).Ejemplo en JavaScript
// Same in TS via fetch + Ollama.Salida esperada
Local LLM that grounds answers in typed JSON sources, cites them with [N] markers, and abstains when sources don't cover the question. Hallucination rate drops measurably on the same model.