您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
Modifies the 'model' field in specific claude.ai API responses.
当前为
// ==UserScript== // @name Claude AI Response Model Modifier // @namespace http://tampermonkey.net/ // @version 1.3 // @description Modifies the 'model' field in specific claude.ai API responses. // @author gemini 2.5 pro // @match https://claude.ai/* // @grant none // @run-at document-start // @license MIT // ==/UserScript== (function() { 'use strict'; // --- 用户配置开始 --- const ENABLE_MODEL_MODIFICATION = true; // 当前常用model // claude-opus-4-20250514-claude-ai-pro // claude-3-7-sonnet-20250219 // claude-opus-4-20250514 const NEW_MODEL_STRING = 'claude-3-7-sonnet-20250219'; // <--- 在这里设置你想要的 model 字符串 // --- 用户配置结束 --- // 更新后的正则表达式,匹配以 /api/ 开头的相对路径 const TARGET_URL_REGEX = /^\/api\/organizations\/[^\/]+\/chat_conversations\/[^\/]+\?tree=True&rendering_mode=messages&render_all_tools=true$/; const originalFetch = window.fetch; window.fetch = function(input, init) { let urlToTest; if (typeof input === 'string') { urlToTest = input; } else if (input && typeof input.url === 'string') { // Covers Request object urlToTest = input.url; // 对于 Request 对象,其 .url 属性通常是绝对 URL。 // 但如果 fetch 是用相对路径的 Request 对象初始化的,这里可能仍是相对的。 // 不过,更常见的是 fetch(relativePath) 导致 typeof input === 'string' } else { console.warn('[Claude Model Modifier] Could not determine URL from fetch input:', input); return originalFetch(input, init); } // 调试日志:打印所有被 fetch 的 URL 及其与正则表达式的匹配结果 const isMatch = TARGET_URL_REGEX.test(urlToTest); // 为了更清晰地看到传入的urlToTest和匹配情况,可以保留或按需调整这条日志 // console.log(`[Claude Model Modifier] Testing URL: "${urlToTest}" | Regex: ${TARGET_URL_REGEX.toString()} | Matches: ${isMatch}`); // if (urlToTest.includes('/api/organizations')) { // 只打印相关的URL,避免过多日志 // console.log(`[Claude Model Modifier] Testing URL: "${urlToTest}" | Matches: ${isMatch}`); //} if (ENABLE_MODEL_MODIFICATION && isMatch) { console.log('[Claude Model Modifier] Intercepted target URL:', urlToTest); return originalFetch(input, init) .then(async (response) => { if (!response.ok) { console.log('[Claude Model Modifier] Original response not OK:', response.status, response.statusText); return response; } const responseBodyText = await response.text(); let jsonData; try { jsonData = JSON.parse(responseBodyText); } catch (e) { console.error('[Claude Model Modifier] Failed to parse JSON response:', e); console.error('[Claude Model Modifier] Response text was:', responseBodyText.substring(0, 500)); // 只打印部分响应文本 return new Response(responseBodyText, { status: response.status, statusText: response.statusText, headers: response.headers }); } console.log('[Claude Model Modifier] Original model:', jsonData.model); jsonData.model = NEW_MODEL_STRING; console.log('[Claude Model Modifier] Modified model to:', jsonData.model); const modifiedResponseBody = JSON.stringify(jsonData); const modifiedResponse = new Response(modifiedResponseBody, { status: response.status, statusText: response.statusText, headers: response.headers }); modifiedResponse.headers.set('Content-Type', 'application/json'); console.log('[Claude Model Modifier] Returning modified response.'); return modifiedResponse; }) .catch(error => { console.error('[Claude Model Modifier] Error during fetch modification for URL:', urlToTest, error); throw error; }); } return originalFetch(input, init); }; console.log('[Claude Model Modifier] Script loaded and fetch overridden. (v1.3 - Relative URL fix)'); })();