跳到正文
DEV Community· Adrian M. Peticila·· 2 小時前AI 評分62

Grai 開源確定性句法檢查工具,並公佈 134,522 篇 LinkedIn 貼文審計結果

We audited 134,522 posts to see why AI writing still sounds fake (and open-sourced a deterministic syntactic gate)

AI 導讀

Adrian M. Peticila 審計 Jan'23 至 Sep'26 期間 1,499 位創辦人個人檔案上的 134,522 篇有機 LinkedIn 貼文,發現明顯 AI 詞彙減少,多種句法特徵則更常出現。

正文

Cover image for We audited 134,522 posts to see why AI writing still sounds fake (and open-sourced a deterministic syntactic gate)

Adrian M. Peticila

in 2025/2026, everyone removed the obviously AI keywords from their prompts. but even non-dev/tech-minded readers can detect an LLM post in the first 3 sentences.

why? because they removed the words that people made fun of, but not the syntactic patterns that betray RLHF models.

to quantify the change, we audited 134,522 random organic linkedin posts on 1,499 founder profiles, over jan'23 to sep'26 timeframe (LigoSocial dataset).


  1. empirical change: words got nuked, structure went wild
SYNTACTIC PATTERN JAN'23 SEP'26 RELATIVE CHANGE
mocked ai verbs 4.2% 0.5% -88.1%
"here's why" epiphany onset 1.3% 9.6% +7.4x
"it's not X, it's Y" negate 1.2% 5.9% +4.9x
arrow & emoji bullets waterfall 0.6% 12.3% +20.5x
avg. sent burstiness (CV=$\sigma$/$\mu$) 0.48 0.23 -52.1%

most indicative is burstiness (CV=$\sigma$/$\mu$ - std.dev. of sentence word count over avg. sentence word count)

normal human, non-assisted text: CV=0.48. you may see sharp jumps of 4-word observation. and then next to it, 32-word breakdown of architecture. default GPT4o/claude 3.5 sonnet. tightly cluster around 14-18 words/sentence. (CV=0.21-0.23).


  1. why negative prompts are not effective

if you ask llm "vary sentence length. don't use contrastive negatives". the model takes it as a soft weighting in attention. but then, in 3rd paragraph it tries to converge back to a safe, well-mannered 15-word mean (rlhf).

you can't use a prob. generator as deterministic linter.


  1. generation vs. validation (grai)

we designed grai to be two layers:

  1. OpenCore MIT Instruction Harness + Agent Skill: github.com/adrianpeticila/grai
  2. 622kb air-gapped html5 workbench: grai.page

The model will not self-censor: deterministic external (non-LLM) vanilla JS preflight engine is applied to each draft:

  1. CONTRASTIVE_NEGATION. Flags "It's not X. It's Y" / "Less X, more Y".
  2. LESS_MORE_SYMMETRY. Corporate paralleslisms "Stop X. Start Y".
  3. EPIPHANY_OPENER. Flags "Here is why" "The harsh truth is", "Let that sink in".
  4. ARROW_BULLET_SLOP. Flags cascading Unicode/emoji arrows/bullets (→ ↳ 🚀💡).
  5. TRIADIC_PADDING. Flags catchy triadic slogans. "No X, No Y, Just Z".
  6. LEXICAL_SLOP. Flags remaining synth vocab red flags.
  7. HARD_BURSTINESS_FLOOR ($CV > 0.32). Computes sentence wordcount variance. (Preserves decimal "3.14", abbreviations "U.S.", "Dr." etc.) Any draft that does not have $CV > 0.32, is rejected.

  8. Engineering quirk. FIPS 180-4 SHA256 on "file://"

We made the workbench (grai.html) to be 100% offline from disk. Use the file:// protocol and strict Content-Security-Policy (connect-src 'none' by default).

Here's where we ran into some problems testing on WebKit/Chromium. They block window.crypto.subtle.digest("SHA-256") on file:// (local files are not Secure Context). We need SHA256 fingerprint of author's voice profile to be deterministic for our printable A4 Voice DNA Dossier. So we created a pure JS FIPS 180-4 SHA256 workaround. To have the same hash whether we load it from disk or over HTTPS.

Try the Scorer, or the MIT Harness

• Live Cadence Gate Scorer (free - no signup required) https://grai.page/#test

• Full 134522-post Methodology Report https://grai.page/methodology

• Github repo (MIT skill & instructions) https://github.com/adrianpeticila/grai

來源:DEV Community · dev.to