Agregue búsqueda en vivo a un agente de atención al cliente integrando una llamada API de búsqueda que se activa cuando la base de conocimientos interna del agente no tiene una respuesta relevante. Esto evita que el agente tenga alucinaciones sobre las características del producto, el precio o el estado de la interrupción cuando la base de conocimiento está obsoleta. La API de Scavio devuelve resultados actuales de Google que el agente puede utilizar como contexto de conexión antes de generar una respuesta. Este tutorial crea un middleware de agente de soporte que decide cuándo buscar y cómo inyectar resultados en el contexto del agente.
Requisitos previos
- Python 3.8+ o Node.js 18+ instalado
- solicita biblioteca (Python) o recuperación integrada (JS)
- Una clave API de Scavio de scavio.dev
- Un agente de soporte existente o un marco de chatbot
Guia paso a paso
Paso 1: Definir la lógica del activador de búsqueda
Cree un clasificador que decida si una consulta de soporte necesita una búsqueda en vivo o puede responderse únicamente desde la base de conocimiento interna.
import os, requests
API_KEY = os.environ['SCAVIO_API_KEY']
SEARCH_TRIGGERS = ['current', 'latest', 'today', 'outage', 'status', 'pricing', 'update', 'new feature', 'changelog', 'release']
def needs_live_search(query: str) -> bool:
query_lower = query.lower()
return any(trigger in query_lower for trigger in SEARCH_TRIGGERS)Paso 2: Obtener contexto en vivo desde la búsqueda
Cuando se activa la búsqueda, consulte a Scavio con la pregunta del cliente enfocada al dominio de su producto para obtener los resultados más relevantes.
def fetch_support_context(query: str, product_domain: str = '') -> str:
search_query = f'{query} site:{product_domain}' if product_domain else query
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'google', 'query': search_query}, timeout=10)
results = resp.json().get('organic_results', [])
context_parts = []
for r in results[:3]:
context_parts.append(f"Title: {r.get('title', '')}\nURL: {r.get('link', '')}\nSnippet: {r.get('snippet', '')}")
return '\n\n'.join(context_parts)Paso 3: Inyecte contexto en el mensaje del agente
Anteponga los resultados de la búsqueda en vivo al mensaje del sistema del agente para que utilice información actual al responder.
def build_support_prompt(user_query: str, kb_answer: str, product_domain: str) -> str:
prompt = f'Customer question: {user_query}\n\n'
prompt += f'Knowledge base answer: {kb_answer}\n\n'
if needs_live_search(user_query):
live_context = fetch_support_context(user_query, product_domain)
prompt += f'Live web context (use if KB answer is outdated):\n{live_context}\n\n'
prompt += 'Respond helpfully. Prefer live data over KB if there is a conflict. Cite URLs when using web results.'
return prompt
result = build_support_prompt(
'Is there a current outage?',
'No known outages.',
'status.example.com'
)
print(result)Paso 4: Manejar el respaldo cuando la búsqueda no tiene resultados
Degradar con gracia cuando la API de búsqueda no arroja resultados o se agota el tiempo de espera, recurriendo únicamente a la respuesta de KB.
def safe_support_search(query: str, product_domain: str = '') -> str:
try:
context = fetch_support_context(query, product_domain)
if context.strip():
return context
except Exception as e:
print(f'Search fallback: {e}')
return ''
def answer_support_query(user_query: str, kb_answer: str, product_domain: str) -> dict:
live_context = safe_support_search(user_query, product_domain) if needs_live_search(user_query) else ''
return {
'query': user_query,
'kb_answer': kb_answer,
'live_context': live_context,
'used_search': bool(live_context),
}Ejemplo en Python
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def support_search(query, domain=''):
q = f'{query} site:{domain}' if domain else query
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': q}, timeout=10).json()
return [{'title': r['title'], 'url': r['link'], 'snippet': r.get('snippet', '')}
for r in data.get('organic_results', [])[:3]]
print(support_search('current outage status', 'status.example.com'))Ejemplo en JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function supportSearch(query, domain = '') {
const q = domain ? `${query} site:${domain}` : query;
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H, body: JSON.stringify({platform: 'google', query: q})
});
const results = (await r.json()).organic_results || [];
return results.slice(0, 3).map(r => ({title: r.title, url: r.link, snippet: r.snippet}));
}
supportSearch('current outage status', 'status.example.com').then(console.log);Salida esperada
A support agent middleware that triggers live web search for time-sensitive queries and injects fresh context into the agent's response pipeline.