Izmantojiet atvērtā pirmkoda Llama 2 LLM, lai izveidotu pielāgotu tērzēšanas robotu ar Python.

Llama 2 ir atvērtā pirmkoda lielas valodas modelis (LLM), ko izstrādājusi Meta. Tas ir kompetents atvērtā pirmkoda lielas valodas modelis, kas, iespējams, ir labāks par dažiem slēgtiem modeļiem, piemēram, GPT-3.5 un PaLM 2. Tas sastāv no trīs iepriekš sagatavotiem un precīzi noregulētiem ģeneratīvā teksta modeļu izmēriem, tostarp 7 miljardu, 13 miljardu un 70 miljardu parametru modeļiem.

Jūs izpētīsit Llama 2 sarunvalodas iespējas, izveidojot tērzēšanas robotu, izmantojot Streamlit un Llama 2.

Izpratne par Lamu 2: funkcijas un priekšrocības

Cik ļoti Llama 2 atšķiras no tā priekšgājēja liels valodas modelis, Lama 1?

  • Lielāka modeļa izmērs: Modelis ir lielāks, ar līdz pat 70 miljardiem parametru. Tas ļauj uzzināt sarežģītākas vārdu un teikumu asociācijas.
  • Uzlabotas sarunas spējas: Pastiprināšana Mācīšanās no cilvēku atgriezeniskās saites (RLHF) uzlabo sarunvalodas pielietošanas spējas. Tas ļauj modelim ģenerēt cilvēkam līdzīgu saturu pat sarežģītās mijiedarbībās.
  • Ātrāks secinājums: tā ievieš jaunu metodi, ko sauc par grupētu vaicājumu uzmanību, lai paātrinātu secinājumu izdarīšanu. Tādējādi tā var izveidot noderīgākas lietojumprogrammas, piemēram, tērzēšanas robotus un virtuālos palīgus.
  • Efektīvāks: Tas ir atmiņu un skaitļošanas resursu efektīvāks nekā tā priekšgājējs.
  • Atvērtā koda un nekomerciāla licence: Tas ir atvērtā koda avots. Pētnieki un izstrādātāji var izmantot un modificēt Llama 2 bez ierobežojumiem.

Llama 2 visos aspektos ievērojami pārspēj savu priekšgājēju. Šīs īpašības padara to par spēcīgu rīku daudzām lietojumprogrammām, piemēram, tērzēšanas robotiem, virtuālajiem palīgiem un dabiskās valodas izpratnei.

Streamlit vides iestatīšana tērzēšanas robotu izstrādei

Lai sāktu veidot lietojumprogrammu, ir jāiestata izstrādes vide. Tas ir paredzēts, lai jūsu projekts tiktu izolēts no jūsu datorā esošajiem projektiem.

Pirmkārt, sāciet ar veidojot virtuālo vidi izmantojot Pipenv bibliotēkā šādi:

pipenv shell

Pēc tam instalējiet nepieciešamās bibliotēkas, lai izveidotu tērzēšanas robotu.

pipenv install streamlit replicate

Plūsmīgs: tā ir atvērtā pirmkoda tīmekļa lietotņu sistēma, kas ātri nodrošina mašīnmācības un datu zinātnes lietojumprogrammas.

Atkārtot: tā ir mākoņa platforma, kas nodrošina piekļuvi lieliem atvērtā pirmkoda mašīnmācības modeļiem izvietošanai.

Iegūstiet savu Llama 2 API marķieri no Replicate

Lai iegūtu replikācijas marķiera atslēgu, vispirms ir jāreģistrē konts vietnē Atkārtot izmantojot savu GitHub kontu.

Replicēšana ļauj pierakstīties tikai, izmantojot a GitHub konts.

Kad esat piekļuvis informācijas panelim, pārejiet uz Izpētīt pogu un meklējiet Llama 2 chat, lai redzētu lama-2–70b-čats modelis.

Noklikšķiniet uz lama-2–70b-čats modeli, lai skatītu Llama 2 API galapunktus. Noklikšķiniet uz API pogu uz lama-2–70b-čats modeļa navigācijas josla. Lapas labajā pusē noklikšķiniet uz Python pogu. Tādējādi jūs varēsit piekļūt Python lietojumprogrammu API pilnvarai.

Kopējiet REPLICATE_API_TOKEN un uzglabājiet to droši turpmākai lietošanai.

Pilns pirmkods ir pieejams šajā GitHub repozitorijs.

Chatbot izveide

Vispirms izveidojiet Python failu ar nosaukumu llama_chatbot.py un env failu (.env). Jūs ierakstīsit savu kodu vietnē llama_chatbot.py un saglabāsiet savas slepenās atslēgas un API pilnvaras .env failā.

Importējiet bibliotēkas failā llama_chatbot.py, kā norādīts tālāk.

import streamlit as st 
import os
import replicate

Pēc tam iestatiet globālos mainīgos lama-2–70b-čats modelis.

# 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='')

.env failā pievienojiet pilnvaru Replicate un modelējiet galapunktus šādā formātā:

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'

Ielīmējiet savu replikācijas pilnvaru un saglabājiet .env failu.

Chatbot sarunu plūsmas izstrāde

Izveidojiet iepriekšēju uzvedni, lai palaistu modeli Llama 2 atkarībā no tā, kādu uzdevumu vēlaties tam veikt. Šajā gadījumā vēlaties, lai modelis darbotos kā palīgs.

# 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."

Iestatiet tērzēšanas robota lapas konfigurāciju šādi:

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

Uzrakstiet funkciju, kas inicializē un iestata sesijas stāvokļa mainīgos.

# 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 nosaka būtiskos mainīgos, piemēram, chat_dialogue, pre_prompt, llm, top_p, max_seq_len, un temperatūra sesijas stāvoklī. Tā arī veic Llama 2 modeļa izvēli, pamatojoties uz lietotāja izvēli.

Uzrakstiet funkciju, lai renderētu lietotnes Streamlit sānjoslas saturu.

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 parāda Llama 2 tērzēšanas robota galveni un iestatījumu mainīgos pielāgojumus.

Lietojumprogrammas Streamlit galvenajā satura apgabalā ierakstiet funkciju, kas atveido tērzēšanas vēsturi.

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 atkārtojas, izmantojot sesijas stāvoklī saglabāto tērzēšanas_dialogu, parādot katru ziņojumu ar atbilstošo lomu (lietotājs vai palīgs).

Apstrādājiet lietotāja ievadi, izmantojot tālāk norādīto funkciju.

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)

Šī funkcija parāda lietotājs ar ievades lauku, kurā viņi var ievadīt savus ziņojumus un jautājumus. Ziņa tiek pievienota chat_dialogue sesijas stāvoklī ar lietotājs lomu, kad lietotājs ir iesniedzis ziņojumu.

Uzrakstiet funkciju, kas ģenerē atbildes no modeļa Llama 2 un parāda tās tērzēšanas apgabalā.

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 izveido sarunu vēstures virkni, kas ietver gan lietotāja, gan asistenta ziņojumus pirms zvanīšanas debounce_replicate_run funkcija, lai iegūtu asistenta atbildi. Tas nepārtraukti maina atbildi lietotāja saskarnē, lai nodrošinātu reāllaika tērzēšanas pieredzi.

Uzrakstiet galveno funkciju, kas ir atbildīga par visas Streamlit lietotnes renderēšanu.

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

Tas izsauc visas noteiktās funkcijas, lai iestatītu sesijas stāvokli, renderētu sānjoslu, tērzēšanas vēsturi, apstrādātu lietotāja ievadi un ģenerētu asistenta atbildes loģiskā secībā.

Uzrakstiet funkciju, lai izsauktu render_app funkciju un startējiet programmu, kad skripts tiek izpildīts.

defmain():
render_app()

if __name__ == "__main__":
main()

Tagad jūsu lietojumprogrammai jābūt gatavai izpildei.

API pieprasījumu apstrāde

Izveidot a utils.py failu savā projekta direktorijā un pievienojiet tālāk norādīto funkciju:

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 veic atkāpšanās mehānismu, lai novērstu biežus un pārmērīgus API vaicājumus no lietotāja ievades.

Pēc tam savā ierīcē importējiet atbildes funkciju par atkāpšanos llama_chatbot.py failu šādi:

from utils import debounce_replicate_run

Tagad palaidiet lietojumprogrammu:

streamlit run llama_chatbot.py

Paredzamā izlaide:

Izvade parāda sarunu starp modeli un cilvēku.

Streamlit un Llama 2 tērzēšanas robotu reālās pasaules lietojumprogrammas

Daži reāli Llama 2 lietojumprogrammu piemēri ir:

  • Tērzēšanas roboti: tā izmantošana attiecas uz radīšanu cilvēku atbildes tērzēšanas roboti kas var uzturēt reāllaika sarunas par vairākām tēmām.
  • Virtuālie palīgi: tā izmantošana attiecas uz virtuālo palīgu izveidi, kas saprot cilvēku valodas vaicājumus un atbild uz tiem.
  • Valodas tulkošana: tā lietošana attiecas uz valodas tulkošanas uzdevumiem.
  • Teksta kopsavilkums: tā lietošana ir piemērojama lielu tekstu apkopošanai īsos tekstos, lai tos būtu vieglāk saprast.
  • Pētījumi: varat izmantot Llama 2 pētniecības nolūkos, atbildot uz jautājumiem par dažādām tēmām.

AI nākotne

Izmantojot slēgtos modeļus, piemēram, GPT-3.5 un GPT-4, maziem spēlētājiem ir diezgan grūti izveidot kaut ko būtisku, izmantojot LLM, jo piekļuve GPT modeļa API var būt diezgan dārga.

Uzlabotu lielo valodu modeļu, piemēram, Llama 2, atvēršana izstrādātāju kopienai ir tikai jaunas AI ēras sākums. Tas radīs radošāku un novatoriskāku modeļu ieviešanu reālās pasaules lietojumprogrammās, kas novedīs pie paātrinātas sacīkstes ceļā uz mākslīgā superintelekta (ASI) sasniegšanu.