LLM/KI/AI Künstliche Intelligenz und Chatbot

Informationen effizient organisieren.
Mit der Dr.DOC Komplettlösung für revisionssichere Archivierung.


  Anfragen Preise berechnen Demo anfordern Mehr über Dr.DOC erfahren


LLM/KI/AI Künstliche Intelligenz und Chatbot

1. Dokument fragen und auswerten, "Chatbot"

Datensatz laden, in der Maske rechts auf "Dokument AI"

2. Beim Dok. Erstellen: Archiv automatisch wählen mit entsprechender Feldvorbelegung

In einer sersten Stufe kann ein Ollama Modell verwendet werden, um die Klassifizierungsaufgabe zu übernehmen:

  • Welches Archiv? (z.B. Einkauf Lieferscheine)
  • Welche Feldvorbelegung? (z.B. Dokument-Typ: Lieferschein, Bestellung, Rechnung)

Unter "Einstellungen" das Olama Model, Endpoint, Stadard-Archiv und Prompt setzen.

Der Prompt MUSS folgendes JSON Objekt zurückgeben, andernfalls wird das Standardarchiv gewählt. Durch die Wahl des Archivs und der Feldvorbelegung kann eine entsprechende Rekursive Archivierung gestartet werden (Document Encoder), siehe "3. Automatische Verschlagwortung innerhalb eines Archivs".

{
 archive: "doc",
 preset: "INBOX"
}

Beispiel:

**Incoming** means that the document text was addressed **to** the company "Dr.DOC GmbH".
**Outgoing** means that the document text was written or issued **by** the company "Dr.DOC GmbH".
The following attached **text** should be compared with the values   of the "desc" property of each JSON array element. Return one element of the JSON array that best describes the attached text.
\```text
{ocr}
\```

All JSON array elements:

\```json
[
{
"desc": [ "Incoming invoice", "purchasing bill", "Eingehende Rechnung", "Eingangsrechnung" ],
"archive": "rec",
"preset": "INVOICE_IN"
},
{
"desc": [ "Outgoing invoice", "sales invoice", "Ausgehende Rechnung", "Ausgangsrechnung" ],
"archive": "rec",
"preset": "INVOICE_OUT"
},
{
"desc": [ "Tax notice", "tax return", "sales tax return", "VAT return", "trade tax", "corporate tax", "tax return", "tax assessment", "Steuer Bescheid", "Steuererklärung", "Umsatzsteuervoranmeldung", "UStVA", "Gewerbesteuer", "Körperschaftssteuer" ],
"archive": "rec",
"preset": "TAX_IN"
},
{
"desc": [ "Account statement", "bank statement", "bank receipts", "Kontoauszug", "Bank Auszug", "Bank Belege", "Zahlungsavis" ],
"archive": "rec",
"preset": "ACC_IN"
},
{
"desc": [ "Incoming contract", "purchase contract", "purchasing contract", "rental contract", "Eingehender Vertrag", "Kaufvertrag", "Mietvertrag" ],
"archive": "rec",
"preset": "CONTRACT_IN"
},
{
"desc": [ "Outgoing contract", "maintenance contract", "loan contract", "sales contract", "Ausgehender Vertrag", "Wartungsvertrag", "Darlehensvertrag" ],
"archive": "rec",
"preset": "CONTRACT_OUT"
},
{
"desc": [ "Payroll documents", "wage slip", "Pay slip", "Salary", "Lohnunterlagen", "Lohnzettel" ],
"archive": "rec",
"preset": "WAGE"
},
{
"desc": [ "In all other cases, if no matching JSON array element has been found so far", "Brief", "Kundenanfrage", "Auswertung", "BWA", "Jahresabschluss", "Bilanz", "GuV", "Notar", "Satzung", "Mitarbeiter", "Handelsregister", "Registergericht", "Anforderung", "Lastenheft" ],
"archive": "doc",
"preset": "INBOX"
}
]
\```

Example output to return:

\```json
{
"archive": "doc",
"preset": "INBOX"
}
\```

3. Automatische Verschlagwortung innerhalb eines Archivs

In der zweiten Stufe kann ein Ollama Modell verwendet werden, um die Meta-Daten eines Dr.DOC Datensatzes automatisch aus dem OCR Text zu laden (Extraktion) und zu formattieren.

3.1. Neuen Document Encoder erstellen für den OCR Text

Es soll festgelegt werden, wie, welcher Document Encoder den OCR Text verarbeiten soll. In diesem Fall soll der DrDoc.WebServer.AiTextDocumentEncoder diese Aufgabe übernehmen. Dafür müssen wir einige Einstellungen setzen, damit klar ist, welches KI Modell, welcher Endpoint verwendet werden soll und wie der Response vom KI Modell verarbeitet weren soll. Wir übergeben in einem Prompt dem gewählten Modell den OCR Text mit einer entsprechenden Aufgabe. Die Antwort können wir in einem weiteren Schritt verarbeiten (rekursive Archivierung), z.B. indem der KI Response JSON Text an einen JSON Document Encoder übergeben wird (siehe 3.2.).

z.B. config/recursive/ki-er:

Property Name Property Value
Bschreibung
Property Value
Beispiel Wert
Enabled Aktivieren true
Proto_Type DrDoc.WebServer.AiTextDocumentEncoder DrDoc.WebServer.AiTextDocumentEncoder
Proto_Extension Extension *.txt *.txt
Selector_ArchiveName Archiv z.B. doc
Argument1 Ollama Endpoint / Server Adresse http://192.168.111.21:8080
Argument2 Ollama Model Name z.B. llama3
Argument3 Propmpt Text.
Im Text wird [ocr} mit dem OCR Text ersetzt.
Format the following Invoice text to text/xml, EN 16931, CrossIndustryInvoice, Schema "urn:cen.eu:en16931:2017#conformant#urn:zugferd.de:2p2:extended":
Argument4 Optional: Format. Mögliche Werte: json oder leer.
Wenn im nächsten Sschritt ein JSON Document Encoder verwendet wird, bitte json angeben.
z.B. json
Argument5 Optional: Regular Expression für KI Result. Es wird der erste erfolgreiche Match verwendet. (?<=(?:\`\`\`)(?:xml)?\r?\n)((?:.|\r|\n)+?)(?=\r?\n(?:\`\`\`)\r?\n)
Argument6 Request Mode. Mögliche Werte: chat oder generate z.B. generate
Argument7 Filename + Extension für rekursive Archivierung / Document Encoder,
siehe "3.2. Neuen Document Encoder erstellen, für den JSON Text"
ki.json
Recursive Rekursive Document Encoder config/recursive/RE JSON

3.2. Neuen Document Encoder erstellen, für den JSON Text

Wenn der Response vom KI Modell ein JSON Text ist, können die Eigenschafts-Werte aus dem Objekt bestimmten Dr.DOC Feldern zugewiesen werden (Mapping). Das machen wir über Dr.DOC Feldauswahlen. z.B. config/recursive/RE JSON:

Property Name Property Value
Bschreibung
Property Value
Beispiel Wert
Enabled Aktivieren true
Proto_Extension Extension *.json *.json
Selector_ArchiveName Name des Archivs rec
MapFieldSelectionName Feldauswahl Bezeichner für das Mapping DD_JSON
MapFieldSelectionType Feldauswahl Typ für das Mapping IMPORT_ASCII

3.3. Neue Feldauswahl erstellen für JSON Import

  1. Starten Sie den Dr.DOC Client am Server im Admin Modus und melden Sie sich als Benutzer PUBLIC an
  2. Wählen Sie im Menü: Einstellungen -> Feldauswahl für -> ASCII-Import
  3. Legen Sie eine Neue Feldauswahl an: DD_JSON

Beispiel 1: Alle Array Elemente in Tabellenspalte übertragen: JSON: { Property1: [ { SubProperty: "value 1" }, { SubProperty: "value 2" }, ] } Feldauswahl: Property1/*/SubProperty

Beispiel 2: Artikelanzahl holen und "1" eingeben, falls nichts gefunden wurde JSON: { Items: [ { Quantity: "" }, { Quantity: "3" }, ] } Feldauswahl: Items/*/Quantity"1"?

Beispiel 3: Umsatzsteuersatz holen und "%" hinten als Suffix anfügen JSON: { Items: [ { VatTaxRate: "19.0" }, { VatTaxRate: "7.0" }, ] } Feldauswahl: Items/*/VatTaxRate"%"

Beispiel 4: Bezeichner "Name" oder alternativ Nummer "ID" laden JSON: { ID: "123" } Feldauswahl: Name|ID


Installation: Ollama einrichten

Installation: Ollama einrichten

Ollama einrichten

Ollama ist ein Tool für die lokale Ausführung großer neuronaler Netzmodelle / LLMs. Der Ollama Endpoint kann ein anderer Server sein als der, auf dem Dr.DOC installiert ist (OLLAMA_HOST). Es ist eine Ausführung des Ollama Servers im Rechenzentrum oder geeignetem Server im Unternehmen möglich. Es wird eine große Zahl von KI Modellen angeboten, mit attraktiven Lizenzmodellen für die kommerzielle Nutzung (z.B. MIT Lizenz). Für wenig erfahrene Administratoren, wenig GPU Leistung und wenig Linux Erfahrung empfehlen wir die Windows Installation. Bitte beachten Sie die erforderlichen Ressourcen je Modell.

A: Windows

1. Installieren Sie ollama auf einem geeigneten Server, z.B. mit GPU und installiertem CUDA. https://ollama.com/download/windows Es kann eine andere Maschine sein, als die, auf der Dr.DOC Web läuft.

2. ggf. Ollama Parameter ändern SET OLLAMA_HOST=192.168.111.21:8080 SET OLLAMA_MODELS=D:\ollama\models

3. Model laden ollama pull <model> z.B. ollama pull llama3

4. Ollama Server starten ollama serve

B: Linux: GPU und CUDA Treiber installieren


# ggf. GPUCUDA Treiber installieren
# CUDA installiert?
nvidia-smi

# ggf. Alle Nvidia treiber entfernen für eine saubere CUDA Installation
# apt remove --autoremove --purge -V nvidia-driver\* libxnvctrl\*

# CUDA Toolkit installieren, je nach Plattform - bitte folgende Befehle an Ihre Grafikkarte anpassen (siehe Link)
# https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=24.04&target_type=deb_network
# https://docs.nvidia.com/datacenter/tesla/driver-installation-guide/index.html
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-8
# sudo apt-get -y install cuda-toolkit
# sudo apt-get -y install cuda

# Treiber installieren
# sudo apt-get -y install nvidia-open
# sudo apt-get -y install cuda-drivers-570
sudo apt-get -y install cuda-drivers

# Env PATH anpassen
export PATH=/usr/local/cuda/bin:$PATH

# CUDA installiert?
nvcc --version
nvidia-smi
cat /proc/driver/nvidia/version
grep nvidia /etc/modprobe.d/* /lib/modprobe.d/*
# Nach Modul/Treiber Änderung evtl. initramfs Archive in /boot updaten
# sudo update-initramfs -u

# neu starten
systemctl reboot

B: Linux: Ollama installieren

# Doku: https://github.com/ollama/ollama/blob/main/docs/linux.md
curl -fsSL https://ollama.com/install.sh | sh

# Installationsort rausfinden
whereis ollama

sudo useradd -r -s /bin/false -U -m -d /usr/local/bin/ollama ollama
sudo usermod -a -G ollama $(whoami)

# Hostname und IP dieser Maschine rausfinden
hostname && hostname -I

# Env PATH anpassen
export OLLAMA_HOST=159.100.240.33:80

# Bind und Listen auf niedrigen Ports erlauben, z.B. Port 80 erlauben
sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/ollama

# Ollama Dienst erstellen
# ggf. IP und Port anpassen
sudo bash -c 'cat <<'EOF' >> /etc/systemd/system/ollama.service
[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
Environment="OLLAMA_HOST=159.100.240.33:80"

[Install]
WantedBy=default.target

EOF'

# Ollama Dienst laden und starten
sudo systemctl daemon-reload
sudo systemctl enable ollama
sudo systemctl restart ollama

# Ollama Installation prüfen
/usr/local/bin/ollama --version
sudo systemctl status ollama

# Optional: Firewall anpasen; nur noch Zugriffe vom Netzwerk in dem Dr.DOC läuft bzw. der Dr.DOC Maschine aus zulassen
# FW Port öffnen
sudo ufw status
# ssh erlauben
sudo ufw allow proto tcp to any port 22
# sudo ufw allow proto tcp to any port 8081
# sudo ufw allow from 192.168.1.50
# FW nur folgende externe Remote IPs zulassen (statt Auth)
sudo ufw allow from 217.92.78.156 to any proto tcp port 80
# FW aus dem internen Netzwerk erlauben
sudo ufw allow from 192.168.1.0/24 to any proto tcp port 80
sudo ufw allow from 159.100.240.0/24 to any proto tcp port 80
# FW prüfen, bevor sie aktiv wird, da SSH Verbindungen und Remotezugriff gekappt werden könnte
sudo ufw status
sudo ufw enable
sudo ufw reload

# Ollama Modell laden
# Bitte Hardware Ressourcen für das jeweilige KI Modell prüfen
/usr/local/bin/ollama pull llama3.3:70b

# Ollama Modelle auflisten
/usr/local/bin/ollama list

# Läuft das Modell auf der GPU?
/usr/local/bin/ollama ps && nvidia-smi

# Ollama Modell starten zum testen
/usr/local/bin/ollama run llama3.3:70b

# Ollama aktualisieren
/usr/local/bin/ollama update

# Ollama API Test
http://159.100.240.33/api/version

# Logs
journalctl -u ollama --no-pager

# Ollama API Doku
# https://github.com/ollama/ollama/blob/main/docs/api.md
Diese Website verwendet aus technischen Gründen Cookies für das Caching bzw. Bereitstellen von Session-bezogenen Inhalten. Diese Website verwendet Cookies und nutzt Website Tracking-Technologien von Dritten, um ihre Dienste anzubieten, stetig zu verbessern und Werbung entsprechend der Interessen der Nutzer anzuzeigen.
Ich bin mit der Datenschutzerklärung einverstanden und kann meine Einwilligung jederzeit mit Wirkung für die Zukunft widerrufen oder ändern.
Aus Gründen der Vernunft und besseren Lesbarkeit verzichten wir auf die gleichzeitige Verwendung der Sprachformen männlich und weiblich. Sämtliche Personenbezeichnungen gelten daher gleichermaßen für alle Geschlechter.