この記事では、OpenAI API の能力を探求し、それに慣れるために Proof of Concept (POC) として開発されたスクリプトを紹介します。
はじめに
この Python スクリプトは、OpenAI の GPT-4 言語モデルを使用して応答を自動生成することを目的としています。また、Selenium を使用して Web をスクレイピングし、プロンプトで指定された URL のコンテンツを取得します。
GPT-4 の助けを借りたスクリプトの設計
この Python スクリプトの開発には、コード作成プロセスにおける協力者としてのツールの強さを示す ChatGPT-4 の支援を受けました。
POC の目標
この目標は、OpenAI API を Python で実験し、私のスキルを向上させることでした。API にプロンプトを提供するだけでなく、必要に応じて URL をプロンプトに組み込んで、ウェブのコンテンツをプロンプトに追加することも目指していました。
- OpenAI API の統合を示す: GPT-4 などの高度な言語モデルとやり取りする方法を理解するために、OpenAI API を Python スクリプトのコンテキストで使用します。
- Web スクレイピングの実験: 動的にWebページのコンテンツを取得するために Selenium を使用し、さまざまな自動化のアプリケーションに役立つスキルを習得します。
- AI 自動化の可能性を探る: コンテンツ生成や質問への回答などのタスクを自動化して充実させるために、AI がどのように使用できるかを理解します。
スクリプトの潜在的なアプリケーション
このスクリプトは、AI を含むより複雑なプロジェクトの出発点となり得ます。Web スクレイピングと 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 のプロンプトに Web コンテンツを統合するために必要です。
関数 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-4oを使用してfrバージョンからja言語に翻訳されました。翻訳プロセスの詳細については、https://gitlab.com/jls42/ai-powered-markdown-translatorをご覧ください。