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ürcurl -fsSL ... | bashzur 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=allverwenden (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 sagt | Zu 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
| Endpunkt | Verwendung | Hauptparameter |
|---|---|---|
/api/public/daily | Neuester Tagesbericht | Keine |
/api/public/daily/{YYYY-MM-DD} | Tagesbericht für bestimmtes Datum | path: date |
/api/public/dailies | Tagesbericht-Archivliste | take (1-180, default 30) |
/api/public/items | Alle AI-Dynamiken | mode / 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, giltsince=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. takemaximal 100; für mehr dencursorfü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-models | Modellveröffentlichung/-update |
ai-products | Produktveröffentlichung/-update |
industry | Branchendynamik |
paper | Forschungsarbeiten |
tip | Tipps & 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 Skillsinceganz weglässt, nur Inhalte der letzten 7 Tage zurückgegeben werden. Es wird dennoch empfohlen,sinceexplizit 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/nullpublishedAt: ISO 8601 UTC (mitZ)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=selectedraw-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 Wert | Anzeige 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")
titleist 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 mussYYYY-MM-DDsein, 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;dailyist ein festes Tagesprodukt (UTC-0-Scheibe für den gesamten Tag 5/6-5/7), die zeitliche Genauigkeit passt nicht. Standardmäßigmode=selected + since=<semantisches Fenster>verwenden. Nur wenn der Benutzer explizit "日报" (Tagesbericht) sagt, dendaily-Endpunkt verwenden. - Nicht standardmäßig
mode=allverwenden, 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äßigmode=selected, nur auf Bestellung des Benutzers "全部" (alle) zumode=allwechseln. - 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 dieurl/sourceUrlzur Ü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). Ohnesincegreift 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 einecursor-basierte Paginierung für den Benutzer anbieten (d.h. "Möchtest du mehr sehen? Sag 'mehr'.").