<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: 石阿强</title>
    <description>The latest articles on DEV Community by 石阿强 (@_bb37c197057badb38cb3c).</description>
    <link>https://dev.to/_bb37c197057badb38cb3c</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4197993%2Fd4bcc36b-82cd-4c10-ab3e-27ccb038a5ac.jpg</url>
      <title>DEV Community: 石阿强</title>
      <link>https://dev.to/_bb37c197057badb38cb3c</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/_bb37c197057badb38cb3c"/>
    <language>en</language>
    <item>
      <title>AI code detectors give you a number. A number is not evidence.</title>
      <dc:creator>石阿强</dc:creator>
      <pubDate>Fri, 13 Nov 2026 05:13:34 +0000</pubDate>
      <link>https://dev.to/_bb37c197057badb38cb3c/ai-code-detectors-give-you-a-number-a-number-is-not-evidence-6oj</link>
      <guid>https://dev.to/_bb37c197057badb38cb3c/ai-code-detectors-give-you-a-number-a-number-is-not-evidence-6oj</guid>
      <description>&lt;p&gt;I've been on the "does this look like AI wrote it" side of the table a few hundred times — grading assignments, reviewing take-home tests, triaging pull requests that arrived suspiciously fast.&lt;/p&gt;

&lt;p&gt;Every tool I tried gave me the same thing: &lt;strong&gt;a percentage&lt;/strong&gt;. 87% AI. 42% human. And then nothing. No way to check the tool's reasoning, no way to explain the result to the person who wrote the code, no way to defend the call if someone pushed back.&lt;/p&gt;

&lt;p&gt;So I built the thing I wanted instead: &lt;strong&gt;a checker that shows its work.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://aicodechecker.org" rel="noopener noreferrer"&gt;https://aicodechecker.org&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The core idea: evidence over verdict
&lt;/h2&gt;

&lt;p&gt;Paste code (or drop a file), pick the language or let it detect one, and you get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a &lt;strong&gt;0–100 AI-likelihood score&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;specific lines&lt;/strong&gt; that drove that score&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;one sentence per flagged range&lt;/strong&gt; explaining why&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last part is the whole point. Instead of &lt;em&gt;"this is 86% AI"&lt;/em&gt;, you get something you can actually argue with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;L2&lt;/strong&gt; — docstring just repeats the function name; a classic model habit.&lt;br&gt;
&lt;strong&gt;L4–6&lt;/strong&gt; — copies a full null-check pattern the task never needed.&lt;br&gt;
&lt;strong&gt;L9&lt;/strong&gt; — left a &lt;code&gt;# TODO: add validation&lt;/code&gt; behind even though the code claims to be done.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now the conversation is about the code, not about the tool's black box. And if the explanation is wrong, you can &lt;em&gt;see&lt;/em&gt; that it's wrong — which is exactly what a usable detector should allow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Score bands, because a single number invites misuse
&lt;/h2&gt;

&lt;p&gt;I deliberately split 0–100 into three bands so nobody can pretend the score is a verdict:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Band&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;0–29&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No clear AI signals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;30–49&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Worth a manual review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;50+&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Likely AI-generated&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;It's a &lt;strong&gt;probability estimate, not proof&lt;/strong&gt;. Please don't use it alone to accuse or punish anyone. If the code doesn't have enough distinctive content to judge, it says so rather than guessing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it deliberately does not do
&lt;/h2&gt;

&lt;p&gt;Scope discipline is a feature:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ Not a plagiarism checker&lt;/li&gt;
&lt;li&gt;❌ Not a code-quality review&lt;/li&gt;
&lt;li&gt;❌ Does not try to name &lt;em&gt;which&lt;/em&gt; AI tool was used&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just the one question: &lt;strong&gt;does this code carry AI signals, and where?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Language support
&lt;/h2&gt;

&lt;p&gt;Python, JavaScript, TypeScript, Java, C++, Go, Rust, C#, PHP, Ruby, Kotlin and more. Language auto-detection, or pick it yourself. Minimum 10 non-empty lines (shorter snippets just carry too little signal), up to 75,000 characters per check.&lt;/p&gt;

&lt;h2&gt;
  
  
  Batch mode for the actual grading workflow
&lt;/h2&gt;

&lt;p&gt;This is the part that saved me the most time. Upload a ZIP with one folder per student, or select multiple files, and it walks them one by one — up to 50 files per batch on credit packs / Pro, up to 200 on Business. Results export to &lt;strong&gt;CSV&lt;/strong&gt;, individual reports to &lt;strong&gt;PDF&lt;/strong&gt;, and everything stays in your check history.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest numbers from our own testing
&lt;/h2&gt;

&lt;p&gt;Detection was tested on 90 GitHub code files (Nov 2026, Python / Java / C++):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;1 in 45&lt;/strong&gt; human-written files flagged by mistake&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;8 in 10&lt;/strong&gt; AI-written files caught&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not perfect, and I'm not going to claim otherwise. That's precisely why the line-level evidence exists — the tool's job is to point you at what to look at, not to replace your judgement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Privacy notes
&lt;/h2&gt;

&lt;p&gt;Code you submit is read by a general-purpose LLM and sent to the model provider only for scoring. History is kept 12 months on paid plans, 7 days on free credits. New accounts get &lt;strong&gt;2 free checks&lt;/strong&gt; — enough to see whether the evidence style works for you before paying anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;→ &lt;a href="https://aicodechecker.org" rel="noopener noreferrer"&gt;https://aicodechecker.org&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Paste a file you know was AI-generated, and one you know was hand-written, and watch whether the explanations match what you already know. That's the only test that matters.&lt;/p&gt;

&lt;p&gt;If it flags something you think is unfair, I'd genuinely like to see the snippet — that's the feedback that improves calibration.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by me. Not an ad network product — a tool I use myself for review work.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>ai</category>
      <category>codereview</category>
    </item>
  </channel>
</rss>
