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 asyncio
import openai
import re
from google import genai
from google.genai import types
import json
@@ -26,19 +27,27 @@ AI_PROVIDER = "ollama" # "openai", "google" oder "ollama"
OPENAI_API_KEY = "dein-key"
GOOGLE_API_KEY = "dein-key"
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.
Du kannst Linux-Befehle generieren. Antworte präzise und hilfsbereit."""
def get_system_prompt():
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 ---
async def get_ai_response(user_input):
async def get_ai_response(user_input, system_prompt): # <--- system_prompt hinzugefügt
if AI_PROVIDER == "openai":
client = openai.OpenAI(api_key=OPENAI_API_KEY)
response = client.chat.completions.create(
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
@@ -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)
response = client.chat.completions.create(
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