Llama 2 představuje open-source velký jazykový model (LLM) vyvinutý společností Meta. Jedná se o špičkový model, který v mnoha ohledech překonává některé uzavřené alternativy jako GPT-3.5 či PaLM 2. Model je dostupný ve třech variantách s 7, 13 a 70 miliardami parametrů, což umožňuje jeho flexibilní využití v různých aplikacích.
V tomto článku prozkoumáme konverzační možnosti Llama 2 vytvořením interaktivního chatbota s využitím frameworku Streamlit.
Charakteristika a výhody Llama 2
Jaké jsou klíčové rozdíly mezi Llama 2 a jejím předchůdcem, Llama 1?
- Rozsáhlejší model: Llama 2 se pyšní až 70 miliardami parametrů, což jí umožňuje efektivněji analyzovat vztahy mezi slovy a frázemi.
- Vylepšené konverzační schopnosti: Díky posílenému učení s lidskou zpětnou vazbou (RLHF) model dokáže generovat plynulý a lidsky působící text i v komplexních interakcích.
- Zrychlené odvozování: Nová technika, takzvaná pozornost seskupeného dotazu, umožňuje modelu rychleji zpracovávat a generovat odpovědi, což je klíčové pro aplikace jako chatboti a virtuální asistenti.
- Vyšší efektivita: Llama 2 je efektivnější v hospodaření s pamětí a výpočetními zdroji, což snižuje provozní náklady.
- Open-source licence: Model je dostupný pod open-source licencí, což umožňuje výzkumníkům a vývojářům jeho volné používání a úpravy bez omezení.
Llama 2 ve všech aspektech výrazně překonává svého předchůdce. Tyto vlastnosti z něj dělají mocný nástroj pro řadu aplikací, včetně chatbotů, virtuálních asistentů a systémů pro porozumění přirozenému jazyku.
Konfigurace prostředí Streamlit pro vývoj chatbota
Pro začátek je nezbytné nastavit vývojové prostředí, které izoluje projekt od ostatních aplikací ve vašem počítači.
Nejprve vytvořte virtuální prostředí s pomocí nástroje Pipenv:
pipenv shell
Následně nainstalujte potřebné knihovny pro tvorbu chatbota:
pipenv install streamlit replicate
Streamlit: Tento open-source nástroj umožňuje rychlé vytváření webových aplikací pro strojové učení a datovou analýzu.
Replicate: Jedná se o cloudovou platformu poskytující přístup k open-source modelům strojového učení, včetně možnosti jejich nasazení.
Získání API tokenu Llama 2 z platformy Replicate
Pro získání tokenu API je potřeba se zaregistrovat na platformě Replicate pomocí svého GitHub účtu.
Po přihlášení přejděte do sekce „Explore“ a vyhledejte Llama 2 chat, konkrétně model „llama-2-70b-chat“.
Klikněte na tento model, čímž zobrazíte jeho API endpointy. Následně klikněte na tlačítko „API“ a vyberte „Python“. Zobrazí se API token pro Python.
Zkopírujte REPLICATE_API_TOKEN
a bezpečně jej uložte pro další použití.
Tvorba Chatbota
Vytvořte soubor llama_chatbot.py
pro kód chatbota a soubor .env
pro uložení tajných klíčů a API tokenů.
V souboru llama_chatbot.py
importujte potřebné knihovny:
import streamlit as st import os import replicate
Dále nastavte globální proměnné pro chatovací model llama-2-70b
:
REPLICATE_API_TOKEN = os.environ.get('REPLICATE_API_TOKEN', default="") 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 souboru .env
definujte token Replicate a koncové body modelů v tomto formátu:
REPLICATE_API_TOKEN='Váš_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'
Nahraďte Váš_Replicate_Token
svým skutečným tokenem a uložte soubor .env
.
Návrh Konverzačního Toku Chatbota
Definujte úvodní prompt, který určí chování modelu Llama 2. V tomto případě bude model fungovat jako užitečný asistent.
PRE_PROMPT = "Jsi užitečný asistent. Neodpovídej jako 'Uživatel' nebo nepředstírej, že jsi 'Uživatel'. Odpovídej vždy jen jednou, jako Asistent."
Nastavte konfiguraci stránky pro chatbota:
st.set_page_config( page_title="LLaMA2Chat", page_icon=":volleyball:", layout="wide" )
Napište funkci pro inicializaci a nastavení proměnných relace:
LLaMA2_MODELS = { 'LLaMA2-7B': LLaMA2_7B_ENDPOINT, 'LLaMA2-13B': LLaMA2_13B_ENDPOINT, 'LLaMA2-70B': LLaMA2_70B_ENDPOINT, } DEFAULT_TEMPERATURE = 0.1 DEFAULT_TOP_P = 0.9 DEFAULT_MAX_SEQ_LEN = 512 DEFAULT_PRE_PROMPT = PRE_PROMPT def setup_session_state(): st.session_state.setdefault('chat_dialogue', []) selected_model = st.sidebar.selectbox( 'Vyberte 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)
Tato funkce nastaví výchozí proměnné jako chat_dialogue
, pre_prompt
, llm
, top_p
, max_seq_len
a temperature
v session state. Také umožňuje uživateli vybrat model Llama 2 z postranního panelu.
Napište funkci pro vykreslení obsahu postranního panelu Streamlit:
def render_sidebar(): st.sidebar.header("LLaMA2 Chatbot") st.session_state['temperature'] = st.sidebar.slider('Teplota:', 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. délka sekvence:', min_value=64, max_value=4096, value=DEFAULT_MAX_SEQ_LEN, step=8) new_prompt = st.sidebar.text_area( 'Prompt před zahájením chatu. Upravte zde, pokud chcete:', DEFAULT_PRE_PROMPT,height=60) if new_prompt != DEFAULT_PRE_PROMPT and new_prompt != "" and new_prompt is not None: st.session_state['pre_prompt'] = new_prompt + "\n" else: st.session_state['pre_prompt'] = DEFAULT_PRE_PROMPT
Funkce zobrazuje nastavení pro ladění modelu Llama 2, které může uživatel upravit.
Napište funkci pro vykreslení historie chatu v hlavním obsahu aplikace:
def render_chat_history(): response_container = st.container() for message in st.session_state.chat_dialogue: with st.chat_message(message["role"]): st.markdown(message["content"])
Tato funkce prochází chat_dialogue
uložené v session state a zobrazuje každou zprávu s odpovídající rolí (uživatel nebo asistent).
Zpracujte uživatelský vstup pomocí této funkce:
def handle_user_input(): user_input = st.chat_input( "Zadejte vaši otázku pro komunikaci s LLaMA2" ) if user_input: st.session_state.chat_dialogue.append( {"role": "user", "content": user_input} ) with st.chat_message("user"): st.markdown(user_input)
Tato funkce poskytuje uživatelské vstupní pole pro zadávání dotazů. Jakmile uživatel zadá zprávu, tato je uložena do chat_dialogue
spolu s rolí „user“.
Napište funkci, která generuje odpovědi z modelu Llama 2 a zobrazuje je:
def generate_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})
Funkce vytváří řetězec konverzace zahrnující zprávy uživatele a asistenta, a následně volá funkci debounce_replicate_run
pro získání odpovědi asistenta. Průběžně aktualizuje zobrazení odpovědi, aby simulovala chat v reálném čase.
Napište hlavní funkci pro vykreslení celé aplikace Streamlit:
def render_app(): setup_session_state() render_sidebar() render_chat_history() handle_user_input() generate_assistant_response()
Tato funkce volá všechny definované funkce pro nastavení stavu relace, vykreslení postranního panelu, historie chatu, zpracování uživatelského vstupu a generování odpovědí asistenta v logickém pořadí.
Napište funkci, která volá render_app
a spustí celou aplikaci:
def main(): render_app() if __name__ == "__main__": main()
Nyní je vaše aplikace připravena ke spuštění.
Zpracování API Požadavků
Vytvořte soubor utils.py
v kořenovém adresáři projektu a přidejte následující kód:
import replicate import time last_call_time = 0 debounce_interval = 2 def debounce_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 "Dobrý den! Vaše požadavky jsou příliš rychlé. Prosím, vyčkejte několik sekund před odesláním dalšího požadavku." 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
Funkce implementuje mechanismus pro omezení rychlosti API požadavků, aby se zabránilo přetížení API.
Importujte funkci debounce_response
do souboru llama_chatbot.py
:
from utils import debounce_replicate_run
Nyní spusťte aplikaci:
streamlit run llama_chatbot.py
Očekávaný výstup:
Výstup zobrazuje konverzaci mezi modelem a uživatelem.
Reálné Aplikace Chatbotů Streamlit a Llama 2
Mezi konkrétní příklady využití Llama 2 patří:
- Chatboti: Pro vytváření interaktivních chatbotů s lidským chováním, které mohou diskutovat na různá témata.
- Virtuální asistenti: Pro vývoj asistentů schopných rozumět přirozenému jazyku a reagovat na dotazy.
- Jazykový překlad: Pro automatický překlad textu mezi různými jazyky.
- Sumarizace textu: Pro vytváření stručných shrnutí delších textových dokumentů.
- Výzkum: Llama 2 lze použít jako nástroj pro výzkum, poskytující odpovědi na otázky z široké škály oborů.
Budoucnost AI
S uzavřenými modely, jako jsou GPT-3.5 a GPT-4, je pro menší subjekty náročné stavět sofistikované aplikace s LLM, protože přístup k API těchto modelů může být nákladný.
Otevření pokročilých jazykových modelů, jako je Llama 2, komunitě vývojářů představuje nový krok v evoluci AI. Povede to k kreativnějšímu a inovativnějšímu využití modelů v praktických aplikacích a potenciálně k urychlení vývoje směrem k umělé super inteligenci (ASI).