Rust et l'IA : comment utiliser ChatGPT dans le développement en Rust

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Pourquoi Rust et l'IA ne sont pas de la science-fiction, mais un outil de travail

\n\n

Quand on entend « intelligence artificielle » et « Rust » dans la même phrase, on imagine généralement des réseaux neuronaux complexes écrits en Python. Mais que diriez-vous si je vous disais que Rust peut être un excellent backend pour interagir avec ChatGPT ? Sans Python lent, sans dépendances comme TensorFlow — juste du code pur, rapide et sécurisé qui communique avec l'API OpenAI.

\n\n

Dans cet article, nous n'allons pas apprendre un réseau neuronal à partir de zéro — nous allons faire quelque chose de plus pratique : écrire un programme en Rust qui envoie des requêtes à ChatGPT et reçoit des réponses. Ensuite, nous lui apprendrons à générer du code, de la documentation et même à corriger des erreurs. Cela semble magique ? En réalité, ce ne sont que quelques crates et une bonne clé API.

\n\n

Si vous avez déjà voulu ajouter un « cerveau » sous forme de modèle de langage à votre projet Rust, vous êtes au bon endroit. C'est parti !

\n\n

Ce dont nous avons besoin : outils et préparation

\n\n

Avant d'écrire du code, voyons ce qui est nécessaire pour intégrer ChatGPT dans une application Rust.

\n\n

Composants nécessaires

\n
    \n
  • Rust — compilateur installé (rustc) et gestionnaire de paquets Cargo. Si vous n'avez pas encore Rust — curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  • \n
  • Clé API OpenAI — inscrivez-vous sur platform.openai.com, créez une clé et placez-la dans la variable d'environnement OPENAI_API_KEY
  • \n
  • Bibliothèques Rust — nous utiliserons les crates reqwest (pour les requêtes HTTP), serde et serde_json (pour travailler avec JSON), tokio (runtime asynchrone)
  • \n
\n\n

Création du projet

\n
cargo new rust_chatgpt\ncd rust_chatgpt
\n\n

Ajoutons les dépendances dans Cargo.toml :

\n\n
[dependencies]\nreqwest = { version = "0.12", features = ["json"] }\ntokio = { version = "1", features = ["full"] }\nserde = { version = "1.0", features = ["derive"] }\nserde_json = "1.0"
\n\n

Maintenant, vous pouvez lancer cargo build — les dépendances seront téléchargées automatiquement.

\n\n

Écrire la première requête à ChatGPT en Rust

\n\n

La façon la plus simple de « parler » à ChatGPT est d'envoyer une requête POST au point de terminaison https://api.openai.com/v1/chat/completions. Rust, avec son typage strict, est parfait pour cette tâche : nous décrirons clairement la structure de la requête et de la réponse, et le compilateur nous vérifiera à chaque étape.

\n\n

Structures de données pour l'API

\n

L'API OpenAI attend un JSON avec un schéma spécifique. Décrivons-le avec serde :

\n\n
use serde::{Deserialize, Serialize};\n\n#[derive(Serialize)]\nstruct ChatRequest {\n    model: String,\n    messages: Vec<Message>,\n    temperature: f32,\n}\n\n#[derive(Serialize, Deserialize, Clone)]\nstruct Message {\n    role: String,\n    content: String,\n}\n\n#[derive(Deserialize)]\nstruct ChatResponse {\n    choices: Vec<Choice>,\n}\n\n#[derive(Deserialize)]\nstruct Choice {\n    message: Message,\n}
\n\n

Remarque : Message est utilisé à la fois pour l'envoi et la réception — nous avons donc ajouté les deux attributs Serialize et Deserialize.

\n\n

Requête asynchrone

\n

Écrivons maintenant une fonction qui envoie un message et retourne la réponse de ChatGPT :

\n\n
use std::env;\n\nasync fn ask_chatgpt(prompt: &str) -> Result<String, Box<dyn std::error::Error>> {\n    let api_key = env::var("OPENAI_API_KEY")\n        .expect("La variable OPENAI_API_KEY n'est pas définie");\n\n    let client = reqwest::Client::new();\n\n    let request_body = ChatRequest {\n        model: "gpt-4o-mini".to_string(), // modèle rapide et économique\n        messages: vec![\n            Message {\n                role: "system".to_string(),\n                

Blogs

Book Recommendations