Configuration de Dify avec des points de terminaison API agrégés : Guide technique et cas d'usage

Dify ne possède pas de modèles intégrés ; sa puissance repose sur sa capacité à se connecter à des API externes comme OpenAI, Anthropic ou Google. Cependant, la gestion directe de multiples fournisseurs peut s'avérer complexe en raison de l'instabilité des connexions régionales et de la multiplication des clés API.

L'utilisation d'un agrégateur via le canal OpenAI-API-compatible permet de centraliser tous vos modèles (GPT, Claude, Gemini, etc.) sous une seule interface et une clé unique. Voici comment configurer cette architecture et l'exploiter efficacement.

1. Validation préalable du point de terminaison

Avant toute configuraton dans l'interface de Dify, il est crucial de vérifier la validité de votre endpoint et de votre clé API. Cela permet d'isoler d'éventuelles erreurs réseau.

curl https://votre-api-agregee.com/v1/chat/completions \
  -H "Authorization: Bearer VOTRE_CLE_API" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o-mini",
    "messages": [{"role": "user", "content": "test"}]
  }'

Si vous recevez une réponse JSON valide, la connectivité est confirmée. Une erreur 401 indique un problème de clé, tandis qu'une erreur 404 signale souvent une URL mal formée (vérifiez l'absence de slash final).

2. Configuration des modèles dans Dify

Pour intégrer vos modèles, accédez à Paramètres → Fournisseurs de modèles → OpenAI-API-compatible et cliquez sur "Ajouter un modèle".

Remplissez les champs selon la structure suivante :

Champ Valeur suggérée
Nom du modèle Identifiant officiel (ex: gpt-4o)
Clé API Votre clé fournie par l'agrégateur
URL du point de terminaison https://votre-api-agregee.com/v1
Type de modèle LLM (ou Text Embedding selon le cas)
Fenêtre de contexte Valeur réelle du modèle (ex: 128000 pour GPT-4o)

Note technique : Il est impératif de renseigner la longueur de contexte exacte. Si cette valeur est sous-estimée, Dify tronquera l'historique des conversations prématurément, dégradant la pertinence des réponses complexes.

3. Optimisation des modèles système

Une fois les modèles ajoutés, définissez les rôles par défaut dans Paramètres de modèle système :

  • Modèle de raisonnement : Privilégiez gpt-4o ou claude-3-5-sonnet.
  • Modèle d'Embedding : Indispensable pour la base de connaissances (RAG). Utilisez text-embedding-3-small via le même canal compatible OpenAI.
  • Modèle de reclassement (Rerank) : Optionnel, mais recommandé pour améliorer la précision de la recherche documentaire.

Scénarios d'utilisation pratique

A. Création d'un comparateur de modèles (Chatflow)

Pour optimiser vos prompts, vous pouvez concevoir un flux de travail parallèle comparant les sorties de plusieurs LLM simultanément.

[Entrée Utilisateur]
       │
       ├───> Nœud LLM A (GPT-4o)
       ├───> Nœud LLM B (Claude 3.5)
       └───> Nœud LLM C (Gemini Pro)
       │
[Nœud de Fusion Template]
       │
[Résultat Comparatif Final]

Le nœud de fusion utilise un template Markdown pour structurer la réponse :

### Analyse comparative
**GPT-4o :** {{node_a.text}}
**Claude :** {{node_b.text}}
**Gemini :** {{node_c.text}}

B. Implémentation du RAG (Génération augmentée par récupération)

Le RAG nécessite une coordination entre un modèle d'incrustation (Embedding) et un modèle génératif. Assurez-vous que votre point de terminaison supporte les embeddings :

import requests

def verifier_embedding(api_key, base_url):
    payload = {
        "model": "text-embedding-3-small",
        "input": "Texte d'analyse"
    }
    headers = {"Authorization": f"Bearer {api_key}"}
    response = requests.post(f"{base_url}/embeddings", json=payload, headers=headers)
    dimensions = len(response.json()['data'][0]['embedding'])
    print(f"Dimensions de l'embedding : {dimensions}") # Devrait être 1536

verifier_embedding("VOTRE_CLE", "https://votre-api-agregee.com/v1")

Dans Dify, configurez votre base de connaissances en sélectionnant le modèle d'embedding validé. Lors de la création du Chatflow, liez le nœud de "Récupération de connaissances" au prompt système du LLM.

C. Intégration via API dans des applications externes

Une fois votre workflow Dify publié, vous pouvez l'appeler via un script Python pour l'intégrer dans vos propres outils métier.

import requests
import json

class DifyClient:
    def __init__(self, api_key, base_url="https://api.dify.ai/v1"):
        self.api_key = api_key
        self.base_url = base_url
        self.headers = {
            "Authorization": f"Bearer {self.api_key}",
            "Content-Type": "application/json"
        }

    def execute_workflow(self, inputs, user_id="dev_user"):
        endpoint = f"{self.base_url}/workflows/run"
        data = {
            "inputs": inputs,
            "response_mode": "blocking",
            "user": user_id
        }
        resp = requests.post(endpoint, headers=self.headers, json=data)
        return resp.json()["data"]["outputs"]

# Exemple d'exécution
client = DifyClient(api_key="app-xyz123")
resultat = client.execute_workflow({"query": "Résumer ce rapport technique..."})
print(json.dumps(resultat, indent=2))

Points de vigilance

L'URL de l'endpoint ne doit jamais se terminer par un slash dans la configuration Dify. Par exemple, utilisez .../v1 et non .../v1/. De plus, pour les modèles à large contexte comme Gemini ou Claude, ne conservez pas la valeur par défaut de 4096 tokens ; ajustez-la selon les spécifications constructeur pour maximiser les performances de traitement de documents longs.

Étiquettes: Dify LLM openai-api rag Python

Publié le 13 juin à 23h27