Inhaltsverzeichnis
Erste Erfahrungen mit einem KI Model wie DeepSeek für die Integration in die Oracle Datenbank Welt
Aufgabe
Ziel ist es mit einen OpenSource LM, Lokal installiert, die Eingabe eines Anwenders zu verstehen und in passendes SQL für eine freie Suche in einer Oracle Datenbank umzuwandeln.
Es soll zum Beispiel nach der Menge eines verfügbaren Produkts gefragt werden oder nach einen Dokument gesucht werden können.
In APEX soll über eine einzigen Prompt die ganze Datenbank abgefragt werden können.
Im ersten Schritt wird das LM noch nicht direkt in die Datenbank geladen (Stichwort Vector Search) sondern soll nur das SQL per Rest Service erzeugen. Bzw. versuchen das DB Model zu verstehen und Fragen zum Datenmodel beantworten.
Dazu benötigen wir die folgenden Komponente:
REST-Service Der Service empfängt den User-Text und sendet ihn an das Sprachmodell (LM) und lieft die SQL Query zurück
Sprachmodell (LM): Das Modell analysiert den Text, zerlegt ihn und generiert eine SQL-Abfrage basierend auf einem Metamodell (Datenmodell-Definition).
Entity Recognition (NER)-Modell Um Begriffe wie „how much“ (wie viel), „remaining“ (verbleibend) oder „inventory“ (Bestand) zu erkennen, Produkte und weitere Entitäten aus der Anwender Anfrage extrahieren muss das System die erkannte Fragestellug auf die Datenbank Welt „mappen“.
Datenmodell-Mapping: Eine Metadaten-Definition beschreibt die Struktur der Datenbank, anhand derer die SQL-Abfrage generiert wird.
Für die Implementierung wird als LM wird DeepSeek ⇒ https://huggingface.co/lmstudio-community/DeepSeek-R1-Distill-Llama-8B-GGUF verwendet.
Mehr Modelle von DeepSeek unter https://huggingface.co/deepseek-ai und https://www.deepseek.com/
DeepSeek Software bereitstellen
Modell einlesen
Model DeepSeek-R1 in in das lmstudio einlesen und aktiveren, Aufgaben dem Model beschreiben.
Zu meine Erstaunen klingen die ersten Vorschläge recht gut, auch scheint die Performance von meinen Notebook (Nvida RTX 4000 / i9 / 64GB Ram) ausreichend zu sein um mit dem Model doch recht zügig lokal arbeiten zu können.
LM auf Platte ablegen
Lm von https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Llama-8B/tree/main per GIT clonen.
mkdir C:\development\ki\model\deepseek-ai\ git lfs install git clone https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Llama-8B
CUDA Support auf der lokalen Maschine aktiveren
Für meine RTX 4000 Nivida Karte wird im ersten Schritt der CUDA Support für Windows 11 heruntergeladen, über https://developer.nvidia.com/cuda-downloads , mehr Erklärung unter https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html / https://docs.nvidia.com/cuda/cuda-quick-start-guide/index.html .
Installation mit den Default Einstellung durchgeführt, Wahrnung das kein Visal Studio installiert ist ignoreren, wir benötigen für Python nur die Basis Libs im ersten Schritt.
Und ich hoffe, das durch das überschreiben des aktuellen Grapikkarten Treibers mit der Version aus diesem Packet kein größere Problem auf dem Lenovo Notebook mit der RTX 4000 entsteht.
Version prüfen:
nvcc --version nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2025 NVIDIA Corporation Built on Wed_Jan_15_19:38:46_Pacific_Standard_Time_2025 Cuda compilation tools, release 12.8, V12.8.61 Build cuda_12.8.r12.8/compiler.35404655_0
Pfad zur CUDA Lib muss in den Windows System Pfaden hinterlegt sein!
Überhaupt mal was in Python zum Laufen bringen
Die Entwicklung findet unter Visual Code statt.
Im ersten Schritt ein Python Projekt anlegen und die Libs in die Umgebung laden. Dazu einen Prjekt Folder anlegen die Projekt Umgebung initaliseren.
C:\development\ki\oracle_prompt\.venv\Scripts> .\Activate.ps1 pip install torch torchvision torchaudio pip install spacy pyyaml transformers python -m spacy download en_core_web_sm python -m spacy download en_core_web_sm
Ein ersten Model für den NPR mit spacy laden:
import spacy import yaml nlp = spacy.load("de_dep_news_trf") import de_dep_news_trf nlp = de_dep_news_trf.load() doc = nlp("Wie vielen BMW Modell haben wir auf Lager") print([(w.text, w.pos_) for w in doc]) #---- nlp = spacy.load('en_core_web_sm') doc = nlp("Wie vielen BMW Modell haben wir auf Lager") for ent in doc.ents: print(f"{ent.text} - {ent.label_}")
Ausgaben:
[('Wie', 'ADV'), ('vielen', 'DET'), ('BMW', 'PROPN'), ('Modell', 'NOUN'), ('haben', 'VERB'), ('wir', 'PRON'), ('auf', 'ADP'), ('Lager', 'NOUN')] Wie - ORG BMW Modell - ORG Lager - PERSON
Noch nicht so ganz das erwartet Ergebnis …
DeepSeek laden
Nach der CUDA Installation torch mit den passenden Treibern für CUDA laden:
C:\development\ki\oracle_prompt\.venv\Scripts> .\Activate.ps1 S C:\development\ki\oracle_prompt> & c:/development/ki/oracle_prompt/.venv/Scripts/pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pürfen ob CUDA auch gefunden wird:
import torch print("CUDA available:", torch.cuda.is_available()) print("CUDA version:", torch.version.cuda) print("GPU Name:", torch.cuda.get_device_name(0))
Ausgabe:
CUDA available: True CUDA version: 12.1 GPU Name: NVIDIA RTX 4000 Ada Generation Laptop GPU
Das LM vom lokalen Git Repo von DeepSeek laden:
from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("C:\\development\\ki\\model\\deepseek-ai\\DeepSeek-R1-Distill-Llama-8B") model = AutoModelForCausalLM.from_pretrained("C:\\development\\ki\\model\\deepseek-ai\\DeepSeek-R1-Distill-Llama-8B")
Der Kern der Aufgabe - Mappen eines Datenmodell auf die Anfrage eines Anwenders
Das LM beschreibt recht zügig, wie der Rest Service aufgebaut werden kann um das LM abzufragen.
Quellen
- METASQL: A Generate-then-Rank Framework for Natural Language to SQL Translation - https://arxiv.org/pdf/2402.17144