Skip to content

Intégration LangChain 🦜️🔗

TIP

Retrouvez le code exécutable complet et prêt à tourner de ce guide dans notre dépôt d'exemples : Cookbooks: LangChain Quickstart (Python)

Intégrer LLM Bastion dans vos chaînes et agents LangChain est simple et immédiat. Comme la passerelle est 100% compatible avec l'API OpenAI, il vous suffit de surcharger l'URL de base et la clé API.

En faisant transiter vos chaînes de prompts par LLM Bastion, vous activez automatiquement la sécurité RGPD/PII, le cache sémantique, et la haute disponibilité.


📊 Cycle de vie d'une requête LangChain sécurisée

Le diagramme suivant montre comment LLM Bastion intercepte, masque, et transmet la requête de votre chaîne LangChain vers l'API externe (par exemple OpenAI), puis dé-masque la réponse lors du retour vers votre client.

flowchart LR subgraph ClientApp["LangChain Application (Python / TS)"] Chain["PromptChain.invoke()"] Output["Réponse Dé-masquée (Alice Dupont)"] end subgraph BastionGateway["Passerelle LLM Bastion"] direction TB Adapter["1. Adaptateur API (Axum)"] PIIGuard["2. Masquage PII (alice@dupont.fr -> redacted)"] Router["3. Routeur Intelligent & Failover"] DeMask["4. Dé-masquage au retour (redacted -> Alice Dupont)"] end subgraph ExternalLLM["Fournisseur LLM (ex: OpenAI)"] API["OpenAI API (Reçoit le prompt anonyme)"] end Chain -->|1. Prompt Brut| Adapter Adapter --> PIIGuard PIIGuard -->|2. Prompt Masqué| Router Router -->|3. Requête anonymisée| API API -->|4. Réponse brute anonymisée| DeMask DeMask -->|5. Réponse décodée| Output style BastionGateway fill:#1e1e2f,stroke:#6c5ce7,stroke-width:2px,color:#fff style ClientApp fill:#2d3436,stroke:#0984e3,stroke-width:1px,color:#fff style ExternalLLM fill:#2d3436,stroke:#00b894,stroke-width:1px,color:#fff

💻 Exemples de Code

Vous pouvez configurer l'adaptateur pour vos projets LangChain en Python ou en TypeScript / JavaScript.

python
import os
import sys
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

# Charger la clé API depuis l'environnement
api_key = os.getenv("BASTION_API_KEY", "lb_live_votre_virtual_key...")
base_url = os.getenv("BASTION_BASE_URL", "https://api.llmbastion.fr/adapters/openai/v1")

# 1. Instancier le LLM en le pointant vers LLM Bastion
llm = ChatOpenAI(
    model="auto",  # Route automatiquement vers le modèle le plus adapté
    openai_api_key=api_key,
    openai_api_base=base_url
)

# 2. Définir un prompt contenant potentiellement des données personnelles
prompt = ChatPromptTemplate.from_messages([
    ("system", "Tu es un assistant juridique expert."),
    ("user", "{input}")
])

chain = prompt | llm | StrOutputParser()

# 3. Exécuter la chaîne. Les PII seront masqués avant d'être transmis aux serveurs externes !
try:
    response = chain.invoke({
        "input": "Bonjour, je m'appelle Alice Dupont, mon adresse email est alice@dupont.fr. Pouvez-vous rédiger un projet de contrat ?"
    })
    print("\n✅ Réponse de la chaîne LangChain :")
    print(response)
except Exception as e:
    print(f"\n❌ Une erreur s'est produite : {e}", file=sys.stderr)
typescript
import { ChatOpenAI } from "@langchain/openai";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { StringOutputParser } from "@langchain/core/output_parsers";

// 1. Instancier le LLM pointant vers LLM Bastion
const llm = new ChatOpenAI({
  modelName: "auto",
  openAIApiKey: "lb_live_votre_virtual_key...",
  configuration: {
    baseURL: "https://api.llmbastion.fr/adapters/openai/v1",
  },
});

// 2. Créer une chaîne simple
const prompt = ChatPromptTemplate.fromMessages([
  ["system", "Tu es un traducteur expert."],
  ["user", "{input}"],
]);

const chain = prompt.pipe(llm).pipe(new StringOutputParser());

async function run() {
  const result = await chain.invoke({
    input:
      "Traduire en anglais : Mon numéro de téléphone personnel est le +33 6 12 34 56 78.",
  });
  console.log(result);
}

run();

🛡️ Pourquoi passer vos requêtes LangChain par LLM Bastion ?

  1. Sécurité native : Vos agents et chaînes récupèrent souvent des données textuelles non structurées (provenant de bases vectorielles, d'emails ou du web). LLM Bastion bloque à la volée les attaques par injection de prompts et les fuites accidentelles de données personnelles (PII).
  2. Économies de coûts : Le cache sémantique L1/L2 répond aux requêtes répétées de vos agents en moins de 1 ms sans envoyer de requête payante aux fournisseurs.
  3. Haute Disponibilité : Si le modèle ou l'API par défaut tombe en panne au milieu de l'exécution d'un agent LangChain multi-étapes, la passerelle bascule de manière transparente sur un modèle de secours pour éviter que l'agent ne s'arrête.