Cree una capa de búsqueda de conocimientos de atención al cliente que combine consultas en su propio sitio de documentación con búsqueda web abierta para encontrar respuestas a tickets de soporte. Cuando un cliente hace una pregunta, el sistema primero busca sus documentos mediante una consulta específica del sitio y luego recurre a la búsqueda web general si no se encuentran documentos relevantes. Este enfoque de dos niveles garantiza respuestas precisas de fuentes oficiales y al mismo tiempo maneja casos extremos y preguntas sobre integración de terceros. La API de Scavio convierte ambos niveles en una única llamada de punto final con diferentes formatos de consulta.
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
- URL de documentación de su producto (por ejemplo, docs.yourproduct.com)
Guia paso a paso
Paso 1: Configurar la búsqueda de dos niveles
Configure la estrategia de búsqueda de documentos primero con su dominio de documentación y una alternativa a la búsqueda web general.
import os, requests
API_KEY = os.environ['SCAVIO_API_KEY']
DOCS_DOMAIN = 'docs.yourproduct.com'
def search_docs(query: str) -> list:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'google', 'query': f'{query} site:{DOCS_DOMAIN}'}, timeout=10)
return resp.json().get('organic_results', [])
def search_web(query: str) -> list:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'google', 'query': query}, timeout=10)
return resp.json().get('organic_results', [])Paso 2: Cree la función de búsqueda por niveles
Pruebe los documentos primero; Si no hay resultados o estos son insuficientes, recurra a la búsqueda web. Etiqueta los resultados con su fuente.
def knowledge_search(query: str, min_docs: int = 1) -> dict:
docs_results = search_docs(query)
if len(docs_results) >= min_docs:
return {
'source': 'docs',
'results': [{'title': r['title'], 'url': r['link'], 'snippet': r.get('snippet', '')} for r in docs_results[:3]]
}
web_results = search_web(query)
return {
'source': 'web',
'results': [{'title': r['title'], 'url': r['link'], 'snippet': r.get('snippet', '')} for r in web_results[:3]]
}Paso 3: Dar formato a los resultados para el agente de soporte
Convierta los resultados de la búsqueda en un bloque de contexto que el agente de soporte pueda utilizar para redactar una respuesta.
def format_support_context(search_result: dict) -> str:
source_label = 'Official docs' if search_result['source'] == 'docs' else 'Web search'
lines = [f'Source: {source_label}', '']
for r in search_result['results']:
lines.append(f"- {r['title']}")
lines.append(f" {r['snippet']}")
lines.append(f" URL: {r['url']}")
lines.append('')
return '\n'.join(lines)
result = knowledge_search('how to set up webhooks')
print(format_support_context(result))Paso 4: Manejar lotes de boletos
Procese varios tickets de soporte por lotes, ejecute la búsqueda de conocimientos para cada uno y recopile los resultados.
def process_tickets(tickets: list) -> list:
responses = []
for ticket in tickets:
search_result = knowledge_search(ticket['question'])
context = format_support_context(search_result)
responses.append({
'ticket_id': ticket['id'],
'question': ticket['question'],
'source': search_result['source'],
'context': context,
})
print(f"Ticket {ticket['id']}: answered from {search_result['source']}")
return responses
tickets = [
{'id': '001', 'question': 'how to set up webhooks'},
{'id': '002', 'question': 'SAML SSO configuration'},
{'id': '003', 'question': 'error 429 rate limit exceeded'},
]
process_tickets(tickets)Ejemplo en Python
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def knowledge_search(query, docs_domain):
docs = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': f'{query} site:{docs_domain}'}).json()
results = docs.get('organic_results', [])
if results:
return {'source': 'docs', 'results': results[:3]}
web = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': query}).json()
return {'source': 'web', 'results': web.get('organic_results', [])[:3]}
print(knowledge_search('webhook setup', 'docs.example.com'))Ejemplo en JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function knowledgeSearch(query, docsDomain) {
let r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H,
body: JSON.stringify({platform: 'google', query: `${query} site:${docsDomain}`})
});
let results = (await r.json()).organic_results || [];
if (results.length) return {source: 'docs', results: results.slice(0, 3)};
r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H, body: JSON.stringify({platform: 'google', query})
});
results = (await r.json()).organic_results || [];
return {source: 'web', results: results.slice(0, 3)};
}
knowledgeSearch('webhook setup', 'docs.example.com').then(console.log);Salida esperada
A two-tier knowledge search that returns official docs results when available and falls back to web search, formatted as context blocks for support agents.