Corrija la mala calidad de búsqueda de los agentes basados en Hermes verificando cinco puntos de falla comunes: el tamaño del modelo que afecta la construcción de la consulta, errores de configuración de la herramienta, redacción de la consulta subóptima, calidad del proveedor de búsqueda y problemas con la plantilla de mensajes. Hermes 3 es un modelo capaz de utilizar herramientas, pero su calidad de búsqueda depende en gran medida de cómo está configurada la herramienta de búsqueda y a qué motor de búsqueda llama. La mayoría de los problemas de calidad se remontan al modelo que genera consultas demasiado amplias o al proveedor de búsqueda que arroja resultados de baja relevancia.
Requisitos previos
- Un agente Hermes en ejecución con capacidad de búsqueda
- Python 3.8+ instalado
- solicita biblioteca instalada
- Una clave API de Scavio de scavio.dev para comparar
Guia paso a paso
Paso 1: Verifique el impacto del tamaño del modelo
Verifique qué variante del modelo Hermes está ejecutando. Los modelos más pequeños generan peores consultas de búsqueda.
import requests, os, json
SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
OLLAMA_URL = 'http://localhost:11434'
def check_model():
try:
resp = requests.get(f'{OLLAMA_URL}/api/tags', timeout=5)
models = resp.json().get('models', [])
hermes_models = [m for m in models if 'hermes' in m.get('name', '').lower()]
for m in hermes_models:
size = m.get('size', 0) / (1024**3)
print(f"{m['name']}: {size:.1f}GB")
if size < 4:
print(' WARNING: Small model may construct poor queries')
print(' Recommendation: Use hermes3:8b or larger')
if not hermes_models:
print('No Hermes models found in Ollama')
return hermes_models
except Exception as e:
print(f'Cannot connect to Ollama: {e}')
return []
check_model()Paso 2: Verificar la configuración de la herramienta
Compruebe que la definición de la herramienta de búsqueda le dé a Hermes suficiente contexto para construir buenas consultas.
GOOD_TOOL_DEF = {
'type': 'function',
'function': {
'name': 'web_search',
'description': 'Search the web for current information. Use specific, focused queries. Include the year 2026 for time-sensitive topics.',
'parameters': {
'type': 'object',
'properties': {
'query': {
'type': 'string',
'description': 'The search query. Be specific: include product names, versions, dates. Bad: "best tools". Good: "best CRM for startups 2026".',
},
},
'required': ['query'],
},
},
}
BAD_TOOL_DEF = {
'type': 'function',
'function': {
'name': 'search',
'description': 'Search',
'parameters': {'type': 'object', 'properties': {'q': {'type': 'string'}}},
},
}
print('GOOD: Descriptive name, detailed description, query guidance')
print('BAD: Vague name, no description, no query guidance')
print('Fix: Use the GOOD tool definition pattern above')Paso 3: Calidad de construcción de la consulta de prueba
Envíe un mensaje de usuario a Hermes e inspeccione qué consulta de búsqueda genera. Compare consultas malas y buenas.
def test_query_quality(user_prompt: str) -> dict:
"""Test what query Hermes would construct for a given prompt."""
# Simulate Hermes query construction
# In practice, inspect your agent's tool call logs
example_bad_queries = {
'What CRM should I use?': 'CRM', # Too broad
'Compare React and Vue': 'react vue', # Missing context
'Latest Python release': 'python release', # Missing year
}
example_good_queries = {
'What CRM should I use?': 'best CRM for small business 2026 comparison',
'Compare React and Vue': 'React vs Vue performance comparison 2026',
'Latest Python release': 'Python latest version release date 2026',
}
bad = example_bad_queries.get(user_prompt, user_prompt)
good = example_good_queries.get(user_prompt, user_prompt)
# Compare result quality
bad_results = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': SCAVIO_KEY},
json={'platform': 'google', 'query': bad}, timeout=10).json().get('organic_results', [])
good_results = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': SCAVIO_KEY},
json={'platform': 'google', 'query': good}, timeout=10).json().get('organic_results', [])
print(f'Bad query "{bad}": {len(bad_results)} results')
print(f'Good query "{good}": {len(good_results)} results')
return {'bad_query': bad, 'good_query': good}
test_query_quality('What CRM should I use?')Paso 4: Comparar proveedores de búsqueda
Pruebe la misma consulta en diferentes proveedores para determinar si el problema es el motor de búsqueda o la consulta.
def compare_providers(query: str) -> dict:
# Test with Scavio (structured API)
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': SCAVIO_KEY},
json={'platform': 'google', 'query': query}, timeout=10)
scavio_results = resp.json().get('organic_results', [])
# Test with SearXNG (if running locally)
searxng_results = []
try:
resp = requests.get('http://localhost:8080/search',
params={'q': query, 'format': 'json'}, timeout=10)
searxng_results = resp.json().get('results', [])
except:
pass
print(f'Query: {query}')
print(f'Scavio: {len(scavio_results)} results')
if scavio_results:
print(f' Top: {scavio_results[0].get("title", "")[:60]}')
print(f'SearXNG: {len(searxng_results)} results')
if searxng_results:
print(f' Top: {searxng_results[0].get("title", "")[:60]}')
return {'scavio': len(scavio_results), 'searxng': len(searxng_results)}
compare_providers('best CRM for startups 2026')Paso 5: Optimice las indicaciones para mejores consultas
Actualice el mensaje del sistema para guiar a Hermes hacia la creación de mejores consultas de búsqueda.
OPTIMIZED_SYSTEM_PROMPT = """You are a research assistant with web search capability.
When using the web_search tool:
1. Always include specific terms (product names, versions, years)
2. Add "2026" for time-sensitive topics
3. Use comparison terms when the user asks for recommendations
4. Break complex questions into multiple focused searches
5. Prefer "best X for Y" over just "X"
Examples:
- User: "What CRM should I use?" -> search: "best CRM for small business comparison 2026"
- User: "Is React still good?" -> search: "React framework popularity and performance 2026"
"""
def build_hermes_prompt(user_message: str) -> str:
return f"{OPTIMIZED_SYSTEM_PROMPT}\n\nUser: {user_message}"
print(build_hermes_prompt('What project management tool should I use?'))
print('\nThis prompt guides Hermes to construct specific, high-quality search queries.')Ejemplo en Python
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def quality_check(broad_query, specific_query):
broad = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': broad_query}).json()
specific = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': specific_query}).json()
print(f'Broad "{broad_query}": {len(broad.get("organic_results", []))} results')
print(f'Specific "{specific_query}": {len(specific.get("organic_results", []))} results')
quality_check('CRM', 'best CRM for startups 2026')Ejemplo en JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function qualityCheck(broad, specific) {
const r1 = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H, body: JSON.stringify({platform: 'google', query: broad})
});
const r2 = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H, body: JSON.stringify({platform: 'google', query: specific})
});
console.log(`Broad: ${((await r1.json()).organic_results || []).length} results`);
console.log(`Specific: ${((await r2.json()).organic_results || []).length} results`);
}
qualityCheck('CRM', 'best CRM for startups 2026');Salida esperada
A diagnostic checklist that identifies and fixes Hermes search quality issues through model size checks, tool config improvements, query optimization, and provider comparison.