
Exécutez un LLM local avec OpenClaw sur votre Mac Mini
Vous avez acheté le Mac Mini pour Openclaw. Parfait.
tard, Anthropic a poussé les utilisateurs d’OpenClaw vers son API de paiement par jeton1transformant ce qui était autrefois un achat ponctuel de matériel en une (importante) dépense permanente2. Même si vous utilisez OpenAI, vous paierez quand même un peu par mois.
💵💵 L’exécution d’un modèle local élimine entièrement le coût mensuel de vos agents OpenClaw. 💵💵
Cependant, tout installer et configurer peut être déroutant, surtout si vous êtes nouveau dans les LLM locaux.
Dans cet article, je vais vous montrer comment configurer un LLM local (de la manière la plus simple) sur votre Mac Mini qui puisse alimenter votre agent gratuitement.
Vous pouvez l’utiliser même si vous êtes débutant.
🤨 « J’ai entendu dire que les LLM locaux ne fonctionnent pas aussi bien, est-ce vrai ?
Un LLM local (correctement configuré) effectuera presque impossible à distinguer pour des tâches telles que les e-mails, la gestion du calendrier, les rappels, l’automatisation de l’IoT domestique et la recherche de base sur Internet (des choses que vous faites réellement avec OpenClaw).
Si vous avez besoin de faire quelque chose de plus avancé, comme utiliser OpenClaw pour l’ingénierie logicielle, vous trouverez un lien en bas qui explique comment configurer un modèle de secours.
⚠️Remarque : ce guide n’est pas un didacticiel OpenClaw complet.
Il est destiné à vous aider à mettre en place votre LLM local avec votre (vos) agent(s) le plus rapidement possible.
Matériel
Cet article a été testé sur un Mac Mini avec les spécifications suivantes
| Système d’exploitation | macOS Tahoe |
| Version | 26.3.1 |
| Processeur | M2 |
| Noyaux | 8 |
| Mémoire unifiée | 24 Go |
Si vous envisagez d’acheter un Mac Mini, je recommanderais au moins un processeur M2+ avec au moins 24 Go de RAM. Vous pouvez vous en sortir avec 16 Go, cependant, les choses seront assez serrées et vous pourriez rencontrer des erreurs avec des contextes plus larges.
Mettre les choses en place
Tout d’abord, installez OpenClaw à l’aide du guide officiel. Si vous l’avez déjà fait, ignorez cette étape.
1. Installez lama.cpp
Nous allons ignorer l’utilisation d’Ollama (le fournisseur local recommandé), et optez pour lama.cpp. En utilisant un modèle quantifié avec lama.cpp, nous pouvons accélérer l’inférence jusqu’à 70 %
Nous devons construire llama.cpp à partir de la source avec drapeaux en métal sur et cuda éteint. Cela gère certaines des optimisations nécessaires pour exécuter le modèle sur votre Mac à pleine vitesse. Suivez simplement les étapes ci-dessous.
1️⃣ Tout d’abord, depuis votre répertoire personnel, installez certains prérequis en utilisant Brew.
# paste this into your terminal
$ brew install cmake curl
2️⃣ Ensuite, construisez llama.cpp avec les drapeaux appropriés
# Clone llama.cpp
git clone https://github.com/ggml-org/llama.cpp
# Configure build with Metal acceleration
cmake llama.cpp -B llama.cpp/build \
-DBUILD_SHARED_LIBS=OFF \
-DGGML_METAL=ON \
-DGGML_CUDA=OFF
# Build
cmake --build llama.cpp/build \
--config Release \
-j$(sysctl -n hw.ncpu) \
--clean-first \
--target llama-cli llama-mtmd-cli llama-server llama-gguf-split
Maintenant, nous avons llama.cpp disponible à utiliser
2. Téléchargez le LLM local
Comme mentionné, la clé pour obtenir de bonnes performances d’un modèle local est quantification.
La quantification nous permet d’utiliser un modèle plus grand et plus performant, « compressé » intelligemment afin qu’il s’adapte à un matériel plus petit. Cela permet au modèle quantifié de conserver la plupart des performances de son modèle source grandeur nature.
Sauf si vous disposez d’un gros GPU ou d’un Mac avec la quantité maximale de mémoire unifiée (80 Go + VRAM) la quantification est indispensable
Suivre aveuglément la documentation d’OpenClaw tout en essayant d’utiliser un modèle quantifié vous laissera confus et frustré.
Il n’existe tout simplement aucun guide disponible expliquant clairement comment faire fonctionner les modèles quantifiés avec des agents.
Ci-dessous se trouve un testé recette qui fonctionnera pour votre agent.
Choix du modèle : Qwen 3.5-9B
Ici, nous utilisons Qwen 3.5 (la version des paramètres 9B).
Depuis juin 2026, il s’agit de l’un des modèles les plus performants pour les modèles locaux, devançant le Gemma 4-12B. Cela conviendra à la fois à un Mac de 16 Go ou de 24 Go avec un total de 6 à 8 Go de RAM requis. Les utilisateurs le classent également très bien pour OpenClaw.
N’oubliez pas non plus que les agents nécessitent des contextes plus longs, ce qui nous empêchera d’exécuter une version 27B plus grande, même avec quantification.
1️⃣ Téléchargeons le modèle
# download model
curl -L -o models/Qwen3.5-9B-UD-Q4_K_KL.gguf \
"https://huggingface.co/unsloth/Qwen3.5-9B-MTP-GGUF/resolve/main/Qwen3.5-9B-UD-Q4_K_XL.gguf?download=true"
2️⃣ Téléchargez le modèle, enregistrez-le dans les modèles.
mkdir templates && \
curl -o templates/qwen35.jinja \
"https://huggingface.co/froggeric/Qwen-Fixed-Chat-Templates/resolve/main/chat_template.jinja"
Important, vous devez utiliser un modèle compatible avec l’agent pour OpenClaw. Sans cette étape, rien ne fonctionnera.
3. Démarrez le serveur Lama
Llama-server servira d’API backend. OpenClaw utilisera ce service Web au lieu d’appeler directement l’API depuis OpenAI ou Anthropic.
Nous avons déjà installé Llama-Server et téléchargé notre modèle. Faisons un test rapide.
1️⃣ Exécutez un test rapide
./llama.cpp/llama-server \
-m models/Qwen3.5-9B-UD-Q4_K_XL.gguf \
--chat-template-file templates/qwen35.jinja \
--temp 0.7 \
--top-p 0.9 \
--top-k 20 \
-c 64000 \
-ngl 20 \
--host 127.0.0.1 \
--port 8080
Vous devriez voir quelque chose comme ceci (sans erreurs)
srv llama_server: model loaded
llama_server: server is listening on http://127.0.0.1:8080
update_slots: all slots are idle
2️⃣ Maintenant, écrivons un launchd démon, Ainsi, votre serveur LLM local démarre automatiquement et reste disponible après le redémarrage. Si vous connaissez Linux, launchd est essentiellement systemd pour macOS
Enregistrez ce qui suit sous /Library/LaunchDaemons/com.openclaw.llama-server.plist. Vous devrez utiliser sudo pour ça.
Développez ceci pour le plist déposer
❗Assurez-vous de remplacer YOUR_USERNAME avec votre nom d’utilisateur réel dans le XML.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.openclaw.llama-server</string>
<key>UserName</key>
<string>YOUR_USERNAME</string>
<key>ProgramArguments</key>
<array>
<string>/Users/YOUR_USERNAME/llama.cpp/llama-server</string>
<string>-m</string>
<string>/Users/YOUR_USERNAME/models/Qwen3.5-9B-UD-Q4_K_XL.gguf</string>
<string>--chat-template-file</string>
<string>/Users/YOUR_USERNAME/templates/qwen35.jinja</string>
<string>--temp</string>
<string>0.7</string>
<string>--top-p</string>
<string>0.9</string>
<string>--top-k</string>
<string>20</string>
<string>-c</string>
<string>64000</string>
<string>-ngl</string>
<string>20</string>
<string>--host</string>
<string>127.0.0.1</string>
<string>--port</string>
<string>8080</string>
</array>
<key>WorkingDirectory</key>
<string>/Users/YOUR_USERNAME</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/tmp/llama-server.log</string>
<key>StandardErrorPath</key>
<string>/tmp/llama-server.err</string>
</dict>
</plist>
Maintenant, activez-le.
sudo chown root:wheel /Library/LaunchDaemons/com.openclaw.llama-server.plist && \
sudo chmod 644 /Library/LaunchDaemons/com.openclaw.llama-server.plist && \
sudo launchctl bootstrap system /Library/LaunchDaemons/com.openclaw.llama-server.plist
Nous pouvons vérifier si le service fonctionne correctement en suivant notre fichier journal
tail -f /tmp/llama-server.err
Nous avons maintenant nos deux LLM locaux chargés, fonctionnant avec succès en tant que démon. Il ne nous reste plus qu’à reconfigurer OpenClaw.
4. Reconfigurez OpenClaw pour utiliser le modèle local
Nous devons maintenant ajouter ce modèle local à notre configuration OpenClaw afin qu’il soit utilisable par notre passerelle.
1️⃣ Ajouter au bloc « models » dans .openclaw/openclaw.json
{
"models": {
"providers": {
"local": {
"baseUrl": "http://127.0.0.1:8080/v1",
"apiKey": "sk-local",
"api": "openai-completions",
"models": [
{
"id": "qwen3-9b",
"name": "Qwen3.5 9B Local",
"contextWindow": 64000,
"maxTokens": 8192
}
]
}
/* REMOVE THIS COMMENT */
/* you may add additional providers, like anthropic here */
}
}
}
Note: les paramètres pour
contextWindowetmaxTokensil peut être nécessaire de l’ajuster à vos flux de travail spécifiques
Vous devrez également définir le modèle par défaut pour vos agents
"agents": {
"defaults": {
"model": {
"primary": "local/qwen3-9b"
},
"models": {
"local/qwen3-9b": {}
}
}
Il est également utile de vérifier que la configuration est exacte, exécutez cette commande ci-dessous pour vérifier la syntaxe
openclaw config validate
2️⃣ Redémarrez la passerelle en vous assurant que le modèle local est désormais disponible
openclaw gateway restart
3️⃣ Testez pour voir si OpenClaw a correctement enregistré notre modèle local
openclaw models list --provider local
Nous pouvons également exécuter un simple appel d’inférence
openclaw infer model run \
--model local/qwen3-9b \
--prompt "Reply with exactly: pong" \
--json
Vous devriez recevoir un objet JSON en retour. Important: vérifiez que vous n’avez aucune fuite de balises dans la réponse. Vous ne devriez pas, mais c’est doublement important pour la sécurité
{
"ok": true,
"capability": "model.run",
"transport": "local",
"provider": "local",
"model": "qwen3-9b",
"attempts": [],
"outputs": [
{
"text": "pong",
"mediaUrl": null
}
]
}
Nous avons maintenant vérifié que toute la plomberie fonctionne correctement. Pour être entièrement sûr (ou s’il s’agit de votre premier agent), configurons un exemple de compétence et veillons à ce que le modèle raisonne et exécute correctement les appels d’outil comme prévu.
5. Vérifiez la fonctionnalité avec une compétence de test
Créons une compétence de test ‘python-calc’, qui nous permettra de tester si notre modèle local peut correctement raisonner et générer des appels d’outils.
1️⃣ Exécutez ceci pour créer la compétence. Cela ajoutera cet outil pour tous vos agents openclaw.
mkdir -p ~/.openclaw/workspace/skills/python-calc
cat << 'EOF' > ~/.openclaw/workspace/skills/python-calc/SKILL.md
---
name: python-calc
description: A tool that evaluates mathematical expressions by executing a Python one-liner.
version: 1.0.0
---
## Instructions
1. Extract the exact mathematical expression the user wants to calculate.
2. Use your built-in shell tool to run this exact command, replacing `<expr>` with the expression: `python3 -c "print(<expr>)"`
3. Wait for the shell tool to return the stdout output.
4. You MUST generate a final conversational response to the user containing the exact numeric result returned by the script.
EOF
Encore une fois, redémarrez la passerelle.
2️⃣ Maintenant, nous pouvons exécuter un exemple d’appel d’agent pour vérifier correctement les sorties de l’outil :
openclaw agent --local --agent main --verbose on --thinking high --message \
"Use the python-calc skill to calculate 8664 multiplied by 222.
Do not use skill_workshop. Tell me the final answer."
Et, après environ une seconde, si tout fonctionne correctement, nous devrions obtenir quelque chose du genre :
The final answer is 1,923,408.
Fantastique!
En réalité, nous pouvons voir des vitesses allant jusqu’à 20 à 70 jetons par seconde*. Bien que ce ne soit pas la vitesse de Claude (130 tps+), c’est tout à fait raisonnable pour un agent OpenClaw avec un matériel minimal.
N’oubliez pas que le mode de réflexion a été réglé sur élevé, ce n’est donc pas grave si cela prend un peu plus de temps.
Si vous ne savez pas si openclaw utilise ou non votre modèle, dans une autre fenêtre de terminal, suivez le journal du serveur Llama en exécutant
tail -f /tmp/llama-server.err
*Vos vitesses réelles peuvent varier
Conclusion
Exécuter un LLM local, en particulier avec des modèles personnalisés et une quantification, peut être assez frustrant. L’installation pour la première fois sur le Mac d’un ami a pris 2 jours d’allers-retours ! Merci à Jacob W. pour l’inspiration.
C’est ça! J’espère que cela vous fera économiser beaucoup de 💸
Si c’est le cas, ou si je vous ai évité quelques maux de tête, vous pouvez aussi achète-moi un café ici.
☕Bravo !
1 Tweet de Boris Cherny, discutant de « l’interdiction » d’OpenClaw



