Быстрый парсинг докуметации из devdocs.io для дообучения AI моделей

devdocs.io классный проект, но по видимому стоит защита от парсинга. Цель — дообучить AI модель до уровня «спец-мегапиздец» на платформе coze.com добавив в базу knowledge соответствующие документации. Там есть встроенный парсер, но с devdocs работать отказывается.

Однако там есть такая штука https://devdocs.io/offline где можно сохранять документацию для доступа в оффлайн. Сохраняется она в IndexedDB браузера.

ну что ж, дело нехитрое, особенно если учесть, что «спец» уже практически мегапиздец, потому что сбор баз документаций под него происходит 10-й час…

Попросим спеца, накалякать быстренько js скрипт для консоли, который будет по значению бд и имени хранилища дергать контент, очищать его от тегов, объединять в txt файл и выплевывать на сохранение, та даааам:

function dumpIndexedDB(dbName, storeName) {
  let request = indexedDB.open(dbName);

  request.onerror = function(event) {
    console.error("Ошибка доступа к IndexedDB:", event);
  };

  request.onsuccess = function(event) {
    let db = event.target.result;

    if (db.objectStoreNames.contains(storeName)) {
      let transaction = db.transaction(storeName, 'readonly');
      let objectStore = transaction.objectStore(storeName);
      let allRecords = objectStore.getAll();

      allRecords.onsuccess = function() {
        // Объединяем все записи в одну текстовую строку
        let combinedText = allRecords.result.map(record => {
          if (typeof record === 'string') {
            let tempDiv = document.createElement('div');
            tempDiv.innerHTML = record;
            return tempDiv.textContent || tempDiv.innerText || "";
          }
          return record;
        }).join('\n\n\n\n'); // Разделяем строки символом новой строки

        // Создаем текстовый файл для скачивания
        let blob = new Blob([combinedText], {type: "text/plain"});
        let url = URL.createObjectURL(blob);

        // Создаем временную ссылку для скачивания файла
        let a = document.createElement('a');
        a.href = url;
        a.download = storeName + "_text.txt";
        document.body.appendChild(a);
        a.click();
        document.body.removeChild(a);
        
        // Освобождаем URL объекта Blob
        URL.revokeObjectURL(url);
      };
    } else {
      console.error("Объектное хранилище не найдено:", storeName);
    }
  };
}

dumpIndexedDB('docs', 'bash');

А вот мои спецы, на базе GPT-4-Turbo (128k) + задуто овердохера плагинов + овердохера документации в knowledge:

https://t.me/DimDimAiBot — Fullstack навыки

https://t.me/tdsdm_bot — Linux admininstration навыки

UPD: в процессе дообучения AI на coze можем столкнуться с неприятностью при обработке файлов на сегменты — не дает обработать более 10к сегментов, тогда разбиваем файлы вот скриптик на python от бьющий нужные файлики примерно пополам, но с умом не на пол-слова/обзаца:

import re

def split_file(file_content):
    # Находим все места с 4 и более переносами строки подряд
    split_points = [m.start() for m in re.finditer(r'(\n){4,}', file_content)]
    # Находим ближайшую к середине точку разделения
    middle = len(file_content) // 2
    split_point = min(split_points, key=lambda x: abs(x - middle))
    return file_content[:split_point], file_content[split_point:]

# Местоположение файлов
file_paths = [
    './python~3.10_text.txt',
    './python~3.11_text.txt',
    './python~3.12_text.txt'
]

for file_path in file_paths:
    with open(file_path, 'r', encoding='utf-8') as file:
        content = file.read()

    part1, part2 = split_file(content)
    
    # Создаем новые файлы для каждой части
    with open(f'{file_path}_part1', 'w', encoding='utf-8') as new_file:
        new_file.write(part1)
    with open(f'{file_path}_part2', 'w', encoding='utf-8') as new_file:
        new_file.write(part2)

    print(f'Файл {file_path} успешно разделен на две части.')

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *