Intégration d'AnythingLLM sur Windows avec deepseek R1 pour une interface de questions-réponses

AnythingLLM est une solution open source complète pour les clients IA, supportant le déploiement local et l'intégration via API. Elle permet de transformer tout document ou contenu en contexte, exploitable par différents modèles de langage (LLM) dans des conversations. Voici comment configurer et utiliser l'API AnythingLLM sous Windows pour créer une page web de questions-réponses, après avoir entraîné les données avec deepseek R1.

Configuration et installation d'AnythingLLM

Pour commencer, assurez-vous que votre système Windows dispose d'au moins 8 Go de RAM (16 Go recommandés). Téléchargez le programme d'installation depuis le site officiel d'AnythingLLM et suivez les étapes d'installation. Vérifiez que Python 3.9 ou supérieur est installé et configuré dans les variables d'environnement. Installez ensuite les dépendances nécessaires, notamment la bibliothèque requests, via la commande : pip install requests.

Utilisaiton de l'API AnythingLLM

Pour accéder à l'API, générez une clé d'authentification en accédant aux paramètres via l'icône en bas à gauche. Identifiez ensuite le slug de votre espace de travail (workspace) pour cibler les requêtes. L'API s'appelle via des requêtes HTTP, par exemple avec requests.post() vers l'endpoint http://votre_ip:3001/api/v1/workspace/{slug}/chat. Les en-têtes doivent inclure l'autorisation avec la clé et le type de contenu JSON, tandis que le corps de la requête contient le message et des paramètres optionnels comme le mode (chat ou query).

Exemple de code pour requête standard

import requests

def interroger_systeme(question, espace_travail, cle_api):
    url = f"http://votre_ip:3001/api/v1/workspace/{espace_travail}/chat"
    entetes = {
        "Authorization": f"Bearer {cle_api}",
        "Content-Type": "application/json",
        "accept": "application/json"
    }
    donnees = {
        "message": question,
        "mode": "chat"
    }
    reponse = requests.post(url, headers=entetes, json=donnees)
    if reponse.status_code == 200:
        resultat = reponse.json()
        reponse_texte = resultat.get('textResponse', '').strip()
        sources = resultat.get('sources', [])
        return reponse_texte, sources
    else:
        return f"Erreur : {reponse.text}", []

# Appel exemple
cle_api = "votre_cle_api"
espace_travail = "votre_slug"
question = "Exemple de question"
reponse, sources = interroger_systeme(question, espace_travail, cle_api)
print("Réponse :", reponse)
print("Sources :", [src['title'] for src in sources])

Exemple avec traitement en flux

Pour le streaming, utilisez l'endpoint dédié comme http://votre_ip:3001/api/v1/workspace/{espace_travail}/stream-chat. Configurez les en-têtes avec accept: text/event-stream et activez le streaming dans le corps de la requête. Lisez ensuite la réponse par morceaux pour une interaction en temps réel.

import requests

def streamer_reponse(question, espace_travail, cle_api):
    url = f"http://votre_ip:3001/api/v1/workspace/{espace_travail}/stream-chat"
    entetes = {
        "Authorization": f"Bearer {cle_api}",
        "Content-Type": "application/json",
        "accept": "text/event-stream"
    }
    donnees = {
        "message": question,
        "mode": "query",
        "max_tokens": 1024,
        "stream": True
    }
    with requests.post(url, headers=entetes, json=donnees, stream=True) as reponse:
        if reponse.status_code == 200:
            for morceau in reponse.iter_lines():
                if morceau:
                    print(morceau.decode("utf-8"))
        else:
            print(f"Erreur {reponse.status_code}: {reponse.text}")

# Appel exemple
cle_api = "VOTRE_CLE_API"
espace_travail = "NOM_ESPACE_TRAVAIL"
question = "Question de test"
streamer_reponse(question, espace_travail, cle_api)

Assurez-vous que le pare-feu Windows autorise le port 3001 par défaut. Ajoutez une gestion des erreurs robuste pour les problèmes réseau.

Développement d'une page web de questions-réponses avec Flask

Créez une application web simple avec Flask pour interagir avec l'API AnythingLLM. Utilisez la bibliothèque requests pour envoyer des requêtes à l'API et afficher les réponses.

from flask import Flask, render_template_string, request
import requests

application = Flask(__name__)

API_ADRESSE = "http://localhost:3001/api/v1/workspace/votre_slug/chat"
ENTETES_API = {
    "Authorization": "Bearer votre_cle_api",
    "Content-Type": "application/json"
}

@application.route('/', methods=['GET', 'POST'])
def accueil():
    resultat = None
    if request.method == 'POST':
        saisie_utilisateur = request.form.get('question')
        donnees = {"message": saisie_utilisateur, "mode": "chat"}
        try:
            reponse_api = requests.post(API_ADRESSE, headers=ENTETES_API, json=donnees)
            reponse_api.raise_for_status()
            resultat = reponse_api.json().get('textResponse', 'Aucune réponse valide')
        except requests.RequestException as erreur:
            resultat = f"Erreur de requête : {erreur}"
    return render_template_string('''
        
        
        
            <meta charset="UTF-8"></meta>
            <title>Interface de questions-réponses</title>
        
        
            <h1>Service de questions-réponses</h1>
            <form method="post">
                <label for="question">Votre question :</label><br></br>
                <textarea cols="50" id="question" name="question" rows="4"></textarea><br></br>
                <input type="submit" value="Envoyer"></input>
            </form>
            {% if resultat %}
                <h2>Réponse :</h2>
                <p>{{ resultat }}</p>
            {% endif %}
        
        
    ''', resultat=resultat)

if __name__ == '__main__':
    application.run(host='0.0.0.0', port=5000)

Exposition via Cpolar pour un accès externe

Pour rendre la page web accessible à distance, configurez un tunnel avec Cpolar. Téléchargez le client Windows depuis le site officiel et connectez-vous via http://localhost:9200. Créez un tunnel HTTP pointant vers le port local 5000 (pour Flask) ou 3001 (pour l'API AnythingLLM), avec un domaine aléatoire ou fixe. Copiez l'URL publique générée pour tester l'accès depuis d'autres appareils.

Veillez à sécuriser l'API avec des clés et à envisager HTTPS pour la production. Surveillez la stabilité et les performances réseau, en ajustant les ressources si nécessaire.

Étiquettes: AnythingLLM deepseek R1 API Flask cpolar

Publié le 21 juillet à 18h07