Ergebnis lesen
Die API bewertet jeden Satz einzeln. So liest du Urteil, Anteile und Positionen.
Urteil
| Wert | Bedeutung |
|---|---|
none | Keine Hinweise auf KI gefunden. |
some | Einzelne Stellen sind auffällig. |
mostly | Mindestens die Hälfte des Textes liegt in den beiden oberen Stufen. |
Eine Klasse „menschlich“ gibt es bewusst nicht: Ein Text ohne Markierung ist nicht nachweislich von einem Menschen geschrieben. Die API nennt auch keine Rohwahrscheinlichkeit.
Stufen
band | Anzeige | Bedeutung |
|---|---|---|
very_likely_ai | Sehr wahrscheinlich KI | Der Satz trägt deutliche Muster eines Sprachmodells. |
likely_ai | Wahrscheinlich KI | Mehrere Sätze in Folge wirken maschinell geschrieben. |
possibly_ai | Möglicherweise KI | Ein schwächerer Hinweis. Er zählt nicht in ai_share. |
not_flagged | Nicht markiert | Nur mit all_sentences: Der Satz trägt keine Markierung. Das sagt nichts darüber, wer ihn geschrieben hat. |
Eine Markierung ist ein Hinweis, kein Beweis. Zeige sie deinen Nutzern als Anlass, die Stelle noch einmal anzusehen.
Alle Sätze
Mit "all_sentences": true enthält sentences jeden bewerteten Satz in der Reihenfolge des Textes. Leerraum zwischen den Sätzen und Bruchstücke unter drei Zeichen gehören zu keinem Eintrag. Sätze ohne Markierung tragen die Stufe not_flagged. Das heißt nicht, dass ein Mensch den Satz geschrieben hat: Die API markiert streng, einen einzelnen Satz nur bei sehr deutlichem Signal und sonst erst mehrere auffällige Sätze in Folge. Urteil, Anteile und Abrechnung bleiben gleich.
"sentences": [
{ "start": 0, "end": 118, "band": "not_flagged" },
{ "start": 119, "end": 247, "band": "likely_ai" },
{ "start": 248, "end": 391, "band": "likely_ai" },
{ "start": 392, "end": 470, "band": "not_flagged" }
]Das passt, wenn du den ganzen Text Satz für Satz anzeigst oder mit derselben Satzteilung weiterarbeiten willst.
Positionen
start und end zählen ab 0, end liegt hinter dem letzten Zeichen. Die Einheit wählst du mit offset_unit:
| Wert | Zählt | Passt zu |
|---|---|---|
codepoint | Unicode-Zeichen | Python, Go (Runen), Rust (chars) |
utf16 | UTF-16-Einheiten | JavaScript, Java, C# |
Der Unterschied zeigt sich erst bei Zeichen außerhalb der Grundebene, etwa Emojis.
Stellen markieren
parts, last = [], 0
for s in result["sentences"]:
parts.append(html.escape(text[last:s["start"]]))
parts.append(f'<mark class="{s["band"]}">{html.escape(text[s["start"]:s["end"]])}</mark>')
last = s["end"]
parts.append(html.escape(text[last:]))
marked_html = "".join(parts)let out = "", last = 0;
for (const s of result.sentences) { // request with offset_unit: "utf16"
out += escapeHtml(text.slice(last, s.start));
out += `<mark class="${s.band}">${escapeHtml(text.slice(s.start, s.end))}</mark>`;
last = s.end;
}
out += escapeHtml(text.slice(last));