Využite open-source Llama 2 LLM na vytvorenie vlastného chatbota s Pythonom.

Llama 2 je open-source veľký jazykový model (LLM) vyvinutý spoločnosťou Meta. Je to kompetentný model veľkého jazyka s otvoreným zdrojom, pravdepodobne lepší ako niektoré uzavreté modely, ako sú GPT-3.5 a PaLM 2. Pozostáva z troch vopred pripravených a vyladených veľkostí generatívneho textového modelu, vrátane 7 miliárd, 13 miliárd a 70 miliárd modelov parametrov.

Konverzačné schopnosti Llama 2 preskúmate vytvorením chatbota pomocou Streamlit a Llama 2.

Pochopenie lámy 2: Vlastnosti a výhody

Ako veľmi sa Llama 2 líši od svojho predchodcu veľký jazykový model, Lama 1?

  • Veľkosť väčšieho modelu: Model je väčší, má až 70 miliárd parametrov. To mu umožňuje naučiť sa zložitejšie asociácie medzi slovami a vetami.
  • Vylepšené konverzačné schopnosti: Posilnenie učenia z ľudskej spätnej väzby (RLHF) zlepšuje konverzačné aplikačné schopnosti. To umožňuje modelu vytvárať ľudský obsah aj v spletitých interakciách.
  • Rýchlejšie odvodenie
    instagram viewer
    : Predstavuje novú metódu nazývanú skupinová pozornosť dopytov na urýchlenie vyvodzovania. Výsledkom je jeho schopnosť vytvárať užitočnejšie aplikácie, ako sú chatboty a virtuálni asistenti.
  • Viac efektívny: Je efektívnejší z hľadiska pamäte a výpočtových zdrojov ako jeho predchodca.
  • Open source a nekomerčná licencia: Je to open source. Výskumníci a vývojári môžu používať a upravovať Llamu 2 bez obmedzení.

Llama 2 výrazne prekonáva svojho predchodcu vo všetkých smeroch. Tieto vlastnosti z neho robia silný nástroj pre mnohé aplikácie, ako sú chatboty, virtuálni asistenti a porozumenie prirodzenému jazyku.

Nastavenie prostredia Streamlit pre vývoj chatbotov

Ak chcete začať budovať svoju aplikáciu, musíte nastaviť vývojové prostredie. Toto slúži na izoláciu vášho projektu od existujúcich projektov na vašom počítači.

Najprv začnite tým vytváranie virtuálneho prostredia pomocou Pipenv knižnica takto:

pipenv shell

Ďalej nainštalujte potrebné knižnice na zostavenie chatbota.

pipenv install streamlit replicate

Streamlit: Ide o open source webovú aplikáciu, ktorá rýchlo vykresľuje aplikácie strojového učenia a vedy o údajoch.

Replikovať: Ide o cloudovú platformu, ktorá poskytuje prístup k veľkým modelom strojového učenia s otvoreným zdrojom na nasadenie.

Získajte token rozhrania API Llama 2 z replikácie

Ak chcete získať tokenový kľúč Replicate, musíte si najprv zaregistrovať účet Replikovať pomocou svojho účtu GitHub.

Replikovať umožňuje iba prihlásenie cez a účet GitHub.

Po otvorení ovládacieho panela prejdite na položku Preskúmať a vyhľadajte Llama 2 chat, aby ste videli lama-2–70b-chat Model.

Klikni na lama-2–70b-chat model na zobrazenie koncových bodov Llama 2 API. Kliknite na API tlačidlo na lama-2–70b-chat navigačná lišta modelu. Na pravej strane stránky kliknite na Python tlačidlo. To vám poskytne prístup k tokenu API pre aplikácie Python.

Skopírujte REPLICATE_API_TOKEN a bezpečne ho uschovajte pre budúce použitie.

Úplný zdrojový kód je k dispozícii tu úložisko GitHub.

Budovanie chatbota

Najprv vytvorte súbor Python s názvom lama_chatbot.py a súbor env (.env). Svoj kód napíšete na llama_chatbot.py a svoje tajné kľúče a tokeny API uložíte do súboru .env.

Do súboru llama_chatbot.py importujte knižnice nasledovne.

import streamlit as st 
import os
import replicate

Ďalej nastavte globálne premenné lama-2–70b-chat 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='')

Do súboru .env pridajte token replikácie a koncové body modelu v nasledujúcom formáte:

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'

Prilepte svoj replikačný token a uložte súbor .env.

Navrhovanie konverzačného toku chatbota

Vytvorte predbežnú výzvu na spustenie modelu Llama 2 v závislosti od toho, akú úlohu chcete, aby vykonal. V tomto prípade chcete, aby model pôsobil ako asistent.

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

Nastavte konfiguráciu stránky pre svojho chatbota takto:

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

Napíšte funkciu, ktorá inicializuje a nastavuje stavové premenné relácie.

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

Funkcia nastavuje základné premenné ako chat_dialogue, predbežná_výzva, llm, top_p, max_seq_len, a teplota v stave relácie. Poradí si aj s výberom modelu Llama 2 na základe voľby užívateľa.

Napíšte funkciu na vykreslenie obsahu bočného panela aplikácie 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

Funkcia zobrazí hlavičku a premenné nastavenia chatbota Llama 2 na úpravy.

Napíšte funkciu, ktorá vykreslí históriu chatu v oblasti hlavného obsahu aplikácie 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"])

Funkcia iteruje cez dialóg chat_dialogue uložený v stave relácie a zobrazuje každú správu s príslušnou rolou (používateľ alebo asistent).

Spracujte vstup používateľa pomocou funkcie uvedenej nižšie.

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)

Táto funkcia predstavuje užívateľ so vstupným poľom, do ktorého môžu zadať svoje správy a otázky. Správa sa pridá do chat_dialogue v stave relácie s užívateľ po odoslaní správy používateľom.

Napíšte funkciu, ktorá generuje odpovede z modelu Llama 2 a zobrazuje ich v oblasti chatu.

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

Funkcia vytvorí reťazec histórie konverzácie, ktorý obsahuje správy používateľa aj asistenta pred zavolaním na číslo debounce_replicate_run funkcia na získanie odpovede asistenta. Neustále upravuje odozvu v používateľskom rozhraní, aby poskytoval zážitok z rozhovoru v reálnom čase.

Napíšte hlavnú funkciu zodpovednú za vykreslenie celej aplikácie Streamlit.

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

Volá všetky definované funkcie na nastavenie stavu relácie, vykreslenie bočného panela, histórie chatu, spracovanie vstupov používateľa a generovanie odpovedí asistenta v logickom poradí.

Napíšte funkciu na vyvolanie render_app a po spustení skriptu spustite aplikáciu.

defmain():
render_app()

if __name__ == "__main__":
main()

Teraz by mala byť vaša aplikácia pripravená na vykonanie.

Spracovanie požiadaviek API

Vytvor utils.py súbor do adresára vášho projektu a pridajte funkciu nižšie:

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

Funkcia vykonáva mechanizmus debounce, aby zabránil častým a nadmerným dopytom API zo vstupu používateľa.

Ďalej importujte funkciu odozvy na debounce do svojho lama_chatbot.py súbor takto:

from utils import debounce_replicate_run

Teraz spustite aplikáciu:

streamlit run llama_chatbot.py

Očakávaný výstup:

Výstup zobrazuje rozhovor medzi modelom a človekom.

Aplikácie chatbotov Streamlit a Llama 2 v reálnom svete

Niektoré reálne príklady aplikácií Llama 2 zahŕňajú:

  • Chatboti: Jeho použitie sa vzťahuje na tvorenie chatboty s ľudskou odozvou ktoré môžu viesť konverzácie v reálnom čase na niekoľko tém.
  • Virtuálne asistentky: Jeho použitie sa vzťahuje na vytváranie virtuálnych asistentov, ktorí rozumejú a reagujú na otázky ľudského jazyka.
  • Jazykový preklad: Jeho použitie sa vzťahuje na úlohy jazykového prekladu.
  • Textová sumarizácia: Jeho použitie je použiteľné pri sumarizácii veľkých textov do krátkych textov pre ľahké pochopenie.
  • Výskum: Llama 2 môžete použiť na výskumné účely zodpovedaním otázok v rámci rôznych tém.

Budúcnosť AI

S uzavretými modelmi, ako sú GPT-3.5 a GPT-4, je pre malých hráčov dosť ťažké vybudovať čokoľvek podstatné pomocou LLM, pretože prístup k API modelu GPT môže byť dosť drahý.

Otvorenie pokročilých veľkých jazykových modelov, ako je Llama 2, komunite vývojárov je len začiatkom novej éry AI. Povedie to ku kreatívnejšej a inovatívnejšej implementácii modelov v reálnych aplikáciách, čo povedie k zrýchlenému pretekaniu smerom k dosiahnutiu umelej super inteligencie (ASI).