Perplexity jako rozszerzenie możliwości Voice Assistant

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:

  1. 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}
  1. 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"
  1. Używając HACS instalujemy GitHub - acon96/home-llm: A Home Assistant integration & Model to control your smart home using a Local LLM
  2. 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.
  1. 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:

8 polubień

Cześć,
Jakie IP wpisać przy dodawaniu nowego urządzenia? Jak wpiszę api.perplexity.ai to daje się skonfigurować, ale przy zapytaniu dostaję komunikat:
“The generation request timed out! Please check your connection settings, increase the timeout in settings, or decrease the number of exposed entities.”.
Drugie pytanie: dlaczego hasło to sk-1234? Nie podajemy tu klucza api?
Dzięki

Podajesz IP na którym chodzi LiteLLM, token jest taki prosty bo to domyślny token LiteLLM.

1 polubienie

Może głupie pytanie. Ale czemu nie używasz dodatku Acona do podstawowych zapytań a jedynie w przypadku pytań o wiedzę aktualna?

Gemini AI lepiej mi się sprawdza w zarządzaniu domem.

Masz lokalnie postawione czy też online? Niedawno szukałem API do perplexity I nie było. Fajnie że w końcu jest. Ale rozumiem że nie można wybrać modelu? Bo widzę że w apce jest Gemini

W tym poradniku odpytujesz API Perplexity ich model nazywa się Sonar. Nie ustawia się tak jak w apce lub przeglądarce modelu do formatowania odpowiedzi.

Dzięki. Czyli dobrą opcją byłby dedykowany model lokalny. Jak w repozytorium acon. Ciekawe jak działa model od nabu casa. Testowałeś może?

Nie mam sprzętu na lokalne modele, używam darmowego API od Google. Polecam działa całkiem dobrze: https://aistudio.google.com

Ja kupiłem używaną Teslę P40 i mam plan poprawić dataset od Acona i zrobić fine tuning

1 polubienie

Chciałbym ci bardzo podziękować za ten poradnik bo zainspirowało mnie to w końcu do uruchomienia asystenta głosowego w moim domu.

Mam perplexity pro, wygenerowałem klucz z api, automatyzacja przekazania pytania do local llm działa.

Natomiast odpowiedzi nie są zbyt satysfakcjonujące. Są dużo uboższe niż wpisałbym zapytanie ręcznie przez czat perplexity. Jest jakiś powód czemu te odpowiedzi z API są dużo głupsze?

Używam tutaj podstawowego api sonar możesz zmienić na sonar-pro. Do tego rozmiar kontekstu mówi mniej więcej jak długie mają być odpowiedzi.
Ostatnio wprowadzono w api opcję web_search_options/search_context_size gdzie można podać jak dużo ma przeszukiwać. Wszystkie to opcje zwiększają koszt zapytań api.

Ok dzięki wielkie popróbuję jeszcze. Nie wiem z jakiego powodu ale już na następny dzień odpowiedzi na te same pytania były o wiele lepsze mimo że nic nie zmieniałem.