Table of Contents
Dans cet article, nous explorons comment combiner R et Python pour optimiser l’ingénierie des prompts à l’aide de l’API Perplexity. L’objectif est de corriger les performances insatisfaisantes d’une étude de cas antérieure en améliorant la façon dont nous formulons les requêtes.
Contexte
L’exemple motivant ici utilise à nouveau des modèles de langage de grande taille (LLMs) pour m’aider à calculer certaines caractéristiques pour mon modèle des Oscars. Plus précisément : combien de films le réalisateur d’un film nommé dans la catégorie Meilleur Film a-t-il réalisé avant le film en question ?
Erreurs précédentes
Dans mon article précédent, j’ai constaté des performances assez médiocres. Une partie de cela est due au système des studios à Hollywood : les réalisateurs des films d’avant 1970 avaient des films à leur actif en raison de ce système, ainsi que des courts-métrages et des documentaires. Cela souligne l’importance de l’expertise dans le domaine des sciences des données.
Changement 1
Cette fois, j’ai décidé de ne considérer que les films nominés après 1969, ce qui reflète un changement qualitatif dans la manière dont les données sont générées.
Changement 2
J’utilisais GPT-3.5 Turbo à l’intérieur d’un agent LangChain équipé de l’API Wikipédia. J’ai réalisé que je devais changer d’approche car je ne pouvais pas accéder à toutes les informations nécessaires dans les résultats fournis.
Changement 3
J’ai donc remplacé LangChain par Perplexity AI, qui utilise un moteur de recherche conversationnel pour fournir des informations en temps réel.
Changement 4
Enfin, j’ai retravaillé mon prompt afin d’améliorer la clarté des instructions données au modèle.
Approche actuelle
Actuellement, j’utilise l’API Perplexity avec un prompt réécrit. J’emploie le module OpenAI en Python pour accéder à Perplexity, qui utilise le modèle llama-3.1-sonar-large-128k-online.
from openai import OpenAI
API_KEY=""
model="llama-3.1-sonar-large-128k-online"
client = OpenAI(api_key=API_KEY, base_url="https://api.perplexity.ai")
def get_films(director):
messages = [
{ "role": "system", "content": """Vous êtes un assistant de recherche détaillé, aidant l'utilisateur à trouver les noms de films."""},
{ "role": "user", "content": director }
]
response = client.chat.completions.create(model=model, messages=messages, temperature=0)
return response.choices[0].message.content
Diviser le travail en R
Récupérer les données
J’ai configuré {reticulate} en utilisant un environnement virtuel lié à mon Google Drive. Je récupère une liste de réalisateurs qui ont dirigé un film nommé aux Oscars après 1969.
library(googlesheets4)
library(tidyverse)
library(reticulate)
use_virtualenv("../../../../")
source_python("ppxai.py")
gs4_auth()
Performance et résultats
Nous avons considérablement amélioré nos performances de recherche d’informations en utilisant Perplexity AI :
- La corrélation entre l’estimation et la réalité est passée de 0,82 à 0,99.
- L’erreur absolue moyenne (MAE) est passée de 2,01 films à 0,50 films.
- Le taux de réponses correctes a augmenté de 42% à 70%.
Visualisation des résultats
Les graphiques ci-dessous montrent la relation entre les données vérifiées et les estimations fournies par Perplexity :
Importance de l’ingénierie des prompts
Cet exercice montre l’importance de l’ingénierie des prompts et comment une meilleure compréhension de l’architecture d’un LLM peut mener à de meilleures requêtes. En décomposant les tâches en parties plus petites et en ne s’appuyant sur le LLM que lorsque cela est nécessaire, on optimise la recherche d’informations.