发个 kimi 网页端清空历史聊天的控制台脚本

两年过去了还是不加个清空聊天的入口,恁娘咧

登录 kimi 然后在 F12 console 控制台粘贴运行即可

/**
 * Kimi 一键清空全部历史会话(F12 控制台脚本)
 * 
 * 使用方法:
 *   1. 打开 www.kimi.com 并已登录
 *   2. F12 → Console
 *   3. 粘贴全部代码,回车执行
 * 
 * 原理:直接调 Kimi API(ListChats + BatchDeleteChats),不依赖页面 DOM
 */

(async function () {
  const API_BASE = 'https://www.kimi.com';
  const PAGE_SIZE = 50;
  const BATCH_SIZE = 50;
  const DELAY = 300;

  const sleep = (ms) => new Promise((r) => setTimeout(r, ms));

  // ===== 获取 token =====
  const token = localStorage.getItem('access_token');
  if (!token) {
    console.error('❌ 未找到 access_token,请确认已登录 Kimi');
    return;
  }
  console.log('✅ 已获取 access_token');

  const headers = {
    'Content-Type': 'application/json',
    'Connect-Protocol-Version': '1',
    'Authorization': `Bearer ${token}`,
  };

  async function apiPost(path, body) {
    const resp = await fetch(`${API_BASE}${path}`, {
      method: 'POST',
      headers,
      body: JSON.stringify(body),
    });
    if (!resp.ok) {
      const text = await resp.text();
      throw new Error(`API ${resp.status}: ${text.slice(0, 300)}`);
    }
    return resp.json();
  }

  // ===== 列出全部会话 =====
  console.log('📋 正在获取全部历史会话...');
  const allChats = [];
  let pageToken = '';

  while (true) {
    const data = await apiPost('/apiv2/kimi.chat.v1.ChatService/ListChats', {
      query: '',
      pageToken,
      pageSize: PAGE_SIZE,
    });
    const chats = data?.chats || [];
    allChats.push(...chats);
    console.log(`   已获取 ${allChats.length} 条`);

    pageToken = data?.nextPageToken || '';
    if (!pageToken || chats.length === 0) break;
    await sleep(DELAY);
  }

  if (allChats.length === 0) {
    console.log('✅ 当前没有历史会话');
    return;
  }

  const chatIds = allChats.map((c) => c.id).filter(Boolean);
  console.log(`📊 共 ${allChats.length} 条会话,准备删除...`);

  // ===== 批量删除 =====
  let deleted = 0;

  for (let i = 0; i < chatIds.length; i += BATCH_SIZE) {
    const batch = chatIds.slice(i, i + BATCH_SIZE);
    try {
      await apiPost('/apiv2/kimi.chat.v1.ChatService/BatchDeleteChats', {
        chatIds: batch,
      });
      deleted += batch.length;
    } catch (err) {
      // 降级:尝试另一个删除接口
      console.warn(`   批量接口失败,尝试备用接口...`);
      try {
        await apiPost('/apiv2/kimi.chat.v1.ChatService/DeleteChats', {
          chatIds: batch,
        });
        deleted += batch.length;
      } catch (err2) {
        console.error(`   删除第 ${Math.floor(i / BATCH_SIZE) + 1} 批失败:`, err2.message);
      }
    }
    console.log(`   进度: ${deleted}/${chatIds.length}`);
    await sleep(DELAY);
  }

  console.log(`🎉 完成!已删除 ${deleted}/${chatIds.length} 条会话`);
  if (deleted > 0) {
    console.log('📍 3 秒后刷新页面...');
    setTimeout(() => location.reload(), 3000);
  }
})();
7 个赞

很棒,已测试,能完全删除干净。

没那么复杂,直接在 历史会话 的界面,全选所有复选框就好了:

// 打开 https://www.kimi.com/chat/history 页面在控制台执行下面的代码,只是选中,需要手动点击删除确定
document.querySelectorAll("input[type=checkbox]:not(:checked)").forEach((c) => c.click());

不过抓的接口确实高级点

在那个最该有全选的界面都没找到全选这件事太令人生气以至于没想过这种操作(小声)

这个代码确实管用,今天用这个删除了kimi所有的历史记录。提供了多选但不提供全选真的有点反人类