- Compte Akamai Cloud avec accès à Akamai Functions
- Jeton d'accès personnel à Akamai Cloud
- Accès en lecture et en écriture aux Linodes et aux pare-feux
- Accès en lecture aux événements
- Installation locale de Terraform
- Installation locale de la CLI Spin
- Plugin aka pour Spin
- Installation locale de Node.js
- Paire de clés SSH
Avant de commencer
Vous vous connecterez à l'instance GPU via SSH lors de la validation du déploiement d'Ollama ; assurez-vous donc que votre clé publique est disponible avant de provisionner l'infrastructure.
Développer le projet
Provisionnez d'abord le back-end d'inférence, puis configurez, testez et déployez l'application en bordure de l'Internet.
Clonez l'exemple d'application et examinez ses répertoires d'application et d'infrastructure.
Clonez le dépôt du projet :
git clone https://github.com/akamai-developers/akamai-functions-llm-chatbot.git
cd akamai-functions-llm-chatbot
Le dépôt contient deux parties principales :
- Un répertoire infrastructure contenant la configuration Terraform et cloud-init
- Une application Spin contenant le front-end Astro et l'API TypeScript
Vérifiez les variables Terraform avant le provisionnement. Vous pouvez ajuster la région, le forfait GPU, le modèle et les paramètres d'infrastructure associés à votre environnement.
Utilisez Terraform pour créer l'instance GPU et configurer le service d'inférence Ollama.
Accédez au répertoire infrastructure et initialisez Terraform :
cd infrastructure
terraform init
Définissez votre jeton d'accès personnel Akamai Cloud :
export LINODE_TOKEN="your-pat-here"
Provisionnez l'infrastructure :
terraform apply
Terraform crée une instance GPU dédiée et utilise cloud-init pour :
- Installer les pilotes GPU requis
- Installer Ollama
- Récupérer le modèle open source configuré
- Exposer l'API Ollama sur le port 11434
- Attendre que le modèle soit disponible
Une fois le provisionnement terminé, Terraform renvoie le point de terminaison Ollama :
ollama_endpoint = "http://<linode-ip>:11434"
Le provisionnement et le chargement du modèle prennent généralement plusieurs minutes.
Connectez l'application en bordure de l'Internet au point de terminaison Ollama et protégez son API de gestion du cache.
Avant de continuer, installez la CLI Spin, Node.js et le plugin aka.
Installez ou mettez à jour le plugin Akamai Functions :
spin plugins update
spin plugins install aka
L'application utilise deux variables de déploiement :
- ollama_url permet de connecter l'application à l'API Ollama hébergée sur le GPU.
- secret_sauce protège le point de terminaison utilisé pour vider le cache de réponses.
Générez une valeur aléatoire forte pour secret_sauce. Les requêtes adressées au point de terminaison de gestion du cache doivent fournir cette valeur via l'en-tête HTTP X-SecretSauce.
Ne conservez pas de jetons, de secrets ou d'identifiants de points de terminaison de production dans le dépôt.
Exécutez l'application Spin en local tout en utilisant le même back-end d'inférence distant.
Démarrez l'application et transmettez les variables requises :
spin up --build \
--variable ollama_url="http://<linode-ip>:11434" \
--variable secret_sauce="<secret_aléatoire_fort>"
Ouvrez l'application locale dans votre navigateur et envoyez un message de test.
Vérifiez que :
- Le chatbot renvoie une réponse générée par le modèle.
- L'historique des conversations est conservé tout au long de la session.
- Les questions répétées peuvent être renvoyées à partir du cache.
- Les requêtes qui enfreignent les garde-fous sont rejetées.
- Le navigateur ne contrôle ni ne transmet l'historique complet des conversations.
L'utilisation du back-end Ollama distant pendant le développement local vous permet de tester le comportement du modèle sans avoir besoin d'un GPU local.
Compilez l'application au format WebAssembly et déployez-la sur Akamai Functions.
Vérifiez que l'accès à Akamai Functions est activé pour votre compte avant le déploiement. Si votre demande n'a pas encore été approuvée, demandez l'accès et poursuivez le développement local pendant l'examen de votre demande.
Authentifiez-vous auprès d'Akamai Functions :
spin aka login
Développez et déployez l'application :
spin aka deploy --build \
--variable ollama_url="http://<linode-ip>:11434" \
--variable secret_sauce="<secret-aléatoire-fort>"
Après le déploiement, ouvrez l'URL de l'application générée et posez une nouvelle question.
L'application déployée héberge son front-end et son API depuis Akamai Functions. Les requêtes sont validées en bordure de l'Internet avant que l'application ne consulte le magasin clé-valeur ou ne contacte le back-end d'inférence GPU.
Confirmez que le traitement en bordure de l'Internet réduit les requêtes inutiles envoyées au modèle.
Testez l'application avec des questions nouvelles et récurrentes.
Pour poser une nouvelle question, l'application :
- Valide le message entrant.
- Applique les garde-fous d'entrée et de sujet.
- Charge l'historique de la session.
- Vérifie le cache de réponse.
- Envoie la requête à Ollama lorsqu'aucune réponse n'est disponible dans le cache.
- Stocke la réponse pour les requêtes ultérieures.
- Met à jour l'historique de la session.
Pour une question récurrente équivalente, l'application peut renvoyer la réponse mise en cache directement depuis la bordure de l'Internet sans utiliser un autre cycle d'inférence GPU.
Une fois les tests terminés, supprimez l'infrastructure dont vous n'avez plus besoin :
cd infrastructure
terraform destroy
Les ressources GPU dédiées continuent d'être facturées jusqu'à leur suppression.
Foire aux questions (FAQ)
Foire aux questions (FAQ)
Le modèle open source est hébergé par Ollama sur une instance Akamai Cloud dotée d'un GPU NVIDIA dédié. Le modèle ne s'exécute pas au sein d'Akamai Functions.
L'application Spin est compilée en WebAssembly pour garantir un démarrage rapide, une isolation solide des charges de travail et un déploiement sur l'infrastructure en bordure de l'Internet distribuée d'Akamai.
L'application normalise chaque question et vérifie si une réponse existe déjà dans le magasin clé-valeur d'Akamai Functions. En cas de réussite de la recherche dans le cache, la réponse enregistrée est renvoyée sans qu'une nouvelle requête soit envoyée au GPU.
L'historique des conversations est stocké côté serveur dans le magasin clé-valeur d'Akamai Functions et associé à un identifiant de session dans un cookie sécurisé. L'exemple limite l'historique à 20 messages.
L'exemple vérifie la présence d'injections de prompt, de pivots de requêtes secondaires et de requêtes de génération de code. Il limite également la longueur des messages et utilise un prompt système pour maintenir les réponses dans le domaine prévu par l'application.
Oui. Vous pouvez modifier le modèle Ollama via la configuration de l'infrastructure, sous réserve des exigences matérielles et de mémoire du modèle.
L'offre s'applique uniquement aux services cloud éligibles. Les services GPU dédiés sont exclus ; veuillez donc consulter les conditions promotionnelles en vigueur avant de provisionner le projet.
Oui. L'API TypeScript utilise LangChain.js et un point de terminaison compatible avec Ollama ; le contexte statique de l'exemple peut donc être étendu à l'aide d'un chargeur de documents, d'un récupérateur et d'un magasin de vecteurs.
Exécutez la commande terraform destroy une fois le projet terminé et vérifiez que l'instance GPU et les ressources associées ont bien été supprimées de votre compte.