Direkt zum Inhalt

Mistral Medium 3 Tutorial: Agentische Anwendungen erstellen

Entwickle eine Multi-Tool-Agentenanwendung mit LangGraph, Tavily, Python und der Mistral AI API in der DataLab-Umgebung.
Aktualisierte 19. Mai 2025  · 5 Min. Lesezeit

Mistral Medium 3 bietet hohe Leistung zu einem deutlich niedrigeren Preis als viele Alternativen. Sie ist derzeit über die Mistral AI API zu einem Preis von nur $0,40 pro Million Input-Token und $2 pro Million Output-Token erhältlich. Dieser Preis übertrifft die Preise führender Wettbewerber wie DeepSeek v3egal, ob es sich um eine API oder ein selbst entwickeltes System handelt. Zusammenfassend kann man sagen, dass du bis zu 90% der Leistung von Claude Sonnet 3.7 bei verschiedenen Benchmarks erreichen und dabei erheblich Kosten sparen.

In diesem Tutorial lernen wir, wie wir die Mistral-API einrichten und den Python-Client für den Zugriff auf das Modell verwenden. Danach werden wir LangGraph nutzen, um eine agentenbasierte Anwendung zu erstellen, die die Websuche und das Python REPL-Tool nutzt, um Antworten zu generieren.

Aufbau einer agentenbasierten Anwendung mit Mistral Medium 3 Feature Image

Bild vom Autor

Erste Schritte mit Mistral Medium 3

In diesem Abschnitt erfährst du, wie du den API-Schlüssel generierst, ihn als Umgebungsvariable speicherst und dann den Python-Client verwendest, um auf Mistral Medium 3 zuzugreifen, um Texte zu erzeugen und Bilder zu verstehen.

1. Generierung des Mistral AI API-Schlüssels

Melde dich für die La Plateforme an: Mistral AI und gehen Sie dann auf die Abrechnung und lade das Guthaben von $5 mit deiner Kredit-/Debitkarte auf. Du brauchst nur ein paar Cent für dieses Projekt. Danach gehst du zu den API-Schlüssel um den neuen API-Schlüssel zu generieren.

2. Umgebung einrichten

Das Einrichten einer Umgebungsvariable in DataLab ist ganz einfach. Gehe einfach auf die Registerkarte "Umgebung", wähle die Option "Umgebungsvariablen" und füge eine neue Variable namens "MISTRAL_API_KEY" mit deinem API-Schlüssel hinzu. Nachdem du die Änderungen gespeichert hast, stelle sicher, dass du sie verbindest.

Einrichten von Umgebungsvariablen im Datalab

Erstelle in DataLab die neue Python-Zelle und installiere das Mistral AI Python-Paket. 

!pip install -U mistralai 

3. Textgenerierung

Bevor du irgendeinen Code schreibst, musst du unbedingt die Namen der Mistral Medium 3 API-Schlüsselendpunkte finden, indem du die Seite Models Overview besuchst. Aus der Dokumentation geht hervor, dass der Endpunkt mistral-medium-latest heißt.

Ich lese die Dokumentation, um den Namen des neuen Modells zu erfahren.

Quelle: Modelle Übersicht | Mistral AI Large Language Models

Als Nächstes erstellen wir einen Mistral-KI-Client mit dem API-Schlüssel und generieren eine Streaming-Antwort auf eine Benutzeranfrage. 

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="" )

Die Antwort ist sehr genau und hat uns im Grunde nichts gekostet. 

Mistral AI Generierte Ausgabe

4. Bildverständnis

Um die multimodalen Fähigkeiten des Modells zu testen, nehmen wir einen Screenshot der Startseite des DataCamp-Blogs auf und übermitteln ihn zusammen mit einer Benutzerabfrage an das Modell.

Screenshot der DataCamp-Blogs-Seite

Quelle: Blog | Data Science Artikel | DataCamp

Da das Modell nicht direkt auf die Bilddatei zugreifen kann, müssen wir das Bild zuerst laden und in einen Base64-kodierten String umwandeln.

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)

Wir senden nun das Base64-kodierte Bild zusammen mit einer Benutzeranfrage an den Mistral AI Chat Completion Client.

# 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="" )

Das Modell interpretiert das Bild erfolgreich und generiert eine Antwort in Donald Trumps Stil, was seine multimodalen Verständnisfähigkeiten unter Beweis stellt. 

Mistral AI Generierte Ausgabe

Erstellen einer agentenbasierten Anwendung mit Mistral Medium 3

In diesem Projekt werden wir Mistral Medium 3 mit LangGraph verwenden, um eine agentenbasierte Anwendung zu erstellen. Diese Anwendung wird die Tavily API für die Websuche und die Python REPL für die Ausführung von Code auf der Grundlage von Benutzeraufforderungen nutzen.

Bist du neu bei LangGraph? Kein Problem! Folge unserem LangGraph Tutorial und lerne alles, was du über das Framework wissen musst.

1. Tavily API einrichten

Bevor wir mit der Implementierung beginnen, müssen wir Tavily AI einrichten, indem wir ein Konto erstellen und einen API-Schlüssel generieren. Der Vorgang ist unkompliziert und du musst keine Zahlungsdaten oder eine Kreditkarte angeben.

Sobald du den API-Schlüssel hast, speicherst du ihn als Umgebungsvariable mit dem Namen TAVILY_API_KEY entweder lokal oder in deinem DataLab-Setup, wie im vorherigen Abschnitt gezeigt.

2. Installation von Python-Paketen

Als Nächstes werden wir die notwendigen Python-Pakete installieren, um Werkzeuge und Agenten zu erstellen, die das LangChain-Ökosystem nutzen.

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

3. LLM-Client erstellen

Wir erstellen den LangChain-Client ChatMistralAI large language models (LLM), indem wir den Modellnamen und die Temperatur angeben und Streaming-Antworten aktivieren .

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

4. Werkzeuge initialisieren

Jetzt werden wir die Werkzeuge für den Agenten einrichten. Anstatt Tools manuell zu erstellen, können wir vorgefertigte Tools wie Tavily Search und Python REPL aus dem LangChain-Ökosystem verwenden. 

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. Einen Agenten einrichten

Nachdem der LLM-Client und die Tools fertig sind, können wir jetzt den React Agent mit LangGraph erstellen.

from langgraph.prebuilt import create_react_agentagent = create_react_agent(    model=llm,           tools=tools,      )    ```                 6. Extracting tool namesBefore executing the agent, we will define a Python function to extract the names of the tools used during the agent’s response generation. This function will help us identify which tools were invoked.```pythondef 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 ist eine visuelle Entwicklungsumgebung für das LangGraph-Framework; folge dem LangGraph Studio Guide: Installation, Einrichtung, Anwendungsfälle um mehr darüber zu erfahren .

7. Den Agenten testen 

Testen wir den Agenten, indem wir ihm eine Frage zu aktuellen Nachrichten stellen. 

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)

Der Agent hat die Tavily-Suche benutzt, um eine Antwort auf eine Eilmeldung zu erhalten.

Agentische Anwendung Generierte Ausgabe

Als Nächstes wollen wir das Python REPL-Tool testen, indem wir den Agenten bitten, Python-Code zu erzeugen und auszuführen.

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)

Der Agent hat Mistral Medium 3 für die Codegenerierung und Python REPL für die Codeausführung verwendet.

Agentische Anwendung Generierte Ausgabe

Zum Schluss wollen wir eine Abfrage testen, bei der der Agent beide Tools nacheinander verwenden muss.

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)

Der Agent nutzt Tavily Search, um Goldpreisdaten zu erhalten, Mistral Medium 3, um Code für die Datenvisualisierung zu erzeugen, und Python REPL, um diesen Code auszuführen. Das Ergebnis ist eine sehr genaue Tabelle mit einer Zusammenfassung der verwendeten Werkzeuge.

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.

Agentic Application Generated Output mit der Websuche und dem Python Repl Tool

Wenn du Probleme beim Ausführen des Codes hast, sieh in der Mistral Medium 3 - DataLab Notizbuch für zusätzliche Anleitungen.

Du kannst das Haystack-Ökosystem nutzen, um eine Agentenanwendung zu entwickeln, die leistungsfähiger und einfacher zu implementieren ist. Folge den Anleitungen, um mehr zu erfahren: Haystack AI Tutorial: Aufbau von agentenbasierten Arbeitsabläufen.

Fazit

Nachdem ich mit der Mistral AI API experimentiert und Agenten gebaut habe, um verschiedene Anwendungen zu testen, ist einer der bemerkenswertesten Aspekte, dass es mich keinen einzigen Dollar gekostet hat - selbst nach dem Einsatz von 161.075 Token. Das Modell ist erschwinglich, schnell, genau und unglaublich einfach einzurichten. Sie ist eine gute Alternative zu anderen teuren APIs wie DeepSeek und bietet vergleichbare Funktionen.

Die KI-Landschaft bewegt sich eindeutig in Richtung kleinerer, schnellerer, genauerer und kostengünstigerer Modelle, was ein vielversprechender Trend ist, insbesondere für Start-ups und kleine und mittlere Unternehmen (KMU). Diese Organisationen sind oft stark von LLM-Anbietern abhängig, und da diese Modelle erschwinglicher werden, werden sie von höheren Gewinnspannen profitieren.

Nimm die Entwickeln großer Sprachmodelle Lernpfad, um mit PyTorch und Hugging Face und den neuesten Deep-Learning- und NLP-Techniken deine eigenen LLMs zu erstellen.


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

Als zertifizierter Data Scientist ist es meine Leidenschaft, modernste Technologien zu nutzen, um innovative Machine Learning-Anwendungen zu entwickeln. Mit meinem fundierten Hintergrund in den Bereichen Spracherkennung, Datenanalyse und Reporting, MLOps, KI und NLP habe ich meine Fähigkeiten bei der Entwicklung intelligenter Systeme verfeinert, die wirklich etwas bewirken können. Neben meinem technischen Fachwissen bin ich auch ein geschickter Kommunikator mit dem Talent, komplexe Konzepte in eine klare und prägnante Sprache zu fassen. Das hat dazu geführt, dass ich ein gefragter Blogger zum Thema Datenwissenschaft geworden bin und meine Erkenntnisse und Erfahrungen mit einer wachsenden Gemeinschaft von Datenexperten teile. Zurzeit konzentriere ich mich auf die Erstellung und Bearbeitung von Inhalten und arbeite mit großen Sprachmodellen, um aussagekräftige und ansprechende Inhalte zu entwickeln, die sowohl Unternehmen als auch Privatpersonen helfen, das Beste aus ihren Daten zu machen.

Themen

Top DataCamp Kurse

Lernpfad

Developing Large Language Models

16hrs hr
Learn to develop large language models (LLMs) with PyTorch and Hugging Face, using the latest deep learning and NLP techniques.
Siehe DetailsRight Arrow
Kurs starten
Mehr anzeigenRight Arrow
Verwandt

Der Blog

Top 30 Generative KI Interview Fragen und Antworten für 2024

Dieser Blog bietet eine umfassende Sammlung von Fragen und Antworten zu generativen KI-Interviews, die von grundlegenden Konzepten bis hin zu fortgeschrittenen Themen reichen.
Hesam Sheikh Hassani's photo

Hesam Sheikh Hassani

15 Min.

Der Blog

Die 50 besten AWS-Interview-Fragen und Antworten für 2025

Ein kompletter Leitfaden zur Erkundung der grundlegenden, mittleren und fortgeschrittenen AWS-Interviewfragen, zusammen mit Fragen, die auf realen Situationen basieren.
Zoumana Keita 's photo

Zoumana Keita

15 Min.

Der Blog

Die 20 besten Snowflake-Interview-Fragen für alle Niveaus

Bist du gerade auf der Suche nach einem Job, der Snowflake nutzt? Bereite dich mit diesen 20 besten Snowflake-Interview-Fragen vor, damit du den Job bekommst!
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

15 Min.

Der Blog

Lehrer/innen und Schüler/innen erhalten das Premium DataCamp kostenlos für ihre gesamte akademische Laufbahn

Keine Hacks, keine Tricks. Schüler/innen und Lehrer/innen, lest weiter, um zu erfahren, wie ihr die Datenerziehung, die euch zusteht, kostenlos bekommen könnt.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

4 Min.

Der Blog

Q2 2023 DataCamp Donates Digest

DataCamp Donates hat im zweiten Quartal 2023 über 20.000 Stipendien an unsere gemeinnützigen Partner vergeben. Erfahre, wie fleißige benachteiligte Lernende diese Chancen in lebensverändernde berufliche Erfolge verwandelt haben.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

Der Blog

2022-2023 DataCamp Classrooms Jahresbericht

Zu Beginn des neuen Schuljahres ist DataCamp Classrooms motivierter denn je, das Lernen mit Daten zu demokratisieren. In den letzten 12 Monaten sind über 7.650 neue Klassenzimmer hinzugekommen.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

8 Min.

Mehr anzeigenMehr anzeigen