Kasutage Pythoniga kohandatud vestlusroti loomiseks avatud lähtekoodiga Llama 2 LLM-i.

Llama 2 on avatud lähtekoodiga suur keelemudel (LLM), mille on välja töötanud Meta. See on pädev avatud lähtekoodiga suur keelemudel, mis on vaieldamatult parem kui mõned suletud mudelid, nagu GPT-3.5 ja PaLM 2. See koosneb kolmest eelkoolitatud ja viimistletud generatiivse tekstimudeli suurusest, sealhulgas 7 miljardi, 13 miljardi ja 70 miljardi parameetrimudelist.

Saate uurida Llama 2 vestlusvõimalusi, luues Streamliti ja Llama 2 abil vestlusroti.

Laama 2 mõistmine: omadused ja eelised

Kui erinev on Llama 2 oma eelkäijast suur keelemudel, Laama 1?

  • Suurema mudeli suurus: Mudel on suurem, kuni 70 miljardi parameetriga. See võimaldab tal õppida sõnade ja lausete vahel keerukamaid seoseid.
  • Täiustatud vestlusoskus: Inforcement Learning from Human Feedback (RLHF) parandab vestlusrakenduste võimeid. See võimaldab mudelil luua inimlikku sisu isegi keeruliste interaktsioonide korral.
  • Kiirem järeldus: see tutvustab järelduste kiirendamiseks uudset meetodit, mida nimetatakse grupeeritud päringu tähelepanu pööramiseks. Selle tulemuseks on võime luua kasulikumaid rakendusi, nagu vestlusrobotid ja virtuaalsed assistendid.
    instagram viewer
  • Tõhusam: see on mälu- ja arvutusressursitõhusam kui tema eelkäija.
  • Avatud lähtekoodiga ja mitteäriline litsents: See on avatud lähtekoodiga. Teadlased ja arendajad saavad Llama 2 piiranguteta kasutada ja muuta.

Llama 2 ületab oma eelkäijat kõigis aspektides märkimisväärselt. Need omadused muudavad selle tõhusaks tööriistaks paljude rakenduste jaoks, nagu vestlusrobotid, virtuaalsed assistendid ja loomuliku keele mõistmine.

Sujuva keskkonna seadistamine vestlusrobotite arendamiseks

Rakenduse loomise alustamiseks peate seadistama arenduskeskkonna. Selle eesmärk on isoleerida teie projekt teie masinas olemasolevatest projektidest.

Esiteks alustage virtuaalse keskkonna loomine kasutades Pipenv raamatukogu järgmiselt:

pipenv shell

Järgmisena installige vestlusroti loomiseks vajalikud teegid.

pipenv install streamlit replicate

Vooluvalgus: see on avatud lähtekoodiga veebirakenduse raamistik, mis renderdab kiiresti masinõppe ja andmeteaduse rakendusi.

Kopeerida: see on pilveplatvorm, mis pakub juurutamiseks juurdepääsu suurtele avatud lähtekoodiga masinõppemudelitele.

Hankige oma Llama 2 API tunnus Replicate'ist

Replikatsiooni märgivõtme saamiseks peate esmalt registreerima konto saidil Kopeerida kasutades oma GitHubi kontot.

Replikatsioon võimaldab sisse logida ainult läbi a GitHubi konto.

Kui olete armatuurlauale juurde pääsenud, liikuge lehele Uurige nuppu ja otsige Llama 2 vestlust, et näha laama-2–70b-vestlus mudel.

Klõpsake nuppu laama-2–70b-vestlus mudelit, et vaadata Llama 2 API lõpp-punkte. Klõpsake nuppu API nuppu laama-2–70b-vestlus mudeli navigeerimisriba. Klõpsake lehe paremas servas nuppu Python nuppu. See annab teile juurdepääsu Pythoni rakenduste API-märgile.

Kopeerige REPLICATE_API_TOKEN ja hoidke seda edaspidiseks kasutamiseks ohutult.

Täielik lähtekood on siin saadaval GitHubi hoidla.

Chatboti ehitamine

Esiteks looge Pythoni fail nimega llama_chatbot.py ja env-fail (.env). Kirjutate oma koodi saidile llama_chatbot.py ja salvestate oma salajased võtmed ja API-märgid .env-faili.

Importige failis llama_chatbot.py teegid järgmiselt.

import streamlit as st 
import os
import replicate

Järgmisena määrake globaalsed muutujad laama-2–70b-vestlus mudel.

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

Lisage env-faili replikatsiooni luba ja modelleerige lõpp-punktid järgmises vormingus:

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'

Kleepige oma replikatsioonimärk ja salvestage env-fail.

Chatboti vestlusvoo kujundamine

Looge Llama 2 mudeli käivitamiseks eelviip olenevalt sellest, millist ülesannet soovite sellega teha. Sel juhul soovite, et modell tegutseks assistendina.

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

Seadistage oma vestlusroboti lehe konfiguratsioon järgmiselt.

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

Kirjutage funktsioon, mis lähtestab ja seadistab seansi oleku muutujad.

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

Funktsioon määrab olulised muutujad nagu chat_dialogue, pre_prompt, llm, top_p, max_seq_lenja temperatuuri seansi olekus. Samuti tegeleb see Llama 2 mudeli valikuga vastavalt kasutaja valikule.

Kirjutage funktsioon Streamlit rakenduse külgriba sisu renderdamiseks.

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

Funktsioon kuvab reguleerimiseks Llama 2 vestlusroti päise ja seadistusmuutujad.

Kirjutage rakenduse Streamlit põhisisu alale funktsioon, mis renderdab vestluse ajaloo.

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"])

Funktsioon itereerib läbi seansi olekus salvestatud chat_dialogue, kuvades iga sõnumi vastava rolliga (kasutaja või assistent).

Käsitsege kasutaja sisendit alloleva funktsiooni abil.

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)

See funktsioon esitab kasutaja sisestusväljaga, kuhu nad saavad sisestada oma sõnumid ja küsimused. Sõnum lisatakse chat_dialogue seansi olekus koos kasutaja rolli, kui kasutaja sõnumi edastab.

Kirjutage funktsioon, mis genereerib Llama 2 mudeli vastused ja kuvab need vestlusalal.

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})

Funktsioon loob enne numbrile helistamist vestluste ajaloostringi, mis sisaldab nii kasutaja kui ka assistendi sõnumeid debounce_replicate_run funktsioon assistendi vastuse saamiseks. See muudab pidevalt kasutajaliidese vastust, et pakkuda reaalajas vestluskogemust.

Kirjutage põhifunktsioon, mis vastutab kogu Streamliti rakenduse renderdamise eest.

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

See kutsub kõiki määratletud funktsioone seansi oleku seadistamiseks, külgriba renderdamiseks, vestluste ajalooks, kasutaja sisendi haldamiseks ja assistendi vastuste genereerimiseks loogilises järjekorras.

Kirjutage funktsioon, mis kutsub esile render_app funktsiooni ja käivitage rakendus, kui skript on käivitatud.

defmain():
render_app()

if __name__ == "__main__":
main()

Nüüd peaks teie rakendus olema täitmiseks valmis.

API taotluste käsitlemine

Loo utils.py faili oma projekti kataloogi ja lisage allolev funktsioon:

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

Funktsioon teostab tagasilöögimehhanismi, et vältida sagedasi ja liigseid API päringuid kasutaja sisendist.

Järgmisena importige oma seadmesse tagasilöögivastuse funktsioon llama_chatbot.py faili järgmiselt:

from utils import debounce_replicate_run

Nüüd käivitage rakendus:

streamlit run llama_chatbot.py

Eeldatav väljund:

Väljund näitab vestlust modelli ja inimese vahel.

Streamliti ja Llama 2 vestlusrobotite reaalsed rakendused

Mõned näited Llama 2 rakendustest on järgmised:

  • Vestlusbotid: selle kasutamine kehtib loomise kohta inimeste reageerimise vestlusrobotid mis võib pidada reaalajas vestlusi mitmel teemal.
  • Virtuaalsed assistendid: selle kasutamine kehtib virtuaalsete assistentide loomisel, kes mõistavad inimkeele päringuid ja vastavad neile.
  • Keele tõlge: selle kasutamine kehtib keeletõlkeülesannete puhul.
  • Teksti kokkuvõte: selle kasutamine on rakendatav suurte tekstide lühitekstideks kokkuvõtmiseks, et neid oleks lihtne mõista.
  • Uurimine: saate rakendust Llama 2 uurimiseesmärkidel rakendada, vastates erinevatel teemadel küsimustele.

AI tulevik

Suletud mudelite puhul, nagu GPT-3.5 ja GPT-4, on väikestel mängijatel LLM-ide abil üsna raske midagi sisulist luua, kuna GPT mudeli API-le juurdepääs võib olla üsna kulukas.

Täiustatud suurte keelemudelite, nagu Llama 2, avamine arendajate kogukonnale on alles AI uue ajastu algus. See toob kaasa mudelite loomingulisema ja uuenduslikuma rakendamise reaalsetes rakendustes, mis viib kiirendatud võidujooksuni tehisintellekti (ASI) saavutamise suunas.