Konkrét példa arra, hogyan használhatja a ChatGPT API-t Pythonban

A ChatGPT fenomenális. Az indulás után mindössze két hónapon belül sikerült „100 millió aktív felhasználót” vonzani, ami eddig a leggyorsabb alkalmazás volt. A következmények messzemenőek, és amellett, hogy segíti a diákokat az esszék megírásában, fantasztikus gyorsító a programozáshoz. Amikor Python-értékelést végzett a Linkedin-en, a 4 millió „programozó” 85%-át felülmúlta.

Míg eddig csak a ChatGPT webhelyet vagy néhány feltört megoldást használhatta, a ChatGPT most március 1-jén engedélyezte az API-hozzáférést. Míg az alapul szolgáló GPT-3 modellekhez API-hozzáférés már egy ideje létezett, most ez a hiányzó összetevő a ChatGPT-nek az alkalmazásaihoz való kihasználásához.

Ebben a blogbejegyzésben bemutatjuk, hogyan hozhat létre egyéni chatbotot Streamlit és ChatGPT API használatával. A ChatGPT és a Streamlit integrálásával, egy Python előtérrel, amely lehetővé teszi az interaktív webalkalmazások gyors létrehozását, egyszerű és testreszabható chatbotot készíthetünk, amely természetes és vonzó módon kommunikálhat a felhasználókkal.

Alapok

A kezdéshez hozzon létre egy fiókot a openai címen, adja meg számlázási adatait, és állítson be egy API-kulcsot. Az első beállítással általában krediteket kap. Az írás árán a gpt-3.5-turbo 0,002 dollárba kerül 1K tokenenként, ami kb. 750 szó.

Ezután beállítunk egy Python környezetet, és telepítjük a streamlitet (pip install streamlit) és az openai-t (pip install openai). Ha nem ismeri a Pythont és a környezeteket, használhatja a minicondát; lásd itt".

A openai megismeréséhez létrehozunk egy mappát két fájllal: app.py és .secrets.toml.

A secrets.toml-nak így kell kinéznie (cserélje ki a YOURKEY-et a tényleges API-kulcsára. Ha Git-et használ, adja hozzá ezt a fájlt a .gitignore-hez, hogy ne legyen megosztva a GitHubon.

OPENAI_KEY="YOURKEY"

A app.py-ben alapvetően hívjuk a ChatGPT-API-t, és a „Chat-GPT útmutató” példáját használjuk. Ne feledje, hogy üzenetek tömbjét tápláljuk be különböző szerepekkel (rendszer és felhasználó), ami a beszélgetésünk.

import openai
import toml 

with open('secrets.toml', 'r') as f:
    config = toml.load(f)

openai.api_key = config['OPENAI_KEY']

response = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Who won the world series in 2020?"},
        {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
        {"role": "user", "content": "Where was it played?"}
    ]
)

print(response)

Ennek valami ilyesmit kell kapnia:

{
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": "The 2020 World Series was played at a neutral site in Globe Life Park in Arlington, Texas.",
        "role": "assistant"
      }
    }
  ],
  "created": 1677879909,
  "id": "chatcmpl-6q7V73VUzoMDHiSPDAqsWfssgGWf4",
  "model": "gpt-3.5-turbo-0301",
  "object": "chat.completion",
  "usage": {
    "completion_tokens": 23,
    "prompt_tokens": 56,
    "total_tokens": 79
  }
}

Kevesebb, mint 20 sornyi kóddal API-hívást tudunk végrehajtani. A return objektum egy dict, így az üzenetet így érhetjük el: response['choices'][0]['message']['content'] .

Ha egy AttributeError értéket kap (AttributeError: az 'openai' modulnak nincs 'ChatCompletion' attribútuma), előfordulhat, hogy frissítenie kell az openai telepítését a pip install openai --upgrade értékkel.

Áramlatos

A „Streamlit” nagyon gyors és interaktív módot ad arra, hogy alkalmazást építsünk az API-hívás köré. Ami a funkcionalitást illeti, szükségünk van szövegbevitelre és -kimenetre, valamint egy munkamenet-állapotra az üzenetelőzményekhez. Ez mind könnyen elérhető áramvonalasan st.text_input, st.text_area és st.session_state formában. Az alapelemek a következők:

  • Beszélgetésünket azzal kezdjük, hogy a fentiek szerint utasítjuk a ChatGPT-t, hogy segítőkész asszisztens legyen
  • Összegyűjtjük a felhasználói bevitelt, API-hívást kezdeményezünk, és várjuk az eredményt
  • Az eredmény az üzenetelőzményekhez lesz csatolva, amelyet az első utasításunk kivételével megjelenítünk. Írunk egy kényelmi függvényt, show_messages, amely megjeleníti az üzenetek előzményeit.

Kódban ez így néz ki:

import openai
import toml
import streamlit as st


def show_messages(text):
    messages_str = [
        f"{_['role']}: {_['content']}" for _ in st.session_state["messages"][1:]
    ]
    text.text_area("Messages", value=str("\n".join(messages_str)), height=400)


with open("secrets.toml", "r") as f:
    config = toml.load(f)

openai.api_key = config["OPENAI_KEY"]
BASE_PROMPT = [{"role": "system", "content": "You are a helpful assistant."}]

if "messages" not in st.session_state:
    st.session_state["messages"] = BASE_PROMPT

st.header("STREAMLIT GPT-3 CHATBOT")

text = st.empty()
show_messages(text)

prompt = st.text_input("Prompt", value="Enter your message here...")

if st.button("Send"):
    with st.spinner("Generating response..."):
        st.session_state["messages"] += [{"role": "user", "content": prompt}]
        response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo", messages=st.session_state["messages"]
        )
        message_response = response["choices"][0]["message"]["content"]
        st.session_state["messages"] += [
            {"role": "system", "content": message_response}
        ]
        show_messages(text)

if st.button("Clear"):
    st.session_state["messages"] = BASE_PROMPT
    show_messages(text)

Vegye figyelembe, hogy a szöveg megjelenítéséhez egy st.empty-objektumot használunk. A kód streamlit szkriptként való futtatásához a streamlit run app.py értéket használjuk. Így kell kinéznie:

Következtetés

Bár ez egy nagyon kezdetleges megvalósítás, van egy alapvető, de működő ChatGPT-klónunk, kevesebb mint ötven sornyi kóddal. Következő lépésként most megteheti ezt a kódot, elhelyezheti a GitHubon, sőt tárolhatja, és nyilvánosan elérhetővé teheti a Streamlit-share segítségével.

Nyilvánvaló, hogy ez távol áll egy csiszolt terméktől, és a felhasználói élményt egy kicsit szebbé kell tenni. Remélem azonban, hogy ezzel a demóval valami mást tudok mutatni: én személy szerint meglepett, hogy mennyire hozzáférhető ez a technológia, és rengeteg lehetőség rejlik a testreszabásra.

Néhány példa: A ChatGPT nem ismeri a közelmúltbeli eseményeket, de ezzel a példával például automatikusan lekérheti a legfrissebb híreket, ez az előzmények elején szerepelhet, és a Bot most már beszélhet az aktuális eseményekről. Vagy módosítsa az elején lévő utasításokat, hogy személyre szabott asszisztensét kapja meg. Rengeteg lehetőség van itt, és a kódolási erőfeszítés meglehetősen minimális. mit tennél vele?

2023. április 13-i frissítés: Időközben találtam egy streamlit-chat nevű csodálatos csomagot, lásd "itt". Ez az ügynöktől/felhasználótól érkező üzeneteket balra és jobbra igazítja, így ez egy nagyszerű módja annak, hogy az üzenetkezelő felületet sokkal tisztábbá tegye, és itt is használható.