180 lines
8.2 KiB
Twig
180 lines
8.2 KiB
Twig
{% extends 'admin/base.html.twig' %}
|
||
|
||
{% block title %}Neues Indexierungsprofil{% endblock %}
|
||
|
||
{% block body %}
|
||
<div class="d-flex justify-content-between align-items-center mb-4">
|
||
<h1 class="h3">Neues Indexierungsprofil</h1>
|
||
|
||
<a href="{{ path('admin_ingest_profile_list') }}"
|
||
class="btn btn-sm btn-outline-secondary">
|
||
Zurück
|
||
</a>
|
||
</div>
|
||
|
||
<div class="alert alert-warning border-warning bg-dark text-light mb-4">
|
||
<strong>Wichtiger Hinweis:</strong><br>
|
||
Änderungen am Indexierungsprofil beeinflussen die Struktur des Vektor-Indexes
|
||
(Chunking, Embedding, Scoring). Nach Aktivierung ist ein vollständiger
|
||
Global Reindex erforderlich.
|
||
</div>
|
||
|
||
<div class="card bg-black border-secondary text-light">
|
||
<div class="card-body">
|
||
|
||
<form method="post">
|
||
<input type="hidden"
|
||
name="_token"
|
||
value="{{ csrf_token('create_ingest_profile') }}">
|
||
|
||
<div class="row g-4">
|
||
|
||
<!-- ================================================= -->
|
||
<!-- CHUNKING -->
|
||
<!-- ================================================= -->
|
||
<div class="col-12">
|
||
<h5 class="text-info">Chunking-Konfiguration</h5>
|
||
<hr class="border-secondary">
|
||
<p class="text-secondary small">
|
||
Definiert, wie Dokumente in semantische Textabschnitte (Chunks) zerlegt werden.
|
||
Diese Struktur beeinflusst Retrieval-Qualität, Kontextstabilität und Indexgröße.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="col-md-6">
|
||
<label class="form-label">Chunk Size</label>
|
||
<select name="chunk_size"
|
||
class="form-select bg-dark text-light border-secondary"
|
||
required>
|
||
{% for i in range(50, 1000, 25) %}
|
||
<option value="{{ i }}">
|
||
{{ i }}
|
||
</option>
|
||
{% endfor %}
|
||
</select>
|
||
<div class="form-text text-secondary">
|
||
Maximale Wortanzahl pro Chunk.
|
||
<br><br>
|
||
<strong>Kleinere Werte:</strong> Mehr Chunks, höhere Granularität, präziseres Retrieval.
|
||
<br>
|
||
<strong>Größere Werte:</strong> Weniger Chunks, mehr Kontext pro Treffer.
|
||
<br><br>
|
||
Empfehlung für Produkt- und Wissensbasis: 600–1000.
|
||
</div>
|
||
</div>
|
||
|
||
<div class="col-md-6">
|
||
<label class="form-label">Chunk Overlap</label>
|
||
<select name="chunk_overlap"
|
||
class="form-select bg-dark text-light border-secondary"
|
||
required>
|
||
{% for i in range(25, 200, 25) %}
|
||
<option value="{{ i }}">
|
||
{{ i }}
|
||
</option>
|
||
{% endfor %}
|
||
</select>
|
||
<div class="form-text text-secondary">
|
||
Anzahl überlappender Wörter zwischen zwei Chunks.
|
||
<br><br>
|
||
Verhindert Kontextabbrüche an Chunk-Grenzen.
|
||
<br>
|
||
Typischer Bereich: 10–20 % der Chunk Size.
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ================================================= -->
|
||
<!-- EMBEDDING -->
|
||
<!-- ================================================= -->
|
||
<div class="col-12 mt-5">
|
||
<h5 class="text-info">Embedding-Konfiguration</h5>
|
||
<hr class="border-secondary">
|
||
<p class="text-secondary small">
|
||
Definiert das Modell zur Vektorisierung der Textabschnitte.
|
||
Embeddings bestimmen die semantische Ähnlichkeitsberechnung im FAISS-Index.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="col-md-6">
|
||
<label class="form-label">Embedding Model</label>
|
||
<select name="embedding_model"
|
||
class="form-select bg-dark text-light border-secondary"
|
||
required>
|
||
<option value="intfloat/multilingual-e5-base">
|
||
intfloat/multilingual-e5-base (768 Dimensionen)
|
||
</option>
|
||
</select>
|
||
<div class="form-text text-secondary">
|
||
Das Embedding-Modell erzeugt numerische Vektoren aus Text.
|
||
Modellwechsel erfordert zwingend einen Global Reindex.
|
||
</div>
|
||
</div>
|
||
|
||
<div class="col-md-6">
|
||
<label class="form-label">Embedding Dimension</label>
|
||
<input type="number"
|
||
name="embedding_dimension"
|
||
value="768"
|
||
class="form-control bg-dark text-light border-secondary"
|
||
readonly>
|
||
<div class="form-text text-secondary">
|
||
Muss exakt zur Dimension des gewählten Embedding-Modells passen.
|
||
Falsche Werte führen zu inkonsistentem Vektorindex.
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ================================================= -->
|
||
<!-- SCORING -->
|
||
<!-- ================================================= -->
|
||
<div class="col-12 mt-5">
|
||
<h5 class="text-info">Scoring & Retrieval</h5>
|
||
<hr class="border-secondary">
|
||
<p class="text-secondary small">
|
||
Definiert die Bewertungslogik für Retrieval-Ergebnisse.
|
||
Änderungen wirken sich direkt auf die Gewichtung von Keyword- und
|
||
Vektor-Treffern aus.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="col-md-6">
|
||
<label class="form-label">Scoring Version</label>
|
||
<input type="number"
|
||
name="scoring_version"
|
||
value="1"
|
||
class="form-control bg-dark text-light border-secondary"
|
||
readonly>
|
||
<div class="form-text text-secondary">
|
||
Versionskennzeichnung der Scoring-Logik.
|
||
<br><br>
|
||
Eine Erhöhung erzwingt:
|
||
<ul class="mt-2">
|
||
<li>Neuaufbau des NDJSON-Index</li>
|
||
<li>Vollständigen FAISS-Rebuild</li>
|
||
</ul>
|
||
Gewährleistet reproduzierbare Retrieval-Ergebnisse.
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<hr class="border-secondary my-4">
|
||
|
||
<div class="d-flex justify-content-end">
|
||
<button type="submit"
|
||
class="btn btn-outline-info">
|
||
Profil erstellen
|
||
</button>
|
||
</div>
|
||
|
||
</form>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="mt-4 small text-secondary">
|
||
Governance-Hinweis:
|
||
Ein Indexierungsprofil ist versioniert und deterministisch.
|
||
Änderungen sollten nur geplant erfolgen, da sie die komplette
|
||
Wissensstruktur neu generieren.
|
||
</div>
|
||
{% endblock %}
|