本文介绍了开发的一个脚本,该脚本作为一个概念验证(POC),用于探索和熟悉 OpenAI API 的能力。

引言

这个 Python 脚本旨在自动化使用 OpenAI 的 GPT-4 语言模型生成响应。它还使用 Selenium 进行网页抓取,以检索在提示文本中指定的 URLs 的内容。

利用 GPT-4 协助设计脚本

这个 Python 脚本的开发得到了 ChatGPT-4 AI 的协助,这展示了该工具作为代码创作过程中协作者的实力。

POC 目标

目标是用 Python 试验 OpenAI API,以提升我的技能。我不仅想向 API 提供一个提示,还想通过在提示中嵌入一个 URL 丰富这个提示的内容。

  • 演示 OpenAI API 的集成:在 Python 脚本环境中使用 OpenAI API,了解如何与诸如 GPT-4 这样的高级语言模型交互。
  • 尝试网页抓取:使用 Selenium 动态检索网页内容,这是自动化应用的一项有用技能。
  • 探索 AI 自动化的可能性:了解 AI 如何被用来自动化和丰富任务,例如内容生成或回答问题。

脚本的潜在应用

这个脚本可以成为涉及 AI 的更复杂项目的起点。它提供了结合网页抓取和 AI 的可能性的一个预览,并且可能激发其他应用,例如:

  • 自动化内容摘要。
  • 使用在线检索的信息丰富数据库。
  • 创建个性化虚拟助理。

重要说明

  • 这个脚本是一个 POC:它旨在用于教育和实验目的,而不是生产使用。
  • 始终遵守 API 和网站使用规则:在使用 OpenAI API 和网页抓取时,请确保遵守使用条款和隐私政策。

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

处理提示中的 URLs,通过 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-4-1106-preview 模型从该博客的法文版本翻译而来。