ChatGPT / openAI dans Assist : qui a testé?

Bonjour à tous,
Utilisateur de google assistant, je teste actuellement Assist. Grace à extended_openai_conversation j’ai installé ChatGPT comme agent.
C’est très simple et on trouve plein de tutos pour cela.

C’est intéressant de parler à chatGPT plutot qu’à google assistant car on peut dépasser les simples ordres et questions sur les capteurs.

A terme, j’envisage d’installer une IA locale étant donné que c’est maintenant très accessible en francais.

Mais j’ai encore du mal à imaginer tout le potentiel et l’intérêt qu’on peut en tirer en domotique.

Je serais donc très intéressé par un retour d’expérience de ceux qui ont testé cela.
Qu’est ce qu’un agent IA peut apporter à la domotique au quotidien ?

Faudrait plutôt s’orienter vers Ollama, plutôt que ChatGPT / OpenAI

En fait ma question portait sur l’usage, pas la technologie.

Imagine que tous les retours d’expérience disent que cela n’apporte rien, il n’y aura pas de question de technologie. A l’inverse selon les usages qui pourraient être mis en valeur, on pourrait être amené à choisir une technologie, dimensionner un hardware et définir un budget…

Hello ! Alors je n’ai pas testé, mais suite à la dernière mise à jour de juin, j’ai très envie d’essayer :slight_smile: A terme le but serait de rendre la maison vraiment plus intelligente, avec une IA capable de faire des propositions d’amélioration pour optimiser la consommation d’énergie par exemple, par rapport à nos habitudes, etc. Aqara travaille d’ailleurs là dessus pour son Hub M3.
Avec une IA locale ce serait en effet pas mal. Ollama comprend il le francais par contre ? Sinon une intégration avec Mistral serait intéressante aussi !

J’ai l’impression que la dernière mise à jour apporte des fonctionnalités équivalentes à ce que j’ai pu voir en utilisant l’intégratino extended open ai.
Donc je te rejoins tout à fait.
Effectivement une seconde étape pourrait être une installation locale avec Mistral.

1 « J'aime »

Juste pour rebondir sur le sujet, il y a la vidéo suivante qui peut donner quelques idées (https://www.youtube.com/watch?v=ZtfPl8dmq2U)

Merci pour ce lien hyper pertinent !
Je viens d’implémenter cette idée pour l’aération de la maison. j’avais déjà un système qui comparait l’humidité absolue intérieure et extérieure pour me conseiller d’ouvrir / fermer les fenêtres afin de réduire l’humidité mais les messages étaient un peu barbants. Voilà une touche « d’humanité » :slight_smile:

Bonjour, je fais un petit hors sujet mais j’ai tenté de mettre en place openai conversation en suivant cette vidéo mais j’ai cette erreur en permanence :

Sorry, I had a problem talking to OpenAI: Error code: 400 - {'error': {'message': "This model's maximum context length is 16385 tokens. However, your messages resulted in 16858 tokens (15970 in the messages, 888 in the functions). Please reduce the length of the messages or functions.", 'type': 'invalid_request_error', 'param': 'messages', 'code': 'context_length_exceeded'}}

Qu’est ce que je fais mal ?

Bonjour,

Pour ma part, je viens de tester avec Extended OpenAI Conversation.
Pas de souci.
C’est assez impressionnant ce que l’on est capable de faire juste avec le prompt de base.

En lisant ton code d’erreur, on dirait que le modèle chat que tu emploies est dépassé par la question que tu lui soumets.

Et gaffe aussi : dans la vidéo il mentionne l’usage de gpt3.5-turbo alors que le gpt-4o-mini est moins cher d’après les articles que j’ai lus.

Maintenant, il faut que j’améliore le prompt et que je le mette à la sauce française.

Vous avez réussit à mettre en place tout en place comme lui dans sa vidéo ?

non, je n’ai pas ce besoin.
j’ai surtout réalisé des tests avec le prompt, histoire de voir jusqu’où on peut aller dans la description de ce que l’on veut lui faire réaliser.
je pense qu’il est préférable de créer qques scripts pour aider au lieu de lui expliquer toute une cinématique dans le prompt.

J’ai essayé. En faisant des scripts. Ça marche nickel. Juste j’arrive pas a récupérer la réponse ds un sensor. Si qqun est intéressé je partage mon script.

2 « J'aime »
import requests
import datetime

# Configuration de Home Assistant
API_URL = 'http://192.168.1.xx:XXXX/api/'  # Remplacez par l'URL de votre instance Home Assistant
TOKEN = 'xxxxxx' #Remplacez par votre token Home Assistant
OPENAI_API_KEY = 'sk-proj-xxxx' #Remplacez par votre API OpenAI

def generate_response(prompt):
    url = 'https://api.openai.com/v1/chat/completions'
    headers = {
        'Authorization': f'Bearer {OPENAI_API_KEY}',
        'Content-Type': 'application/json'
    }
    data = {
        'model': 'gpt-3.5-turbo',
        'messages': [
            {'role': 'system', 'content': "Vous êtes un assistant avancé de ma maison connectée, spécialisé dans l'interaction avec les enfants. Vous avez une personnalité joyeuse et engageante, capable de rendre les informations amusantes et captivantes pour mes deux jeunes enfants, âgés de 5 ans et 9 ans."},
            {'role': 'user', 'content': prompt}
        ]
    }
    response = requests.post(url, headers=headers, json=data)
    return response.json()

def get_home_assistant_data(sensor_url):
    response = requests.get(sensor_url, headers={'Authorization': f'Bearer {TOKEN}'})
    return response.json()

def update_home_assistant_sensor(entity_id, response):
    url = f'{API_URL}states/{entity_id}'
    headers = {
        'Authorization': f'Bearer {TOKEN}',
        'Content-Type': 'application/json'
    }
    data = {
        'state': 'ok',  # Optionnel : vous pouvez définir un état significatif ici
        'attributes': {
            'last_response': response  # Enregistre la réponse dans les attributs
        }
    }
    response = requests.post(url, headers=headers, json=data)
    return response.json()

def main():
    # URL pour obtenir l'état des capteurs
    weather_sensor_url = f'{API_URL}states/weather.villeneuve_la_garenne'
    anniversary_sensor_url = f'{API_URL}states/calendar.anniversaires'
    naely_sensor_url = f'{API_URL}states/calendar.naely'
    naely_2_sensor_url = f'{API_URL}states/calendar.naely_2'
    tao_sensor_url = f'{API_URL}states/calendar.tao'
    tao_2_sensor_url = f'{API_URL}states/calendar.tao_2'

    # Obtenir les données de la météo
    weather_data = get_home_assistant_data(weather_sensor_url)
    print("Données Météo:", weather_data)  # Afficher les données de la météo

    # Obtenir les informations sur les anniversaires et les capteurs de Naely et Tao
    anniversary_data = get_home_assistant_data(anniversary_sensor_url)
    print("Données Anniversaire:", anniversary_data)  # Afficher les données d'anniversaire

    naely_data = get_home_assistant_data(naely_sensor_url)
    print("Données Naely:", naely_data)  # Afficher les données de Naely

    naely_2_data = get_home_assistant_data(naely_2_sensor_url)
    print("Données Naely 2:", naely_2_data)  # Afficher les données de Naely 2

    tao_data = get_home_assistant_data(tao_sensor_url)
    print("Données Tao:", tao_data)  # Afficher les données de Tao

    tao_2_data = get_home_assistant_data(tao_2_sensor_url)
    print("Données Tao 2:", tao_2_data)  # Afficher les données de Tao 2

    # Récupérer la date du jour
    today_date = datetime.datetime.now().strftime("%Y-%m-%d")

    weather_attributes = weather_data['attributes'] if 'attributes' in weather_data else {}

    # Construire le prompt
    prompt = (
        "Votre tâche est de décrire la météo du jour de manière ludique et de donner des conseils pour bien s'habiller en fonction de la météo, "
        "leur donner la date du jour complète en utilisant des analogies et des histoires qui plairont à mes enfants qui se préparent pour l'école. "
        "Voici les détails que vous devez prendre en compte : la date du jour, conditions météorologiques, la température, le vent. "
        "Vous leur direz le programme de la journée. Un décompte avant les prochaines vacances peut leur faire plaisir."
        "Vous pouvez leur raconter une anecdote educative."
        f"Aujourd'hui, nous sommes le {today_date}. "
    )

    # Récupérer les informations d'anniversaire
    if 'attributes' in anniversary_data:
        anniversary_message = anniversary_data['attributes'].get('message', 'Aucun message d\'anniversaire prévu.')
        anniversary_start_time = anniversary_data['attributes'].get('start_time', 'Pas de temps défini.')
        anniversary_end_time = anniversary_data['attributes'].get('end_time', 'Pas de temps défini.')
        prompt += f"Anniversaire: {anniversary_message}, Commence à {anniversary_start_time}, Fin à {anniversary_end_time}\n"

    # Ajoutez les informations pour Naely
    if 'attributes' in naely_data:
        naely_message = naely_data['attributes'].get('message', 'Aucun message prévu.')
        naely_start_time = naely_data['attributes'].get('start_time', 'Pas de temps défini.')
        naely_end_time = naely_data['attributes'].get('end_time', 'Pas de temps défini.')
        prompt += f"Activité Naely: {naely_message}, Commence à {naely_start_time}, Fin à {naely_end_time}\n"

    # Ajoutez les informations pour Naely 2
    if 'attributes' in naely_2_data:
        naely_2_message = naely_2_data['attributes'].get('message', 'Aucun message prévu.')
        naely_2_start_time = naely_2_data['attributes'].get('start_time', 'Pas de temps défini.')
        naely_2_end_time = naely_2_data['attributes'].get('end_time', 'Pas de temps défini.')
        prompt += f"Activité Naely 2: {naely_2_message}, Commence à {naely_2_start_time}, Fin à {naely_2_end_time}\n"

    # Ajoutez les informations pour Tao
    if 'attributes' in tao_data:
        tao_message = tao_data['attributes'].get('message', 'Aucun message prévu.')
        tao_start_time = tao_data['attributes'].get('start_time', 'Pas de temps défini.')
        tao_end_time = tao_data['attributes'].get('end_time', 'Pas de temps défini.')
        prompt += f"Activité Tao: {tao_message}, Commence à {tao_start_time}, Fin à {tao_end_time}\n"

    # Ajoutez les informations pour Tao 2
    if 'attributes' in tao_2_data:
        tao_2_message = tao_2_data['attributes'].get('message', 'Aucun message prévu.')
        tao_2_start_time = tao_2_data['attributes'].get('start_time', 'Pas de temps défini.')
        tao_2_end_time = tao_2_data['attributes'].get('end_time', 'Pas de temps défini.')
        prompt += f"Activité Tao 2: {tao_2_message}, Commence à {tao_2_start_time}, Fin à {tao_2_end_time}\n"

    # Afficher le prompt final avant d'envoyer à ChatGPT
    print("Prompt envoyé à ChatGPT :")
    print(prompt)

    # Ajouter l'instruction pour générer une réponse
    response = generate_response(prompt)

    if 'choices' in response and len(response['choices']) > 0:
        chatgpt_response = response['choices'][0]['message']['content']
        
        # Mettre à jour le sensor dans Home Assistant avec la réponse de ChatGPT
        update_home_assistant_sensor('sensor.chatgpt_response', chatgpt_response)

        # Afficher la réponse de ChatGPT
        print("Réponse de ChatGPT :", chatgpt_response)
    else:
        print("Erreur dans la réponse :", response)

if __name__ == '__main__':
    main()

Ce script prend en compte la météo, les calendrier des activiteés de mes enfants et génère un message pour mes enfants le matin.

2 « J'aime »