Witam!
Dzięki wspaniałemu projektowi voice assistant @Krzysztof_M zacząłem zabawę z komendami głosowymi. Mój asystent konwersacji to Gemini 2.0 Flash, nadaje się bardzo dobrze do zarządzania domem, niestety brakuje mu “aktualnej” wiedzy na temat świata. Celem tej konfiguracji jest możliwość przesłania pytania do API Perplexity,
Na co dzień jestem użytkownikiem Perplexity.ai, niestety brakuje jakiejkolwiek integracji z Home Assistant. Postanowiłem go zintegrować za pomocą proxy https://www.litellm.ai oraz GitHub - acon96/home-llm: A Home Assistant integration & Model to control your smart home using a Local LLM
Podobny efekt można osiągnąć używając rest api lub pisząc własną integrację. Zastosowanie proxy litellm pozwala dodać więcej modeli w tym darmowych z https://openrouter.ai. Pozwala też dodanie kilku modeli konwersacji z różnym system promptem, np. w celu ograniczenia niepożądanych treści w odpowiedziach dla dzieci.
Jak to działa:
- OK Nabu - wybudza asystent
- Zapytaj Sonar “pytanie”
- treść pytania zostanie przesłana do API Sonar
- odpowiedź wróci do asystenta głosowego
Konfiguracja:
- litellm (należy podać klucz API zamiast ${PERPLEXITYAI_API_KEY}) - docker-compose.yaml:
services:
litellm:
container_name: litellm
image: ghcr.io/berriai/litellm:main-latest
ports:
- "4000:4000"
volumes:
- /sciezka_z_config/config.yaml:/app/config.yaml
command: [ "--config", "/app/config.yaml", "--port", "4000"]
environment:
PERPLEXITYAI_API_KEY: ${PERPLEXITYAI_API_KEY}
- litellm - config.yaml
litellm_settings:
drop_params: true
model_list:
- model_name: sonar
litellm_params:
model: perplexity/sonar
api_key: "os.environ/PERPLEXITYAI_API_KEY"
- Używając HACS instalujemy GitHub - acon96/home-llm: A Home Assistant integration & Model to control your smart home using a Local LLM
- Dodajemy nowe urządzenie Local LLM Conversation:
a) Generic OpenAI Compatible API
b) Podajemy IP (bez http), port 4000, model sonar, podstawowe hasło to sk-1234
c) Na kolejnej stronie wybieram “No control”, odznaczam Enable in context learning (ICL) examples, Temperature 0,2, usuwam wszystkie dodatkowe atrybuty
d) mój kontekst do odpowiedzi na pytania
You answer questions about the world in a concise and truthful manner. Use plaintext and Polish language. Responses should be limited to a few sentences. Remove citation brackets [1][2][3] from answers.
Current time is {{ (as_timestamp(now()) | timestamp_custom("%H:%M", local=True)) }}, current date is {{ (as_timestamp(now()) | timestamp_custom("%Y-%m-%d", local=True)) }}. If the response includes a date from the current week, provide the day of the week.
- Pora stworzyć automatyzację, przekazującą pytania do Sonar:
alias: Zapytaj Sonar
description: ""
triggers:
- trigger: conversation
command:
- Zapytaj Sonar {pytanie}
conditions: []
actions:
- action: conversation.process
metadata: {}
data:
agent_id: conversation.llm_model_sonar_remote
text: "{{ trigger.slots.pytanie }}"
response_variable: odpowiedz
- set_conversation_response: "{{ odpowiedz.response.speech.plain.speech }}"
mode: single
Efekt: