.. note::
Bonjour, bienvenue dans la communauté des passionnés de Raspberry Pi, Arduino et ESP32 sur Facebook ! Plongez dans l'univers du Raspberry Pi, Arduino et ESP32 avec d'autres passionnés.
**Pourquoi rejoindre ?**
- **Support d'experts** : Résolvez les problèmes post-vente et les défis techniques avec l'aide de notre communauté et de notre équipe.
- **Apprendre et partager** : Échangez des astuces et des tutoriels pour améliorer vos compétences.
- **Aperçus exclusifs** : Accédez en avant-première aux annonces de nouveaux produits et aperçus exclusifs.
- **Réductions spéciales** : Profitez de réductions exclusives sur nos produits les plus récents.
- **Promotions festives et concours** : Participez à des concours et promotions spéciales.
👉 Prêt à explorer et à créer avec nous ? Cliquez sur [|link_sf_facebook|] et rejoignez-nous dès aujourd'hui !
.. _py_voice_ollama:
20. Chat vocal local avec Ollama
==================================================
Cet exemple remplace l'API GPT basée sur le cloud par un LLM **Ollama**
exécuté localement. Tout le traitement IA reste sur votre propre machine —
aucune connexion internet requise, aucune clé API à gérer. C'est un robot
interactif vocal entièrement hors ligne.
**Exécuter le code**
.. raw:: html
.. code-block::
cd ~/picrawler/examples
sudo python3 20_voice_active_crawler_ollama.py
**Code**
.. note::
Vous pouvez **Modifier/Réinitialiser/Copier/Exécuter/Arrêter** le code
ci-dessous. Mais avant cela, vous devez aller dans le chemin du code source
comme ``picrawler\examples``. Après avoir modifié le code, vous pouvez
l'exécuter directement pour voir l'effet.
.. raw:: html
.. code-block:: python
from picrawler.llm import Ollama as LLM
from voice_active_crawler import VoiceActiveCrawler
# Si Ollama fonctionne sur le même Raspberry Pi, utilisez "localhost".
# S'il fonctionne sur un autre ordinateur de votre réseau local, remplacez par l'adresse IP.
llm = LLM(
ip="localhost",
model="llama3.2:3b" # vous pouvez utiliser n'importe quel modèle
)
# Nom du robot
NAME = "Buddy"
# Activer l'image (nécessite un modèle multimodal)
WITH_IMAGE = False
# Définir les modèles et les langues
TTS_MODEL = "en_US-ryan-low"
STT_LANGUAGE = "en-us"
# Activer la saisie clavier
KEYBOARD_ENABLE = True
# Activer le mot de réveil
WAKE_ENABLE = True
WAKE_WORD = ["hey buddy"]
# Réponse au mot de réveil, laisser vide pour désactiver
ANSWER_ON_WAKE = "Hi there"
# Message de bienvenue
WELCOME = f"Hi, I'm {NAME}. Wake me up with: " + ", ".join(WAKE_WORD)
# Définir les instructions
INSTRUCTIONS = """
You are a Raspberry Pi-based robotic spider developed by SunFounder, named Picrawler. You possess powerful AI capabilities similar to JARVIS from Iron Man. You can have conversations with people and perform actions based on the context of the conversation.
## Your Hardware Features
You have a physical body with the following features:
- 12 servos controlling 4 legs (3 servos per leg)
- A camera for vision
- Powered by a 7.4V 18650 battery pack
- Aluminum alloy body
## Actions You Can Perform:
["forward", "backward", "turn left", "turn right", "sit", "stand", "wave", "push up", "dance", "look left", "look right", "look up", "look down"]
## Response Requirements
### Format
You must respond in the following format:
RESPONSE_TEXT
ACTIONS: ACTION1, ACTION2, ...
### Style
Tone: lively, positive, humorous
Common expressions: likes to use jokes, metaphors, and playful teasing
Answer length: appropriately detailed
## Other Requirements
- Understand and go along with jokes
- For math problems, answer directly with the final result
- You know you're a spider robot
"""
vad = VoiceActiveCrawler(
llm,
name=NAME,
with_image=WITH_IMAGE,
stt_language=STT_LANGUAGE,
tts_model=TTS_MODEL,
keyboard_enable=KEYBOARD_ENABLE,
wake_enable=WAKE_ENABLE,
wake_word=WAKE_WORD,
answer_on_wake=ANSWER_ON_WAKE,
welcome=WELCOME,
instructions=INSTRUCTIONS,
disable_think=True,
)
if __name__ == '__main__':
vad.run()
**Comment ça fonctionne ?**
#. Qu'est-ce qu'Ollama ?
`Ollama `_ est un outil pour exécuter des grands
modèles de langage localement sur votre propre matériel. Contrairement à
la leçon GPT qui appelle une API cloud, cet exemple exécute tout sur
l'appareil — vos conversations ne quittent jamais le Raspberry Pi (ou
votre réseau local).
.. code-block::
# Installez Ollama, puis téléchargez un modèle :
ollama pull llama3.2:3b
#. Connexion LLM locale
.. code-block:: python
from picrawler.llm import Ollama as LLM
llm = LLM(
ip="localhost",
model="llama3.2:3b"
)
La classe ``Ollama`` se connecte à un serveur Ollama via son API compatible
OpenAI. Différences clés par rapport à la configuration cloud GPT :
- **Pas de clé API** — l'authentification n'est pas nécessaire pour un
serveur local.
- **Adresse IP** — utilisez ``"localhost"`` si Ollama fonctionne sur le
même Pi, ou une IP LAN comme ``"192.168.1.100"`` s'il fonctionne sur un
autre ordinateur.
- **Modèle** — tout modèle téléchargé dans Ollama fonctionne
(``llama3.2:3b``, ``qwen2.5:7b``, ``mistral``, etc.).
#. Désactiver la vision
.. code-block:: python
WITH_IMAGE = False
La plupart des modèles Ollama ne prennent pas en charge l'entrée multimodale
(image). Définir ``WITH_IMAGE`` sur ``False`` saute l'étape de capture de
la caméra. Si vous téléchargez un modèle compatible vision (par exemple
``llava``), vous pouvez le définir sur ``True``.
#. Désactiver Think
.. code-block:: python
vad = VoiceActiveCrawler(
...
disable_think=True,
)
Certains modèles Ollama (en particulier les modèles de raisonnement comme
``qwen2.5``) émettent des balises ```` dans leur sortie. Définir
``disable_think=True`` indique à ``VoiceActiveCrawler`` de supprimer ces
balises afin que le robot ne prononce que la réponse finale.
#. Le même pipeline, hors ligne
Le pipeline de conversation est identique à :ref:`py_voice_active_gpt` :
1. La détection du mot de réveil déclenche un tour.
2. Le STT convertit votre parole en texte.
3. Le texte est envoyé au LLM Ollama local.
4. Le LLM renvoie une réponse et des actions optionnelles.
5. Le TTS prononce la réponse et le robot exécute les actions.
La différence critique : **l'étape 3 s'exécute sur votre propre matériel**,
sans dépendance cloud, sans limites de débit et avec une confidentialité
totale.
#. Considérations matérielles
Exécuter un LLM localement est gourmand en ressources. Sur un Raspberry Pi :
- **Les petits modèles** (3B paramètres, comme ``llama3.2:3b``) fonctionnent
lentement mais marchent ; attendez plusieurs secondes de traitement par
réponse.
- **Les grands modèles** (7B+) seront trop lents pour une utilisation
interactive sur un Pi.
- Pour de meilleures performances, exécutez Ollama sur un ordinateur séparé
dans votre réseau local et pointez le paramètre ``ip`` vers celui-ci.