Használja ki a nyílt forráskódú Llama 2 LLM-et, és készítsen egyedi chatbotot Python segítségével.
A Llama 2 egy nyílt forráskódú nagynyelvi modell (LLM), amelyet a Meta fejlesztett ki. Ez egy hozzáértő nyílt forráskódú nagynyelvi modell, vitathatatlanul jobb néhány zárt modellnél, mint például a GPT-3.5 és a PaLM 2. Három előre betanított és finomhangolt generatív szövegmodell méretből áll, köztük a 7 milliárd, 13 milliárd és 70 milliárd paraméteres modellből.
Fedezze fel a Llama 2 társalgási képességeit, ha a Streamlit és a Llama 2 segítségével chatbotot épít.
A Llama 2 megértése: Jellemzők és előnyök
Mennyiben különbözik a Llama 2 az elődjétől nagy nyelvi modell, Láma 1?
- Nagyobb modell mérete: A modell nagyobb, akár 70 milliárd paraméterrel. Ez lehetővé teszi a szavak és mondatok közötti bonyolultabb asszociációk megismerését.
- Javított beszélgetési képességek: Az emberi visszajelzésből való tanulás megerősítése (RLHF) javítja a párbeszédes alkalmazási képességeket. Ez lehetővé teszi a modell számára, hogy még bonyolult interakciókban is emberszerű tartalmat generáljon.
- Gyorsabb következtetés: Bemutat egy új módszert, az úgynevezett csoportos lekérdezési figyelemet a következtetés felgyorsítására. Ez azt eredményezi, hogy hasznosabb alkalmazásokat, például chatbotokat és virtuális asszisztenseket hozhat létre.
- Hatékonyabb: Memória- és számítási erőforrás-hatékonyabb, mint elődje.
- Nyílt forráskódú és nem kereskedelmi licenc: Nyílt forráskódú. A kutatók és fejlesztők korlátozás nélkül használhatják és módosíthatják a Llama 2-t.
A Llama 2 minden tekintetben jelentősen felülmúlja elődjét. Ezek a jellemzők hatékony eszközzé teszik számos alkalmazáshoz, például chatbotokhoz, virtuális asszisztensekhez és a természetes nyelvi megértéshez.
Streamlit környezet beállítása chatbot fejlesztéshez
Az alkalmazás létrehozásának megkezdéséhez be kell állítania egy fejlesztői környezetet. Ezzel elkülönítheti projektjét a gépén meglévő projektektől.
Először is kezdje virtuális környezet létrehozása használni a Pipenv könyvtár az alábbiak szerint:
pipenv shell
Ezután telepítse a szükséges könyvtárakat a chatbot felépítéséhez.
pipenv install streamlit replicate
Áramlatos: Ez egy nyílt forráskódú webalkalmazás-keretrendszer, amely gyorsan jelenít meg gépi tanulási és adattudományi alkalmazásokat.
Megismételni: Ez egy felhőplatform, amely hozzáférést biztosít nagyméretű nyílt forráskódú gépi tanulási modellekhez a telepítéshez.
Szerezze be Llama 2 API-tokenjét a Replicate webhelyről
Replikációs jogkivonat kulcsának megszerzéséhez először regisztrálnia kell egy fiókot a webhelyen Megismételni GitHub-fiókod használatával.
A replikáció csak a következőn keresztüli bejelentkezést teszi lehetővé GitHub-fiók.
Miután elérte az irányítópultot, navigáljon a Fedezd fel gombot, és keresse meg a Llama 2 chat kifejezést, hogy megtekinthesse a láma-2–70b-csevegés modell.
Kattintson a láma-2–70b-csevegés modellt a Llama 2 API végpontjainak megtekintéséhez. Kattints a API gombot a láma-2–70b-csevegés a modell navigációs sávját. Az oldal jobb oldalán kattintson a gombra Piton gomb. Ez hozzáférést biztosít a Python alkalmazások API-tokenjéhez.
Másolja a REPLICATE_API_TOKEN és tárolja biztonságosan a későbbi használatra.
A teljes forráskód itt érhető el GitHub adattár.
A Chatbot építése
Először hozzon létre egy Python nevű fájlt llama_chatbot.py és egy env fájlt (.env). A kódot a llama_chatbot.py fájlba írja, és titkos kulcsait és API-tokenjeit az .env fájlban tárolja.
A llama_chatbot.py fájlban importálja a könyvtárakat az alábbiak szerint.
import streamlit as st
import os
import replicate
Ezután állítsa be a globális változókat láma-2–70b-csevegés modell.
# Global variables
REPLICATE_API_TOKEN = os.environ.get('REPLICATE_API_TOKEN', default='')
# Define model endpoints as independent variables
LLaMA2_7B_ENDPOINT = os.environ.get('MODEL_ENDPOINT7B', default='')
LLaMA2_13B_ENDPOINT = os.environ.get('MODEL_ENDPOINT13B', default='')
LLaMA2_70B_ENDPOINT = os.environ.get('MODEL_ENDPOINT70B', default='')
Az .env fájlhoz adja hozzá a replikációs tokent és a modell végpontjait a következő formátumban:
REPLICATE_API_TOKEN='Paste_Your_Replicate_Token'
MODEL_ENDPOINT7B='a16z-infra/llama7b-v2-chat: 4f0a4744c7295c024a1de15e1a63c880d3da035fa1f49bfd344fe076074c8eea'
MODEL_ENDPOINT13B='a16z-infra/llama13b-v2-chat: df7690f1994d94e96ad9d568eac121aecf50684a0b0963b25a41cc40061269e5'
MODEL_ENDPOINT70B='replicate/llama70b-v2-chat: e951f18578850b652510200860fc4ea62b3b16fac280f83ff32282f87bbd2e48'
Illessze be a replikációs tokent, és mentse az .env fájlt.
A Chatbot beszélgetési folyamatának megtervezése
Hozzon létre egy előzetes promptot a Llama 2 modell elindításához attól függően, hogy milyen feladatot szeretne elvégezni. Ebben az esetben azt szeretné, hogy a modell asszisztensként működjön.
# Set Pre-propmt
PRE_PROMPT = "You are a helpful assistant. You do not respond as " \
"'User' or pretend to be 'User'." \
" You only respond once as Assistant."
Állítsa be a chatbot oldalkonfigurációját az alábbiak szerint:
# Set initial page configuration
st.set_page_config(
page_title="LLaMA2Chat",
page_icon=":volleyball:",
layout="wide"
)
Írjon egy függvényt, amely inicializálja és beállítja a munkamenet állapotváltozóit.
# Constants
LLaMA2_MODELS = {
'LLaMA2-7B': LLaMA2_7B_ENDPOINT,
'LLaMA2-13B': LLaMA2_13B_ENDPOINT,
'LLaMA2-70B': LLaMA2_70B_ENDPOINT,
}# Session State Variables
DEFAULT_TEMPERATURE = 0.1
DEFAULT_TOP_P = 0.9
DEFAULT_MAX_SEQ_LEN = 512
DEFAULT_PRE_PROMPT = PRE_PROMPT
defsetup_session_state():
st.session_state.setdefault('chat_dialogue', [])
selected_model = st.sidebar.selectbox(
'Choose a LLaMA2 model:', list(LLaMA2_MODELS.keys()), key='model')
st.session_state.setdefault(
'llm', LLaMA2_MODELS.get(selected_model, LLaMA2_70B_ENDPOINT))
st.session_state.setdefault('temperature', DEFAULT_TEMPERATURE)
st.session_state.setdefault('top_p', DEFAULT_TOP_P)
st.session_state.setdefault('max_seq_len', DEFAULT_MAX_SEQ_LEN)
st.session_state.setdefault('pre_prompt', DEFAULT_PRE_PROMPT)
A függvény beállítja a lényeges változókat, pl chat_dialogue, pre_prompt, llm, top_p, max_seq_len, és hőfok munkamenet állapotban. A felhasználó választása alapján kezeli a Llama 2 modell kiválasztását is.
Írjon egy függvényt a Streamlit alkalmazás oldalsáv tartalmának megjelenítéséhez.
defrender_sidebar():
st.sidebar.header("LLaMA2 Chatbot")
st.session_state['temperature'] = st.sidebar.slider('Temperature:',
min_value=0.01, max_value=5.0, value=DEFAULT_TEMPERATURE, step=0.01)
st.session_state['top_p'] = st.sidebar.slider('Top P:', min_value=0.01,
max_value=1.0, value=DEFAULT_TOP_P, step=0.01)
st.session_state['max_seq_len'] = st.sidebar.slider('Max Sequence Length:',
min_value=64, max_value=4096, value=DEFAULT_MAX_SEQ_LEN, step=8)
new_prompt = st.sidebar.text_area(
'Prompt before the chat starts. Edit here if desired:',
DEFAULT_PRE_PROMPT, height=60)
if new_prompt != DEFAULT_PRE_PROMPT and new_prompt != ""and
new_prompt isnotNone:
st.session_state['pre_prompt'] = new_prompt + "\n"
else:
st.session_state['pre_prompt'] = DEFAULT_PRE_PROMPT
A funkció megjeleníti a Llama 2 chatbot fejlécét és beállítási változóit a beállításokhoz.
Írja be a csevegési előzményeket megjelenítő függvényt a Streamlit alkalmazás fő tartalomterületére.
defrender_chat_history():
response_container = st.container()
for message in st.session_state.chat_dialogue:
with st.chat_message(message["role"]):
st.markdown(message["content"])
A függvény a munkamenet állapotában mentett chat_dialogue-n keresztül iterál, és minden üzenetet a megfelelő szerepkörrel (felhasználó vagy asszisztens) jelenít meg.
Kezelje a felhasználói bevitelt az alábbi funkció segítségével.
defhandle_user_input():
user_input = st.chat_input(
"Type your question here to talk to LLaMA2"
)
if user_input:
st.session_state.chat_dialogue.append(
{"role": "user", "content": user_input}
)
with st.chat_message("user"):
st.markdown(user_input)
Ez a függvény bemutatja a felhasználó beviteli mezővel, ahová beírhatják üzeneteiket és kérdéseikat. Az üzenet hozzáadódik a chat_dialogue a munkamenet állapotában a felhasználó szerepet, ha a felhasználó elküldi az üzenetet.
Írjon egy függvényt, amely válaszokat generál a Llama 2 modellből, és megjeleníti azokat a chat területen.
defgenerate_assistant_response():
message_placeholder = st.empty()
full_response = ""
string_dialogue = st.session_state['pre_prompt']
for dict_message in st.session_state.chat_dialogue:
speaker = "User"if dict_message["role"] == "user"else"Assistant"
string_dialogue += f"{speaker}: {dict_message['content']}\n"
output = debounce_replicate_run(
st.session_state['llm'],
string_dialogue + "Assistant: ",
st.session_state['max_seq_len'],
st.session_state['temperature'],
st.session_state['top_p'],
REPLICATE_API_TOKEN
)
for item in output:
full_response += item
message_placeholder.markdown(full_response + "▌")
message_placeholder.markdown(full_response)
st.session_state.chat_dialogue.append({"role": "assistant",
"content": full_response})
A függvény meghívása előtt létrehoz egy beszélgetési előzmény-karakterláncot, amely felhasználói és asszisztensi üzeneteket is tartalmaz debounce_replicate_run funkciót, hogy megkapja az asszisztens válaszát. Folyamatosan módosítja a választ a felhasználói felületen, hogy valós idejű csevegési élményt nyújtson.
Írja be a fő funkciót, amely a teljes Streamlit alkalmazás megjelenítéséért felelős.
defrender_app():
setup_session_state()
render_sidebar()
render_chat_history()
handle_user_input()
generate_assistant_response()
Meghívja az összes meghatározott függvényt a munkamenet állapotának beállításához, az oldalsáv megjelenítéséhez, a csevegési előzményekhez, a felhasználói bevitelek kezeléséhez és az asszisztensi válaszok logikai sorrendben történő generálásához.
Írjon egy függvényt a meghívásához render_app függvényt, és indítsa el az alkalmazást, amikor a szkript fut.
defmain():
render_app()
if __name__ == "__main__":
main()
Most az alkalmazásnak készen kell állnia a végrehajtásra.
API kérések kezelése
Hozzon létre egy utils.py fájlt a projektkönyvtárba, és adja hozzá az alábbi funkciót:
import replicate
import time# Initialize debounce variables
last_call_time = 0
debounce_interval = 2# Set the debounce interval (in seconds)defdebounce_replicate_run(llm, prompt, max_len, temperature, top_p,
API_TOKEN):
global last_call_time
print("last call time: ", last_call_time)current_time = time.time()
elapsed_time = current_time - last_call_timeif elapsed_time < debounce_interval:
print("Debouncing")
return"Hello! Your requests are too fast. Please wait a few" \
" seconds before sending another request."last_call_time = time.time()
output = replicate.run(llm, input={"prompt": prompt + "Assistant: ",
"max_length": max_len, "temperature":
temperature, "top_p": top_p,
"repetition_penalty": 1}, api_token=API_TOKEN)
return output
A funkció egy visszapattanási mechanizmust hajt végre, hogy megakadályozza a gyakori és túlzott API-lekérdezéseket a felhasználó bemenetéről.
Ezután importálja a debounce válaszfüggvényt a sajátjába llama_chatbot.py fájl a következőképpen:
from utils import debounce_replicate_run
Most futtassa az alkalmazást:
streamlit run llama_chatbot.py
Várható kimenet:
A kimenet a modell és egy ember közötti beszélgetést mutatja.
A Streamlit és a Llama 2 chatbotok valós alkalmazásai
Néhány valós példa a Llama 2 alkalmazásokra:
- Chatbotok: Használata az alkotásra vonatkozik emberi válasz chatbotok amely valós idejű beszélgetéseket folytathat több témában.
- Virtuális asszisztensek: Használata virtuális asszisztensek létrehozására vonatkozik, akik megértik az emberi nyelvű lekérdezéseket és válaszolnak rájuk.
- Nyelvi fordítás: Használata nyelvi fordítási feladatokra vonatkozik.
- Szöveges összefoglaló: Használata nagy szövegek rövid szövegekké történő összefoglalására alkalmazható a könnyebb érthetőség érdekében.
- Kutatás: A Llama 2-t kutatási célokra alkalmazhatja, ha számos témában válaszol kérdésekre.
Az AI jövője
Az olyan zárt modellekkel, mint a GPT-3.5 és a GPT-4, a kis játékosok számára meglehetősen nehéz bármit is felépíteni LLM-ek segítségével, mivel a GPT-modell API elérése meglehetősen költséges lehet.
A fejlett nagy nyelvi modellek, például a Llama 2 megnyitása a fejlesztői közösség előtt csak a mesterséges intelligencia új korszakának kezdete. Ez a modellek kreatívabb és innovatívabb megvalósításához vezet a valós alkalmazásokban, ami felgyorsítja a mesterséges szuperintelligencia (ASI) elérésére irányuló versenyt.