Пакет реализует режим map: approximate-token chunking, parallel map-фазу, iterative reduce и self-refine финального ответа как запасной сценарий для длинных текстов, когда retrieval или tool calling не подходят.
См. также doc/architecture.md.
- разбиение входного текста на чанки;
- построение map/reduce/final/critique/refine prompts;
- параллельный вызов LLM на map-фазе;
- схлопывание промежуточных фактов;
- self-critique и refine финального ответа.
- stateless interactive wrapper, который заново прогоняет pipeline для follow-up вопросов.
OptionsRun(ctx, client, source, opts, question, plan)StartConversation(...)SplitByApproxTokens(...)
Входящие:
internal/app
Исходящие:
internal/inputinternal/llminternal/verboseinternal/localize
- Определяется effective chunk length: явный
--lengthили auto-detect. - Текст режется на чанки по approximate token budget.
- По чанкам выполняются map-вызовы к LLM.
SKIPи пустые результаты отбрасываются.- Reduce-фаза схлопывает факты до одного блока.
- Генерируется draft answer.
- Draft проходит critique/refine и возвращается как результат режима.
- При
--interactionConversationхранит только transcript Q/A и строит contextualized follow-up prompt, после чего снова вызывает обычныйRun.
- Пакет не использует embeddings.
- Режим стоит рассматривать как fallback: он проще по зависимостям, но хуже удерживает глобальный контекст, чем retrieval- или tool-based сценарии.
- Chunking старается сохранять границы строк; oversized line режется отдельно.
- Пустой файл и отсутствие полезных map-results не считаются ошибкой исполнения.
- Approximate token budgeting завязан на эвристики, а не на точный tokenizer.
- корректность approximate token counting и chunk splitting;
- устойчивость к большим входам и отмене context;
- runtime поведение map-пайплайна и progress semantics.
- Изменение chunking-эвристики:
chunking.go. - Изменение prompts или фаз пайплайна:
map.go. - Изменение пользовательских инвариантов режима: синхронизировать с
doc/requirements.md. - Локализованные prompts, progress и user-facing ответы режима:
i18n/{en,ru}.toml.