docs / promptPreprocessor.ru.md
Препроцессор обрабатывает пользовательские запросы с файлами для RAG-системы (Retrieval-Augmented Generation). Он автоматически выбирает оптимальную стратегию внедрения контекста на основе размера файлов и доступного контекстного окна языковой модели.
preprocessВходные параметры:
ctl: PromptPreprocessorController — контроллер препроцессораuserMessage: ChatMessage — сообщение пользователяЛогика работы:
chooseContextInjectionStrategy()retrievalКогда используется:
Процесс:
Формат вывода:
Когда используется:
Процесс:
Формат вывода (при наличии результатов):
Формат вывода (без результатов):
Когда используется:
Функция chooseContextInjectionStrategy() принимает решение на основе расчёта токенов:
| Шаг | Описание |
|---|---|
| 1 | Загружает LLM-модель через ctl.client.llm.model() |
| 2 | Измеряет текущее заполнение контекста через measureContextWindow() |
| 3 | Парсит файлы и подсчитывает общее количество токенов |
| 4 | Рассчитывает доступные токены с целевым заполнением 70% |
| 5 | Сравнивает: totalFilePlusPromptTokenCount > availableContextTokens |
Измеряет заполнение контекстного окна:
Возвращает:
Применяет шаблон промпта модели:
model.applyPromptTemplate(ctx)"?" и повторяет попыткуОбрабатывает стратегию retrieval:
retrievalAffinityThresholdОбрабатывает стратегию inject-full-content:
input.replaceText()Параметры из configSchematics:
| Параметр | Тип | Описание |
|---|---|---|
retrievalLimit | number | Максимальное количество цитат для поиска |
retrievalAffinityThreshold | number | Порог релевантности для фильтрации цитат (0.0–1.0) |
Препроцессор отображает прогресс через PredictionProcessStatusController:
| Статус | Текст |
|---|---|
| Deciding | Deciding how to handle the document(s)... |
| Loading parser | Loading parser for {filename}... |
| Parser loaded | {library} loaded for {filename}... |
| Processing | Parsing file {filename}... ({progress}%) |
| Retrieval | Retrieving relevant citations for user query... |
| Done | Retrieved {N} relevant citations for user query |
Препроцессор выводит отладочную информацию через ctl.debug():
Embedding-модель: nomic-ai/nomic-embed-text-v1.5-GGUF
1. Парсит каждый файл через ctl.client.files.parseDocument()
2. Извлекает полное содержимое
3. Форматирует с заголовками: ** filename full content **
4. Вставляет в промпт с инструкцией
This is a Enriched Context Generation scenario.
The following content was found in the files provided by the user.
** document.pdf full content **
[полное содержимое файла]
** end of document.pdf **
Based on the content above, please provide a response to the user query.
User query: [запрос пользователя]
1. Загружает embedding-модель (nomic-embed-text-v1.5-GGUF)
2. Выполняет семантический поиск через ctl.client.files.retrieve()
3. Фильтрует результаты по retrievalAffinityThreshold
4. Добавляет найденные цитаты в промпт
5. Прикрепляет источники через ctl.addCitations()
The following citations were found in the files provided by the user:
Citation 1: "[текст цитаты]"
Citation 2: "[текст цитаты]"
Use the citations above to respond to the user query, only if they are relevant. Otherwise, respond to the best of your ability without them.
User Query:
[запрос пользователя]
Important: No citations were found in the user files for the user query. In less than one sentence, inform the user of this. Then respond to the query to the best of your ability.
User Query:
[запрос пользователя]
const contextOccupiedFraction = contextOccupiedPercent / 100;
const targetContextUsePercent = 0.7;
const targetContextUsage = targetContextUsePercent * (1 - contextOccupiedFraction);
const availableContextTokens = Math.floor(modelRemainingContextLength * targetContextUsage);
Если totalFileTokenCount + userPromptTokenCount > availableContextTokens
→ retrieval
Иначе
→ inject-full-content
{
totalTokensInContext: number, // всего токенов в контексте
modelContextLength: number, // размер контекста модели
modelRemainingContextLength: number, // доступно токенов
contextOccupiedPercent: number // процент заполнения
}
import {
text,
type Chat,
type ChatMessage,
type FileHandle,
type LLMDynamicHandle,
type PredictionProcessStatusController,
type PromptPreprocessorController,
} from "@lmstudio/sdk";