CommunityProgramación y desarrollogithub.com

GuXing-code/agent-skills-mirror

Skill para consultar información de IA en chino desde aihot.virxact.com. Responde a preguntas como "¿Qué hay hoy en el mundo de la IA?", "HOT de IA", "Noticias de IA" o "¿Qué ha publicado OpenAI/Anthropic/Google recientemente?".

¿Qué es agent-skills-mirror?

Este Skill permite a un agente de IA (como Claude Code, Codex CLI, Cursor, etc.) consultar y presentar las últimas noticias, avances y dinámicas de la industria de la IA en chino, obteniendo los datos de la plataforma aihot.virxact.com. Su principal ventaja es que no requiere ninguna clave API ni configuración de servidor MCP; el agente realiza solicitudes curl directamente a la API REST pública. El Skill maneja de forma inteligente la intención del usuario: por defecto, utiliza la ruta de elementos seleccionados ("selected") para cubrir las noticias más importantes del día, y solo recurre al informe diario ("/api/public/daily") si el usuario menciona explícitamente la palabra "日报" (informe diario). También admite búsquedas por categorías (modelos, productos, industria, papers, consejos), búsqueda por palabras clave, filtrado por ventana de tiempo ("en los últimos 3 días") y paginación. Está diseñado para evitar que el agente use datos de entrenamiento obsoletos como si fueran noticias de hoy, garantizando así información fresca y relevante para el usuario hispanohablante o cualquier usuario que busque noticias de IA en chino.

Compatible con✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI✓OpenCode
npx skills add https://github.com/GuXing-code/agent-skills-mirror/tree/HEAD/aihot

Installed? Explore more Programación y desarrollo skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Skill AI HOT

Permite al agente obtener, en el chino más natural, el informe diario AI HOT y todas las dinámicas de IA de aihot.virxact.com, sin necesidad de abrir un navegador. Sigue el formato estándar SKILL.md y es compatible con Claude Code / Codex CLI / Cursor / Gemini CLI / OpenCode / cualquier plataforma compatible.

En línea: https://aihot.virxact.com (acceso anónimo público, sin token)

Requisito previo: Obligatorio incluir User-Agent (solo para endpoints de API)

/api/public/* utiliza una lista negra de User-Agent en nginx para bloquear rastreadores comerciales. El curl/X.Y User-Agent predeterminado será rechazado con un 403 Forbidden. Todas las llamadas curl a la API deben incluir un User-Agent de navegador:

UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"

# Todas las llamadas curl a la API deben incluir -H "User-Agent: $UA", por ejemplo:
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/daily"

En los ejemplos de la sección "Flujo de trabajo", se asume que ya has definido $UA por brevedad; en la práctica, todas las llamadas deben incluir -H "User-Agent: $UA". No lo olvides. Saltarte este paso te hará pensar que la API no funciona, cuando en realidad solo está siendo bloqueada por el 403.

Aclaración: Este requisito de User-Agent solo aplica a los endpoints de la API /api/public/*. Las rutas de instalación /aihot-skill/{install.sh,SKILL.md,README.md} están explícitamente exentas de la lista negra de User-Agent en nginx (diseñadas para la instalación con curl -fsSL ... | bash), por lo que el User-Agent predeterminado de curl funciona sin problemas. No generalices este requisito a todas las rutas de aihot.virxact.com.

Cuándo usarlo

Prioridad de enrutamiento (primer principio): Por defecto, usa los elementos seleccionados items?mode=selected – es el "menú principal" de AI HOT, cuidadosamente seleccionado cada día, cubriendo los temas que importan al usuario con datos frescos.

  • Usa daily solo si el usuario menciona explícitamente la palabra "日报" (informe diario) – es un producto editorial diario fijo, cortado por día UTC, que no se alinea con ventanas de tiempo deslizantes como "últimas 24 horas / hoy".
  • Usa mode=all solo si el usuario dice explícitamente "全部 / 完整 / 所有 / 全量" (todo/completo/todos/total) – incluye elementos secundarios no seleccionados, muchos pero ruidosos.
  • Preguntas amplias como "¿Qué hay hoy en el mundo de la IA?", "Últimas noticias de las últimas 24 horas", "¿Qué hay de nuevo en IA?" = elementos seleccionados por defecto + ventana de tiempo (since), no uses el informe diario ni all por defecto.

Esto alinea la prioridad semántica del usuario: los elementos seleccionados son el menú principal; el informe diario y all son alternativas que el usuario debe solicitar explícitamente, no opciones predeterminadas.

Lo que dice el usuarioEndpoint a usar
Por defecto (preguntas amplias) : "¿Qué hay hoy en el mundo de la IA?", "Últimas noticias de las últimas 24 horas", "Últimas novedades de IA"GET /api/public/items?mode=selected&since=<ventana de tiempo semántica> (elementos seleccionados por defecto + since para acotar)
Menciona explícitamente "日报" (informe diario) : "Informe diario de IA", "El informe de hoy"GET /api/public/daily (último informe diario)
Dice explícitamente "todo / completo / todos / total" : "Dame todas las novedades de IA de hoy", "Lista completa"GET /api/public/items?mode=all (puede llevar since o no, según el contexto)
"Informe diario de ayer/anteayer", "El informe del 6 de mayo"GET /api/public/daily/{YYYY-MM-DD}
"¿Qué informes diarios hay de los últimos días?", "Lista de informes", "Archivo de informes"GET /api/public/dailies?take=N
"Ver elementos seleccionados", "Lo mejor de AI HOT"GET /api/public/items?mode=selected
"Últimos lanzamientos de modelos", "Lanzamientos de productos de IA", "Dinámicas de la industria", "Papers de IA"GET /api/public/items?mode=selected&category=...&since=<hace 7d> (elementos seleccionados por defecto + categoría)
"Novedades de IA de la última semana", "Lanzamientos de hace 5 días hasta ahora"GET /api/public/items?mode=selected&since=ISO-8601
"Lo último de OpenAI/Anthropic/Google" (por empresa)GET /api/public/items?q=OpenAI (búsqueda por palabras clave del lado del servidor, lanzada el 2026-05-08)
"Relacionado con Sora / GPT-5 / Papers sobre RAG"GET /api/public/items?q=<palabra clave> (coincide en título + título en chino + resumen en chino)

Regla general: Cuando el usuario pregunte sobre hechos actuales de la industria de la IA, no improvises con datos de entrenamiento; usa siempre la API. Aunque "creas" saber la respuesta, verifícala: AI HOT es mucho más reciente que tu fecha de corte de entrenamiento y está enfocada en los temas que interesan a los emprendedores chinos.

Resumen de endpoints

EndpointPropósitoParámetros principales
/api/public/dailyÚltimo informe diarioNinguno
/api/public/daily/{YYYY-MM-DD}Informe diario de una fecha específicapath: date
/api/public/dailiesLista de archivos de informes diariostake (1-180, por defecto 30)
/api/public/itemsTodas las dinámicas de IAmode / category / since / take / cursor / q (palabra clave)

Convenciones:

  • Base URL: https://aihot.virxact.com
  • Autenticación: Ninguna (anónimo)
  • Límite de tasa: 600 req/min/IP (realiza las llamadas en serie, sin ráfagas concurrentes)
  • El parámetro since del endpoint items está limitado a los últimos 7 días: si no se envía, equivale a since=now-7d (valor por defecto del servidor); las fechas anteriores a 7 días se truncan automáticamente a 7 días; las fechas futuras devuelven 400. Por lo tanto, independientemente de cómo se invoque el Skill, la API de items solo devolverá contenido de los últimos 7 días. Para fechas más antiguas, usa GET /api/public/daily/{YYYY-MM-DD} para consultar el archivo de informes diarios.
  • El límite de take es 100; para obtener más, usa cursor para paginar.
  • Especificación completa OpenAPI 3.1: https://aihot.virxact.com/openapi.yaml

Flujo de trabajo

Ruta predeterminada: Obtener elementos seleccionados + ventana de tiempo (primera opción para preguntas amplias)

Los elementos seleccionados son el "menú principal" de AI HOT, seleccionados cuidadosamente cada día, cubriendo todos los eventos importantes de IA, ordenados por fecha de publicación descendente. Para cualquier pregunta amplia como "¿Qué hay hoy en el mundo de la IA?", "Últimas noticias de las últimas 24 horas", "¿Qué hay de nuevo en IA?", usa esto por defecto – comparado con el informe diario: ① ventana de tiempo flexible (24 horas / 3 días / 1 semana, tan estrecha como se desee, alineada con la semántica del usuario) ② datos más frescos (actualización en tiempo real, no cortados por día UTC) ③ sigue siendo de alta calidad (grupo con aiSelected=true, sin elementos secundarios).

# Obtener elementos seleccionados de las últimas 24 horas (cuando el usuario pregunta "últimas noticias de las últimas 24 horas")
since=$(date -u -v-24H +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -d '24 hours ago' +%Y-%m-%dT%H:%M:%SZ)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&since=$since&take=50"

# Obtener los últimos 50 elementos seleccionados (cuando el usuario pregunta "ver elementos seleccionados" / sin ventana de tiempo explícita)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&take=50" \
  | jq '.items[] | {title, source, publishedAt, url}'

Obtener el informe diario (cuando el usuario dice explícitamente "日报")

Palabra clave desencadenante: La frase contiene la palabra "日报" (informe diario) ("Informe diario de IA", "El informe de hoy", "Ver el informe", "El informe del 6 de mayo"). Si la frase no contiene "日报", no uses esta ruta – el informe diario es un producto fijo de un día completo, cortado a las 00:00 UTC, que no se alinea con ventanas de tiempo deslizantes como "últimas 24 horas / hoy".

El informe diario es la "capa de títulos" de AI HOT – se genera automáticamente a las 08:00 hora de Pekín cada día, organizado por temas en secciones (5 secciones fijas). Incluye un párrafo introductorio de "comentario del editor" y es un producto empaquetado por temas.

# Obtener el informe diario de hoy (o el más reciente disponible)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/daily" \
  | jq '{date, lead: .lead.title, sections: [.sections[] | {label, n: (.items | length)}]}'

Obtener el informe diario de una fecha específica

# YYYY-MM-DD, basado en UTC 0
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/daily/2026-05-07"

Listar archivos de informes diarios (descubrimiento)

Si no sabes qué fechas están disponibles, consulta primero el archivo:

# Índice de los últimos N días de informes diarios (sin contenido, solo fecha + título principal)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/dailies?take=14" \
  | jq '.items[] | {date, leadTitle}'

Obtener todo (cuando el usuario dice explícitamente "全部 / 完整 / 所有 / 全量")

Palabra clave desencadenante: La frase contiene "全部" (todo), "完整" (completo), "所有" (todos), "全量" (total), "包括老的" (incluyendo los antiguos) – el usuario quiere ver activamente elementos secundarios no seleccionados (contenido que fue filtrado pero sigue siendo relevante). Si no aparecen estas palabras clave, no uses mode=all – los elementos seleccionados ya cubren la mayoría de los temas que interesan al usuario; el grupo all es grande pero ruidoso.

# Obtener todas las dinámicas de IA de las últimas 24 horas (cuando el usuario pregunta "ver todas las novedades de IA de hoy")
since=$(date -u -v-24H +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -d '24 hours ago' +%Y-%m-%dT%H:%M:%SZ)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=all&since=$since&take=100"

Obtener elementos por categoría

5 categorías (en la API de items se usa el slug en inglés; en la API de informes diarios, la etiqueta de sección es en chino):

items?category=daily.sections[].label
ai-modelsLanzamientos / Actualizaciones de modelos
ai-productsLanzamientos / Actualizaciones de productos
industryDinámicas de la industria
paperInvestigación de papers
tipConsejos y opiniones

Cuando el usuario pregunte "¿Qué ha publicado la cuenta pública recientemente?": La API de items no incluye datos de cuentas públicas (la fuente mp_hot se muestra por separado en la página /mp del frontend). El Skill no puede responder a este tipo de preguntas por ahora; se puede sugerir al usuario que visite https://aihot.virxact.com/mp para ver la página de artículos populares de cuentas públicas.

# Ejemplo: Obtener los últimos 50 papers de IA (elementos seleccionados por defecto + categoría paper)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&category=paper&take=50" \
  | jq '.items[] | {title, source, publishedAt, url}'

# Ejemplo: Lanzamientos de modelos en elementos seleccionados
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&category=ai-models&take=20"

# Excepción: Solo usa mode=all si el usuario dice explícitamente "todos los papers / todos los lanzamientos de modelos"
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=all&category=paper&take=100"

Obtener elementos por ventana de tiempo (últimos N días)

Regla clave: Cuando el usuario pregunte por "últimos X" (últimos lanzamientos de modelos / últimos papers de IA / últimas novedades de OpenAI, etc.), debes incluir el parámetro since para acotar la ventana a la intención real del usuario (si dice "últimos 3 días", usa 3d; "ayer", usa 1d; "última semana", usa 7d).

Valor por defecto del servidor: La API de items tiene un valor predeterminado de since=now-7d (límite superior estricto para proteger el servidor). Por lo tanto, incluso si el Skill no incluye since, solo devolverá contenido de los últimos 7 días, sin elementos antiguos de meses atrás. Sin embargo, se recomienda incluir since explícitamente: ① cuando el usuario pregunta "últimos 3 días", usar 3d explícitamente es más preciso que el valor predeterminado de 7d; ② los metadatos de salida pueden mostrar una ventana de tiempo legible; ③ la intención se alinea claramente con el límite público de "máximo 7 días".

# Obtener lanzamientos de modelos seleccionados de los últimos 7 días (cuando el usuario pregunta "últimos lanzamientos de modelos")
since=$(date -u -v-7d +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -d '7 days ago' +%Y-%m-%dT%H:%M:%SZ)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&category=ai-models&since=$since&take=100"

# Obtener elementos seleccionados de los últimos 3 días (cuando el usuario dice explícitamente "últimos 3 días")
since=$(date -u -v-3d +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -d '3 days ago' +%Y-%m-%dT%H:%M:%SZ)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&since=$since&take=100"

Excepción: Si el usuario dice explícitamente "todos / completos / lista completa / incluyendo los antiguos" → cambia mode a all, puede omitirse since; si el usuario pregunta "ver elementos seleccionados" (ver el grupo seleccionado, no una ventana de tiempo), mantén mode=selected y también puede omitirse since. Pero siempre que la frase contenga "últimos / más recientes / estos dos días / esta semana", incluye since por defecto + mode=selected.

Paginación (cursor)

La respuesta de /api/public/items incluye nextCursor (token opaco). En la siguiente solicitud, pásalo tal cual en el parámetro cursor.

# Página 1
resp1=$(curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=all&take=100")
echo "$resp1" | jq '.items | length'   # 100

# Página 2
cursor=$(echo "$resp1" | jq -r '.nextCursor')
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=all&take=100&cursor=$cursor"

Detén la paginación cuando hasNext = false o nextCursor = null. cursor es un token opaco, trátalo como una caja negra; no intentes analizarlo, incrementarlo ni reutilizarlo entre endpoints.

Búsqueda por palabra clave ("Lo último de OpenAI" / "Relacionado con Sora" / "Papers sobre RAG")

La API admite directamente la búsqueda por palabras clave del lado del servidor: el parámetro q busca con ILIKE en las columnas title + title en chino + summary en chino, usando un índice PostgreSQL pg_trgm GIN (2-6 ms). No uses el patrón "obtener un lote + jq grep del lado del cliente" – eso solo puede encontrar coincidencias dentro de los primeros 100 elementos del grupo; si la palabra clave está más allá de los 100, no se encontrará.

# Buscar lo último de OpenAI (cubre todo el grupo, no solo los primeros 100)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?q=OpenAI&take=30"

# Buscar todas las dinámicas de IA relacionadas con Sora (cualquier título o resumen que contenga Sora)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?q=Sora"

# Buscar papers sobre RAG (categoría + palabra clave)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?category=paper&q=RAG&take=30"

# Palabra clave + ventana de tiempo (elementos seleccionados de Anthropic de los últimos 3 días)
SINCE=$(date -u -v-3d +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -d '3 days ago' +%Y-%m-%dT%H:%M:%SZ)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&q=Anthropic&since=$SINCE"

Restricciones de q:

  • Al menos 2 caracteres (un solo carácter hace que el trigrama GIN se degrade a un escaneo completo de la tabla, por lo que el servidor lo tratará como si no se buscara)
  • Máximo 200 caracteres (se trunca automáticamente si se supera)
  • Se combina ortogonalmente con otros parámetros (mode/category/since/take/cursor); se puede usar "elementos seleccionados + papers + palabra clave + últimos 7 días"
  • Comparte el mismo límite de tasa de 600 r/m que otras solicitudes

Forma de los datos devueltos

Respuesta de /api/public/daily

{
  "date": "2026-05-07",
  "generatedAt": "2026-05-07T00:01:23.456Z",
  "windowStart": "2026-05-06T00:00:00.000Z",
  "windowEnd":   "2026-05-07T00:00:00.000Z",
  "lead": { "title": "...", "leadParagraph": "..." },
  "sections": [
    {
      "label": "模型发布/更新",
      "items": [
        {
          "title": "...",
          "summary": "...",
          "sourceUrl": "https://...",
          "sourceName": "OpenAI Blog"
        }
      ]
    }
  ],
  "flashes": [
    { "title": "...", "sourceName": "...", "sourceUrl": "...", "publishedAt": "..." }
  ]
}

sections[].label tiene 5 valores fijos: "模型发布/更新" / "产品发布/更新" / "行业动态" / "论文研究" / "技巧与观点". lead puede ser null en muy pocos informes diarios.

Respuesta de /api/public/dailies

{
  "count": 14,
  "items": [
    { "date": "2026-05-07", "generatedAt": "...", "leadTitle": "..." }
  ]
}

Respuesta de /api/public/items

{
  "count": 50,
  "hasNext": true,
  "nextCursor": "eyJhIjoxNzE0OTk1MjAwMDAwLCJpIjoiY205eHl6MTIzIn0",
  "items": [
    {
      "id": "cm9abc456def789ghi012jkl3",
      "title": "Título en chino (normalizado)",
      "title_en": "Título original en inglés (solo si es diferente de title; de lo contrario, null)",
      "url": "https://...",
      "source": "OpenAI Blog",
      "publishedAt": "2026-05-07T15:30:00.000Z",
      "summary": "Resumen en chino (generado por LLM)",
      "category": "ai-models"
    }
  ]
}

Invariantes de campo:

  • Siempre presentes: id / title / url / source
  • Pueden ser nulos: title_en / summary / publishedAt / category
  • Valores de category: ai-models / ai-products / industry / paper / tip / null
  • publishedAt: ISO 8601 UTC (con Z)
  • id: cadena cuid (25 caracteres), no asumas que es numérico

Formato de salida para el usuario

⚠️ Principio fundamental: Esta sección es el contenido final que se muestra directamente al usuario – debe estar en formato markdown + bien formateado + en lenguaje comprensible para personas no técnicas. La mayoría de los usuarios son emprendedores de IA no técnicos / diseñadores / lectores generales; deben ver un resumen de noticias en chino, no un registro de depuración de API.

Todos los detalles de infraestructura como "rutas de endpoints / parámetros raw como mode=selected / límite de tasa / caché nginx / cursor / hasNext" no deben aparecer en la salida que ve el usuario. Los metadatos en lenguaje humano (ventana de tiempo / recuento / "ordenado por fecha de publicación descendente") pueden conservarse – criterio de evaluación: ¿Puede el usuario entenderlo directamente? Sí → conservar; No → eliminar.

Salida tipo informe diario (cuando se usa el endpoint daily / daily/{date})

**AI HOT Informe Diario · 2026-05-07**

## Lanzamientos / Actualizaciones de modelos
1. **<título>** — <fuente>
   <resumen simplificado en 50 palabras>
   <url>

## Lanzamientos / Actualizaciones de productos
2. ...

## Dinámicas de la industria
3. ...

## Investigación de papers
4. ...

## Consejos y opiniones
5. ...

## Flash informativo (si flashes tiene contenido)
- <flash.title> — <flash.source> (<flash.publishedAt convertido a lenguaje humano>)

Numeración continua en todo el texto (1, 2, 3 ... N), sin reiniciar en cada ## – así el usuario puede contar de un vistazo "hoy hay 27 elementos".

Salida tipo lista (cuando se usa el endpoint items)

Por defecto, agrupar por categoría + numeración global – los usuarios ya tienen una expectativa formada (por los informes diarios) de la estructura de cinco bloques: "modelos/productos/industria/papers/consejos". Al mezclar categorías, esta estructura es la más natural:

**AI HOT — Últimos 30 elementos seleccionados**

## Lanzamientos / Actualizaciones de modelos
1. **<título>** — <fuente>
   Hace 2 horas
   <resumen>
   <url>

## Lanzamientos / Actualizaciones de productos
2. **<título>** — <fuente>
   ...

3. ...

## Dinámicas de la industria
4. ...

Cuando solo hay 1 categoría (el usuario dice explícitamente "Papers de IA" / "Lanzamientos de modelos", etc.), usa una lista plana numerada:

**AI HOT — Papers de IA de la última semana** (2026-05-01 ~ 2026-05-08)

1. **<título>** — <fuente>
   <resumen>
   <url>

2. ...

Subtítulos / Metadatos solo en lenguaje humano

OK (el usuario lo entiende directamente):

  • "Ventana de tiempo: 2026-05-05 ~ 2026-05-07"
  • "Todos los elementos que coinciden con la palabra clave OpenAI en los últimos 3 días"
  • "Ordenado por fecha de publicación descendente"
  • "Total: 50 elementos"
  • "El informe diario de hoy 5/8 se genera después de las 08:00 hora de Pekín; por ahora, consulta la edición del 5/7"

NO OK (fuga de infraestructura, no escribirlo bajo ninguna circunstancia):

  • ❌ mode=selected / category=paper / take=30 (nombres de parámetros raw)
  • ❌ Ruta de endpoint /api/public/items?since=2026-04-30T18:39:31Z&take=50
  • ❌ "Límite de tasa 600 req/min" / "Caché nginx 60s" / "x-nginx-cache: HIT"
  • ❌ "cursor" / "hasNext=true" / "necesita paginación con cursor o reducir la ventana since"
  • ❌ Cualquier código de estado HTTP / estado de caché / descripción de mecanismo interno

La fuente de datos puede mencionarse como máximo en una frase: "Datos de aihot.virxact.com", o simplemente omitirse (el usuario ya sabe la fuente cuando usa el Skill).

Convertir tiempo a lenguaje humano

publishedAt está en ISO 8601 UTC. Al mostrarlo, debes convertirlo a hora de Pekín + tiempo relativo/absoluto que el usuario pueda escanear rápidamente:

Valor internoMostrar al usuario
2026-05-08T01:48:00.000Z"Hoy a las 09:48" / "Hace 2 horas"
2026-05-07T18:08:17.000Z"Hoy a las 02:08" / "Hace 10 horas"
2026-05-06T16:43:00.000Z"5/7 00:43" / "Ayer"

No muestres directamente cadenas ISO como 2026-05-07T15:30:00.000Z – el usuario no las entiende.

title vs title_en

Por defecto, muestra title (normalizado en chino). title_en solo se usa en los siguientes casos:

  • El usuario solicita explícitamente la versión en inglés ("Muéstramelo en inglés")
  • title está vacío (muy raro)

No muestres ambos juntos.

Manejo de errores comunes

  • {"error":"No daily report available yet."} (HTTP 404): El informe diario del día aún no se ha generado (antes de las 08:00 hora de Pekín). Sugerencia: Obtén el informe diario de ayer con curl /api/public/daily/{fecha de ayer}
  • {"error":"Invalid date format..."} (HTTP 400): La fecha debe estar en formato YYYY-MM-DD, basada en UTC
  • Errores 400 comunes del endpoint items:
    • "invalid mode (must be 'selected' or 'all')"
    • "invalid category (must be one of: ai-models, ai-products, industry, paper, tip)"
    • "invalid since (must be ISO date, not in future)"
    • "invalid take (must be integer 1-100)"
  • HTTP 429 (límite de tasa): Supera las 600 req/min por IP. Realiza las llamadas en serie y añade un intervalo de 200 ms entre páginas.

Lo que NO debes hacer

  • No enrutes preguntas amplias como "¿Qué hay hoy en el mundo de la IA?", "Últimas noticias de las últimas 24 horas", "¿Qué hay de nuevo en IA?" al endpoint daily – estas son ventanas de tiempo deslizantes; daily es un producto fijo de un día completo, cortado a las 00:00 UTC (5/6-5/7 todo el día), cuya precisión temporal no coincide. Por defecto, usa mode=selected + since=<ventana semántica>. Solo usa daily si el usuario menciona explícitamente la palabra "日报" (informe diario).
  • No uses mode=all por defecto cuando el usuario no ha dicho "全部 / 完整 / 所有 / 全量" – los elementos seleccionados ya cubren la mayoría de los temas que interesan al usuario; el grupo all es grande pero ruidoso, con elementos secundarios no seleccionados. Por defecto, usa mode=selected; solo cambia a mode=all si el usuario lo solicita explícitamente.
  • No intentes adivinar / inventar contenido – cíñete siempre a lo que devuelve la API.
  • No cites el resumen (summary) como si fuera el texto original – el resumen es generado por un LLM; para citar, consulta la url / sourceUrl original.
  • No hagas sondeos de alta frecuencia – el informe diario solo se actualiza una vez al día a las 08:00; el endpoint items tiene un caché del lado del servidor de 5 minutos; no es necesario volver a llamar a la API si el usuario hace la misma pregunta.
  • No hagas ráfagas concurrentes de paginación – hazlo en serie con intervalos naturales.
  • No intentes analizar / incrementar / reutilizar el cursor entre endpoints – es un token opaco cuyo formato interno es inestable y podría cambiar sin previo aviso.
  • Para consultas por empresa / palabra clave, usa la búsqueda del lado del servidor ?q=<término>. No uses el patrón "obtener un lote + jq grep del lado del cliente" (solo puede ver los primeros 100 elementos del grupo, lo que puede provocar pérdidas).
  • Cuando el usuario pregunte por "últimos N días de X", incluye explícitamente since=<hace N días> (intención clara + los metadatos pueden mostrar una ventana de tiempo legible). Si no se incluye since, el servidor usará 7d por defecto, por lo que no se obtendrán elementos antiguos, pero si el usuario pregunta "últimos 3 días" y el servidor usa 7d por defecto, se incluirán 4 días adicionales de contenido.
  • No expongas en la salida del usuario las rutas de endpoints / parámetros raw / límite de tasa / TTL de caché / cursor / hasNext ni otros detalles de infraestructura – estos son para desarrolladores, el usuario no los entiende. Consulta la sección anterior "Formato de salida para el usuario → Subtítulos / Metadatos solo en lenguaje humano".
  • No pierdas información al comprimir / combinar salidas entre días / entre secciones – la numeración continua (1, 2, 3... N) es una característica clave que permite al usuario contar el total de un vistazo. Al fusionar múltiples respuestas de paginación o múltiples respuestas de categorías, asegúrate de que los números sean globalmente consecutivos.

Notas adicionales

  • Mecanismo anti-hotlinking de imágenes: Las imágenes en aihot.virxact.com (como capturas de pantalla de WeChat / tarjetas de productos) pueden tener protección anti-hotlinking del lado del servidor. Si en la salida del Skill se incluye una imagen que no se carga, significa que el dominio referente no está en la lista blanca. No es necesario solucionarlo; simplemente omite la imagen o muestra solo el enlace de texto.
  • Actualizaciones de la especificación de la API: Siempre que sea posible, el Skill debe priorizar la consulta dinámica de /api/public/items en lugar de codificar de forma rígida el comportamiento. El servidor de AI HOT se actualiza con frecuencia; los parámetros de la API y los campos de respuesta pueden cambiar. Confía en el comportamiento en tiempo real del servidor en lugar de asumir un comportamiento fijo basado en esta documentación.
  • Compatibilidad con múltiples plataformas: Este Skill se adhiere al estándar SKILL.md. Se ha probado en Claude Code, Codex CLI, Cursor, Gemini CLI y OpenCode. Si encuentras un comportamiento inconsistente en alguna plataforma (por ejemplo, falla al analizar jq o restricciones de date), puedes informar del problema en el repositorio de GitHub.
  • Consideraciones de idioma: Aunque AI HOT se enfoca en contenido en chino, los datos subyacentes (como title_en, sourceUrl) pueden contener caracteres no chinos (inglés, japonés, etc.). Cuando el usuario pregunte en un idioma distinto al chino, el Skill puede intentar devolver el campo title_en correspondiente (si existe), o simplemente devolver el contenido en chino. No realices una traducción automática al idioma del usuario, a menos que el usuario lo solicite explícitamente.

Skills relacionados