Files
boehmitools-main/plugins/tandoor-ai-import/TOOL-README.md
T
2026-07-24 21:37:03 +02:00

202 lines
5.2 KiB
Markdown

# Tandoor AI Web Import 1.1
Lokale Weboberfläche für den kontrollierten Import von Rezeptseiten:
```text
URL
→ sichere Webseitenextraktion
→ OpenAI Structured Output
→ Vorschau und bearbeitbares JSON
→ intelligente Tandoor-Zuordnung
→ bewusster API-Import
→ Nachprüfung oder Rollback
```
## Funktionen
- vollständige URLs sowie Eingaben ohne `https://`
- `.html`, `.php`, Query-Parameter und normale Unterpfade
- bevorzugte Auswertung von JSON-LD/Schema.org-Rezeptdaten
- Vereinheitlichung im Stil der bereits überarbeiteten Tandoor-Rezepte
- Komponenten als eigene Schritte, ohne unnötige Zerstückelung
- bearbeitbares JSON und Live-Vorschau
- jedes Food erhält immer ein Zuordnungs-Dropdown
- Tandoor-Foods werden einmal geladen und lokal bewertet
- exakte Treffer, Singular/Plural, Teilwörter und ähnliche Schreibweisen
- `Kartoffeln` findet beispielsweise `Kartoffel`
- Treffer werden nach Qualität sortiert und vorausgewählt
- alternative Suche über ein Eingabefeld je Food und Unit
- bewusstes Anlegen eines neuen Foods oder einer neuen Unit
- Dublettenprüfung vor dem Rezeptimport
- Verifikation nach dem Import
- Rollback des Rezepts und der in diesem Lauf neu angelegten Stammdaten
- optionaler HTTP-Basic-Schutz
- Schutz vor SSRF über localhost und private Quelladressen
OpenAI erhält ausschließlich extrahierte Rezeptdaten und die Quell-URL. Der
Tandoor-Token bleibt vollständig im lokalen Backend.
## Installation mit Docker
```bash
unzip tandoor-ai-web-import-v1.1.zip
cd tandoor-ai-web-import-v1.1
cp .env.example .env
nano .env
```
Mindestens eintragen:
```dotenv
OPENAI_API_KEY=sk-...
OPENAI_MODEL=gpt-5.5
TANDOOR_URL=https://kitchen.d-razz.de
TANDOOR_TOKEN=DEIN_TANDOOR_TOKEN
TANDOOR_AUTH_SCHEME=Bearer
APP_USERNAME=michael
APP_PASSWORD=EIN_STARKES_PASSWORT
```
Start:
```bash
docker compose up -d --build
```
Weboberfläche:
```text
http://DEIN-SERVER:8091
```
## Lokaler Start ohne Docker
Unter Debian oder Ubuntu gegebenenfalls zuerst:
```bash
sudo apt update
sudo apt install python3-venv
```
Dann:
```bash
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
cp .env.example .env
nano .env
uvicorn app.main:app \
--env-file .env \
--host 127.0.0.1 \
--port 8091
```
Für den lokalen Betrieb wird `DATA_DIR=./data` relativ zum Projektordner
aufgelöst. Ohne gesetzte Variable fällt die Anwendung ebenfalls automatisch
auf `<Projekt>/data` zurück.
## Bedienung
1. Rezept-URL eintragen und **URL analysieren** drücken.
2. Vorschau und Warnungen prüfen.
3. Im Tab **Zuordnungen** jedes vorausgewählte Food kontrollieren.
4. Im Dropdown bei Bedarf einen anderen vorhandenen Eintrag wählen.
5. Alternativ einen anderen Suchbegriff eintragen und **Suchen** drücken.
6. Existiert nichts Passendes, im Dropdown **Neu anlegen** auswählen.
7. **Änderungen prüfen** drücken.
8. Erst bei freiem Importstatus **In Tandoor importieren** drücken.
## Zuordnungslogik
Die Anwendung lädt die verfügbaren Foods und Units aus Tandoor und bewertet
jeden Eintrag. Dabei werden berücksichtigt:
```text
exakter Name
Pluralname
Singular-/Pluralvarianten
Teilworttreffer
allgemeine Zeichenähnlichkeit
vorhandene Properties als kleiner Tie-Breaker
```
Eine ähnliche Zuordnung wird nicht unsichtbar entschieden. Sie erscheint immer
als sichtbare Vorauswahl im Dropdown und zusätzlich als Warnung.
## Neue Foods und Units
Die Analyse und Validierung schreiben nichts nach Tandoor. Erst beim finalen
Import werden ausdrücklich mit **Neu anlegen** markierte Objekte über folgende
API-Endpunkte erstellt:
```text
POST /api/food/
POST /api/unit/
```
Danach werden die zurückgegebenen IDs in den Rezept-Payload eingesetzt. Schlägt
der Rezeptimport oder die Nachprüfung fehl, versucht die Anwendung das neue
Rezept und die in diesem Lauf neu erstellten Stammdaten wieder zu entfernen.
## Verzeichnis `data/runs`
Jeder Durchlauf wird nachvollziehbar gespeichert:
```text
data/runs/<RUN-ID>/
├── 01-source.json
├── 02-openai-metadata.json
├── 03-ai-recipe.json
├── 04-resolution.json
├── 05-edited-recipe.json
├── 06-edited-resolution.json
├── 07-import-validation.json
└── 08-import-result.json
```
Die Dateien enthalten keine API-Token.
## Sicherheitsoptionen
Private und lokale Rezeptquellen sind standardmäßig blockiert:
```dotenv
ALLOW_PRIVATE_SOURCE_URLS=false
```
TLS-Prüfungen sollten aktiviert bleiben:
```dotenv
SOURCE_VERIFY_TLS=true
TANDOOR_VERIFY_TLS=true
```
Ohne `APP_PASSWORD` ist die Oberfläche ungeschützt. Für einen über das lokale
Gerät hinaus erreichbaren Dienst sollte ein Passwort oder ein Reverse Proxy
mit Authentifizierung verwendet werden.
## Test
```bash
python tests/selftest.py
python tests/integration_mock.py
```
## Grenzen
- Stark JavaScript-basierte Seiten ohne serverseitiges HTML können zu wenig
Inhalt liefern.
- Paywalls, Login-Seiten und Bot-Schutz werden nicht umgangen.
- Neu erzeugte Foods enthalten zunächst die für den Rezeptimport nötigen
Stammdaten wie Name und optionalen Pluralnamen, aber keine erfundenen
Nährwerte oder Properties.
- Die KI erzeugt nur das Zwischenformat. Ausschließlich das lokale Backend
besitzt Tandoor-Schreibrechte.