main.py aktualisiert

This commit is contained in:
2026-03-04 16:52:59 +00:00
parent 80acbbe1ff
commit d6c175db00

23
main.py
View File

@@ -5,6 +5,7 @@ import subprocess
import sqlite3 import sqlite3
import asyncio import asyncio
import openai import openai
import re
from google import genai from google import genai
from google.genai import types from google.genai import types
import json import json
@@ -26,19 +27,27 @@ AI_PROVIDER = "ollama" # "openai", "google" oder "ollama"
OPENAI_API_KEY = "dein-key" OPENAI_API_KEY = "dein-key"
GOOGLE_API_KEY = "dein-key" GOOGLE_API_KEY = "dein-key"
OLLAMA_BASE_URL = "http://x.x.x.x:11434/v1" # IP deines Ollama-Servers OLLAMA_BASE_URL = "http://x.x.x.x:11434/v1" # IP deines Ollama-Servers
# System Prompt: Sagt der KI, wer sie ist und was sie kann
SYSTEM_PROMPT = """Du bist der Pi-Orchestrator KI-Assistent.
Deine Aufgabe ist es, dem Nutzer zu helfen, Raspberry Pis zu verwalten und Docker-Container zu steuern. def get_system_prompt():
Du kannst Linux-Befehle generieren. Antworte präzise und hilfsbereit.""" conn = get_db()
nodes = conn.execute('SELECT * FROM nodes').fetchall()
conn.close()
node_info = ""
for n in nodes:
node_info += f"- Name: {n['name']}, IP: {n['ip']}, User: {n['user']}\n"
return f"""Du bist der Pi-Orchestrator KI-Assistent. Deine Aufgabe ist es, Befehle auf Raspberry Pis auszuführen. Du KANNST und SOLLST Befehle ausführen! Hier sind die aktuell verbundenen Nodes: {node_info} . WENN der Nutzer dich bittet, etwas zu tun (z.B. ping, update, docker installieren), dann formuliere erst eine kurze Antwort und füge am Ende die Befehle in genau diesem XML-Format hinzu: <EXECUTE target="IP_ADRESSE">befehl</EXECUTE> .WICHTIG: Verwende als target IMMER die IP-Adresse des Nodes. Bei Befehlen wie 'ping' oder 'top', die nicht enden, MUSS ein Limit gesetzt werden (z.B. ping -c 4 IP).Beispielantwort für 'sende einen ping an pi-06': Ich starte den Ping an pi-06 für dich. <EXECUTE target="192.168.1.10">ping -c 4 192.168.1.10</EXECUTE>"""
# --- KI FUNKTIONEN --- # --- KI FUNKTIONEN ---
async def get_ai_response(user_input): async def get_ai_response(user_input, system_prompt): # <--- system_prompt hinzugefügt
if AI_PROVIDER == "openai": if AI_PROVIDER == "openai":
client = openai.OpenAI(api_key=OPENAI_API_KEY) client = openai.OpenAI(api_key=OPENAI_API_KEY)
response = client.chat.completions.create( response = client.chat.completions.create(
model="gpt-4o", model="gpt-4o",
messages=[{"role": "system", "content": SYSTEM_PROMPT}, {"role": "user", "content": user_input}] messages=[{"role": "system", "content": system_prompt}, {"role": "user", "content": user_input}]
) )
return response.choices[0].message.content return response.choices[0].message.content
@@ -47,7 +56,7 @@ async def get_ai_response(user_input):
client = openai.OpenAI(base_url=OLLAMA_BASE_URL, api_key="ollama", timeout=20.0) client = openai.OpenAI(base_url=OLLAMA_BASE_URL, api_key="ollama", timeout=20.0)
response = client.chat.completions.create( response = client.chat.completions.create(
model="llama3", # Oder dein bevorzugtes Modell model="llama3", # Oder dein bevorzugtes Modell
messages=[{"role": "system", "content": SYSTEM_PROMPT}, {"role": "user", "content": user_input}] messages=[{"role": "system", "content": system_prompt}, {"role": "user", "content": user_input}]
) )
return response.choices[0].message.content return response.choices[0].message.content