OPENAI - REFERENCE RAG
Simon-Pierre Boucher
2024-09-14
In [1]:
import requests
import json
from scholarly import scholarly # Vous aurez besoin d'installer la bibliothèque scholarly: pip install scholarly
import os
import re
from dotenv import load_dotenv
In [2]:
# Load environment variables from .env file
load_dotenv()
# Access the API key from environment variables
api_key = os.getenv("OPENAI_API_KEY")
In [3]:
def generate_text_with_references(prompt, num_references):
"""
Recherche des références académiques et génère un texte en utilisant OpenAI.
Paramètres:
prompt (str): Le texte initial pour lequel générer un rapport.
num_references (int): Le nombre de références à récupérer.
Retourne:
str: Texte généré par l'API OpenAI avec références.
"""
# Recherche des références académiques sur Google Scholar
search_query = scholarly.search_pubs(prompt)
references = []
for i in range(num_references):
try:
pub = next(search_query)
references.append(f"{i+1}. {pub['bib']['title']} - {pub['bib']['author']} ({pub['bib']['pub_year']})")
except StopIteration:
break
# Formater les références
formatted_references = "\n".join(references)
# Générer le contenu du prompt avec les références
prompt_content = f"""
{prompt}
Références académiques :
{formatted_references}
Veuillez générer un texte détaillé et informatif en utilisant les informations ci-dessus et en incluant les références académiques fournies.
"""
# Configurer les en-têtes de la requête
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}
# Configurer les données de la requête
data = {
"model": "gpt-4",
"messages": [
{"role": "user", "content": prompt_content}
],
"temperature": 0.7
}
# Envoyer la requête à l'API OpenAI
response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, data=json.dumps(data))
# Traiter la réponse
if response.status_code == 200:
response_json = response.json()
generated_text = response_json["choices"][0]["message"]["content"].strip()
# Ajouter les références à la fin du texte généré
final_text = f"{generated_text}\n\nRéférences:\n{formatted_references}"
return final_text
else:
return f"Erreur {response.status_code}: {response.text}"
In [4]:
# Exemple d'utilisation
prompt = "Impact of COVID-19 on world economy" # Remplacez par le prompt que vous voulez interroger
num_references = 10 # Spécifiez le nombre de références que vous voulez obtenir
generated_text = generate_text_with_references(prompt, num_references)
print("\nTexte généré avec références :")
print(generated_text)