CommunityCodierung & Entwicklunggithub.com

AI HOT (aihot.virxact.com) — Chinesische AI-News-Skill

Mit diesem Skill können Agenten tägliche AI-HOT-News und alle AI-Dynamiken von aihot.virxact.com direkt in natürlichem Chinesisch abrufen, ohne einen Browser öffnen zu müssen. Für Claude Code, Codex CLI, Cursor, Gemini CLI, OpenCode und andere kompatible Plattformen.

Was ist AI HOT (aihot.virxact.com) — Chinesische AI-News-Skill?

Dieser Skill ermöglicht es AI-Agenten (wie Claude Code, Cursor, Codex CLI, Gemini CLI, OpenCode), direkt über die öffentliche REST-API von aihot.virxact.com die aktuellsten chinesischen AI-News, tägliche Zusammenfassungen (AI HOT 日报) und branchenspezifische Dynamiken abzurufen, ohne dass API-Keys oder MCP-Server konfiguriert werden müssen. Der Skill behandelt alle typischen chinesischen Anfragen, wie "Was gibt es Neues im AI-Bereich?", "AI-Tagesbericht", "AI-HOT", "Neueste OpenAI/Anthropic/Google-Ankündigungen" oder "AI-Industriedynamiken". Er unterstützt verschiedene Endpunkte: `GET /api/public/daily` für den täglichen Bericht, `GET /api/public/items` für gefilterte oder alle Dynamiken (mit Parametern wie `mode`, `category`, `since`, `q` für Schlagwörter, `cursor` für Paginierung) und `GET /api/public/items?mode=selected` für kuratierte Top-News. Die Ausgabe wird automatisch als formatierte chinesische Markdown-Zusammenfassung aufbereitet, wobei die Antwortzeit und die Relevanz durch serverseitige Optimierungen (z.B. PostgreSQL pg_trgm GIN-Index für Schlagwörter) sichergestellt werden. Der Skill ist so konzipiert, dass er spezifische Anweisungen des Benutzers befolgt: breite Fragen ("Was ist heute los im AI-Bereich?") standardmäßig mit kuratierten + Zeitfenster behandelt, nur bei expliziter Nennung von "日报" den täglichen Bericht verwendet und nur bei der Angabe "全部/Alles" alle Einträge abruft.

Funktioniert mit✓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 Codierung & Entwicklung skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

AI HOT Skill

Lasse den Agenten mit natürlichem Chinesisch die täglichen AI-HOT-News und alle AI-Dynamiken von aihot.virxact.com abrufen, ohne einen Browser zu öffnen. SKILL.md-Standardformat, kompatibel mit Claude Code / Codex CLI / Cursor / Gemini CLI / OpenCode / jeder kompatiblen Plattform.

Online unter: https://aihot.virxact.com (öffentlich anonym erreichbar, kein Token erforderlich)

Voraussetzung: User-Agent muss gesetzt werden (nur API-Endpunkte)

/api/public/* verwendet eine nginx-UA-Blacklist gegen kommerzielle Crawler. Das Standard-curl/X.Y-UA wird mit 403 Forbidden blockiert. Bei API-Aufrufen muss jeder curl einen Browser-UA enthalten:

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"

# Alle nachfolgenden API-curl-Aufrufe mit -H "User-Agent: $UA", z.B.:
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/daily"

Die curl-Beispiele im Abschnitt "Workflow" gehen der Kürze halber davon aus, dass $UA bereits gesetzt ist – tatsächliche Aufrufe müssen -H "User-Agent: $UA" enthalten. Nicht vergessen. Das Auslassen führt zu 403-Fehlern, die fälschlicherweise als API-Ausfall interpretiert werden.

Klarstellung: Diese UA-Anforderung gilt nur für /api/public/*-API-Endpunkte. Die Installations-Einstiegspunkte /aihot-skill/{install.sh,SKILL.md,README.md} sind auf nginx bewusst von der UA-Blacklist ausgenommen (Voraussetzung für curl -fsSL ... | bash zur Einzeiler-Installation) und werden mit default curl-UA direkt mit 200 beantwortet. Verallgemeinere die "Voraussetzung" nicht auf alle aihot.virxact.com-Pfade.

Wann verwenden

Routing-Priorität (Erstes Prinzip): Standardmäßig die kuratierten Nachrichten items?mode=selected – das ist das "Hauptmenü" mit den täglich handverlesenen AI-HOT-Nachrichten, das alle relevanten Themen abdeckt und frische Daten liefert.

  • Nur wenn der Benutzer explizit "日报" (Tagesbericht) sagt, den daily-Endpunkt verwenden (redaktionell fertiggestellt, in UTC-Ganztagesscheiben, die nicht mit rollierenden Zeitfenstern wie "letzte 24 Stunden / heute" übereinstimmen)
  • Nur wenn der Benutzer explizit "全部 / 完整 / 所有 / 全量" (alle / komplett / alle / vollständig) sagt, mode=all verwenden (enthält auch nicht kuratierte, sekundäre Einträge – viele, aber unübersichtlich)
  • Bei breiten Fragen wie "Was gibt es heute Neues in der AI-Welt?", "Große Neuigkeiten der letzten 24 Stunden", "Was gibt es Neues in der AI-Welt?" = Standardmäßig kuratiert + Zeitfenster (since), nicht standardmäßig den Tagesbericht oder alles verwenden

Dies entspricht der semantischen Priorität des Benutzers: Kuratiert ist das Hauptmenü, Tagesbericht und Alle sind Optionen auf Bestellung des Benutzers und sollten nicht die Standardeinstellung sein.

Benutzer sagtZu verwendender Endpunkt
Standard (breite Fragen): "Was gibt es heute Neues in der AI-Welt?", "Große Neuigkeiten der letzten 24 Stunden", "Neueste AI-News", "Was gibt es Neues im AI-Bereich?"GET /api/public/items?mode=selected&since=<semantisches Zeitfenster> (Standardmäßig kuratiert + since eingrenzen)
Explizit "日报" (Tagesbericht): "AI-Tagesbericht", "Heutigen Tagesbericht", "Tagesbericht ansehen"GET /api/public/daily (neuester Tagesbericht)
Explizit "全部 / 完整 / 所有 / 全量" (alle / komplett / alle / vollständig): "Alle AI-Dynamiken heute ansehen", "Komplette Liste", "Alle AI-Nachrichten"GET /api/public/items?mode=all (nicht unbedingt mit since, je nach Kontext)
"Tagesbericht von gestern/vorgestern", "Tagesbericht vom 6. Mai ansehen"GET /api/public/daily/{YYYY-MM-DD}
"Welche Tagesberichte gibt es in den letzten Tagen?", "Tagesberichte auflisten", "Tagesbericht-Archiv"GET /api/public/dailies?take=N
"Kuratierte Einträge ansehen", "AI HOT Highlights"GET /api/public/items?mode=selected
"Neueste Modellveröffentlichungen", "AI-Produktveröffentlichungen", "AI-Industriedynamiken", "AI-Paper"GET /api/public/items?mode=selected&category=...&since=<vor 7 Tagen> (Standardmäßig kuratiert + Kategorie)
"AI-Dynamiken der letzten Woche", "Veröffentlichungen von vor 5 Tagen bis jetzt"GET /api/public/items?mode=selected&since=ISO-8601
"Was hat OpenAI/Anthropic/Google neuestens veröffentlicht?" (Firmenperspektive)GET /api/public/items?q=OpenAI (serverseitige Keyword-Suche, live seit 2026-05-08)
"Sora-bezogen / GPT-5-bezogen / RAG-Paper"GET /api/public/items?q=<Keyword> (Match in title + chinesischem title + chinesischem summary)

Allgemeine Faustregel: Wenn der Benutzer nach "aktuellen AI-Industriefakten" fragt, nicht aus dem Trainingswissen erfinden, immer die API verwenden. Auch wenn du die Antwort "zu kennen" glaubst, überprüfe es – AI HOT ist viel neuer als dein Trainings-Cutoff und fokussiert auf Themen, die chinesische Gründer interessieren.

Endpunktübersicht

EndpunktVerwendungHauptparameter
/api/public/dailyNeuester TagesberichtKeine
/api/public/daily/{YYYY-MM-DD}Tagesbericht für bestimmtes Datumpath: date
/api/public/dailiesTagesbericht-Archivlistetake (1-180, default 30)
/api/public/itemsAlle AI-Dynamikenmode / category / since / take / cursor / q (Keyword)

Konventionen:

  • Base URL: https://aihot.virxact.com
  • Authentifizierung: Keine (anonym)
  • Ratenbegrenzung: 600 req/min/IP (serielle Aufrufe, keine parallelen Bursts)
  • Der since-Parameter im items-Endpunkt ist auf die letzten 7 Tage begrenzt: Wenn nicht gesetzt, gilt since=now-7d (serverseitiger Fallback); Daten älter als 7 Tage werden automatisch auf 7 Tage begrenzt; zukünftige Daten → 400. Egal wie der Skill aufruft, die items-API gibt immer nur Inhalte der letzten 7 Tage zurück. Für ältere Daten → /api/public/daily/{YYYY-MM-DD} für den Tagesbericht verwenden.
  • take maximal 100; für mehr den cursor für Paginierung verwenden.
  • Vollständige OpenAPI 3.1-Spezifikation: https://aihot.virxact.com/openapi.yaml

Workflow

Standardpfad: Kuratiert + Zeitfenster (Erste Wahl für breite Fragen)

Kuratiert = Das täglich handverlesene "Hauptmenü" von AI HOT – deckt alle großen AI-Ereignisse ab, sortiert nach Veröffentlichungszeit absteigend. Jede breite Frage wie "Was gibt es heute in der AI-Welt?", "Große Neuigkeiten der letzten 24 Stunden", "Neueste AI-News" verwendet standardmäßig diesen Pfad – im Vergleich zum Tagesbericht: ① Zeitfenster flexibel (24 Stunden / 3 Tage / 1 Woche, genau nach Benutzerwunsch) ② Aktuelle Daten (Echtzeit-Rolling, keine UTC-Ganztagesscheibe) ③ Hohe Qualität (Pool mit aiSelected=true, enthält keine sekundären Einträge).

# Letzte 24 Stunden kuratiert (Benutzer fragt "Große Neuigkeiten der letzten 24 Stunden")
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"

# Letzte 50 kuratierte Einträge (Benutzer fragt "Kuratierte ansehen" / ohne explizites Zeitfenster)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&take=50" \
  | jq '.items[] | {title, source, publishedAt, url}'

Tagesbericht abrufen (nur wenn der Benutzer explizit "日报" (Tagesbericht) sagt)

Schlüsselwort: Das Wort "日报" (Tagesbericht) muss im Satz vorkommen ("AI-Tagesbericht", "Heutigen Tagesbericht", "Tagesbericht ansehen", "Tagesbericht vom 6. Mai"). Wenn "日报" nicht im Satz ist, diesen Endpunkt nicht verwenden – Der Tagesbericht ist ein festes Tagesprodukt, das um UTC 0 Uhr geschnitten wird, und stimmt nicht mit rollierenden Zeitfenstern wie "letzte 24 Stunden / heute" überein.

Der Tagesbericht ist die "Schlagzeilenebene" von AI HOT – wird täglich um 08:00 Uhr Pekinger Zeit automatisch generiert und nach Themen in Abschnitte unterteilt (5 feste Abschnitte). Er enthält einen einleitenden Absatz mit "Chefredakteurskommentar".

# Heutigen (oder neuesten verfügbaren) Tagesbericht abrufen
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/daily" \
  | jq '{date, lead: .lead.title, sections: [.sections[] | {label, n: (.items | length)}]}'

Tagesbericht für ein bestimmtes Datum abrufen

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

Tagesbericht-Archiv auflisten (Discovery)

Wenn nicht bekannt ist, welche Daten verfügbar sind, zuerst das Archiv ansehen:

# Index der letzten N Tagesberichte (ohne Text, nur Datum + Schlagzeilentitel)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/dailies?take=14" \
  | jq '.items[] | {date, leadTitle}'

Alle abrufen (nur wenn der Benutzer explizit "全部 / 完整 / 所有 / 全量" (alle / komplett / alle / vollständig) sagt)

Schlüsselwörter: "全部" (alle), "完整" (komplett), "所有" (alle), "全量" (vollständig), "包括老的" (inkl. alter) – Der Benutzer möchte bewusst auch sekundäre Einträge sehen, die nicht kuratiert wurden (relevant, aber nicht im Hauptmenü). Wenn diese Schlüsselwörter fehlen, nicht mode=all verwenden – Kuratiert deckt bereits die meisten relevanten Themen ab; der "Alle"-Pool ist groß, aber unübersichtlich.

# Alle AI-Dynamiken der letzten 24 Stunden (Benutzer fragt "Alle AI-Dynamiken heute ansehen")
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"

Nach Kategorie abrufen

5 Kategorien (items-API verwendet englische Slugs, der Abschnittstitel in der daily-API ist Chinesisch):

items?category=daily.sections[].label
ai-modelsModellveröffentlichung/-update
ai-productsProduktveröffentlichung/-update
industryBranchendynamik
paperForschungsarbeiten
tipTipps & Meinungen

Wenn der Benutzer fragt "Was hat der öffentliche Account (公众号) neuestens gepostet?": Die items-API enthält keine öffentlichen Account-Inhalte (die mp_hot-Quelle wird separat über die /mp-Seite im Frontend bedient). Der Skill kann diese Frage derzeit nicht beantworten. Hinweis an den Benutzer: "Besuche https://aihot.virxact.com/mp für die Seite mit viralen Artikeln aus öffentlichen Accounts."

# Beispiel: Letzte 50 AI-Paper (Standardmäßig kuratiert + Kategorie 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}'

# Beispiel: Modellveröffentlichungen aus Kuratiert
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&category=ai-models&take=20"

# Ausnahme: Wenn der Benutzer explizit "Alle Paper / Alle Modellveröffentlichungen" sagt, dann `mode=all` verwenden
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=all&category=paper&take=100"

Nach Zeitfenster abrufen (Letzte N Tage)

Wichtige Regel: Wenn der Benutzer nach "letzten X" fragt (letzte Modellveröffentlichungen / letzte AI-Paper / letztes OpenAI etc.), muss der since-Parameter verwendet werden, um das Fenster auf die tatsächliche Absicht einzugrenzen ("letzten 3 Tage" → 3d, "gestern" → 1d, "letzte Woche" → 7d).

Serverseitiger Fallback: Die items-API verwendet serverseitig standardmäßig since=now-7d (harte Obergrenze zum Schutz des Servers), sodass selbst wenn der Skill since ganz weglässt, nur Inhalte der letzten 7 Tage zurückgegeben werden. Es wird dennoch empfohlen, since explizit zu setzen: ① Wenn der Benutzer nach "letzten 3 Tagen" fragt, ist ein explizites 3d genauer als der serverseitige Standard von 7d. ② Die Metadatenausgabe kann ein lesbares Zeitfenster enthalten. ③ Die Absicht ist klar und entspricht der öffentlich kommunizierten "maximal 7 Tage".

# Letzte 7 Tage kuratierte Modellveröffentlichungen (Benutzer fragt "Letzte Modellveröffentlichungen")
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"

# Letzte 3 Tage kuratierte Dynamiken (Benutzer sagt explizit "letzten 3 Tage")
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"

Ausnahme: Wenn der Benutzer explizit "全量 / 所有 / 完整列表 / 包括老的" (alle / alle / komplette Liste / inkl. alter) sagt → mode auf all setzen, kann since weglassen werden; wenn der Benutzer "Kuratierte ansehen" (den kuratierten Pool sehen, kein Zeitfenster) sagt, kann mode auf selected bleiben und since weggelassen werden. Aber solange der Satz "最近 / 最新 / 这两天 / 这周" (letzte / neueste / diese zwei Tage / diese Woche) enthält, standardmäßig since + mode=selected verwenden.

Paginierung (cursor)

Die Antwort von /api/public/items enthält nextCursor (opaque token). Bei der nächsten Anfrage wird dieser unverändert als cursor-Parameter übergeben.

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

# Seite 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"

Wenn hasNext = false oder nextCursor = null, mit der Paginierung aufhören. Der cursor ist ein opaque Token, als Blackbox behandeln. Nicht versuchen, ihn zu parsen, zu erhöhen oder zwischen Endpunkten wiederzuverwenden.

Keyword-Suche ("Was hat OpenAI neuestens veröffentlicht?" / "Sora-bezogen" / "RAG-Paper")

Die API unterstützt direkt die serverseitige Keyword-Suche – der q-Parameter matched ILIKE über die drei Spalten title + chinesischer title + chinesischer summary, mit PostgreSQL pg_trgm GIN-Index (2-6ms). Nicht mehr das "Batch abrufen + clientseitiges jq grep"-Muster verwenden – das erfasst nur Treffer im Pool der ersten 100 Einträge; wenn das Keyword außerhalb dieser 100 liegt, wird es nicht gefunden.

# OpenAI neuestens gefunden (deckt den gesamten Pool ab, nicht nur die ersten 100)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?q=OpenAI&take=30"

# Alle AI-Dynamiken zu Sora (jeder Titel oder Zusammenfassung, der Sora enthält)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?q=Sora"

# RAG-Paper (Kategorie + Keyword)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?category=paper&q=RAG&take=30"

# Keyword + Zeitfenster (Anthropic letzte 3 Tage kuratiert)
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"

q-Einschränkungen:

  • Mindestens 2 Zeichen (Einzelzeichen-GIN-Trigramm wird zum Full-Table-Scan und serverseitig als "keine Suche" behandelt)
  • Maximal 200 Zeichen (wird automatisch abgeschnitten)
  • Kann orthogonal mit anderen Parametern (mode/category/since/take/cursor) kombiniert werden, z.B. "kuratiert + Paper + Keyword + innerhalb von 7 Tagen"
  • Teilt sich das 600r/m-Ratenlimit mit anderen Anfragen

Format der zurückgegebenen Daten

Antwort von /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": "Modellveröffentlichung/-update",
      "items": [
        {
          "title": "...",
          "summary": "...",
          "sourceUrl": "https://...",
          "sourceName": "OpenAI Blog"
        }
      ]
    }
  ],
  "flashes": [
    { "title": "...", "sourceName": "...", "sourceUrl": "...", "publishedAt": "..." }
  ]
}

sections[].label ist auf 5 festgelegt: "Modellveröffentlichung/-update" / "Produktveröffentlichung/-update" / "Branchendynamik" / "Forschungsarbeiten" / "Tipps & Meinungen". lead ist bei sehr wenigen Tagesberichten null.

Antwort von /api/public/dailies

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

Antwort von /api/public/items

{
  "count": 50,
  "hasNext": true,
  "nextCursor": "eyJhIjoxNzE0OTk1MjAwMDAwLCJpIjoiY205eHl6MTIzIn0",
  "items": [
    {
      "id": "cm9abc456def789ghi012jkl3",
      "title": "Chinesischer Titel (normalisiert)",
      "title_en": "Originaler englischer Titel (nur vorhanden, wenn anders als title, sonst null)",
      "url": "https://...",
      "source": "OpenAI Blog",
      "publishedAt": "2026-05-07T15:30:00.000Z",
      "summary": "Chinesische Zusammenfassung (LLM-generiert)",
      "category": "ai-models"
    }
  ]
}

Feld-Invarianten:

  • Immer vorhanden: id / title / url / source
  • Kann null sein: title_en / summary / publishedAt / category
  • category-Werte: ai-models / ai-products / industry / paper / tip / null
  • publishedAt: ISO 8601 UTC (mit Z)
  • id: CUID-String (25 Zeichen), nicht als Zahl annehmen

Ausgabeformat für den Benutzer

⚠️ Kernprinzip: Dieser Abschnitt ist der direkt dem Benutzer präsentierte finale Inhalt – muss als Markdown formatiert, gut lesbar und für normale Menschen verständlich sein. Die Benutzer sind meist nicht-technische AI-Gründer / Designer / normale Leser, die eine chinesische Informationszusammenfassung erwarten, kein API-Debug-Log.

Alle Infrastrukturdetails wie "Endpunktpfade / mode=selected raw-Parameter / Ratenbegrenzung / nginx-Cache / cursor / hasNext" dürfen nicht in der für den Benutzer sichtbaren Ausgabe erscheinen. Lesbare Metadaten (Zeitfenster / Anzahl Einträge / "Absteigend nach Veröffentlichungszeit") können bleiben – Entscheidungskriterium: Kann der Benutzer es direkt verstehen? Ja → behalten; Nein → entfernen.

Tagesbericht-Format (bei Verwendung von daily / daily/{date}-Endpunkten)

**AI HOT Tagesbericht · 2026-05-07**

## Modellveröffentlichung/-update
1. **<title>** — <source>
   <summary vereinfacht, max. 50 Zeichen>
   <url>

## Produktveröffentlichung/-update
2. ...

## Branchendynamik
3. ...

## Forschungsarbeiten
4. ...

## Tipps & Meinungen
5. ...

## Kurznachrichten (wenn flashes Inhalt haben)
- <flash.title> — <flash.source> (<flash.publishedAt in lesbare Zeit umgewandelt>)

Durchgehende Nummerierung (1, 2, 3 ... N), nicht innerhalb jedes ## neu beginnen – so kann der Benutzer auf einen Blick sehen: "Heute 27 Einträge".

Listenformat (bei Verwendung von items-Endpunkten)

Standardmäßig nach Kategorie gruppiert + globale Nummerierung – Benutzer haben eine Erwartung an die fünf Kategorien (Modelle/Produkte/Branche/Paper/Tipps) aus den Tagesberichten. Bei gemischten Kategorien ist dieses Format am natürlichsten:

**AI HOT — Letzte 30 kuratierte Einträge**

## Modellveröffentlichung/-update
1. **<title>** — <source>
   Vor 2 Stunden
   <summary>
   <url>

## Produktveröffentlichung/-update
2. **<title>** — <source>
   ...

3. ...

## Branchendynamik
4. ...

Nur 1 Kategorie (Benutzer sagt explizit "AI-Paper"/"Modellveröffentlichungen" etc.), flache nummerierte Liste verwenden:

**AI HOT — AI-Paper der letzten Woche** (2026-05-01 ~ 2026-05-08)

1. **<title>** — <source>
   <summary>
   <url>

2. ...

Untertitel / Metadaten nur in lesbarer Form schreiben

OK (Benutzer kann es direkt verstehen):

  • "Zeitfenster: 2026-05-05 ~ 2026-05-07"
  • "Alle Einträge der letzten 3 Tage mit dem Schlüsselwort OpenAI"
  • "Absteigend nach Veröffentlichungszeit"
  • "Insgesamt 50 Einträge"
  • "Der heutige Tagesbericht (5/8) wird erst nach 08:00 Uhr Pekinger Zeit generiert. Zuerst die Ausgabe vom 5/7 ansehen."

Nicht OK (Infrastruktur-Leak, unbedingt vermeiden):

  • ❌ mode=selected / category=paper / take=30 (raw-Parameternamen)
  • ❌ Endpunktpfad /api/public/items?since=2026-04-30T18:39:31Z&take=50
  • ❌ "Ratenbegrenzung 600 req/min" / "nginx-Cache 60s" / "x-nginx-cache: HIT"
  • ❌ "cursor" / "hasNext=true" / "Paginierung mit cursor oder Verkleinerung des since-Fensters erforderlich"
  • ❌ Jegliche HTTP-Statuscodes / Cache-Status / Backend-Mechanismusbeschreibungen

Datenquelle maximal ein Satz: "Daten von aihot.virxact.com" oder gar nicht erwähnen (der Benutzer weiß bereits, woher die Daten kommen, wenn er den Skill nutzt).

Zeit in lesbare Form umwandeln

publishedAt ist ISO 8601 UTC. Bei der Anzeige muss in Pekinger Zeit + relative/absolute Zeit umgewandelt werden, die der Benutzer schnell erfassen kann:

Interner WertAnzeige für Benutzer
2026-05-08T01:48:00.000Z"Heute Morgen 09:48" / "Vor 2 Stunden"
2026-05-07T18:08:17.000Z"Heute früh um 02:08" / "Vor 10 Stunden"
2026-05-06T16:43:00.000Z"7.5. 00:43" / "Gestern"

Nicht direkt 2026-05-07T15:30:00.000Z anzeigen – der Benutzer versteht das nicht.

title vs title_en

Standardmäßig title (chinesisch normalisiert) ausgeben. title_en nur in folgenden Fällen verwenden:

  • Benutzer fordert explizit die englische Version ("Zeig mir das auf Englisch")
  • title ist leer (sehr selten)

Nicht beide anzeigen.

Häufige Fehlerbehandlung

  • {"error":"No daily report available yet."} (HTTP 404): Der Tagesbericht für den aktuellen Tag wurde noch nicht generiert (vor 08:00 Uhr Pekinger Zeit). Empfehlung: Den Tagesbericht von gestern abrufen: curl /api/public/daily/{gestriges Datum}
  • {"error":"Invalid date format..."} (HTTP 400): Das Datum muss YYYY-MM-DD sein, UTC-Basis
  • Häufige 400-Fehler bei items-Endpunkten:
    • "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 (Ratenbegrenzung): Einzel-IP überschreitet 600 req/min. Serielle Aufrufe + 200ms Pause bei Paginierung einhalten.

Nicht tun

  • Breite Fragen wie "Was gibt es heute in der AI-Welt?", "Große Neuigkeiten der letzten 24 Stunden", "Neueste AI-News" nicht an den daily-Endpunkt routen – Diese sind rollierende Zeitfenster; daily ist ein festes Tagesprodukt (UTC-0-Scheibe für den gesamten Tag 5/6-5/7), die zeitliche Genauigkeit passt nicht. Standardmäßig mode=selected + since=<semantisches Fenster> verwenden. Nur wenn der Benutzer explizit "日报" (Tagesbericht) sagt, den daily-Endpunkt verwenden.
  • Nicht standardmäßig mode=all verwenden, wenn der Benutzer nicht "全部 / 完整 / 所有 / 全量" (alle / komplett / alle / vollständig) sagt – Kuratiert deckt bereits die meisten relevanten Themen ab; der "Alle"-Pool ist groß, aber unübersichtlich (enthält nicht kuratierte sekundäre Einträge). Standardmäßig mode=selected, nur auf Bestellung des Benutzers "全部" (alle) zu mode=all wechseln.
  • Nicht versuchen, Inhalte zu erraten / zu erfinden – immer die API-Antwort als Quelle verwenden.
  • Zusammenfassungen (summary) nicht als Originaltext zitieren – Zusammenfassungen werden vom LLM generiert, für Zitate die url / sourceUrl zur Überprüfung verwenden.
  • Keine Hochfrequenz-Polling – Der Tagesbericht wird nur einmal täglich um 08:00 Uhr aktualisiert; der items-Endpunkt hat einen serverseitigen Cache von 5 Minuten. Bei wiederholten Benutzerfragen muss die API nicht erneut aufgerufen werden.
  • Keine parallelen Bursts bei Paginierung – Serielle Aufrufe mit natürlichen Pausen.
  • Nicht versuchen, cursor zu parsen / zu erhöhen / zwischen Endpunkten wiederzuverwenden – Es ist ein opaque Token, dessen internes Format instabil ist und ohne Ankündigung geändert werden kann.
  • Für firmenbezogene / Keyword-Abfragen die serverseitige ?q=<Wort>-Suche verwenden, nicht "Batch abrufen + clientseitiges jq grep" (das erfasst nur den Pool der ersten 100 Einträge und verpasst Treffer).
  • Wenn der Benutzer nach "letzten N Tagen X" fragt, explizit since=<N Tage zuvor> setzen (Absicht klar + Metadaten können ein lesbares Zeitfenster enthalten). Ohne since greift der serverseitige Standard von 7d, sodass keine alten Einträge zurückgegeben werden. Aber wenn der Benutzer nach "letzten 3 Tagen" fragt, würde der serverseitige Standard von 7d 4 Tage zusätzliche Inhalte liefern.
  • In der Benutzerausgabe keine Endpunktpfade / raw-Parameter / Ratenbegrenzung / Cache-TTLs / cursor / hasNext oder andere Infrastrukturdetails preisgeben – Diese sind für Entwickler, der Benutzer versteht sie nicht. Siehe oben "Ausgabeformat für den Benutzer → Untertitel / Metadaten nur in lesbarer Form schreiben".
  • Beim Komprimieren / Zusammenführen von Daten über Tage oder Kategorien hinweg keine Einträge verlieren – Wenn die Anzahl der Einträge die take-Grenze überschreitet, einen Hinweis geben (z.B. "Letzte 100, aber es gibt insgesamt 150") oder eine cursor-basierte Paginierung für den Benutzer anbieten (d.h. "Möchtest du mehr sehen? Sag 'mehr'.").

Verwandte Skills