Lär dig hur du integrerar den nya modellen OpenAI o1-preview i ett Python-skript för att berika dina AI‑projekt. Detta skript låter dig interagera med OpenAI:s API med modellen o1-preview, med möjlighet att inkludera webbinnehåll i promptarna tack vare en inbyggd web scraping‑funktion. Dessutom hanterar det matematiska uttryck skrivna i LaTeX i modellens svar genom att konvertera dem till läsbar Unicode‑text i terminalen.
Introduktion
Den 12 september 2024 lanserade OpenAI sin nya serie AI‑modeller kallad OpenAI o1. Dessa modeller är utformade för att utföra djupare resonemang innan de levererar ett svar, vilket gör dem kapabla att lösa komplexa problem inom vetenskap, programmering och matematik. Modellen o1-preview utmärker sig särskilt i dessa områden och överträffar tidigare modeller som gpt-4o.
Viktiga punkter i skriptet:
- Integration av modellen o1-preview: Skriptet använder modellen o1-preview som standard och erbjuder därmed avancerade resonemangsegenskaper.
- Inbyggd web scraping: Det kan extrahera innehåll från webbsidor för att berika promptens kontext.
- Hantering av LaTeX‑uttryck: Matematiska uttryck i svaren konverteras till Unicode‑text för enkel läsning i terminalen.
- Anpassningsbart: Skriptet låter dig välja OpenAI‑modell och kan anpassas för olika användningsfall.
I den här artikeln kommer jag att gå igenom skriptets kod i detalj, förklara hur det fungerar och genomföra en serie komplexa prompts.
Förutsättningar
Innan du börjar, se till att du har följande:
- Python 3.x installerat på din dator.
- En OpenAI API‑nyckel. Du kan skaffa den genom att registrera dig på OpenAI:s webbplats.
- En Python virtuell miljö (rekommenderas för att isolera beroenden).
- Nödvändiga Python‑moduler.
Konfigurera den virtuella miljön
För att isolera projektets beroenden rekommenderas att använda en virtuell miljö. Så här skapar du en och installerar de krävd beroenden:
python3 -m venv env
source env/bin/activate # Sur Windows, utilisez env\Scripts\activate
pip install openai selenium webdriver-manager pylatexenc
Ange OpenAI API‑nyckeln
Sätt din OpenAI API‑nyckel som en miljövariabel:
export OPENAI_API_KEY='votre_clé_api_ici'
Byt ut 'votre_clé_api_ici' mot din faktiska API‑nyckel.
Komplett skriptkod
Här är den kompletta Python‑koden för skriptet:
#!/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()
Förklaring av koden
Import av nödvändiga moduler
Skriptet börjar med att importera de viktigaste modulerna:
- os, sys, argparse, re: Standardmoduler för att hantera miljövariabler, kommandoradsargument och reguljära uttryck.
- openai: Modul för att interagera med OpenAI API.
- selenium och webdriver_manager: För att utföra web scraping.
- pylatexenc: För att konvertera LaTeX‑uttryck till läsbar Unicode‑text.
Funktion get_web_content
Denna funktion hämtar sidans textinnehåll från en webbsida.
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
Viktiga punkter:
- Chrome‑alternativ: Skriptet använder inte headless‑läge för att undvika verifieringsproblem som vissa sidor kräver för headless‑webbläsare.
- ChromeDriverManager: Hanterar automatiskt installation och uppdatering av ChromeDriver.
- Extraktion av innehåll: Använder JavaScript för att extrahera sidans fullständiga text.
- Felfall: Vid fel returnerar funktionen
None.
Funktion convert_latex_to_text
Denna funktion konverterar LaTeX‑uttryck till Unicode‑text.
def convert_latex_to_text(latex_str):
# Convertit les expressions LaTeX en texte Unicode
return LatexNodes2Text().latex_to_text(latex_str)
Viktiga punkter:
- Använder biblioteket
pylatexencför att konvertera LaTeX‑uttryck så att matematiska formler blir läsbara i terminalen.
Funktion clean_output
Denna funktion bearbetar modellens svar för att konvertera LaTeX‑uttryck.
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
Viktiga punkter:
- Sökning efter LaTeX‑uttryck: Använder reguljära uttryck för att identifiera formler.
- Konvertering: Varje formel konverteras till Unicode‑text.
- Ersättning: LaTeX‑formler ersätts med deras läsbara motsvarighet.
Funktion get_response
Förbereder prompten, hanterar web scraping vid behov, anropar OpenAI API och rensar svaret.
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}"
Viktiga punkter:
- Hantering av URL:er: Om prompten innehåller URL:er hämtas innehållet och infogas.
- API‑anrop: Skickar den modifierade prompten till angiven modell.
- Rensning av svaret: LaTeX‑uttryck konverteras för att vara lättlästa.
Funktion main
Hantera kommandoradsargument och kör skriptet.
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)
Viktiga punkter:
- Argument: Skriptet tar emot en prompt och en modell som argument.
- API‑nyckel: Kontrollerar att API‑nyckeln är satt.
- Körning: Anropar funktionen
get_responseoch skriver ut svaret.
Körning av skriptet
if __name__ == "__main__":
main()
Exempel på användning
Ställ en fråga som kräver resonemang
./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."
För att beräkna längden på hypotenusan i en rätvinklig triangel med kateterna 3 cm och 4 cm använder vi Pythagoras sats:
Genom att ersätta med givna värden:
Genom att ta kvadratroten på båda sidor:
Alltså är hypotenusans längd 5 cm.
Hypotenusans längd är 5 cm.
Generera en sammanfattning av en webbsida
./openai_poc.py "Fais-moi un résumé de cette page : https://openai.com/index/introducing-openai-o1-preview/"
OpenAI meddelade den 12 september 2024 introduktionen av en ny serie AI‑modeller kallad OpenAI o1, designade för att ta mer tid på sig att reflektera innan de svarar. Dessa modeller kan resonera genom komplexa uppgifter och lösa svårare problem än tidigare modeller inom vetenskap, programmering och matematik.
Den första modellen i denna serie, o1-preview, finns nu tillgänglig i ChatGPT och via OpenAI:s API. En lättare och billigare variant kallad OpenAI o1‑mini erbjuds också, som ger effektiva kodningsmöjligheter till cirka 80 % lägre kostnad jämfört med o1‑preview.
Utför en enkel multiplikation
./openai_poc.py "Quel est le résultat de 15 x 12 ?"
Resultatet av är 180.
Lös en enkel ekvation
./openai_poc.py "Résous l'équation 2x + 5 = 15."
För att lösa ekvationen , följ dessa steg:
- Subtrahera 5 från båda sidor för att isolera termerna med variabeln:
- Dividera båda sidor med 2 för att lösa för :
Lösning : .
Beräkna en procent
./openai_poc.py "Quel est 20% de 250 ?"
av är lika med 50.
Beräkning :
Beräkna arean av en cirkel
./openai_poc.py "Calcule l'aire d'un cercle de rayon 5 cm."
För att beräkna arean av en cirkel med radien 5 cm, använd formeln för cirkelarea:
där:
- är arean av cirkeln,
- är cirkelns radie.
Genom att ersätta med 5 cm:
Alltså är cirkelns area .
Om du vill ha ett ungefärligt värde, med :
Så arean är ungefär 78,54 cm².
Beräkna ett enkelt integralvärde
./openai_poc.py "Calcule l'intégrale de 0 à 1 de x^2 dx."
För att beräkna integralen från 0 till 1 av funktionen , integrerar vi med avseende på och utvärderar uttrycket mellan gränserna 0 och 1.
Steg i beräkningen :
- Integrera funktionen :
där C är integrationskonstanten.
- Utvärdera mellan 0 och 1 :
- Beräkna gränsvärdena :
- Subtrahera för att få slutresultatet :
Slutsats :
Värdet av integralen från 0 till 1 av är alltså .
Beräkna medelhastighet
./openai_poc.py "Si une voiture parcourt 150 km en 3 heures, quelle est sa vitesse moyenne ?"
För att beräkna medelhastigheten hos en bil som färdas 150 km på 3 timmar använder vi formeln för medelhastighet:
Genom att sätta in givna värden:
Bilens medelhastighet är alltså 50 km/h.
Klassisk mekanik
./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."
För att beräkna accelerationen av klossen använder vi Newtons andra lag, som säger att den resulterande kraften på ett föremål är lika med massan multiplicerad med accelerationen ().
Givet:
- Massa på klossen,
- Applicerad kraft,
- Ingen friktion (så ingen motkraft från friktion)
Genom att omarrangera formeln för att lösa för accelerationen () får vi:
Genom att ersätta värdena:
Svar : Accelerationen är 4 meter per sekund i kvadrat ().
Lösning av differentialekvationer
./openai_poc.py "Résous l'équation différentielle dy/dx = x^2 + y^2 avec la condition initiale y(0) = 1."
För att lösa differentialekvationen:
med begynnelsevillkoret , noterar vi att denna ekvation är icke‑linjär och kan inte lösas med elementära metoder som separering av variabler eller standardintegrerande faktorer. Vi kan däremot försöka omvandla ekvationen till en mer hanterbar form.
Steg 1 : Känna igen ekvationens natur
Den givna ekvationen är en Riccati‑ekvation som i allmän form skrivs som:
I vårt fall blir den:
Steg 2 : Omvandla till en linjär andragradsekvation
För att lösa en Riccati‑ekvation kan vi använda substitutionen:
där är en funktion att bestämma och är derivatan av med avseende på .
Beräkning av i termer av :
Använd kvotregeln:
Steg 3 : Sätt in i ursprungsekvationen
Sätt in och i differentialekvationen:
Förenkla:
Multiplicera båda sidor med för att eliminera nämnarna:
Förenkla vidare:
Dividera med (förutsatt ):
Steg 4 : Lös den linjära andragradsekvationen
Vi får en linjär homogen andragradsekvation:
Denna ekvation har variabla koefficienter och är känd i samband med Airy‑typ‑funktioner. Lösningarna kan inte uttryckas med elementära funktioner utan ges i termer av specialfunktioner kallade Airyf‑funktioner.
Ekvationens allmänna lösning:
Lösningarna till är:
där och är Airy‑funktionerna av första och andra slag, och är den imaginära enheten med .
Steg 5 : Gå tillbaka till
Kom ihåg att:
Genom att känna till kan vi få genom att derivera och ta kvoten.
Steg 6 : Tillämpa begynnelsevillkoret
För att bestämma integrationskonstanterna och måste vi använda villkoret . På grund av komplexiteten hos Airy‑funktioner med komplexa argument blir den explicita beräkningen svår.
Slutsats
Lösningen till differentialekvationen med begynnelsevillkoret uttrycks implicit via specialfunktioner (Airy‑funktioner) och kan inte skrivas i slutna termer med elementära funktioner.
Elektromagnetism
./openai_poc.py "Calcule le champ électrique à une distance r d'une charge ponctuelle Q."
Det elektriska fältet skapat av en punktladdning på avståndet ges av Coulombs lag. Formeln för det elektriska fältet är:
där:
- är det elektriska fältet (i volt per meter, V/m),
- är punktladdningen (i coulomb, C),
- är avståndet till laddningen (i meter, m),
- är vakuums permittivitet, ungefär .
Exempelberäkning :
Antag att du har en laddning (2 mikrocoulomb) och vill beräkna det elektriska fältet på avståndet .
- Beräkna konstanten framför bråket :
- Applicera formeln :
Slutsats :
Det elektriska fältet på avståndet från en punktladdning är .
Således, för att beräkna det elektriska fältet på ett visst avstånd från en punktladdning, använd formeln ovan och ersätt och med respektive värden.
Kemisk jämvikt
./openai_poc.py "Explique comment le principe de Le Chatelier s'applique à l'équilibre suivant : N2 + 3H2 ⇌ 2NH3."
Le Chateliers princip säger att när ett system i jämvikt utsätts för en yttre förändring (stress) så reagerar det för att motverka förändringen och etablera ett nytt jämviktstillstånd. Tillämpat på den kemiska jämvikten:
kan vi analysera hur olika förändringar påverkar jämviktsläge.
1. Ändring i koncentration : - Ökning av reaktanternas koncentration (N₂ eller H₂) : Om man tillsätter kvävgas (N₂) eller vätgas (H₂) till systemet ökar koncentrationen av dessa reaktanter. Enligt Le Chateliers princip kommer jämvikten att förskjutas åt det håll som förbrukar dessa extra reaktanter, det vill säga åt höger, vilket gynnar bildningen av ammoniak (NH₃).
-
Minskning av produktkoncentrationen (NH₃) : Om man avlägsnar ammoniak från systemet minskar NH₃-koncentrationen. Jämvikten kommer då att förskjutas åt höger för att kompensera denna minskning, vilket återigen gynnar bildningen av ammoniak.
-
Ökning av produktkoncentrationen (NH₃) : Om man tillsätter ammoniak till systemet förskjuts jämvikten åt vänster för att minska överskottet av NH₃, vilket gynnar bildningen av N₂ och H₂.
2. Ändring av trycket :
-
Ökning av systemets totala tryck : För gaser gynnar en ökning av trycket (genom minskning av volymen) den reaktion som ger färre mol gas. I denna reaktion går man från 4 mol gas (1 N₂ + 3 H₂) till 2 mol gas (2 NH₃). Därför förskjuter en ökning av trycket jämvikten åt höger och gynnar bildningen av ammoniak.
-
Minskning av systemets totala tryck : Omvänt kommer en minskning av trycket att gynna den reaktion som ger flest mol gas, vilket förskjuter jämvikten åt vänster och gynnar dissociationen av NH₃ till N₂ och H₂.
3. Ändring av temperaturen :
-
Reaktionens exotermiska natur : Ammoniakssyntesen är en exoterm reaktion (), det vill säga att den avger värme.
-
Ökning av temperaturen : Genom att öka temperaturen tillför man värme till systemet. Enligt Le Chateliers princip förskjuts jämvikten i den riktning som absorberar denna extra värme, alltså åt vänster (endoterm riktning), vilket gynnar dissociationen av NH₃ till N₂ och H₂.
-
Minskning av temperaturen : Genom att sänka temperaturen reagerar systemet genom att producera värme för att kompensera denna förlust. Jämvikten förskjuts därför åt höger (exoterm riktning), vilket gynnar bildningen av ammoniak.
4. Närvaro av en katalysator :
- Effekt av katalysatorn : Tillsats av en katalysator (som finfördelat järn med promotorsubstanser) ökar hastigheten med vilken jämvikten uppnås, men ändrar inte jämviktsläget. Den accelererar både fram- och backreaktionen i lika hög grad.
Sammanfattning :
Le Chateliers princip gör det möjligt att förutsäga i vilken riktning en kemisk jämvikt förskjuts som svar på en förändring i systemets villkor. För ammoniaksyntesen:
- Högt tryck gynnar bildningen av NH₃ (färre mol gas).
- Låg temperatur gynnar bildningen av NH₃ (exoterm reaktion).
- Ökning av koncentrationerna av N₂ eller H₂ gynnar bildningen av NH₃.
- Avlägsnande av NH₃ från systemet gynnar bildningen av mer NH₃.
Dessa principer tillämpas i Haber-Bosch-processen för att optimera den industriella produktionen av ammoniak.
Slutsats
Detta Python-skript erbjuder en praktisk integration av modellen OpenAI o1-preview, vilket gör det möjligt att utnyttja dess avancerade resonemangskapaciteter för ett brett spektrum av frågor, från de enklaste till de mest komplexa. Oavsett om du är en nyfiken nybörjare eller en expert som vill testa modellens gränser är detta skript ett bra verktyg för dina projekt inom artificiell intelligens.
Resurser
- Tillkännagivande av modellen OpenAI o1-preview
- Officiell dokumentation för OpenAI-API:et
- Dokumentation för Selenium
- Dokumentation för pylatexenc
- Guide om virtuella miljöer i Python
Detta dokument har översatts från fr-versionen till sv-språket med modellen gpt-5-mini. För mer information om översättningsprocessen, se https://gitlab.com/jls42/ai-powered-markdown-translator