Descoperiți cum să integrați noul model OpenAI o1-preview într-un script Python pentru a vă îmbogăți proiectele de inteligență artificială. Acest script vă permite să interacționați cu API-ul OpenAI folosind modelul o1-preview, cu posibilitatea de a include conținut web în prompturi printr-o funcționalitate de web scraping. În plus, gestionează corect expresiile matematice LaTeX din răspunsurile modelului, convertindu-le în text Unicode lizibil în terminal.
Introducere
La 12 septembrie 2024, OpenAI a lansat noua sa serie de modele de IA, denumită OpenAI o1. Aceste modele sunt concepute pentru a efectua un raționament aprofundat înainte de a furniza un răspuns, ceea ce le permite să rezolve probleme complexe în știință, programare și matematică. Modelul o1-preview excelează în mod special în aceste domenii, depășind modelele anterioare precum gpt-4o.
Puncte cheie ale scriptului :
- Integrarea modelului o1-preview : Scriptul folosește implicit modelul o1-preview, oferind astfel capabilități avansate de raționament.
- Web scraping integrat : Poate extrage conținutul paginilor web pentru a îmbogăți contextul promptului.
- Gestionarea expresiilor LaTeX : Expresiile matematice din răspunsuri sunt convertite în text Unicode pentru o lectură facilă în terminal.
- Personalizabil : Scriptul permite alegerea modelului OpenAI și poate fi adaptat pentru diverse cazuri de utilizare.
În acest articol, voi detalia codul scriptului, voi explica cum funcționează și voi realiza o serie de prompturi complexe.
Cerințe
Înainte de a începe, asigurați-vă că aveți următoarele elemente:
- Python 3.x instalat pe mașina dvs.
- O cheie API OpenAI. O puteți obține înscriindu-vă pe site-ul OpenAI.
- Un mediu virtual Python (recomandat pentru a izola dependențele).
- Modulele Python necesare.
Configurarea mediului virtual
Pentru a izola dependențele acestui proiect, se recomandă utilizarea unui mediu virtual. Iată cum să creați unul și să instalați dependențele necesare :
python3 -m venv env
source env/bin/activate # Sur Windows, utilisez env\Scripts\activate
pip install openai selenium webdriver-manager pylatexenc
Setarea cheii API OpenAI
Setați cheia API OpenAI ca variabilă de mediu :
export OPENAI_API_KEY='votre_clé_api_ici'
Înlocuiți 'votre_clé_api_ici' cu cheia API reală.
Codul complet al scriptului
Iată codul complet al scriptului Python :
#!/usr/bin/env python3
import os
import sys
import argparse
import re
from openai import OpenAI
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
from pylatexenc.latex2text import LatexNodes2Text
def get_web_content(url):
if not url:
return ""
try:
# Configure les options de Chrome
chrome_options = Options()
# Ne pas utiliser le mode headless pour éviter les problèmes de vérification humaine
# Utilise ChromeDriverManager pour gérer l\'installation de ChromeDriver
driver = webdriver.Chrome(
service=Service(ChromeDriverManager().install()), options=chrome_options
)
# Charge la page web
driver.get(url)
# Récupère le contenu textuel de la page
web_content = driver.execute_script("return document.documentElement.innerText")
# Ferme le navigateur
driver.quit()
return web_content if web_content else None
except Exception as e:
return None
def convert_latex_to_text(latex_str):
# Convertit les expressions LaTeX en texte Unicode
return LatexNodes2Text().latex_to_text(latex_str)
def clean_output(content):
# Trouve toutes les expressions LaTeX dans le contenu et les convertit
patterns = [r"\\\\[.*?\\\\]", r"\\\(.*?\\\)", r"\$\$.*?\$\$", r"\$.*?\$"]
for pattern in patterns:
matches = re.findall(pattern, content, flags=re.DOTALL)
for match in matches:
plain_text = convert_latex_to_text(match)
content = content.replace(match, plain_text)
return content
def get_response(prompt, client, model="o1-preview"):
urls = re.findall(r"(https?://\S+)", prompt)
for url in urls:
web_content = get_web_content(url)
if web_content:
prompt = prompt.replace(url, web_content)
else:
return f"Erreur: Le contenu web pour {url} ne peut être récupéré."
try:
response = client.chat.completions.create(
model=model,
messages=[
{
"role": "user",
"content": prompt,
},
],
)
first_choice_message = response.choices[0].message
content = first_choice_message.content
# Convertit les expressions LaTeX en texte lisible
cleaned_content = clean_output(content)
return cleaned_content
except Exception as e:
return f"Une erreur est survenue : {e}"
def main():
parser = argparse.ArgumentParser()
parser.add_argument("prompt", nargs="?", help="Le prompt contenant des URLs")
parser.add_argument(
"--model",
default="o1-preview",
choices=["gpt-4o", "o1-preview", "o1-mini"],
help="Le modèle OpenAI à utiliser (par défaut o1-preview)",
)
args = parser.parse_args()
openai_api_key = os.getenv("OPENAI_API_KEY")
if not openai_api_key:
raise ValueError(
"La clé API OPENAI_API_KEY n'est pas définie dans les variables d\'environnement."
)
with OpenAI(api_key=openai_api_key) as client:
prompt = args.prompt or sys.stdin.read()
response = get_response(prompt, client, model=args.model)
print(response)
if __name__ == "__main__":
main()
Explicația codului
Importarea modulelor necesare
Scriptul începe prin a importa modulele esențiale :
- os, sys, argparse, re : Module standard pentru gestionarea variabilelor de mediu, a argumentelor din linia de comandă și a expresiilor regulate.
- openai : Modul pentru a interacționa cu API-ul OpenAI.
- selenium și webdriver_manager : Pentru a efectua web scraping.
- pylatexenc : Pentru a converti expresiile LaTeX în text Unicode lizibil.
Funcția get_web_content
Această funcție preia conținutul textual al unei pagini web.
def get_web_content(url):
if not url:
return ""
try:
# Configure les options de Chrome
chrome_options = Options()
# Ne pas utiliser le mode headless pour éviter les problèmes de vérification humaine
# Utilise ChromeDriverManager pour gérer l\'installation de ChromeDriver
driver = webdriver.Chrome(
service=Service(ChromeDriverManager().install()), options=chrome_options
)
# Charge la page web
driver.get(url)
# Récupère le contenu textuel de la page
web_content = driver.execute_script("return document.documentElement.innerText")
# Ferme le navigateur
driver.quit()
return web_content if web_content else None
except Exception as e:
return None
Puncte cheie :
- Opțiuni Chrome : Scriptul nu folosește modul headless pentru a evita problemele de verificare umană pe care unele pagini le impun browserelor în modul headless.
- ChromeDriverManager : Gestionează automat instalarea și actualizarea ChromeDriver.
- Extragerea conținutului : Folosește JavaScript pentru a extrage textul complet al paginii.
- Gestionarea excepțiilor : În caz de eroare, funcția returnează
None.
Funcția convert_latex_to_text
Această funcție convertește expresiile LaTeX în text Unicode.
def convert_latex_to_text(latex_str):
# Convertit les expressions LaTeX en texte Unicode
return LatexNodes2Text().latex_to_text(latex_str)
Puncte cheie :
- Folosește biblioteca
pylatexencpentru a converti expresiile LaTeX, făcând formulele matematice lizibile în terminal.
Funcția clean_output
Această funcție procesează răspunsul modelului pentru a converti expresiile LaTeX.
def clean_output(content):
# Trouve toutes les expressions LaTeX dans le contenu et les convertit
patterns = [r"\\\\[.*?\\\\]", r"\\\(.*?\\\)", r"\$\$.*?\$\$", r"\$.*?\$"]
for pattern in patterns:
matches = re.findall(pattern, content, flags=re.DOTALL)
for match in matches:
plain_text = convert_latex_to_text(match)
content = content.replace(match, plain_text)
return content
Puncte cheie :
- Căutarea expresiilor LaTeX : Folosește expresii regulate pentru a identifica formulele.
- Conversia : Fiecare formulă este convertită în text Unicode.
- Înlocuirea : Formulele LaTeX sunt înlocuite cu echivalentul lor lizibil.
Funcția get_response
Pregătește promptul, gestionează web scraping-ul dacă este necesar, apelează API-ul OpenAI și curăță răspunsul.
def get_response(prompt, client, model="o1-preview"):
urls = re.findall(r"(https?://\S+)", prompt)
for url in urls:
web_content = get_web_content(url)
if web_content:
prompt = prompt.replace(url, web_content)
else:
return f"Erreur: Le contenu web pour {url} ne peut être récupéré."
try:
response = client.chat.completions.create(
model=model,
messages=[
{
"role": "user",
"content": prompt,
},
],
)
first_choice_message = response.choices[0].message
content = first_choice_message.content
# Convertit les expressions LaTeX en texte lisible
cleaned_content = clean_output(content)
return cleaned_content
except Exception as e:
return f"Une erreur est survenue : {e}"
Puncte cheie :
- Gestionarea URL-urilor : Dacă promptul conține URL-uri, conținutul acestora este extras și inserat.
- Apelul către API-ul OpenAI : Trimite promptul modificat modelului specificat.
- Curățarea răspunsului : Expresiile LaTeX sunt convertite pentru a fi ușor de citit.
Funcția main
Gestionează argumentele din linia de comandă și rulează scriptul.
def main():
parser = argparse.ArgumentParser()
parser.add_argument("prompt", nargs="?", help="Le prompt contenant des URLs")
parser.add_argument(
"--model",
default="o1-preview",
choices=["gpt-4o", "o1-preview", "o1-mini"],
help="Le modèle OpenAI à utiliser (par défaut o1-preview)",
)
args = parser.parse_args()
openai_api_key = os.getenv("OPENAI_API_KEY")
if not openai_api_key:
raise ValueError(
"La clé API OPENAI_API_KEY n'est pas définie dans les variables d\'environnement."
)
with OpenAI(api_key=openai_api_key) as client:
prompt = args.prompt or sys.stdin.read()
response = get_response(prompt, client, model=args.model)
print(response)
Puncte cheie :
- Argumente : Scriptul acceptă un prompt și un model ca argumente.
- Cheia API : Verifică dacă cheia API este setată.
- Executare : Apelează funcția
get_responseși afișează răspunsul.
Executarea scriptului
if __name__ == "__main__":
main()
Exemple de utilizare
Pune o întrebare care necesită raționament
./openai_poc.py "Dans un triangle rectangle, si les côtés adjacents à l'angle droit mesurent 3 cm et 4 cm, calcule la longueur de l'hypoténuse."
Pentru a calcula lungimea ipotenuzei într-un triunghi dreptunghic ale cărui catete adiacente unghiului drept măsoară 3 cm și 4 cm, folosim teorema lui Pitagora :
Înlocuind cu valorile date :
Luând rădăcina pătrată a ambelor părți :
Deci, lungimea ipotenuzei este de 5 cm.
Lungimea ipotenuzei este 5 cm.
Generarea unui rezumat al unei pagini web
./openai_poc.py "Fais-moi un résumé de cette page : https://openai.com/index/introducing-openai-o1-preview/"
OpenAI a anunțat la 12 septembrie 2024 introducerea unei noi serii de modele de IA numită OpenAI o1, concepută pentru a aloca mai mult timp pentru a gândi înainte de a răspunde. Aceste modele sunt capabile să raționeze peste sarcini complexe și să rezolve probleme mai dificile decât modelele anterioare în știință, programare și matematică.
Primul model din această serie, o1-preview, este acum disponibil pe ChatGPT și prin API-ul OpenAI. O versiune mai ușoară și mai economică, numită OpenAI o1-mini, este de asemenea oferită, oferind capabilități eficiente de codare la un cost redus cu 80% comparativ cu o1-preview.
Rezolvarea unei înmulțiri simple
./openai_poc.py "Quel est le résultat de 15 x 12 ?"
Rezultatul lui este 180.
Rezolvarea unei ecuații simple
./openai_poc.py "Résous l'équation 2x + 5 = 15."
Pentru a rezolva ecuația , urmați pașii următori :
- Scădeți 5 din ambele părți ale ecuației pentru a izola termenul cu variabila :
- Împărțiți ambele părți ale ecuației la 2 pentru a rezolva pentru :
Soluție : .
Calcularea unui procent
./openai_poc.py "Quel est 20% de 250 ?"
din este egal cu 50.
Calcul :
Calcularea ariei unui cerc
./openai_poc.py "Calcule l'aire d'un cercle de rayon 5 cm."
Pentru a calcula aria unui cerc cu raza 5 cm, folosește formula ariei unui cerc :
unde :
- este aria cercului,
- este raza cercului.
Înlocuind cu 5 cm :
Deci, aria cercului este .
Dacă dorești o valoare aproximativă, folosind :
Astfel, aria cercului este aproximativ 78,54 cm².
Calcularea unei integrale simple
./openai_poc.py "Calcule l'intégrale de 0 à 1 de x^2 dx."
Pentru a calcula integrala de la 0 la 1 a funcției , vom integra în raport cu și vom evalua expresia obținută între limitele 0 și 1.
Pașii calculului :
- Integrarea funcției :
unde C este constanta de integrare.
- Evaluarea între limitele 0 și 1 :
- Calculul valorilor la limite :
- Scăderea valorilor pentru a obține rezultatul final :
Concluzie :
Valoarea integralei de la 0 la 1 a lui este deci .
Calcularea unei viteze medii
./openai_poc.py "Si une voiture parcourt 150 km en 3 heures, quelle est sa vitesse moyenne ?"
Pentru a calcula viteza medie a unei mașini care parcurge 150 km în 3 ore, folosim formula vitezei medii :
Aplicând valorile date :
Viteza medie a mașinii este deci de 50 km/h.
Mecanica clasică
./openai_poc.py "Un bloc de 5 kg est tiré sur une surface sans frottement par une force de 20 N. Calcule son accélération."
Pentru a calcula accelerația blocului, folosim a doua lege a lui Newton, care afirmă că forța rezultantă aplicată unui obiect este egală cu masa obiectului înmulțită cu accelerația sa ().
Date :
- Masa blocului,
- Forța aplicată,
- Suprafață fără frecare (deci nicio forță opusă datorită frecării)
Rearanjând formula pentru a rezolva pentru accelerație (), obținem :
Înlocuind valorile date :
Răspuns : Accelerația blocului este de 4 metri pe secundă pătrat ().
Rezolvarea ecuațiilor diferențiale
./openai_poc.py "Résous l'équation différentielle dy/dx = x^2 + y^2 avec la condition initiale y(0) = 1."
Pentru a rezolva ecuația diferențială :
cu condiția inițială , observăm că această ecuație este neliniară și nu poate fi rezolvată prin metode elementare precum separarea variabilelor sau factorii integratori standard. Cu toate acestea, putem încerca să transformăm ecuația într-o formă mai tratabilă.
Pasul 1 : Recunoașterea naturii ecuației
Ecuația dată este o ecuație diferențială de tip Riccati, care are forma generală :
În cazul nostru, se scrie :
Pasul 2 : Transformarea ecuației într-o ecuație liniară de ordinul doi
Pentru a rezolva o ecuație de Riccati, se poate folosi substituția :
unde este o funcție de determinat, iar este derivata lui în raport cu .
Calculul lui în funcție de :
Aplicăm regula de derivare a unui raport :
Pasul 3 : Substituirea în ecuația inițială
Substituim și în ecuația diferențială originală :
Simplificăm ecuația :
Acum, înmulțim ambele părți cu pentru a elimina numitorii :
Simplificăm :
Împărțim prin (presupunând ) :
Pasul 4 : Rezolvarea ecuației liniare de ordinul doi
Obținem astfel o ecuație diferențială liniară omogenă de ordinul doi :
Această ecuație este o ecuație diferențială liniară cu coeficienți variabili. Este cunoscută sub numele de ecuație a tipului Airy modificată. Soluțiile acestei ecuații nu sunt exprimabile în termeni de funcții elementare, ci în termeni de funcții speciale numite funcții Airy.
Soluțiile ecuației :
Soluțiile generale ale ecuației sunt :
unde și sunt funcțiile Airy de prima și a doua specie, iar este unitatea imaginară astfel încât .
Pasul 5 : Revenirea la
Reamintim că :
Cunoscând , putem găsi calculând derivata lui și efectuând raportul.
Pasul 6 : Aplicarea condiției inițiale
Pentru a determina constantele de integrare și , trebuie să aplicăm condiția inițială . Totuși, având în vedere complexitatea funcțiilor Airy cu argumente complexe, calculul explicit este delicat.
Concluzie
Soluția ecuației diferențiale date cu condiția inițială este exprimată în termeni de funcții speciale (funcții Airy). Nu poate fi scrisă în mod explicit folosind funcții elementare.
Răspuns final :
Soluția ecuației diferențiale cu este dată implicit în termeni de funcții Airy și nu poate fi exprimată explicit cu funcții elementare.
Electromagnetism
./openai_poc.py "Calcule le champ électrique à une distance r d'une charge ponctuelle Q."
Câmpul electric creat de o sarcină punctuală la o distanță este dat de legea lui Coulomb. Formula pentru calculul câmpului electric este :
unde :
- este câmpul electric (în volți pe metru, V/m),
- este sarcina punctuală (în coulombi, C),
- este distanța față de sarcină (în metri, m),
- este permitivitatea vidului, cu o valoare aproximativă de .
Exemplu de calcul :
Să presupunem că aveți o sarcină (2 microcoulombi) și doriți să calculați câmpul electric la o distanță .
- Calculați constanta din fața fracției :
- Aplicați formula :
Concluzie :
Câmpul electric la o distanță de de o sarcină punctuală este .
Astfel, pentru a calcula câmpul electric la o distanță dată de o sarcină punctuală, utilizați formula de mai sus înlocuind și cu valorile specifice problemei.
Echilibru chimic
./openai_poc.py "Explique comment le principe de Le Chatelier s'applique à l'équilibre suivant : N2 + 3H2 ⇌ 2NH3."
Principiul lui Le Chatelier stipulează că, atunci când un sistem aflat în echilibru este supus unei modificări (stres) externă, acesta reacționează în moduri care minimizează acea perturbare și stabilesc un nou echilibru. Aplicat echilibrului chimic următor :
putem analiza cum diferite modificări influențează poziția echilibrului.
1. Variația concentrației : - Creșterea concentrației reactanților (N₂ sau H₂): Dacă se adaugă diazot (N₂) sau dihidrogen (H₂) în sistem, concentrația acestor reactanți crește. Conform principiului lui Le Chatelier, echilibrul se va deplasa în direcția care consumă acești reactanți suplimentari, adică spre dreapta, favorizând formarea amoniacului (NH₃).
-
Scăderea concentrației produselor (NH₃): Dacă se îndepărtează amoniacul din sistem, concentrația NH₃ scade. Echilibrul se va deplasa atunci spre dreapta pentru a compensa această scădere, favorizând din nou formarea de amoniac.
-
Creșterea concentrației produselor (NH₃): Dacă se adaugă amoniac în sistem, echilibrul se va deplasa spre stânga pentru a reduce excesul de NH₃, favorizând formarea de N₂ și H₂.
2. Variația presiunii:
-
Creșterea presiunii totale a sistemului: Pentru gaze, o creștere a presiunii (prin scăderea volumului) favorizează reacția care produce cel mai mic număr de moli gazoși. În această reacție se trece de la 4 moli de gaz (1 N₂ + 3 H₂) la 2 moli de gaz (2 NH₃). Prin urmare, creșterea presiunii deplasează echilibrul spre dreapta, favorizând formarea amoniacului.
-
Scăderea presiunii totale a sistemului: Diminuarea presiunii va favoriza, în mod invers, reacția care produce cel mai mare număr de moli gazoși, deplasând echilibrul spre stânga și favorizând disocierea NH₃ în N₂ și H₂.
3. Variația temperaturii:
-
Caracter exoterm al reacției: Sinteza amoniacului este o reacție exothermă (), adică eliberează căldură.
-
Creșterea temperaturii: Prin creșterea temperaturii, se aduce căldură în sistem. Conform principiului lui Le Chatelier, echilibrul se va deplasa în direcția care absoarbe această căldură suplimentară, deci spre stânga (reacție endotermă), favorizând disocierea NH₃ în N₂ și H₂.
-
Scăderea temperaturii: Prin scăderea temperaturii, sistemul reacționează prin producerea de căldură pentru a compensa această pierdere. Echilibrul se deplasează astfel spre dreapta (reacție exothermă), favorizând formarea amoniacului.
4. Prezența unui catalizator:
- Efectul catalizatorului: Adăugarea unui catalizator (cum ar fi fier fin divizat cu promotori) crește viteza cu care se atinge echilibrul, dar nu modifică poziția echilibrului. El accelerează în mod egal reacțiile directă și inversă.
Rezumat :
Principiul lui Le Chatelier permite prezicerea direcției în care se va deplasa un echilibru chimic ca răspuns la o modificare a condițiilor sistemului. Pentru sinteza amoniacului :
- Presiune mare favorizează formarea NH₃ (mai puțini moli gazoși).
- Temperatură scăzută favorizează formarea NH₃ (reacție exothermă).
- Creșterea concentrațiilor de N₂ sau H₂ favorizează formarea NH₃.
- Îndepărtarea NH₃ din sistem favorizează formarea unei cantități mai mari de NH₃.
Aceste principii sunt aplicate în procesul Haber-Bosch pentru a optimiza producția industrială de amoniac.
Conclusion
Acest script Python oferă o integrare practică a modelului OpenAI o1-preview, permițând valorificarea capacităților sale avansate de raționament pentru o gamă largă de întrebări, de la cele mai simple la cele mai complexe. Fie că sunteți un începător curios sau un expert care dorește să testeze limitele modelului, acest script este un instrument util pentru proiectele dvs. în inteligența artificială.
Resurse
- Anunțul modelului OpenAI o1-preview
- Documentația oficială a API-ului OpenAI
- Documentația Selenium
- Documentația pylatexenc
- Ghid privind mediile virtuale în Python
Acest document a fost tradus din versiunea fr în limba ro folosind modelul gpt-5-mini. Pentru mai multe informații despre procesul de traducere, consultați https://gitlab.com/jls42/ai-powered-markdown-translator