Из-за технических ограничений современного ИИ, данная задача решается плохо. Причина - gpt это как человек, страдающий
антероградной амнезии, у него есть кратковременная память (контекстное окно) но ее размер сильно ограничен (стоимость простого ответа - квадрат от размера контекстного окна, а обучение - куб, есть лайфхаки, уменьшающие эти требования но они уменьшают и потенциальные возможности, связанные с данными на больших 'расстояниях'). А еще из-за не совершенства технологии, то что ИИ уже узнало, пока училось, у нее 'путается в голове' и оно галлюцинирует.
В качестве примера, есть llama scount с 10кк окном контекста, но она
потребует 18терабайт памяти (gpu естественно) для работы, и даже тут в нее влезет не так много документов
Готовое не посоветую, это сейчас топ исследований, гитхаб завален всякими поделками chatgpt с RAG, со средним качеством. Вся задача сводится к поиску частей документов, которые хоть как то подходят к ответу, и сваливание их в итоговый запрос, что само собой не может дать хорошего результата (нужные данные могут никак не быть близко по смыслу с вопросом). Есть попытки строить граф знаний, но это форма представления но не алгоритм разбора сырых данных. Технологии, которые позволяют строить индекс на основе смыслов - построение embendings векторов (вот
отвечал списком ключевых слов для поиска)
Если каждый отдельный документ помещается в контекстное окно, то проблема решается итеративно - берем наш исходный вопрос, и задаем его ИИ для каждого документа по отдельности, можно добавить что то типа 'для решения нашей задачи есть ли в этом документе что то полезное?'. В последствии повторить вопрос уже для тех документов или их частей, которые оказались полезны. Можно даже заранее строить индекс из документов, являющийся краткой самморизацией его содержимого (или по главам). Этот подход работает но очень дорогой/медленный (можно минутами-часами ждать ответа).
Обработка больших данных с помощью ИИ это что то типа чата, "системный промпт + пример + ответ + пример +... + часть исходных данных -> ответ", причем полученные предыдущие ответы могут пойти в примеры.. это multishot подход значительно повышает качество ответа до сих пор. Ты как бы пробегаешь по всему документу, где после подачи его части ИИ делает свой комментарий - о это полезно, или это нам не нужно... на практике там конечно еще рассуждающая часть и итеративный процесс может состоять из нескольких шагов для каждой части - типа сначала спрашиваешь о чем тут говорится (это можно закешировать), позже добавляешь вопрос, полезно ли это для нашего ответа, а так как многие модели научены размышлять, придется еще раз спросить - ответь да/нет (тут можно включить structured outputs, зафиксировав формат ответа). По мере анализа сохраняешь ссылки на те части документа, что оказались полезны, и уже их можно использовать повторно для итогового диалога.
С анализом между документами еще хуже (когда для ответа требуется информация, которую можно получить проанализировав сразу несколько документов, но по отдельности они бесполезны), у топовых ИИ можно можно просить задавать вопросы, т.е. ии может просить дать недостающую информацию (точно помню как anthropic:sonnet пытал написать утилиту работы с guithub api подавая ему заведомо недостаточно данных, так вот правильно составленный промпт позволит ии отказываться давать ответ пока информации не станет достаточно),.. но трудоемкость получения результата будет еще выше - ведь тут для каждой подзадачи придется снова пробегать по документам или их самморизации.