ai newsMo., 26. Okt.
EilmeldungOpenAI launches GPT-6.1 Terra, a cheaper model for everyday computer work

KI-Agent mit NestJS und Mistral steuern: Tutorial mit rund 30 Zeilen TypeScript

Ein Tutorial zeigt, wie sich in etwa 30 Zeilen TypeScript ein KI-Agent mit NestJS aufbauen lässt, der auf das europäische Open-Source-Modell Mistral setzt. Vom Projektsetup bis zu einem POST /ask Endpoint wird dabei sowohl die Modellwahl als auch die Steuerung des Agenten in der Anwendung abgedeckt.

dev.toMontag 17:05 · 26.10.DE4 Min. Lesezeit
Bild: dev.to

Einen KI-Agenten zu steuern bedeutet, zwei Dinge zu beherrschen: das Modell, das er verwendet, und was er in Ihrer Anwendung tut. Dieses Tutorial behandelt beides in rund dreißig Zeilen TypeScript, von nest new bis zu einem POST /ask Endpoint: ein europäisches Open-Source-Modell von Mistral und ein Agent, der als NestJS-Modul mit nestjs-langchain deklariert wird.

Das Modell ist zwar nicht deterministisch, aber alles, was es umgibt, kann es sein: Der Agent wird an einer einzigen Stelle konfiguriert, beim Start überprüft, und jede Ausführung verrät, was er getan hat.

Getestet mit NestJS 12, LangChain 1.x, nestjs-langchain 2.0, @langchain/mistralai 1.2 und Node 22.

Erstellen Sie die Anwendung und installieren Sie dann die Bibliothek sowie die Mistral-Integration von LangChain:

npx @nestjs/cli new my-app --package-manager npm cd my-app npm install nestjs-langchain @langchain/mistralai Enter fullscreen mode Exit fullscreen mode npm installiert dabei auch langchain, @langchain/core und zod, die Peer-Dependencies der Bibliothek. @langchain/mistralai ist der Provider: @langchain/openai, @langchain/anthropic oder jede andere Chat-Integration von LangChain lässt sich auf diesel Weise verwenden.

Der Provider liest seinen Schlüssel aus der Umgebungsvariable. Erstellen Sie ihn in der Konsole von Mistral AI und setzen Sie ihn dann:

export MISTRAL_API_KEY =... Enter fullscreen mode Exit fullscreen mode Wie deklariert man den Agenten mit einem Mistral-Modell? Importieren Sie LangChainModule in app.module.ts:

import { Module } from ' @nestjs/common '; import { LangChainModule } from ' nestjs-langchain '; import { AppController } from './app.controller.js '; import { AppService } from './app.service.js '; import { AskController } from './ask.controller.js '; @ Module ({ imports: [ LangChainModule. register ({ // `provider:model`; der Provider liest MISTRAL_API_KEY. model: { model: ' mistralai:mistral-small-latest ' }, systemPrompt: ' Du bist ein hilfreicher Assistent. Antworte in einem Absatz. ', }), ], controllers: [ AppController, AskController ], providers: [ AppService ], }) export class AppModule {} Enter fullscreen mode Exit fullscreen mode model benennt den Provider und das Modell. mistral-small-latest reicht für den Einstieg aus und kann Tools aufrufen, was später noch nützlich sein wird; mistralai:mistral-large-latest liefert das größte Modell von Mistral. Der Wechsel zu OpenAI besteht aus openai:gpt-5-mini mit installiertem @langchain/openai.

Weil Sie dadurch wählen, wo er läuft und unter welcher Lizenz:

Mit Ollama ändert sich nur die model-Zeile: kein API-Schlüssel mehr, und Ihre Daten bleiben auf Ihrer eigenen Infrastruktur.

npm install @langchain/ollama ollama pull mistral-small3.2 Enter fullscreen mode Exit fullscreen mode model: { model: ' ollama:mistral-small3.2 ' }, Enter fullscreen mode Exit fullscreen mode Auch der Rest der Kette ist Open Source: NestJS, LangChain und nestjs-langchain stehen unter der MIT-Lizenz.

Injizieren Sie Agent wie jeden anderen Provider, in einer neuen ask.controller.ts:

import { Body, Controller, Post } from ' @nestjs/common '; import { Agent } from ' nestjs-langchain '; @ Controller ( ' ask ' ) export class AskController { constructor ( private readonly agent: Agent ) {} @ Post () async ask (@ Body ( ' question ' ) question: string ): Promise < string > { const { output } = await this. agent. run ( question ); return output; } } Enter fullscreen mode Exit fullscreen mode Neben output, also der Antwort, gibt run() auch die vom Modell aufgerufenen Tools, die verbrauchten Tokens und die Dauer der Ausführung zurück.

Starten Sie die Anwendung und stellen Sie eine Frage:

npm run start:dev curl -X POST http://localhost:3000/ask \ -H 'Content-Type: application/json' \ -d '{"question": "À quoi sert un module NestJS?"}' Enter fullscreen mode Exit fullscreen mode Die Antwort stammt von Mistral, als reiner Text.

Indem man es wie den Rest des Backends behandelt: nestjs-langchain ordnet es in ein Nest-Modul ein, mit denselben Regeln.

Für einen einfachen Modellaufruf genügt LangChain allein. Das Modell wird nützlich, sobald der Agent Ihre Anwendung berührt und Sie wissen müssen, was er tut.

Ein Agent wird dann nützlich, wenn er in Ihrer Anwendung agiert. Mit @Tool() wird eine Service-Methode zu einem Tool, das Mistral aufrufen kann:

@ Injectable () export class MathService { @ Tool ({ description: ' Additionne deux nombres. ' }) add ( @ ToolParam ({ name: ' a ' }) a: number, @ ToolParam ({ name: ' b ' }) b: number, ): number { return a + b; } } Enter fullscreen mode Exit fullscreen mode Anschließend macht tools: [MathModule] in register() den Service dem Agenten verfügbar. Die Details finden Sie in der vollständigen Serie: AI agents with NestJS.

Automatisch übersetzt. Das Original auf Englisch ist unten aufklappbar.

Original (Englisch) anzeigen

Gouverner un agent IA, c'est maîtriser deux choses: le modèle qu'il utilise, et ce qu'il fait dans votre application. Ce tutoriel couvre les deux en une trentaine de lignes de TypeScript, de nest new à un endpoint POST /ask: un modèle Mistral, européen et open source, et un agent déclaré comme un module NestJS avec nestjs-langchain.

Le modèle n'est pas déterministe, mais tout ce qui l'entoure peut l'être: l'agent est configuré en un seul endroit, vérifié au démarrage, et chaque exécution dit ce qu'il a fait.

Testé avec NestJS 12, LangChain 1.x, nestjs-langchain 2.0, @langchain/mistralai 1.2 et Node 22.

Créez l'application, puis installez la bibliothèque et l'intégration Mistral de LangChain:

npx @nestjs/cli new my-app --package-manager npm cd my-app npm install nestjs-langchain @langchain/mistralai Enter fullscreen mode Exit fullscreen mode npm installe aussi langchain, @langchain/core et zod, les dépendances pairs de la bibliothèque. @langchain/mistralai est le fournisseur: @langchain/openai, @langchain/anthropic ou toute autre intégration de chat LangChain s'utilise de la même façon.

Le fournisseur lit sa clé dans l'environnement. Créez-la dans la console de Mistral AI, puis:

export MISTRAL_API_KEY =... Enter fullscreen mode Exit fullscreen mode Comment déclarer l'agent avec un modèle Mistral? Importez LangChainModule dans app.module.ts:

import { Module } from ' @nestjs/common '; import { LangChainModule } from ' nestjs-langchain '; import { AppController } from './app.controller.js '; import { AppService } from './app.service.js '; import { AskController } from './ask.controller.js '; @ Module ({ imports: [ LangChainModule. register ({ // `fournisseur:modèle`; le fournisseur lit MISTRAL_API_KEY. model: { model: ' mistralai:mistral-small-latest ' }, systemPrompt: ' Tu es un assistant utile. Réponds en un paragraphe. ', }), ], controllers: [ AppController, AskController ], providers: [ AppService ], }) export class AppModule {} Enter fullscreen mode Exit fullscreen mode model nomme le fournisseur et le modèle. mistral-small-latest suffit pour commencer et sait appeler des outils, ce qui servira plus loin; mistralai:mistral-large-latest donne le plus grand modèle de Mistral. Passer à OpenAI, c'est openai:gpt-5-mini avec @langchain/openai installé.

Parce que vous choisissez où il tourne, et sous quelle licence:

Avec Ollama, seule la ligne model change: plus de clé d'API, et vos données restent sur votre infrastructure.

npm install @langchain/ollama ollama pull mistral-small3.2 Enter fullscreen mode Exit fullscreen mode model: { model: ' ollama:mistral-small3.2 ' }, Enter fullscreen mode Exit fullscreen mode Le reste de la chaîne est open source aussi: NestJS, LangChain et nestjs-langchain sont sous licence MIT.

Injectez Agent comme n'importe quel provider, dans un nouveau ask.controller.ts:

import { Body, Controller, Post } from ' @nestjs/common '; import { Agent } from ' nestjs-langchain '; @ Controller ( ' ask ' ) export class AskController { constructor ( private readonly agent: Agent ) {} @ Post () async ask (@ Body ( ' question ' ) question: string ): Promise < string > { const { output } = await this. agent. run ( question ); return output; } } Enter fullscreen mode Exit fullscreen mode En plus de output, la réponse, run() renvoie les outils appelés par le modèle, les tokens utilisés et la durée de l'exécution.

Démarrez l'application et posez une question:

npm run start:dev curl -X POST http://localhost:3000/ask \ -H 'Content-Type: application/json' \ -d '{"question": "À quoi sert un module NestJS?"}' Enter fullscreen mode Exit fullscreen mode La réponse est celle de Mistral, en texte brut.

En le traitant comme le reste du backend: nestjs-langchain le range dans un module Nest, avec les mêmes règles.

Pour un simple appel à un modèle, LangChain seul suffit. Le module sert dès que l'agent touche votre application et que vous devez savoir ce qu'il fait.

Un agent devient utile quand il agit sur votre application. Avec @Tool(), une méthode de service devient un outil que Mistral peut appeler:

@ Injectable () export class MathService { @ Tool ({ description: ' Additionne deux nombres. ' }) add ( @ ToolParam ({ name: ' a ' }) a: number, @ ToolParam ({ name: ' b ' }) b: number, ): number { return a + b; } } Enter fullscreen mode Exit fullscreen mode Puis tools: [MathModule] dans register() le donne à l'agent. Les détails se trouvent dans la série complète: AI agents with NestJS.

Originaltitel: Gouvernez votre agent IA : NestJS et Mistral en 30 lignesQuelle: dev.to (dev.to). Original öffnen