Llama 2 je open-source velký jazykový model (LLM) vyvinutý společností Meta. Jedná se o kompetentní open-source velký jazykový model, pravděpodobně lepší než některé uzavřené modely jako GPT-3.5 a PaLM 2. Skládá se ze tří předem trénovaných a vyladěných velikostí generativních textových modelů, včetně 7 miliard, 13 miliard a 70 miliard modelů parametrů.
Konverzační schopnosti Llamy 2 prozkoumáte vytvořením chatbota pomocí Streamlit a Llama 2.
Table of Contents
Pochopení lamy 2: Vlastnosti a výhody
Jak se liší Llama 2 od svého předchůdce velkého jazykového modelu Llama 1?
- Větší velikost modelu: Model je větší, má až 70 miliard parametrů. To mu umožňuje naučit se složitější asociace mezi slovy a větami.
- Vylepšené konverzační schopnosti: Posílení učení z lidské zpětné vazby (RLHF) zlepšuje konverzační aplikační schopnosti. To umožňuje modelu generovat lidský obsah i ve spletitých interakcích.
- Rychlejší vyvozování: Představuje novou metodu nazvanou pozornost seskupeného dotazu pro urychlení vyvozování. Výsledkem je jeho schopnost vytvářet užitečnější aplikace, jako jsou chatboti a virtuální asistenti.
- Efektivnější: Je efektivnější z hlediska paměti a výpočetních zdrojů než jeho předchůdce.
- Open-source a nekomerční licence: Jedná se o open-source. Výzkumníci a vývojáři mohou Llamu 2 používat a upravovat bez omezení.
Llama 2 výrazně překonává svého předchůdce ve všech ohledech. Tyto vlastnosti z něj činí účinný nástroj pro mnoho aplikací, jako jsou chatboti, virtuální asistenti a porozumění přirozenému jazyku.
Nastavení prostředí Streamlit pro vývoj chatbotů
Chcete-li začít s vytvářením aplikace, musíte nastavit vývojové prostředí. Toto slouží k izolaci vašeho projektu od existujících projektů na vašem počítači.
Nejprve začněte vytvořením virtuálního prostředí pomocí knihovny Pipenv takto:
pipenv shell
Dále nainstalujte potřebné knihovny k sestavení chatbota.
pipenv install streamlit replicate
Streamlit: Jedná se o open-source webovou aplikaci, která rychle vykresluje aplikace strojového učení a datové vědy.
Replikovat: Jedná se o cloudovou platformu, která poskytuje přístup k velkým open source modelům strojového učení pro nasazení.
Získejte svůj token Llama 2 API z Replicate
Chcete-li získat tokenový klíč Replicate, musíte si nejprve zaregistrovat účet Replikovat pomocí svého účtu GitHub.
Jakmile se dostanete na řídicí panel, přejděte na tlačítko Prozkoumat a vyhledejte chat Llama 2, abyste viděli model chatu lama-2–70b.
Kliknutím na model chatu lama-2–70b zobrazíte koncové body rozhraní Llama 2 API. Klikněte na tlačítko API na navigační liště modelu chatu lama-2–70b. Na pravé straně stránky klikněte na tlačítko Python. To vám poskytne přístup k tokenu API pro aplikace Python.
Zkopírujte REPLICATE_API_TOKEN a bezpečně jej uložte pro budoucí použití.
Stavba Chatbota
Nejprve vytvořte soubor Python s názvem llama_chatbot.py a soubor env (.env). Svůj kód napíšete na llama_chatbot.py a své tajné klíče a tokeny API uložíte do souboru .env.
Do souboru llama_chatbot.py importujte knihovny následovně.
import streamlit as st
import os
import replicate
Dále nastavte globální proměnné chatovacího modelu lama-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="")
Do souboru .env přidejte token replikace a koncové body modelu v následujícím formátu:
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'
Vložte svůj replikační token a uložte soubor .env.
Navrhování konverzačního toku chatbota
Vytvořte předběžnou výzvu ke spuštění modelu Llama 2 podle toho, jaký úkol chcete, aby dělal. V tomto případě chcete, aby model fungoval jako asistent.
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 konfiguraci stránky pro svého chatbota následovně:
st.set_page_config(
page_title="LLaMA2Chat",
page_icon=":volleyball:",
layout="wide"
)
Napište funkci, která inicializuje a nastavuje proměnné stavu 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_PROMPTdef setup_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)
Funkce nastavuje základní proměnné jako chat_dialogue, pre_prompt, llm, top_p, max_seq_len a teplotu ve stavu relace. Zvládá i výběr modelu Llama 2 na základě volby uživatele.
Napište funkci pro vykreslení obsahu postranního panelu aplikace Streamlit.
def render_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 is not None:
st.session_state['pre_prompt'] = new_prompt + "\n"
else:
st.session_state['pre_prompt'] = DEFAULT_PRE_PROMPT
Funkce zobrazí záhlaví a proměnné nastavení chatbota Llama 2 pro úpravy.
Napište funkci, která vykreslí historii chatu, do oblasti hlavního obsahu aplikace Streamlit.
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í dialogem chat_dialogue uloženým ve stavu relace a zobrazuje každou zprávu s odpovídající rolí (uživatel nebo asistent).
Zpracujte zadání uživatele pomocí níže uvedené funkce.
def handle_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)
Tato funkce nabízí uživateli vstupní pole, do kterého může zadávat své zprávy a dotazy. Zpráva je přidána do chat_dialogue ve stavu relace s uživatelskou rolí, jakmile uživatel zprávu odešle.
Napište funkci, která generuje odpovědi z modelu Llama 2 a zobrazuje je v oblasti chatu.
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 vytvoří řetězec historie konverzace, který obsahuje zprávy uživatele i asistenta, než zavolá funkci debounce_replicate_run, aby získala odpověď asistenta. Neustále upravuje odezvu v uživatelském rozhraní, aby poskytla zážitek z chatu v reálném čase.
Napište hlavní funkci zodpovědnou za vykreslení celé aplikace Streamlit.
def render_app():
setup_session_state()
render_sidebar()
render_chat_history()
handle_user_input()
generate_assistant_response()
Volá všechny definované funkce k nastavení stavu relace, vykreslování postranního panelu, historie chatu, zpracování uživatelských vstupů a generování odpovědí asistenta v logickém pořadí.
Napište funkci, která vyvolá funkci render_app a spustí aplikaci při spuštění skriptu.
def main():
render_app()if __name__ == "__main__":
main()
Nyní by měla být vaše aplikace připravena k provedení.
Zpracování požadavků API
Vytvořte soubor utils.py v adresáři projektu a přidejte funkci níže:
import replicate
import time
last_call_time = 0
debounce_interval = 2def 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_timeif 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
Funkce provádí mechanismus debounce, aby zabránil častým a nadměrným dotazům API ze vstupu uživatele.
Dále importujte funkci debounce response do svého souboru llama_chatbot.py následovně:
from utils import debounce_replicate_run
Nyní spusťte aplikaci:
streamlit run llama_chatbot.py
Očekávaný výstup:
Výstup ukazuje rozhovor mezi modelem a člověkem.
Aplikace chatbotů Streamlit a Llama 2 v reálném světě
Některé reálné příklady aplikací Llama 2 zahrnují:
- Chatboti: Jeho použití se vztahuje na vytváření chatbotů s lidskou odezvou, kteří mohou vést konverzace v reálném čase na několik témat.
- Virtuální asistenti: Jeho použití se vztahuje na vytváření virtuálních asistentů, kteří rozumí lidským jazykovým dotazům a odpovídají na ně.
- Jazykový překlad: Jeho použití se vztahuje na úlohy jazykového překladu.
- Sumarizace textu: Její použití je použitelné při shrnutí velkých textů do krátkých textů pro snadné porozumění.
- Výzkum: Llamu 2 můžete použít pro výzkumné účely zodpovězením otázek z celé řady témat.
Budoucnost AI
S uzavřenými modely, jako jsou GPT-3.5 a GPT-4, je pro malé hráče docela obtížné postavit cokoli podstatného pomocí LLM, protože přístup k API modelu GPT může být poměrně drahý.
Otevření pokročilých velkých jazykových modelů, jako je Llama 2, vývojářské komunitě je jen začátkem nové éry umělé inteligence. Povede to ke kreativnější a inovativnější implementaci modelů v aplikacích v reálném světě, což povede k urychlenému závodu o dosažení umělé super inteligence (ASI).