一个 NextChat 发送超长上下文不卡死的方法

204 阅读2分钟

众所周知 Gemini 早已支持 200 万上下文,但受限于浏览器性能实际上当超过 10 万上下文的时候就已经卡成了狗。故出此下策。

已知这是随手找到的一个长文档:

image.png

几千行,直接粘贴到网页版对话框必然卡死。

所以,写了个 JavaScript,以上传文件的方式读取内容,构造请求发送之后立即释放还以浏览器运存空间,代码:

const fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.onchange = async (e) => {
    const file = e.target.files[0];
    const content = await file.text();
    
    // 修改输入框内容并触发输入事件
    const inputElement = document.getElementById('chat-input');
    inputElement.value = content;
    inputElement.dispatchEvent(new Event('input', { bubbles: true }));
    
    // 模拟点击发送按钮
    const sendButton = document.querySelector('button.button_icon-button__VwAMf.chat_chat-input-send__GFQZo');
    sendButton.click();
    
    // 等待一个极短的时间让 dom 加载完成,若 CPU 实在过于风烛残年则增加等待时长。
    await new Promise(resolve => setTimeout(resolve, 10));
    
    // 模拟点击编辑按钮
    const iconButtons = document.getElementsByClassName('button_icon-button__VwAMf undefined undefined  clickable undefined');
    iconButtons[iconButtons.length - 3].click();
    
    // 等待一个极短的时间让 dom 加载完成,若 CPU 实在过于风烛残年则增加等待时长。
    await new Promise(resolve => setTimeout(resolve, 10));
    
    // 释放长文档内容框
    document.querySelector('.ui-lib_modal-input__vxrdT').value = '(๑•̀ㅂ•́)و✧ File sent! 😊';
    document.querySelector('.ui-lib_modal-input__vxrdT').dispatchEvent(new Event('input', { bubbles: true }));
    document.getElementsByClassName('button_icon-button-text__my76e')[5].click();
};

fileInput.click();

使用方法:在对话界面按 F12 → 在控制台粘贴执行上述代码 → 点击目标文件发送 → 构造请求发送后自动释放,等待 ing。。

image.png

image.png

image.png

就是这样。以上。

单行版:

javascript:(()=>{const a=document.createElement('input');a.type='file';a.onchange=async(e)=>{const b=e.target.files[0];const c=await b.text();const d=document.getElementById('chat-input');d.value='文档解读。若接收的长文本末端不是 *长文本加载完成!* 请告之。\n```\n'+c+'\n```\n长文本加载完成!';d.dispatchEvent(new Event('input',{bubbles:true}));const f=document.querySelector('button.button_icon-button__VwAMf.chat_chat-input-send__GFQZo');f.click();await new Promise(r=>setTimeout(r,10));const g=document.getElementsByClassName('button_icon-button__VwAMf undefined undefined  clickable undefined');g[g.length-3].click();await new Promise(r=>setTimeout(r,10));document.querySelector('.ui-lib_modal-input__vxrdT').value='(๑•̀ㅂ•́)و✧ File sent! 😊';document.querySelector('.ui-lib_modal-input__vxrdT').dispatchEvent(new Event('input',{bubbles:true}));document.getElementsByClassName('button_icon-button-text__my76e')[5].click()};a.click()})();

不用打开 F12  (控制台会记录输出,太长也卡) ,直接存为书签要用时点击,或者在地址栏直接粘贴  (但是直接粘贴到地址栏需要手敲前面的 javascript: 前缀)  然后回车即可。