Iskoristite Llama 2 LLM otvorenog koda za izradu prilagođenog chatbota s Pythonom.

Llama 2 je open-source veliki jezični model (LLM) koji je razvila Meta. To je kompetentan model velikog jezika otvorenog koda, nedvojbeno bolji od nekih zatvorenih modela poput GPT-3.5 i PaLM 2. Sastoji se od tri unaprijed obučene i fino podešene veličine modela generativnog teksta, uključujući modele od 7 milijardi, 13 milijardi i 70 milijardi parametara.

Istražit ćete mogućnosti razgovora Llame 2 izgradnjom chatbota koristeći Streamlit i Llama 2.

Razumijevanje Llame 2: značajke i prednosti

Koliko se Llama 2 razlikuje od svog prethodnika veliki jezični model, Lama 1?

  • Veća veličina modela: Model je veći, s do 70 milijardi parametara. To mu omogućuje da nauči više zamršenih asocijacija između riječi i rečenica.
  • Poboljšane sposobnosti razgovora: Reinforcement Learning from Human Feedback (RLHF) poboljšava sposobnosti primjene razgovora. To omogućuje modelu da generira sadržaj sličan ljudskom čak iu zamršenim interakcijama.
  • instagram viewer
  • Brže zaključivanje: Predstavlja novu metodu koja se zove pozornost grupiranog upita za ubrzavanje zaključivanja. To rezultira njegovom sposobnošću izrade korisnijih aplikacija poput chatbota i virtualnih pomoćnika.
  • Učinkovitije: Učinkovitiji je u pogledu memorije i računalnih resursa od svog prethodnika.
  • Licenca otvorenog koda i nekomercijalna: To je open-source. Istraživači i programeri mogu koristiti i modificirati Llama 2 bez ograničenja.

Llama 2 značajno nadmašuje svog prethodnika u svim aspektima. Ove karakteristike čine ga moćnim alatom za mnoge aplikacije, kao što su chatbotovi, virtualni pomoćnici i razumijevanje prirodnog jezika.

Postavljanje streamlit okruženja za razvoj chatbota

Da biste počeli graditi svoju aplikaciju, morate postaviti razvojno okruženje. Ovo služi za izolaciju vašeg projekta od postojećih projekata na vašem računalu.

Prvo, počnite od stvaranje virtualnog okruženja koristiti Pipenv knjižnica kako slijedi:

pipenv shell

Zatim instalirajte potrebne biblioteke za izradu chatbota.

pipenv install streamlit replicate

Potočno osvijetljen: To je okvir web-aplikacije otvorenog koda koji brzo prikazuje aplikacije strojnog učenja i znanosti o podacima.

Ponoviti: To je platforma u oblaku koja omogućuje pristup velikim modelima strojnog učenja otvorenog koda za implementaciju.

Nabavite svoj Llama 2 API token iz replika

Da biste dobili Replicate token ključ, prvo morate registrirati račun na Ponoviti koristeći svoj GitHub račun.

Repliciranje dopušta samo prijavu putem a GitHub račun.

Nakon što pristupite nadzornoj ploči, idite na Istražiti gumb i potražite Llama 2 chat da biste vidjeli ljama-2–70b-razgovor model.

Klikni na ljama-2–70b-razgovor model za prikaz Llama 2 API krajnjih točaka. Kliknite na API gumb na ljama-2–70b-razgovor navigacijska traka modela. Na desnoj strani stranice kliknite na Piton dugme. To će vam omogućiti pristup API tokenu za Python aplikacije.

Kopiraj REPLICATE_API_TOKEN i pohranite ga na sigurno za buduću upotrebu.

Puni izvorni kod dostupan je ovdje GitHub spremište.

Izrada Chatbota

Prvo stvorite Python datoteku pod nazivom llama_chatbot.py i env datoteku (.env). Napisat ćete svoj kod u llama_chatbot.py i pohraniti svoje tajne ključeve i API tokene u .env datoteku.

U datoteku llama_chatbot.py uvezite biblioteke na sljedeći način.

import streamlit as st 
import os
import replicate

Zatim postavite globalne varijable za ljama-2–70b-razgovor 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='')

U .env datoteci dodajte token replike i krajnje točke modela u sljedećem formatu:

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'

Zalijepite svoj Replicate token i spremite .env datoteku.

Dizajniranje tijeka razgovora Chatbota

Napravite predupit za pokretanje modela Llama 2 ovisno o zadatku koji želite. U ovom slučaju želite da model djeluje kao 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."

Postavite konfiguraciju stranice za svoj chatbot na sljedeći način:

# Set initial page configuration
st.set_page_config(
page_title="LLaMA2Chat",
page_icon=":volleyball:",
layout="wide"
)

Napišite funkciju koja inicijalizira i postavlja varijable stanja sesije.

# 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 postavlja bitne varijable poput chat_dijalog, pre_prompt, llm, vrh_str, max_seq_len, i temperatura u stanju sesije. Također upravlja odabirom modela Llama 2 na temelju odabira korisnika.

Napišite funkciju za prikaz sadržaja bočne trake 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 prikazuje zaglavlje i varijable postavki Llama 2 chatbota za prilagodbe.

Napišite funkciju koja prikazuje povijest razgovora u području glavnog sadržaja 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 kroz chat_dialogue spremljen u stanju sesije, prikazujući svaku poruku s odgovarajućom ulogom (korisnik ili pomoćnik).

Upravljajte korisničkim unosom pomoću donje funkcije.

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)

Ova funkcija predstavlja korisnik s poljem za unos u koje mogu unijeti svoje poruke i pitanja. Poruka se dodaje u chat_dijalog u stanju sesije s korisnik ulogu nakon što korisnik pošalje poruku.

Napišite funkciju koja generira odgovore iz modela Llama 2 i prikazuje ih u području za chat.

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 stvara niz povijesti razgovora koji uključuje poruke korisnika i pomoćnika prije pozivanja debounce_replicate_run funkciju za dobivanje odgovora pomoćnika. Kontinuirano mijenja odgovor u korisničkom sučelju kako bi omogućio iskustvo razgovora u stvarnom vremenu.

Napišite glavnu funkciju odgovornu za renderiranje cijele aplikacije Streamlit.

defrender_app():
setup_session_state()
render_sidebar()
render_chat_history()
handle_user_input()
generate_assistant_response()

Poziva sve definirane funkcije za postavljanje stanja sesije, prikaz bočne trake, povijest razgovora, rukovanje korisničkim unosom i generiranje odgovora pomoćnika logičkim redoslijedom.

Napišite funkciju za pozivanje render_app funkciju i pokretanje aplikacije kada se skripta izvrši.

defmain():
render_app()

if __name__ == "__main__":
main()

Sada bi vaša aplikacija trebala biti spremna za izvršenje.

Rukovanje API zahtjevima

Stvoriti utils.py datoteku u vašem direktoriju projekta i dodajte funkciju ispod:

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_time

if 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 izvodi mehanizam odbijanja kako bi spriječila česte i pretjerane API upite od korisničkog unosa.

Zatim uvezite funkciju odgovora na odbijanje u svoj llama_chatbot.py datoteku na sljedeći način:

from utils import debounce_replicate_run

Sada pokrenite aplikaciju:

streamlit run llama_chatbot.py

Očekivani rezultat:

Rezultat prikazuje razgovor između modela i čovjeka.

Primjene Streamlita i Llama 2 chatbota u stvarnom svijetu

Neki primjeri aplikacija Llama 2 iz stvarnog svijeta uključuju:

  • Chatbotovi: Njegova uporaba odnosi se na stvaranje ljudski odgovor chatbotovi koji može održavati razgovore u stvarnom vremenu o nekoliko tema.
  • Virtualni pomoćnici: Njegova se upotreba odnosi na stvaranje virtualnih pomoćnika koji razumiju i odgovaraju na upite ljudskog jezika.
  • Prijevod jezika: Njegova se upotreba odnosi na zadatke prevođenja jezika.
  • Sažimanje teksta: Njegova upotreba je primjenjiva u sažimanju velikih tekstova u kratke tekstove radi lakšeg razumijevanja.
  • Istraživanje: Llamu 2 možete primijeniti u istraživačke svrhe odgovarajući na pitanja u nizu tema.

Budućnost umjetne inteligencije

Uz zatvorene modele kao što su GPT-3.5 i GPT-4, malim je igračima prilično teško izgraditi bilo što bitno koristeći LLM budući da pristup API-ju GPT modela može biti prilično skup.

Otvaranje naprednih velikih jezičnih modela kao što je Llama 2 zajednici programera samo je početak nove ere umjetne inteligencije. To će dovesti do kreativnije i inovativnije implementacije modela u aplikacijama u stvarnom svijetu, što će dovesti do ubrzane utrke prema postizanju umjetne super inteligencije (ASI).