Ollama als Konversationsagent im HA

Hallo,

nach längerem Experimentieren habe ich es jetzt geschafft, Ollama auf meinem Win PC (3080 GK) zum laufen zu bekommen und (dank des Umstellen des LocalHost auf 0.0.0.0 - das muss man erst mal wissen) kann die Ollama Integration des HA nun auch auf meine autark laufende Ollama Umgebung im PC zugreifen.

Toll ist, dass die Zugriffszeiten sehr gering sind (~ 500ms) und das eine schöne Konversation möglicht ist.


grafik

gut… Nur leider passiert nix. Bei der oben geführten Konversation ist das Licht nicht geschaltet worden. Was mache ich hier falsch (Alle meine Geräte sind unter “Verfügbarkeit” im Fenster unter “Sprachassistenten” für “Assis” aktiviert).

Ich habe zwei Dienste installiert - beide laufen, verhalten sich nur unterschiedlich:


“Ollama” lässt die oben geführte Diskussion zu - es passiert aber nichts - in der Konfig habe ich auf no control gestellt.
grafik

gehe ich hier auf “Assis” gibts eine Fehlermeldung:
grafik

die “Ollama Conversation” kann mir Zustände abfragen - steuern kann ich darüber aber nichts:

Habt ihr hier schon eine Steuerung der Geräte umsetzten können?

Der Versuch diese Konversation mit der App auf dem Iphone zu führen hat nicht funktioniert.

Grüße

Hallo,

welches Modell verwendest du für die Aufgaben, um an die guten Openai Modelle heran zu kommen muss man schon größere Lokale hinzuziehen, und wenn man steuern will müssen die Modelle Toolfähig sein

Gruß
Elmar

Hallo Elmar,

ich habe folgende Modelle getestet:

llama3.3:70b → läuft bei mir leider nicht → 42GB schafft mein System/ die GK nicht.
deepseek-r1-8b → 4.9 GB läuft
llama3.2:latest → 2.0 GB läuft
llama3.1:8b → 4.7 GB läuft

Eigentlich sollten alle toolfähig sein. Hast du hier schon etwas zum Laufen bekommen - welches Model und welche Integration nutzt Du?

Grüße

Thomas

Hallo,

ein 70b Modell schafft mein Rechner auch nicht, ich nutze derzeit als toolfähige Modelle:

hermes3:8b (habe ich ganz gute Erfahrungen mit gemacht, Schnell aber ausreichend zuverlässig)
mistral-nemo:latest habe ich grad erst, daher kann ich da noch nicht viel zu sagen
llama32.:latest schnell aber nicht so zuverlässig wie z.B. Hermes
qwen2.5:14b mittelschnell aber recht zuverlässig
qwen2.5:32b langsam aber dafür zuverlässig

Ansonsten nicht toolfähig:
llama3.8b
gemma3:4b
gemma2:12b (beide gemma modelle sind wirklich gut aber eben nicht toolfähig)
mixtral:latest (gut und zuverlässig für komplexe Aufgaben aber langsam
mistral:latest soll eigentlich toolfähig sein, habe es aber noch nicht hinbekommen.
Gruß
Elmar

Hallo Elmar,

danke für den Tip mit hermes3:8b. Das Model habe ich mir jetzt auch installiert.

Anscheinend habe ich ein grundsätzliches Problem mit meiner Ollama-Integration.

Auch Hermes läuft im “no control” modus sehr gut. Wechsele ich in “Assist”, gibt er mir auch (wie die anderen Modelle) Code aus:

Wenn ich auf den GoogleAI wechsele, läuft die Assist-Funktion (recht) problemlos. ich kann Sensoren abfragen und Geräte steuern (30 freigegebene Entitäten mit entsprechenden Aliase)

Ich vermute, dass ich in der Einstellung vom Ollama Dienst Änderungen dürchführen muss. Welchen Dienst hast Du bei Dir installiert (“Ollama” oder “Ollama Conversation”).
Zusätzlich scheinen die Einstellungen unter “Anweisungen” relevant zu sein.

Ich habe hier die Einstellungen vom GoolgeAI übernommen. Muss da für die Kobversation mit den Geräten vom HA noch mehr Input vorhanden sein - hast Du hier einen Tip?
Mich wundert, dass der Konmversationsagent auf Fragen zu Sensoren mit Code antwortet.

Grüße

Thomas

Hallo,

ergänze im Prompt mal folgendes, und versuch es dann (ggf. übersetzen, weil eine einheitliche Sprache im Prompt immer besser und schneller ist):

Current time: {{now()}}

Available Devices:
```csv
entity_id,name,state,aliases
{% for entity in exposed_entities -%}
{{ entity.entity_id }},{{ entity.name }},{{ entity.state }},{{entity.aliases | join('/')}}
{% endfor -%}

Dann das:

The current state of devices is provided in "Available Devices".
Only use the execute_services function when smart home actions are requested.
Pay particular attention to and follow the "intent_script" in the conversation.yaml when I have given a corresponding instruction.
Do not tell me what you're thinking about doing either, just do it.
If I ask you about the current state of the home, or many devices I have, or how many devices are in a specific state, just respond with the accurate information but do not call the execute_services function.
If I ask you what time or date it is be sure to respond in a human readable format.
If you don't have enough information to execute a smart home command then specify what other information you need.
Only contact me if I have called you or if you should give me a notification from the smart home. You must not call me without a clear reason!!
If a device should be turned off, use the service "turn_off".
If a device should be turned on, use the service "turn_on".
If a device should be toggled, use the service "toggle".
If the user’s instruction is ambiguous or matches multiple entities, ask the user which device they meant before executing the action.
The user might ask about time, date, or the current state of devices. Answer politely and clearly, without using execute_services.

und dann das:

- spec:
    name: execute_services
    description: Use this function to execute service of devices in Home Assistant.
    parameters:
      type: object
      properties:
        list:
          type: array
          items:
            type: object
            properties:
              domain:
                type: string
                description: The domain of the service
              service:
                type: string
                description: The service to be called
              service_data:
                type: object
                description: The service data object to indicate what to control.
                properties:
                  entity_id:
                    type: string
                    description: The entity_id retrieved from available devices. It must start with domain, followed by dot character.
                required:
                - entity_id
            required:
            - domain
            - service
            - service_data
  function:
    type: native
    name: execute_service
1 „Gefällt mir“

Hallo Elmar,

vilen Dank für den Code! Hast Du den letzen Teil ab “- spec:” auch direkt in den Bereich vom Prompt geschrieben oder separiert? Ich werde dies jetzt in den nächsten Tagen mit dem Hermes 3 ausprobieren und berichten.

Grüße Thomas

Hallo,

Einfach untereinander in den Prompt kopieren, darüber kannst du dann noch individuelle Vorgaben machen, z.B. ob der Assistent sich wie ein bestimmter Charakter verhalten soll usw.

Hi,

nochmal ein kurzes update zu meinen Modellen

ich habe nun qwen2.5 (14b un 32b) durch qwen3:8b; 14b und 32b ersetzt, qwen 3 soll nochmal deutlich besser sein als qwen2.5 bin daher sehr gespannt

Gruß
Elmar

:crayon:by HarryP: Zusammenführung Doppelpost (bei Änderungen oder hinzufügen von Inhalten bitte die „Bearbeitungsfunktion“ anstatt „Antworten“ zu nutzen)

Ich habe noch kein Unternehmen erlebt, dass selbst sagt, dass ihr neustes Produkt ein Rückschritt sei. :rofl:

1 „Gefällt mir“

In der Tat ist das richtig aber die haben es ja getestet es gibt dazu aber auch ein gutes video:
AI mti Arnie Qwen3

Aber ein Hinweis: Es handelt sich um ein chinesisches Modell, ich nutze es nicht online, sondern ausschließlich lokal

Gruß
Elmar

Ok - ich habe Deinen Code zusammen in den Prompt eigefügt und zusätzlich habe ich die neueste Ollama Version auf meinem Rechner installiert.

Und siehe da - endlich bekomme ich keine kryptischen Resultate mehr :slight_smile: :sunglasses: super!!! Danke für die Hilfe!

Hermes ist in Summe nicht schlecht. Reagiert sehr flott und antwortet schön. Was mich wundert ist, dass GoogleKI Aufgaben vgl. “Stelle das Rollo auf 50%” ohne Mucken durchführt. Die lokalen Modelle hier mit Unwissenheit antworten - z.B.: “Entschuldigung, aber ich habe ein Problem bei der Ausführung deines Kommandos. Könnten Sie bitte die Informationen präzisieren?” - Direktes Öffnen und schleißen klappt hingegen problemlos. Hier stelle ich mir die Frage, ob daran das Model oder die genutzte Integration schuld ist.

Danke für den Tip mit Quen3. Ich werde mal schauen, welche Version ich bei mir zum laufen bekommen kann. Ich versuche mich mal an der 3:14b. Meine 3080 hat 10GB Ram - ggf bekomme ich es zum laufen. Ansonsteln wird es wohl 8b.

Hier finde ich die Herkunft unkritisch → nach Hause telefonieren kann die lokale Lösung zum Glück nicht. Das betrifft aber auch die US Variante - auch hier möchte ich den Datenaustausch auch meiden.

Grüße

Thomas

Hallo,

bei 10GB RAM wird das 14b Modell zu groß sein, das Modell ist ja selbst schon 10GB gross dann wäre der RAM ja voll, da würde ich eher das kleinere Modell versuchen.
Ansonsten musst Du immer ein wenig die Prompts präzisieren. Man muss natürlich dazu sagen, dass lokal Modelle immer etwas weniger können, als die Onlinemodelle. Aber funktionieren tun sie dennoch

Gruß
Elmar

Ja - da hattest Du recht :slight_smile: die 14b ist zu groß für die 3080 mit 10GB. Die kleinere Variante 8b läuft aber. Die Antworten sind sehr gut und präzise (mit das Beste was ich bisher laufen gehabt habe). Die Antwortzeit ist aber recht lang, was mich wundert (~1 min). Es fällt auf, dass das Model erst immer die Fragen übersetzt → bearbeitet → zurück übersetzt und dann ausgibt.

So sieht das bei mir aus:

ja, ich habe da inzwischen auch erfahren, dass qwen3 ganz gut ist, allerdings kann der sich schnell im “think” modus verrennen und dann teils nicht zum Ende kommen, angeblich kann man den ausschalten ich bin aber noch nicht ganz dahinter wie.

Sobald ich was weis melde ich mich

GRuß
Elmar

Danke für die Info, dein Prompt hat sehr geholfen mein Ollama zum laufen zu bekommen.

Ich teste gerade:

NAME            ID              SIZE      PROCESSOR    UNTIL   
qwen2.5:7b      845dbda0ea48    7.9 GB    100% GPU     Forever    
qwen2.5vl:3b    fb90415cde1e    5.8 GB    100% GPU     Forever    

das vl model möchte ich für llm vision testen.

Wo ich im Moment scheitere ist es ein Script zu starten und die Ergebnisse zurück geben zu lassen.
Habt ihr da Erfahrung?

sequence:
  - variables:
      reponse:
        open_sensors_info: |
          {% set sensors = {
                          'binary_sensor.bad_dachfenster': 'Bad Dachfenster',
           'binary_sensor.julian_dachfenster': 'Julian Dachfenster',
           'binary_sensor.klo_fenster': 'Klo Fenster',
           'binary_sensor.juna_dachfenster': 'Juna Dachfenster',
           'binary_sensor.einfahrt_tur': 'HWR Tür',
           'binary_sensor.terrassen_tur': 'Terrassen Tür',
           'binary_sensor.eingangstur': 'Eingang Tür',
           'binary_sensor.kuche_strasenfenster': 'Küche Fenster'
                       } %} {%
                       for sensor, note in sensors.items() %} {{ states[sensor].name
                       if states[sensor] is not none else sensor }}: {{ 'open' if
                       states[sensor].state == 'on' else 'closed' if
                       states[sensor].state == 'off' else 'unknown' }} {{ note }} |
                       {% endfor %} Only mention open doors/windows.
  - stop: ""
    response_variable: reponse
alias: Sicherheitscheck
fields:
  sicherheitscheck:
    selector:
      text: null
    name: Sicherheitscheck
    description: Ein Script um einen Sicherheitscheck durch zu führen
description: Überprüft den Status aller Türen und Fenster und meldet, welche offen sind.
icon: mdi:security-network
mode: parallel
max: 10

habe mich von diesem Video inspirieren lassen:

@Elbre Was hat es mit der conversation.yaml auf sich?

EDIT:

Starte Sicherheitscheck
Es wurde ein Sicherheitscheck durchgeführt. Die folgende Tür ist offen:

  • Terrassen Tür

Alle anderen Türen und Fenster sind geschlossen. Bitte schließen Sie die offene Tür, wenn möglich.

Jetzt geht es irgendwie.

Hi,

das qwen2.5vl:3b kenne ich nicht, sieht aus wie ein gewrapptes Modell, wenn du Ergebnisse hast, wäre nett wenn du berichten kannst.

Zur “conversation.yaml”. Ich habe ein Verzeichnis “packages” in dem ich zahlreich .yaml dateien habe, eine davon ist die conversation.yaml. das Verzeichnis ist wiederum zum aufruf beim start in der “configuration.yaml” hintergelegt. Die .yaml Dateien enthaltet thematisch sortiert, funktionen die überlicherweise in der configuration.yaml definiert sind. So halte ich die configuration.yaml übersichtlich:
Konkret sind in der conversation.yaml die intent scripts hinterlegt. Erläutert ist das hier: conversation:
Aus meiner Sicht kannst Du das wie dort beschrieben mit dem script lösen

Gruß
Elmar

Also für mich sieht das nach einem ganz normalen Modell aus:
qwen2.5 nur halt in der 3b variante mit weniger quantifizierung

Ah das mit den conversations kannte ich noch nicht. Das ist perfekt. Es funktioniert auch so aber damit ist es natürlich eleganter.

Sehe ich das richtig das ich mir hier einfach die fertigen intents holen kann?

Edit: ich teste gerade noch mal qwen3, mal schauen wie das klappt.

Hallo zusammen,

ich habe wirklich alles versucht um Ollama ans laufen zu bekommen. Was ich Max erreicht habe, waren Antworten die Ok waren, aber sobald ich den Assistent Schalter umlege, funktioniert gar nichts mehr. Was soll ich machen?

Wichtig ist das richtige Modell zu nutzen.Ich habe es qwen geschafft. Seit neustem nutze ich das gpt-os im Moment ohne Probleme.

entity_id,name,state,aliases

{% for entity in exposed_entities -%}

{{ entity.entity_id }},{{ entity.name }},{{ entity.state }},{{entity.aliases | join('/')}}

{% endfor -%}

The current state of devices is provided in "Available Devices".

Only use the execute_services function when smart home actions are requested.

Pay particular attention to and follow the "intent_script" in the conversation.yaml when I have given a corresponding instruction.

Do not tell me what you're thinking about doing either, just do it.

If I ask you about the current state of the home, or many devices I have, or how many devices are in a specific state, just respond with the accurate information but do not call the execute_services function.

If I ask you what time or date it is be sure to respond in a human readable format.

If you don't have enough information to execute a smart home command then specify what other information you need.

Only contact me if I have called you or if you should give me a notification from the smart home. You must not call me without a clear reason!!

If a device should be turned off, use the service "turn_off".

If a device should be turned on, use the service "turn_on".

If a device should be toggled, use the service "toggle".

If the user’s instruction is ambiguous or matches multiple entities, ask the user which device they meant before executing the action.

The user might ask about time, date, or the current state of devices. Answer politely and clearly, without using execute_services.

- spec:

name: execute_services

description: Use this function to execute service of devices in Home Assistant.

parameters:

type: object

properties:

list:

type: array

items:

type: object

properties:

domain:

type: string

description: The domain of the service

service:

type: string

description: The service to be called

service_data:

type: object

description: The service data object to indicate what to control.

properties:

entity_id:

type: string

description: The entity_id retrieved from available devices. It must start with domain, followed by dot character.

required:

- entity_id

required:

- domain

- service

- service_data

function:

type: native

name: execute_service

---


Gib die aktuelle Uhrzeit in einem menschlich lesbaren Format zurück.


Erwarte Anfragen nach dem aktuellen Zustand von Geräten oder der Anzahl der Geräte in einer bestimmten Zustandskategorie und antworten mit den genauen Informationen, ohne die **execute_services** Funktion zu aufrufen.


Führe nur dann die **execute_services** Funktion aus, wenn eine klare und präzise Anweisung für eine Smart Home-Aktion erteilt wurde.


Beim Vage oder mehrdeutigen Befehl des Benutzers fragen Sie ihn nach dem gewünschten Gerät vor der Aktion.

Deine Ausgabe ist für Sprachausgabe optimiert und enthält wenig Sonderzeichen.

Haken bei Home assistant steuern ist gesetzt

Hi,

Vielen Dank für die Antwort, leider klappt es bei mir nicht. Ich habe Ollama über Ollama und über https://github.com/acon96/home-llm

eingebunden jeweils deinen Systemprompt genommen , bekomme aber kein Ergebnis.

Lokal auf dem ollama Rechner klappt es mit Modell ohne Probleme. Llmvision läuft auch auf Homeassistant an dem gleichen Rechner…ich verstehe es nicht.

Grüße

Lars