Reusable RAG core for source-grounded vertical AI assistants.
Supports hosted OpenAI-compatible APIs, local Ollama runtimes, source-aware answers, insufficient-basis mode, retrieval quality controls, and reusable evaluation workflows.
legal-rag-starter-kit — это переиспользуемая инфраструктурная основа для построения вертикальных AI-ассистентов с Retrieval-Augmented Generation.
Проект позиционируется как starter kit / technical core, а не как готовый конечный бот под один узкий сценарий.
Ключевая идея: отделить стабильное domain-agnostic ядро (retrieval, prompting, cache, runtime orchestration) от domain-specific слоев (корпус, продуктовая логика, UX, шаблоны ответов, экспорт).
Проект предназначен для команд и индивидуальных разработчиков, которым нужна надежная база для запуска вертикальных ассистентов с source-grounded ответами.
Это foundation-уровень, на котором строятся специализированные продукты:
- ассистенты по юридическим документам;
- ассистенты по комплаенсу;
- ассистенты по финансам;
- ассистенты по персональным базам знаний;
- другие вертикальные RAG-приложения с собственными корпусами и требованиями.
- Provider-agnostic LLM client
- Нейтральные переменные
LLM_API_KEYиLLM_BASE_URLс backward-compatible fallback.
- Нейтральные переменные
- Hosted + Local режимы
- Поддержка OpenAI-compatible hosted APIs.
- Поддержка локальных рантаймов через Ollama.
- Source-grounded generation
- Ответы формируются на основе retrieved context с ссылочностью на источники.
- Insufficient-basis mode
- Явная фиксация недостаточности данных вместо уверенных неподтвержденных выводов.
- Language-aware prompting
- Контроль языка и формата ответа в зависимости от языка запроса.
- Retrieval quality pass
- Фильтрация и компактизация контекста: cutoff + dedup + guarded fallback.
- Кеширование
- Кеш запросов/ответов и версия корпуса для управляемой инвалидации.
- Переиспользуемая оценка качества
- Подходит для системной оценки retrieval/generation в разных вертикалях.
- Экспортно-ориентированная архитектура
- Ядро отделено от слоев экспорта (включая PDF-пайплайны).
- Web-first подход
- Core не зависит от UI; web-слой остается легкой интеграцией поверх ядра.
В рантайме используется компактный quality pass:
-
Raw retrieval
Получение расширенного набора кандидатов (например,raw_top_k=10). -
Soft distance cutoff
Сохранение только документов с расстоянием не выше порога (например,0.44). -
Dedup по источнику и разделу
Удаление повторов одного и того же source/section для повышения разнообразия контекста. -
Контролируемый fallback
Если после фильтров остался один документ, можно добавить 1–2 лучших из хвоста.
Если после cutoff документов нет, fallback не добавляется (чистый insufficient-basis сценарий). -
Final context clamp
Ограничение итогового контекста компактнымfinal_top_k(например,5).
Этот подход снижает шум и дубли без перегрузки prompt лишними фрагментами.
app_core/ # переиспользуемое ядро
config/ # конфигурация core-уровня
cache/ # кеш и хранилище кеша
evaluation/ # reusable evaluation-логика
generation/ # prompt builder и generation helpers
llm/ # provider-agnostic клиентский слой
retrieval/ # векторное хранилище и retrieval-логика
schemas/ # схемы и структуры данных
web/ # web-интерфейс
templates/ # html-шаблоны
static/ # статические ресурсы
examples/ # примеры запуска и конфигураций
raw_sources/ # исходные документы
knowledge_base/ # подготовленные/нормализованные материалы
scripts/ # служебные и диагностические скрипты
runtime/ # локальные runtime-артефакты (chroma, cache)
exporters/ # слой экспорта (например, PDF)
tests/ # тесты
- Cross-Border Contract Risk Assistant
- Trade Finance Legal Reference Assistant
Каждый vertical-проект может иметь собственные:
- corpus/config слой;
- prompt profile;
- eval datasets;
- product UX;
- экспортные шаблоны и отчеты.
При этом runtime-ядро остается общим и переиспользуемым.
python -m venv venvWindows (PowerShell):
.\venv\Scripts\Activate.ps1Linux/macOS:
source venv/bin/activatepip install -r requirements.txtВыберите профиль и скопируйте значения в .env:
.env.local.example— локальный Ollama-режим;.env.hosted.example— hosted OpenAI-compatible режим;.env.example— объединенный reference-шаблон.
python app.pyПример конфигурации:
LLM_API_KEY=local-placeholder
LLM_BASE_URL=http://localhost:11434/v1
# Fast local mode:
RAG_CHAT_MODEL=gemma3:4b
# Quality local mode:
# RAG_CHAT_MODEL=deepseek-r1:8b
RAG_EMBEDDING_MODEL=bge-m3
RAG_CHROMA_PATH=runtime/chroma_db_local_bge_m3
RAG_CORPUS_VERSION=local-bge-m3-v1Рекомендации:
- разделяйте локальные и hosted векторные базы;
- при смене embedding model/chunking обновляйте индекс и
RAG_CORPUS_VERSION.
Пример конфигурации:
LLM_API_KEY=your-api-key
LLM_BASE_URL=https://your-openai-compatible-endpoint/v1
RAG_CHAT_MODEL=gpt-4o-mini
RAG_EMBEDDING_MODEL=text-embedding-3-small
RAG_CHROMA_PATH=runtime/chroma_db_hosted_text_embedding_3_small
RAG_CORPUS_VERSION=hosted-text-embedding-3-small-v1Retrieval quality controls:
RAG_RAW_TOP_K=10
RAG_MAX_DISTANCE=0.44
RAG_FINAL_TOP_K=5
# Legacy fallback:
# RAG_TOP_K=5Дополнительно:
RAG_MAX_TOKENSRAG_TEMPERATURERAG_CHUNK_SIZERAG_CHUNK_OVERLAPRAG_MIN_CHUNK_LENRAG_EMBED_BATCH_SIZE
При развитии starter kit для production-verticals логично добавить:
- reranking поверх базового vector retrieval;
- расширенные evaluation datasets и регрессионные quality-gates;
- более точный source scoring и confidence сигналы;
- улучшения web UI для прозрачности retrieval/source traceability;
- генерацию PDF-чеклистов и структурированных отчетов;
- multi-corpus конфигурации;
- domain packs (корпус + prompts + eval profile) для быстрого запуска новых вертикалей.
Сохраняйте ядро нейтральным и переиспользуемым.
Предметную специализацию выносите в отдельные vertical-слои.
Именно это делает проект масштабируемым как инфраструктурный RAG starter kit.
Проект находится в активной разработке.
Текущий фокус: стабилизация reusable core, quality controls и подготовка vertical demos поверх ядра.