【油猴脚本】让 Grok 免费账户使用 Grok 4 Fast
关于 Agentic 搜索,七步以外,Grok 4 Fast 准,七步以内,Grok 4 Fast 又快又准。搜索准确性这块,目前我觉得除了 GPT thinking 以外,没人能跟 Grok Fast 系列抗衡,速度和 NSFW 支持就更是独一档了。
但自从 Grok 4.1 进入 Beta 之后,免费账户网页调用 Grok 4 Fast 的入口就被取消了。Grok 非 Fast 系列的搜索体验简直可以说是稀烂,比不上 Fast 一根,xAI 你真该死啊,于是我写了:
// ==UserScript==
// @name Grok 4 Fast Unlock
// @namespace http://tampermonkey.net/
// @version 3.3
// @description 使 Grok 免费账号使用 Grok 4 Fast
// @author MUTED64
// @match https://grok.com/*
// @grant none
// @run-at document-start
// ==/UserScript==
(function() {
'use strict';
const TARGET_MODEL = 'grok-4-mini-thinking-tahoe';
const TARGET_MODE = 'MODEL_MODE_GROK_4_MINI_THINKING';
const DISPLAY_NAME = 'Grok 4 Fast';
let isMiniThinkingEnabled = false;
let lastOfficialModelName = '';
const originalFetch = window.fetch;
window.fetch = async function(...args) {
let [url, options] = args;
const urlStr = (typeof url === 'string') ? url : (url?.url || '');
if (isMiniThinkingEnabled && urlStr && (urlStr.includes('/conversations/new') || (urlStr.includes('/conversations/') && urlStr.includes('/messages')))) {
if (options && options.body) {
try {
const bodyData = JSON.parse(options.body);
if (bodyData.modelName) {
bodyData.modelName = TARGET_MODEL;
bodyData.modelMode = TARGET_MODE;
options.body = JSON.stringify(bodyData);
console.log(`[Grok Enhanced] 拦截: 已使用 `);
}
} catch (e) {}
}
}
return originalFetch.apply(this, [url, options]);
};
function ensureMenuItem(menu) {
if (menu.querySelector('#mini-thinking-option')) return;
const template = menu.querySelector('[role="menuitem"]');
if (!template) return;
const newItem = template.cloneNode(true);
newItem.id = 'mini-thinking-option';
const title = newItem.querySelector('.font-semibold');
if (title) title.textContent = DISPLAY_NAME;
const desc = newItem.querySelector('.text-xs.text-secondary');
if (desc) desc.textContent = 'Grok 4 Fast';
menu.prepend(newItem);
}
function syncUI() {
const menu = document.querySelector('[role="menu"]');
const trigger = document.querySelector('#model-select-trigger') || document.querySelector('button[aria-haspopup="menu"]:has(span)');
const buttonTextSpan = trigger ? trigger.querySelector('.font-semibold') : null;
if (menu) {
ensureMenuItem(menu);
const items = menu.querySelectorAll('[role="menuitem"]');
items.forEach(item => {
const check = item.querySelector('.lucide-check');
if (!check) return;
const itemName = item.innerText.split('\n')[0];
if (item.id !== 'mini-thinking-option') {
const isCheckedByReact = check.classList.contains('opacity-100') || window.getComputedStyle(check).opacity === '1';
if (isCheckedByReact && !isMiniThinkingEnabled) {
lastOfficialModelName = itemName;
}
if (isCheckedByReact && isMiniThinkingEnabled) {
lastOfficialModelName = itemName;
}
}
if (isMiniThinkingEnabled) {
if (item.id === 'mini-thinking-option') {
check.style.opacity = '1';
check.classList.add('opacity-100');
check.classList.remove('opacity-0');
} else {
check.style.opacity = '0';
check.classList.add('opacity-0');
check.classList.remove('opacity-100');
}
} else {
if (item.id === 'mini-thinking-option') {
check.style.opacity = '0';
check.classList.add('opacity-0');
check.classList.remove('opacity-100');
}
}
});
}
if (buttonTextSpan) {
const desiredText = isMiniThinkingEnabled ? DISPLAY_NAME : lastOfficialModelName;
if (desiredText && buttonTextSpan.textContent !== desiredText) {
buttonTextSpan.textContent = desiredText;
}
}
}
document.addEventListener('click', (e) => {
const menuItem = e.target.closest('[role="menuitem"]');
if (menuItem) {
const itemName = menuItem.innerText.split('\n')[0];
if (menuItem.id === 'mini-thinking-option') {
isMiniThinkingEnabled = true;
setTimeout(() => {
document.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', bubbles: true }));
}, 30);
} else {
isMiniThinkingEnabled = false;
lastOfficialModelName = itemName;
}
syncUI();
}
}, true);
const observer = new MutationObserver(syncUI);
observer.observe(document, { childList: true, subtree: true });
console.log('[Grok Enhanced] 脚本加载成功。');
})();
偷偷 Enjoy 吧~