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} успешно разделен на две части.')