검색

blogia

Python과 OpenAI API를 활용한 실용적 접근

Python과 OpenAI API를 활용한 실용적 접근

이 글은 OpenAI API의 기능을 탐색하고 익히기 위해 Proof of Concept(POC)으로 개발된 스크립트를 소개합니다.

소개

이 Python 스크립트는 OpenAI의 GPT-4 언어 모델을 사용해 응답을 자동 생성하도록 설계되었습니다. 또한 Selenium을 사용해 프롬프트에 지정된 URL의 콘텐츠를 수집하는 웹 스크래핑 기능을 포함합니다.

GPT-4의 도움을 받아 설계한 스크립트

이 Python 스크립트 개발은 ChatGPT-4의 도움을 받아 진행되었으며, 코드 작성 과정에서 도구가 협업자로서 가지는 강점을 보여줍니다.

POC의 목표

목표는 Python에서 OpenAI API를 실험하여 실무 역량을 개발하는 것이었습니다. 단순히 API에 프롬프트를 보내는 것뿐만 아니라, 필요 시 프롬프트에 URL을 포함해 웹 콘텐츠로 프롬프트를 보강하는 방식도 탐구하고자 했습니다.

  • OpenAI API 통합 시연 : GPT-4와 같은 고급 언어 모델과 상호작용하는 방법을 이해하기 위해 Python 스크립트 맥락에서 OpenAI API를 사용하는 것.
  • 웹 스크래핑 실험 : Selenium을 사용해 웹 페이지의 콘텐츠를 동적으로 가져오는 기능을 활용하는 것으로, 자동화의 다양한 응용에 유용한 기술입니다.
  • AI 자동화 가능성 탐색 : 콘텐츠 생성이나 질문 응답과 같은 작업을 자동화하고 보강하는 데 AI가 어떻게 활용될 수 있는지 이해합니다.

스크립트의 잠재적 응용

이 스크립트는 AI를 포함하는 더 복잡한 프로젝트의 출발점으로 활용될 수 있습니다. 웹 스크래핑과 AI를 결합했을 때 가능한 것들을 보여주며 다음과 같은 응용에 영감을 줄 수 있습니다:

  • 콘텐츠 요약 자동화.
  • 온라인에서 수집한 정보로 데이터베이스 보강.
  • 맞춤형 가상 비서 생성.

중요 참고사항

  • 이 스크립트는 POC입니다 : 교육 및 실험 목적을 위해 작성되었으며, 프로덕션 용도로 사용하기 위한 것은 아닙니다.
  • 항상 API 및 사이트 이용 규정을 준수하세요 : OpenAI API 사용 및 웹 사이트 스크래핑 시 해당 서비스의 이용약관과 개인정보처리방침을 준수해야 합니다.

2024년 9월 28일 업데이트: OpenAI용 스크립트 수정

2024년 1월 이후 스크립트에서 사용한 라이브러리(특히 Selenium 및 OpenAI API)에 업데이트가 있었습니다. 초기 스크립트는 이제 구식이며 최신 버전과 호환되도록 조정이 필요합니다.

open-ai.py의 새로운 스크립트 코드

#!/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


def get_web_content(url):
    if not url:
        return ""

    try:
        # Configure Chrome options
        chrome_options = Options()

        # Use ChromeDriverManager to automatically manage the ChromeDriver installation
        driver = webdriver.Chrome(
            service=Service(ChromeDriverManager().install()), options=chrome_options
        )

        # Make a request to the web page
        driver.get(url)

        # Retrieve the JavaScript content of the page
        web_content = driver.execute_script("return document.documentElement.innerText")

        # Close the browser when you're done
        driver.quit()

        return web_content if web_content else None
    except Exception as e:
        return None


def get_response(prompt, client):
    urls = re.findall(r"(https?://\S+)", prompt)
    for url in urls:
        web_content = get_web_content(url)
        if web_content:
            # Replace the URL with the web content in the prompt
            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="gpt-4o",
            messages=[
                {
                    "role": "system",
                    "content": "Vous discutez avec un assistant AI utile et informé qui répond en français.",
                },
                {"role": "user", "content": prompt},
            ],
        )
        first_choice_message = response.choices[0].message
        return first_choice_message.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")
    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)
        print(response)


if __name__ == "__main__":
    main()

사용 예시

# Installation des dépendances si nécessaire :
pip install selenium
pip install openai
pip install webdriver_manager

# Définir la clé API OpenAI
export OPENAI_API_KEY="votre_clé_api"

# On rend le script exécutable
chmod 700 open-ai.py

# Exécution avec une URL à résumer
./open-ai.py "Fais moi un résumé de ce site stp : https://docs.mistral.ai/"

Mistral AI est un laboratoire de recherche spécialisé dans la création des meilleurs modèles open source au monde. Leur plateforme permet aux développeurs et entreprises de créer de nouveaux produits et applications en utilisant leurs modèles de langage (LLMs), qu'ils soient open source ou commerciaux.

### Types de modèles proposés
1. **Modèles généralistes de pointe**
   - **Mistral Large** : Modèle de raisonnement pour des tâches complexes (version v2 sortie en juillet 2024).
   - **Mistral NeMo** : Meilleur modèle multilingue open source (sorti en juillet 2024).

2. **Modèles spécialisés**
   - **Codestral** : Modèle pour la génération de code (sorti en mai 2024).
   - **Mistral Embed** : Modèle sémantique pour l'extraction de représentations de textes.

3. **Modèles de recherche**
   - **Mistral 7b** : Premier modèle dense (sorti en septembre 2023).
   - **Mixtral 8x7b** : Premier modèle à mélange d'experts sparse (sorti en décembre 2023).
   - **Mixtral 8x22b** : Meilleur modèle open source à ce jour (sorti en avril 2024).
   - **Mathstral 7b** : Premier modèle mathématique open source (sorti en juillet 2024).
   - **Codestral Mamba** : Premier modèle mamba 2 open source (sorti en juillet 2024).

### APIs Mistral AI
Les APIs proposées permettent de :
   - Générer du texte et visualiser des résultats partiels en temps réel.
   - Générer du code, y compris le remplissage au milieu et l'achèvement de code.
   - Extraire des embeddings pour représenter le sens des textes sous forme de listes de nombres.
   - Connecter les modèles Mistral à des outils externes via des appels de fonctions.
   - Affiner des modèles pour créer des versions personnalisées et spécialisées.
   - Définir le format de réponse en JSON.
   - Mettre en place des politiques de sécurité au niveau système des modèles Mistral.

Pour plus de détails, leur site propose une documentation et une communauté active sur différentes plateformes comme Discord et GitHub.

open-ai.py 스크립트 코드 (최신 라이브러리 버전에서는 구식)

다음은 제가 작성한 전체 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.options import Options

def get_web_content(url):
    if not url:
        return ""

    # Configure Chrome options
    chrome_options = Options()

    # Create a new browser instance with the configured options
    driver = webdriver.Chrome(options=chrome_options)

    # Make a request to the web page
    driver.get(url)

    # Retrieve the JavaScript content of the page
    web_content = driver.execute_script("return document.documentElement.innerText")

    # Don't forget to close the browser when you're done
    driver.quit()

    return web_content

def get_response(prompt, client):
    urls = re.findall(r'(https?://\S+)', prompt)
    for url in urls:
        web_content = get_web_content(url)
        if web_content:
            # Remplacez l'URL par le contenu du web dans le prompt
            prompt = prompt.replace(url, web_content)

    try:
        response = client.chat.completions.create(
            model="gpt-4-1106-preview",
            messages=[
                {"role": "system", "content": "Vous discutez avec un assistant AI utile et informé qui répond en français."},
                {"role": "user", "content": prompt}
            ]
        )
        first_choice_message = response.choices[0].message
        return first_choice_message.content
    except Exception as e:
        return f"Une erreur est survenue : {e}"


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("prompt", nargs="?", help="The prompt containing URLs")
    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)
        print(response)

if __name__ == "__main__":
    main()

스크립트 상세 설명

모듈 가져오기

  • os, sys : 시스템 상호작용을 위해 사용됩니다.
  • argparse : 명령줄 인자를 처리합니다.
  • re : 정규 표현식 처리를 지원합니다.
  • OpenAI, webdriver : 각각 OpenAI API와 Selenium을 통해 브라우저를 제어하는 기능을 통합합니다.

함수 get_web_content

이 함수는 Selenium을 사용하여 주어진 URL로 이동하고 해당 페이지의 콘텐츠를 가져옵니다. 이는 OpenAI 프롬프트에 웹 콘텐츠를 통합하는 데 필수적입니다.

함수 get_response

이 함수는 프롬프트 내의 URL을 처리하고, get_web_content를 통해 해당 콘텐츠를 가져온 다음, 그 콘텐츠를 기반으로 OpenAI API와 상호작용하여 응답을 얻습니다.

블록 main

스크립트의 핵심 부분으로, 명령줄 인자를 처리하고 OpenAI API 접근을 설정하며 결과를 생성하고 표시하기 위해 get_response를 호출합니다.

사용 예시

# Optionnel - Vous aurez peut être besoin d'installer les dépendances :
pip install selenium
pip install openai

# on ajoute dans l'environnement du shell la clé OpenAPI générée via https://platform.openai.com/api-keys
export OPENAI_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# on rend le script executable
chmod 700 open-ai.py

# ensuite on pose la ou les questions que l'on souhaite et si besoin on précise une url avec du contenu à intégrer au prompt
./open-ai.py "fais moi un résumé de : https://platform.openai.com/docs/guides/prompt-engineering"
Le présent guide propose des stratégies et des tactiques pour obtenir de meilleurs résultats de modèles de langage de grande taille, comme le GPT-4.
Les méthodes décrites peuvent être combinées pour optimiser l'efficacité.
Il est encouragé d'expérimenter pour découvrir les méthodes les plus adéquates.

Si un modèle échoue à accomplir une tâche, essayer avec un modèle plus performant peut être bénéfique.

Voici un aperçu des stratégies abordées dans le guide :

1. **Écrire des instructions claires :** Soyez précis, adoptez des formats spécifiques, et fournissez des détails pour personnaliser les réponses.

2. **Fournir du texte de référence :** Donner des textes de référence peut aider le modèle à fournir des réponses avec moins de fabrications.

3. **Diviser les tâches complexes en sous-tâches :** Aborder une tâche complexe par étapes peut réduire les erreurs.

4. **Donner du temps au modèle pour "réfléchir" :** Encourager un raisonnement pas à pas avant de conclure aide à obtenir des réponses plus correctes.

5. **Utiliser des outils externes :** Combiner le modèle avec d'autres outils peut améliorer les résultats.

6. **Tester systématiquement les changements :** L'évaluation systématique peut aider à déterminer si un changement est bénéfique ou non.

Des exemples spécifiques de chacune de ces stratégies sont donnés pour illustrer comment elles peuvent être mises en œuvre.

Pour plus d'informations et inspirations, consultez le OpenAI Cookbook, des bibliothèques d'invitations et d'autres ressources externes.


# Sans url dans le prompt :
./open-ai.py "que sais tu faire ?"
En tant qu'assistant AI, je suis conçu pour réaliser une variété de tâches utiles. Voici quelques exemples de ce que je peux faire :

1. **Répondre à des questions**: Fournir des réponses sur un large éventail de sujets, incluant la science, la géographie, l'histoire, la culture, et plus.

2. **Aide à l'apprentissage**: Expliquer des concepts complexes ou aider à comprendre des matières académiques.

3. **Discussion et conseils**: Offrir une conversation amicale, donner des conseils ou simplement écouter.

4. **Traduction**: Traduire des mots, phrases ou textes d'une langue à une autre.

5. **Rédaction et édition de texte**: Aider à rédiger des emails, des lettres, des articles de blog ou à corriger la grammaire et l'orthographe.

6. **Recherche d'informations**: Trouver des données spécifiques, résumer des recherches ou compiler des informations.

7. **Assistance technique**: Fournir des informations de base sur le dépannage informatique ou électronique.

8. **Programmation et informatique**: Aider à comprendre des concepts de programmation ou résoudre des problèmes logiques simples.

9. **Assistance aux affaires**: Aider avec des problèmes de marketing, de gestion ou d'autres questions commerciales.

10. **Divertissement**: Raconter des histoires, des blagues, ou fournir des informations sur des films, des jeux vidéo, et d'autres formes de divertissement.

11. **Conseils de santé et de fitness**: Donner des informations de base et des conseils généraux sur le bien-être et l'exercice physique (mais pas des conseils médicaux professionnels).

12. **Cuisine et recettes**: Fournir des recettes et des conseils de cuisine.

13. **Voyage**: Aider à planifier des voyages, donner des informations touristiques et des conseils de voyage.

14. **Gestion de l'agenda et rappels**: Gérer un calendrier virtuel et rappeler des événements ou des tâches importantes.

Il est important de noter que mon but est de fournir des informations et de l'aide, mais je ne remplace pas les services professionnels comme l'assistance médicale, juridique, ou d'autres conseils professionnels spécialisés.

이 문서는 gpt-5-mini 모델을 사용하여 fr 버전에서 ko 언어로 번역되었습니다. 번역 과정에 대한 자세한 정보는 https://gitlab.com/jls42/ai-powered-markdown-translator 를 참조하십시오.