Izkoristite odprtokodni Llama 2 LLM za izdelavo klepetalnega robota po meri s Pythonom.
Llama 2 je odprtokodni model velikega jezika (LLM), ki ga je razvila Meta. Je kompetenten odprtokodni model velikih jezikov, verjetno boljši od nekaterih zaprtih modelov, kot sta GPT-3.5 in PaLM 2. Sestavljen je iz treh vnaprej usposobljenih in natančno nastavljenih velikosti generativnih besedilnih modelov, vključno s 7 milijardami, 13 milijardami in 70 milijardami parametrskih modelov.
Raziskovali boste pogovorne zmožnosti Llame 2 tako, da boste zgradili chatbota z uporabo Streamlita in Llame 2.
Razumevanje Llame 2: značilnosti in prednosti
Kako drugačen je Llama 2 od svojega predhodnika velik jezikovni model, lama 1?
- Večja velikost modela: Model je večji, z do 70 milijardami parametrov. To mu omogoča, da se nauči bolj zapletenih povezav med besedami in stavki.
- Izboljšane pogovorne sposobnosti: Reinforcement Learning from Human Feedback (RLHF) izboljšuje zmožnosti pogovorne uporabe. To modelu omogoča ustvarjanje vsebine, podobne človeku, tudi v zapletenih interakcijah.
- Hitrejše sklepanje: Predstavlja novo metodo, imenovano pozornost združevanja poizvedb, za pospešitev sklepanja. Posledica tega je njegova zmožnost izdelave bolj uporabnih aplikacij, kot so chatboti in virtualni pomočniki.
- Bolj učinkovit: Je bolj učinkovit pri pomnilniku in računalniških virih kot njegov predhodnik.
- Odprtokodna in nekomercialna licenca: Je odprtokoden. Raziskovalci in razvijalci lahko uporabljajo in spreminjajo Llamo 2 brez omejitev.
Llama 2 bistveno prekaša svojega predhodnika v vseh pogledih. Zaradi teh značilnosti je močno orodje za številne aplikacije, kot so chatboti, virtualni pomočniki in razumevanje naravnega jezika.
Nastavitev Streamlit okolja za razvoj klepetalnic
Če želite začeti graditi svojo aplikacijo, morate nastaviti razvojno okolje. To je namenjeno izolaciji vašega projekta od obstoječih projektov na vašem računalniku.
Najprej začnite z ustvarjanje virtualnega okolja uporabljati Pipenv knjižnica, kot sledi:
pipenv shell
Nato namestite potrebne knjižnice za izdelavo chatbota.
pipenv install streamlit replicate
Streamlit: Je odprtokodno ogrodje spletne aplikacije, ki hitro upodablja aplikacije strojnega učenja in podatkovne znanosti.
Repliciraj: Je platforma v oblaku, ki omogoča dostop do velikih odprtokodnih modelov strojnega učenja za uvajanje.
Pridobite žeton API-ja Llama 2 iz kopije
Če želite pridobiti ključ žetona Replicate, morate najprej registrirati račun na Repliciraj z uporabo računa GitHub.
Podvajanje dovoljuje samo prijavo prek a GitHub račun.
Ko dostopate do nadzorne plošče, se pomaknite do Raziščite in poiščite klepet Llama 2, da vidite lama-2–70b-klepet model.
Kliknite na lama-2–70b-klepet model za ogled končnih točk API-ja Llama 2. Kliknite na API gumb na lama-2–70b-klepet navigacijsko vrstico modela. Na desni strani strani kliknite na Python gumb. To vam bo omogočilo dostop do žetona API za aplikacije Python.
Kopiraj REPLICATE_API_TOKEN in ga varno shranite za prihodnjo uporabo.
Celotna izvorna koda je na voljo tukaj Repozitorij GitHub.
Izdelava klepetalnice
Najprej ustvarite datoteko Python, imenovano llama_chatbot.py in datoteko env (.env). Svojo kodo boste napisali v llama_chatbot.py in shranili svoje skrivne ključe in API žetone v datoteko .env.
V datoteki llama_chatbot.py uvozite knjižnice, kot sledi.
import streamlit as st
import os
import replicate
Nato nastavite globalne spremenljivke za lama-2–70b-klepet model.
# 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='')
V datoteko .env dodajte žeton ponovitve in končne točke modela v naslednji obliki:
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'
Prilepite žeton za podvajanje in shranite datoteko .env.
Oblikovanje pogovornega toka Chatbota
Ustvarite vnaprejšnji poziv za zagon modela Llama 2 glede na nalogo, ki jo želite opraviti. V tem primeru želite, da model deluje kot pomočnik.
# 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."
Nastavite konfiguracijo strani za vaš chatbot na naslednji način:
# Set initial page configuration
st.set_page_config(
page_title="LLaMA2Chat",
page_icon=":volleyball:",
layout="wide"
)
Napišite funkcijo, ki inicializira in nastavi spremenljivke stanja seje.
# 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)
Funkcija nastavi bistvene spremenljivke, kot je chat_dialogue, pre_prompt, llm, top_p, max_seq_len, in temperaturo v stanju seje. Ukvarja se tudi z izbiro modela Llama 2 glede na izbiro uporabnika.
Napišite funkcijo za upodabljanje vsebine stranske vrstice aplikacije Streamlit.
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
Funkcija prikaže glavo in nastavitvene spremenljivke klepetalnega robota Llama 2 za prilagoditve.
Napišite funkcijo, ki upodablja zgodovino klepetov v območju glavne vsebine aplikacije Streamlit.
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"])
Funkcija iterira skozi chat_dialogue, shranjen v stanju seje, in prikaže vsako sporočilo z ustrezno vlogo (uporabnik ali pomočnik).
Obravnavajte vnos uporabnika s spodnjo funkcijo.
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)
Ta funkcija predstavlja uporabnik z vnosnim poljem, kamor lahko vnesejo svoja sporočila in vprašanja. Sporočilo je dodano v chat_dialogue v stanju seje z uporabnik vlogo, ko uporabnik odda sporočilo.
Napišite funkcijo, ki generira odgovore iz modela Llama 2 in jih prikaže v območju za klepet.
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})
Funkcija ustvari niz zgodovine pogovorov, ki vključuje sporočila uporabnika in pomočnika, preden pokliče debounce_replicate_run funkcijo za pridobitev odgovora asistenta. Nenehno spreminja odziv v uporabniškem vmesniku, da omogoči izkušnjo klepeta v realnem času.
Napišite glavno funkcijo, odgovorno za upodabljanje celotne aplikacije Streamlit.
defrender_app():
setup_session_state()
render_sidebar()
render_chat_history()
handle_user_input()
generate_assistant_response()
Pokliče vse definirane funkcije za nastavitev stanja seje, upodabljanje stranske vrstice, zgodovino klepeta, obdelavo uporabniškega vnosa in ustvarjanje odgovorov pomočnika v logičnem vrstnem redu.
Napišite funkcijo za priklic render_app funkcijo in zaženite aplikacijo, ko se skript izvede.
defmain():
render_app()
if __name__ == "__main__":
main()
Zdaj mora biti vaša aplikacija pripravljena za izvedbo.
Obravnava zahtev API
Ustvariti utils.py datoteko v vašem imeniku projekta in dodajte spodnjo funkcijo:
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
Funkcija izvaja mehanizem za odbijanje, da prepreči pogoste in pretirane poizvedbe API-ja pri vnosu uporabnika.
Nato v svoj llama_chatbot.py datoteko na naslednji način:
from utils import debounce_replicate_run
Zdaj zaženite aplikacijo:
streamlit run llama_chatbot.py
Pričakovani rezultat:
Rezultat prikazuje pogovor med modelom in človekom.
Realne aplikacije klepetalnih robotov Streamlit in Llama 2
Nekateri resnični primeri aplikacij Llama 2 vključujejo:
- Klepetalni roboti: Njegova uporaba velja za ustvarjanje človeški odzivni chatboti ki lahko vodi pogovore v realnem času o več temah.
- Virtualni pomočniki: Njegova uporaba velja za ustvarjanje virtualnih pomočnikov, ki razumejo in se odzivajo na poizvedbe v človeškem jeziku.
- Prevajanje jezika: Njegova uporaba velja za naloge jezikovnega prevajanja.
- Povzemanje besedila: Njegova uporaba je uporabna pri povzemanju velikih besedil v kratka besedila za lažje razumevanje.
- Raziskovanje: Llamo 2 lahko uporabite za raziskovalne namene, tako da odgovarjate na vprašanja o različnih temah.
Prihodnost AI
Z zaprtimi modeli, kot sta GPT-3.5 in GPT-4, je za majhne igralce precej težko zgraditi kar koli pomembnega z uporabo LLM-jev, saj je dostop do API-ja modela GPT lahko precej drag.
Odpiranje naprednih velikih jezikovnih modelov, kot je Llama 2, skupnosti razvijalcev je šele začetek nove dobe umetne inteligence. To bo privedlo do bolj kreativne in inovativne implementacije modelov v aplikacije v resničnem svetu, kar bo vodilo k pospešeni tekmi za doseganje umetne super inteligence (ASI).