Validation IA Locale Et Hors Ligne¶
Objectif: prouver rapidement qu'un LLM local, un adapter LLM Arclith et un agent LangGraph fonctionnent, même sans LangSmith ni accès internet.
Modèle Mental¶
Trois composants sont séparés:
| Text Only | |
|---|---|
LM Studio sert le modèle. LangGraph orchestre le graphe. Arclith garde le métier dans les ports et use cases.
Ne pas confondre:
| Besoin | Surface |
|---|---|
| tester que le modèle local répond | LM Studio :1234/v1 |
| tester que le graphe agent répond | LangGraph :2024 |
| inspecter un thread durable | API LangGraph /threads/... |
| tracer dans LangSmith | optionnel, nécessite réseau et clé |
| utiliser LM Studio Chat comme interface | possible via MCP, pas via :2024 directement |
Préparer Le Mode Hors Ligne¶
Pour un test strictement local:
| Bash | |
|---|---|
Si le projet charge .env, conserver les mêmes valeurs dans .env.local ou .env:
LangGraph Studio charge une interface hébergée depuis smith.langchain.com. Hors ligne, utiliser
l'API locale, le SDK Python ou une petite UI locale.
Tester LM Studio¶
Démarrer le serveur local LM Studio sur http://127.0.0.1:1234/v1, puis vérifier les modèles:
| Bash | |
|---|---|
Recopier le id exact du modèle chargé. Un alias inventé comme local-model peut être refusé par
LM Studio.
Tester une complétion minimale:
| Bash | |
|---|---|
Remplacer mistralai/ministral-3-3b par l'identifiant retourné par /v1/models.
Tester L'Adapter LLM Arclith¶
Installer et configurer l'adapter:
| Bash | |
|---|---|
Vérifier la configuration:
| YAML | |
|---|---|
Tester le client OpenAI-compatible depuis Python:
| Bash | |
|---|---|
Ce test prouve que le modèle local, l'endpoint OpenAI-compatible et la dépendance Python sont cohérents. Les tests unitaires métier doivent rester sur un fake de port LLM.
Tester LangGraph Sans Studio¶
Lancer l'Agent Server local:
| Bash | |
|---|---|
Le serveur expose une API locale:
Tester un run stateless:
| Bash | |
|---|---|
Le assistant_id doit correspondre au nom déclaré dans langgraph.json.
Inspecter Un Thread Durable¶
Pour pouvoir relire l'état final, créer un thread explicite:
Sous Agent Server, la persistance est gérée par le serveur. Pour reproduire le même test avec un
graphe embedded, activer d'abord agent-persistence et invoquer le graphe avec
{"configurable": {"thread_id": "<id-stable>"}}. Voir la
capability dédiée.
| Bash | |
|---|---|
Lancer le run dans ce thread:
| Bash | |
|---|---|
Relire l'état et les runs:
| Bash | |
|---|---|
Utiliser stream_mode: "values" ou "updates" pour apprendre le graphe. messages est utile
pour le streaming fin des messages, mais il est moins lisible au début.
Tester Avec Le SDK Python¶
| Bash | |
|---|---|
Ce chemin est le plus pratique pour écrire un smoke test local automatisé.
LM Studio Chat Et LangGraph¶
LM Studio Chat ne se branche pas directement sur http://127.0.0.1:2024, car l'Agent Server
LangGraph n'expose pas une API Chat Completions. Deux chemins sont possibles:
| Text Only | |
|---|---|
Le pont MCP est utile pour tester une ergonomie chat locale, mais LangGraph devient alors un tool appelé par LM Studio. Ce n'est pas le même modèle que LangGraph orchestrateur principal.
Architecture Microservice¶
En développement, un seul langgraph dev peut exposer plusieurs graphes depuis langgraph.json.
En production, découper selon le bounded context:
- agent proche du service si l'agent manipule un domaine précis;
- agent central si l'assistant orchestre plusieurs domaines;
- jamais d'accès direct depuis l'agent central aux repositories ou bases des autres services.
Un agent central appelle les APIs, events ou tools MCP des microservices. Les use cases restent propriétaires de leur métier.
Checklist¶
/v1/modelsretourne lemodel idlocal./v1/chat/completionsrépond avec cemodel id.config/adapters/outbound/lm.yamlutilise le mêmemodel_name.LANGSMITH_TRACING=falseest actif pour un test hors ligne.langgraph dev --no-browser --allow-blocking --port 2024démarre.- un run
valuesrépond via/runs/stream. - un thread explicite peut être relu via
/threads/{thread_id}/state. - une mémoire store écrite pour un utilisateur est relue depuis un autre thread.
- les tests unitaires importants utilisent un fake LLM.
Sources¶
- LM Studio local server: https://lmstudio.ai/docs/developer/core/server
- LM Studio OpenAI-compatible: https://lmstudio.ai/docs/developer/openai-compat
- LM Studio MCP: https://lmstudio.ai/docs/app/mcp
- LangGraph local server: https://docs.langchain.com/oss/python/langgraph/local-server