Pourquoi Rust et l'IA ne sont pas de la science-fiction, mais un outil de travail
\n\nQuand 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\nDans 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\nSi 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\nCe dont nous avons besoin : outils et préparation
\n\nAvant d'écrire du code, voyons ce qui est nécessaire pour intégrer ChatGPT dans une application Rust.
\n\nComposants 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),serdeetserde_json(pour travailler avec JSON),tokio(runtime asynchrone) \n
Création du projet
\ncargo new rust_chatgpt\ncd rust_chatgpt\n\nAjoutons les dépendances dans Cargo.toml :
[dependencies]\nreqwest = { version = "0.12", features = ["json"] }\ntokio = { version = "1", features = ["full"] }\nserde = { version = "1.0", features = ["derive"] }\nserde_json = "1.0"\n\nMaintenant, vous pouvez lancer cargo build — les dépendances seront téléchargées automatiquement.
Écrire la première requête à ChatGPT en Rust
\n\nLa 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.
Structures de données pour l'API
\nL'API OpenAI attend un JSON avec un schéma spécifique. Décrivons-le avec serde :
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\nRemarque : Message est utilisé à la fois pour l'envoi et la réception — nous avons donc ajouté les deux attributs Serialize et Deserialize.
Requête asynchrone
\nÉcrivons maintenant une fonction qui envoie un message et retourne la réponse de ChatGPT :
\n\nuse 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