Ga naar hoofdinhoud

Mistral Medium 3-tutorial: agentic applicaties bouwen

Ontwikkel een multi-tool agent-applicatie met LangGraph, Tavily, de Python-tool en de Mistral AI API in de DataLab-omgeving.
Bijgewerkt 2 okt 2026  · 5 min lezen

Verken met AI

ChatGPTClaudePerplexity

Mistral Medium 3 biedt hoge prestaties voor een aanzienlijk lagere prijs dan veel alternatieven. Het is momenteel beschikbaar via de Mistral AI API, voor slechts $0,40 per miljoen inputtokens en $2 per miljoen outputtokens. Deze prijsstelling steekt gunstig af tegen toonaangevende concurrenten zoals DeepSeek v3, zowel via API als in zelfgehoste systemen. Kortom: je kunt tot 90% van de prestaties van Claude Sonnet 3.7 op diverse benchmarks behalen en tegelijkertijd aanzienlijk op kosten besparen.

In deze tutorial leer je hoe je de Mistral API instelt en de Python-client gebruikt om het model aan te spreken. Daarna gebruiken we LangGraph om een agentische applicatie te bouwen die webzoekopdrachten en de Python REPL-tool inzet om antwoorden te genereren.

Een agentische applicatie bouwen met Mistral Medium 3 feature-afbeelding

Afbeelding door de auteur

Aan de slag met Mistral Medium 3

In deze sectie maken we een API-sleutel aan, slaan we die op als omgevingsvariabele en gebruiken we vervolgens de Python-client om Mistral Medium 3 te gebruiken voor tekstgeneratie en beeldbegrip.

1. De Mistral AI API-sleutel genereren

Meld je aan bij La Plateforme: Mistral AI en ga daarna naar de sectie Billing en laad $5 tegoed op met een creditcard/debetkaart. Voor dit project heb je maar een paar cent nodig. Ga daarna naar het tabblad API keys om een nieuwe API-sleutel te genereren. 

2. Omgeving instellen

Een omgevingsvariabele instellen in DataLab is eenvoudig. Ga naar het tabblad "Environment", kies "Environment Variables" en voeg een nieuwe variabele toe met de naam "MISTRAL_API_KEY" plus je API-sleutel. Sla de wijzigingen op en zorg ervoor dat je deze verbindt.

Omgevingsvariabele instellen in de Datalab

Maak in DataLab een nieuwe Python-cel en installeer het Mistral AI Python-pakket. 

!pip install -U mistralai 

3. Tekstgeneratie

Voordat je code schrijft, is het belangrijk de endpointnaam voor de Mistral Medium 3 API te vinden via de pagina Models Overview. Volgens de documentatie heet het endpoint mistral-medium-latest.

De documentatie lezen om de nieuwe modelnaam te vinden.

Bron: Models Overview | Mistral AI Large Language Models

Vervolgens maken we met de API-sleutel een Mistral AI-client en genereren we een streamingantwoord op een gebruikersvraag. 

import osfrom mistralai import Mistralapi_key = os.environ["MISTRAL_API_KEY"]model = "mistral-medium-latest"client = Mistral(api_key=api_key)stream_response = client.chat.stream(    model = model,    messages = [        {            "role": "user",            "content": "What is the best course to take from DataCamp?",        },    ])for chunk in stream_response:    print(chunk.data.choices[0].delta.content, end="" )

De respons is zeer accuraat en kost ons in feite niets. 

Door Mistral AI gegenereerde output

4. Beeldbegrip

Om de multimodale mogelijkheden van het model te testen, maken we een screenshot van de voorpagina van de DataCamp-blog en geven die samen met een prompt aan het model.

Screenshot van de DataCamp-blogpagina

Bron: Blog | Data Science Articles | DataCamp

Omdat het model het afbeeldingsbestand niet direct kan openen, moeten we de afbeelding eerst laden en omzetten naar een Base64-gecodeerde string.

import base64import requestsdef encode_image(image_path):    """Encode the image to base64."""    try:        with open(image_path, "rb") as image_file:            return base64.b64encode(image_file.read()).decode('utf-8')    except FileNotFoundError:        print(f"Error: The file {image_path} was not found.")        return None    except Exception as e:  # Added general exception handling        print(f"Error: {e}")        return None# Path to your imageimage_path = "datacamp_fp.png"# Getting the base64 stringbase64_image = encode_image(image_path)

We sturen nu de Base64-gecodeerde afbeelding samen met een gebruikersvraag naar de Mistral AI chat-completionclient.

# Define the messages for the chatmessages = [    {        "role": "user",        "content": [            {                "type": "text",                "text": "Explain the image in a Donald Trump style."            },            {                "type": "image_url",                "image_url": f"data:image/png;base64,{base64_image}"             }        ]    }]stream_response = client.chat.stream(    model = model,    messages = messages)for chunk in stream_response:    print(chunk.data.choices[0].delta.content, end="" )

Het model interpreteert de afbeelding succesvol en genereert een reactie in de stijl van Donald Trump, wat de multimodale capaciteiten aantoont. 

Door Mistral AI gegenereerde output

Een agentische applicatie bouwen met Mistral Medium 3

In dit project gebruiken we Mistral Medium 3 met LangGraph om een agentische applicatie te bouwen. Deze applicatie gebruikt de Tavily API voor webzoekopdrachten en Python REPL om code uit te voeren op basis van gebruikersprompts.

Nieuw met LangGraph? Geen probleem! Volg onze LangGraph-tutorial en leer alles wat je moet weten over het framework.

1. Tavily API instellen

Voordat we met de implementatie beginnen, moeten we Tavily AI instellen door een account aan te maken en een API-sleutel te genereren. Het proces is eenvoudig en je hoeft geen betaalgegevens of creditcard op te geven.

Heb je de API-sleutel? Sla die dan op als een omgevingsvariabele met de naam TAVILY_API_KEY, lokaal of in je DataLab-omgeving zoals in de vorige sectie getoond.

2. Python-pakketten installeren

Vervolgens installeren we de benodigde Python-pakketten om tools en agents te maken met het LangChain-ecosysteem.

%%capture!pip install -U \    mistralai \    langchain langchain-mistralai \    langchain-experimental \    langgraph  \    tavily-python

3. LLM-client aanmaken

We maken LangChains ChatMistralAI-client voor large language models (LLM) door de modelnaam, temperatuur en streaming-responses in te stellen. 

from langchain_mistralai import ChatMistralAIllm = ChatMistralAI(    model="mistral-medium-latest",       temperature=0.2,                     streaming=True          )

4. Tools initialiseren

Nu richten we de tools voor de agent in. In plaats van handmatig tools te bouwen, kunnen we kant-en-klare tools zoals Tavily Search en Python REPL uit het LangChain-ecosysteem gebruiken. 

from langchain_community.tools import TavilySearchResultsfrom langchain_experimental.tools.python.tool import PythonREPLToolsearch_tool = TavilySearchResults(max_results=5, include_answer=True)code_tool   = PythonREPLTool()tools = [search_tool, code_tool]

5. Een agent opzetten

Met de LLM-client en tools klaar kunnen we nu de React Agent maken met LangGraph.

from langgraph.prebuilt import create_react_agentagent = create_react_agent(    model=llm,           tools=tools,      )    

LangGraph Studio is een visuele ontwikkelomgeving voor het LangGraph-framework; volg de LangGraph Studio-gids: installatie, set-up, use-cases om er meer over te leren. 

6. Toolnamen extraheren

Voordat we de agent uitvoeren, definiëren we een Python-functie om de namen van de tools te extraheren die tijdens de generatie van het agentantwoord zijn gebruikt. Zo zien we welke tools zijn aangeroepen.

def extract_tool_names(conversation: dict) -> list[str]:    """    Given a conversation dict with a 'messages' list (where each message    may be a dict or a Pydantic model), extract all unique tool names    used in any tool call.    """    tool_names = set()    for msg in conversation.get('messages', []):        # 1) Try direct attribute access (for Pydantic models)        calls = []        if hasattr(msg, 'tool_calls'):            calls = getattr(msg, 'tool_calls') or []        # 2) If that fails, the message might be a dict        elif isinstance(msg, dict):            calls = msg.get('tool_calls')            # also check nested in additional_kwargs            if not calls and isinstance(msg.get('additional_kwargs'), dict):                calls = msg['additional_kwargs'].get('tool_calls')        # 3) Finally, check additional_kwargs on objects        else:            ak = getattr(msg, 'additional_kwargs', None)            if isinstance(ak, dict):                calls = ak.get('tool_calls', [])        # Normalize to list        calls = calls or []        # Extract names        for call in calls:            # dict-style tool call            if isinstance(call, dict):                # top-level 'name'                if 'name' in call:                    tool_names.add(call['name'])                # nested under 'function'                elif 'function' in call and isinstance(call['function'], dict):                    fn = call['function']                    if 'name' in fn:                        tool_names.add(fn['name'])    return sorted(tool_names)

LangGraph Studio is een visuele ontwikkelomgeving voor het LangGraph-framework; volg de LangGraph Studio-gids: installatie, set-up, use-cases om er meer over te leren.

7. De agent testen 

Laten we de agent testen met een vraag over breaking news. 

question = "What are the top 5 breaking news stories?"def run_agent(question):    result = agent.invoke(        {            "messages": [                {"role": "user", "content": question}            ]        }    )    tool_name = extract_tool_names(result)    # The LLM’s final answer is always in the last message    raw_answer = result["messages"][-1].content    clean_text = "".join(part for part in raw_answer if isinstance(part, str))    return tool_name, clean_texttool_name, clean_text = run_agent(question)print("Tool used ⫸", tool_name, "\n")print(clean_text)

De agent heeft de Tavily Search-tool gebruikt om een antwoord over breaking news te genereren.

Door de agentische applicatie gegenereerde output

Laten we vervolgens de Python REPL-tool testen door de agent te vragen Python-code te genereren en uit te voeren.

question = "Write a code to display the stars in a triangle. Please execute the code too."tool_name, clean_text = run_agent(question)print("Tool used ⫸", tool_name, "\n")print(clean_text)

De agent heeft Mistral Medium 3 gebruikt voor codegeneratie en Python REPL voor het uitvoeren van de code.

Door de agentische applicatie gegenereerde output

Tot slot testen we een vraag waarbij de agent beide tools na elkaar moet gebruiken.

question = "Get the latest gold price data for the past 7 days and use it to generate a line plot"tool_name, clean_text = run_agent(question)print("Tool used ⫸", tool_name, "\n")print(clean_text)

De agent gebruikt Tavily Search om goudprijsgegevens op te halen, Mistral Medium 3 om code voor datavisualisatie te genereren en Python REPL om die code uit te voeren. Het resultaat is een zeer accurate grafiek plus een samenvatting van de gebruikte tools.

Tool used ⫸ ['Python_REPL', 'tavily_search_results_json'] The code generates a line plot showing the gold price per gram in USD over the last 7 days, with the x-axis representing dates and the y-axis representing the gold price. The plot includes markers for each data point, a title, labeled axes, a grid, and rotated x-axis labels for better readability.

Door de agentische applicatie gegenereerde output met de webzoek- en Python REPL-tool

Loop je ergens tegenaan bij het uitvoeren van de code? Raadpleeg dan het Mistral Medium 3 — DataLab-notebook voor extra begeleiding.

Je kunt ook het Haystack-ecosysteem gebruiken om een agent-applicatie te bouwen die krachtiger is en eenvoudiger te implementeren. Volg de tutorials om meer te leren: Haystack AI-tutorial: agentische workflows bouwen.

Conclusie

Na te hebben geëxperimenteerd met de Mistral AI API en agents te hebben gebouwd om verschillende toepassingen te testen, is een van de opvallendste punten dat het me geen dollar heeft gekost—zelfs niet na het gebruik van 161.075 tokens. Het model is betaalbaar, snel, accuraat en ongelooflijk eenvoudig in te stellen. Het is een geweldig alternatief voor andere dure API’s, zoals DeepSeek, met vergelijkbare functionaliteit.

Het AI-landschap beweegt duidelijk richting kleinere, snellere, nauwkeurigere en kostenefficiëntere modellen—een veelbelovende trend, vooral voor startups en mkb’s. Deze organisaties leunen vaak zwaar op LLM-providers en profiteren naarmate deze modellen betaalbaarder worden van hogere winstmarges.

Volg de Developing Large Language Models skill track om je eigen LLM’s te bouwen met PyTorch en Hugging Face en de nieuwste deep learning- en NLP-technieken.


Abid Ali Awan's photo
Author
Abid Ali Awan
LinkedIn
Twitter

Als gecertificeerd data scientist haal ik met passie het maximale uit de nieuwste technologie om innovatieve machinelearning-toepassingen te bouwen. Met een sterke achtergrond in spraakherkenning, data-analyse en -rapportage, MLOps, conversationele AI en NLP heb ik mijn vaardigheden aangescherpt in het ontwikkelen van intelligente systemen die echt impact maken. Naast mijn technische expertise ben ik ook een sterke communicator met een talent om complexe concepten terug te brengen tot heldere, beknopte taal. Daardoor ben ik uitgegroeid tot een veelgelezen blogger over data science, waar ik mijn inzichten en ervaringen deel met een groeiende community van data-professionals. Op dit moment richt ik me op contentcreatie en redactie, waarbij ik met large language models werk aan krachtige en aansprekende content die zowel bedrijven als individuen helpt het beste uit hun data te halen.

Onderwerpen
Large Language Models
AI Agents
Kunstmatige intelligentie

Topcursussen op DataCamp

{count, plural, one {Leerpad} other {Leerpaden}}

Associate AI Engineer voor ontwikkelaars

{hours} uur
Leer hoe je AI in softwareapplicaties kunt integreren met behulp van API's en open-sourcebibliotheken. Begin vandaag nog aan je reis om AI-ingenieur te worden!
Bekijk detailsRight Arrow
Start Cursus
Meer bekijkenRight Arrow
Gerelateerd

{count, plural, one {blog} other {blogs}}

AI vanaf nul leren in 2026: een complete gids van de experts

Ontdek alles wat je moet weten om in 2026 AI te leren, van tips om te beginnen tot handige resources en inzichten van industrie-experts.
Adel Nehme's photo

Adel Nehme

15 min

Meer BekijkenMeer Bekijken