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ó.