您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Identify AI-generated comments on Hacker News
// ==UserScript== // @name GPT Comment Detector // @namespace https://example.com/ // @version 0.1 // @description Identify AI-generated comments on Hacker News // @author chryzsh // @match https://news.ycombinator.com/* // @grant none // @connect huggingface.co // @grant GM.xmlHttpRequest // @grant unsafeWindow // @sandbox JavaScript // @license MIT // ==/UserScript== // Set a threshold for the minimum probability that a comment is AI-generated const AI_THRESHOLD = 0.99; const PROBABLE_THRESHOLD = 0.7; const TOKEN_THRESHOLD = 200; //4 characters are about 50 tokens, which is when the detector model because reliable // put all comments into a NodeList const comments = document.querySelectorAll('.comment'); // regex to remove whitespaces const whitespaceRegex = /\s+/g; //regex to remove "reply" at the end of comments const replyRegex = /\breply\b\s*/g; // kick off the program main(); function main() { // loop over each comment comments.forEach((comment) => { // add an onclick for each comment comment.addEventListener('click', function () { // trim commments for whitespaces and test length for each comment testLength(comment); }); }); }; // Trim and test the length of comments function testLength(comment) { var text = comment.textContent; // trim whitespaces and shit from the end first - dont do this on the comment object itself, just a variable text = comment.textContent.trim(); text = comment.textContent.replace(whitespaceRegex, " "); // remove "reply" from the end text = comment.textContent.replace(replyRegex, ""); // test the length first so we don't run detection on too short comments if (text.length < TOKEN_THRESHOLD) { comment.style.border = '1px solid gray'; comment.innerHTML += `<div style="color: gray; font-weight: bold;">Insufficient data to assess if AI generated</div>`; } else { // run AI detection and add comment based on the result detectAI(comment.textContent, function (result) { addComment(result, comment); }); } } // Add comment function addComment(result, comment) { var json = JSON.parse(result); var fakeProbability = json.fake_probability; var realProbability = json.real_probability; var formattedNumberAI = (fakeProbability * 100).toFixed(3); var formattedNumberHuman = (realProbability * 100).toFixed(3); // most comments will not be AI (hopefully) so start with testing that if (fakeProbability < PROBABLE_THRESHOLD) { //assume not AI if lower than 0.7 on the AI-meter comment.style.border = '1px solid green'; comment.innerHTML += `<div style="color: green; font-weight: bold;">Definitely human - human probability ${formattedNumberHuman}</div>`; } // If the probability is above the threshold, label the comment as AI-generated else if (fakeProbability > PROBABLE_THRESHOLD) { // possibly AI if (fakeProbability > AI_THRESHOLD) { //definitely AI comment.style.border = '1px solid red'; comment.innerHTML += `<div style="color: red; font-weight: bold;">Definitely AI - AI probability ${formattedNumberAI}</div>`; } else { comment.style.border = '1px solid yellow'; comment.innerHTML += `<div style="color: yellow; font-weight: bold;">Possibly AI - AI probability ${formattedNumberAI}</div>`; } } }; // Run AI detection function detectAI(input, callback) { var detectorUrlWithInput = "https://huggingface.co/openai-detector?" + input GM.xmlHttpRequest({ method: "GET", url: detectorUrlWithInput, headers: { "User-Agent": "Mozilla/5.0", // If not specified, navigator.userAgent will be used. "Content-Type": "application/x-www-form-urlencoded" }, onload: function (response) { var responseParsed = [response.responseText].join("\n"); callback(responseParsed); } }); }