Využijte open-source Llama 2 LLM k vytvoření vlastního chatbota s Pythonem.
Llama 2 je open-source velký jazykový model (LLM) vyvinutý společností Meta. Je to 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ě modelů se 7 miliardami, 13 miliardami a 70 miliardami parametrů.
Konverzační schopnosti Llamy 2 prozkoumáte vytvořením chatbota pomocí Streamlit a Llama 2.
Pochopení lamy 2: Vlastnosti a výhody
Jak moc se Llama 2 liší od svého předchůdce velký jazykový model, lama 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: Reinforcement Learning from Human Feedback (RLHF) zlepšuje konverzační aplikační schopnosti. To umožňuje modelu generovat lidský obsah i ve spletitých interakcích.
- Rychlejší závěr: Zavádí novou metodu nazvanou pozornost seskupeným dotazem 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: Je to 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 vytváření virtuálního prostředí za použití Pipenv knihovna 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.
Replikovat umožňuje přihlášení pouze prostřednictvím a účet GitHub.
Jakmile vstoupíte na řídicí panel, přejděte na Prozkoumat a vyhledejte Llama 2 chat pro zobrazení lama-2–70b-chat Modelka.
Klikněte na lama-2–70b-chat model pro zobrazení koncových bodů Llama 2 API. Klikněte na API tlačítko na lama-2–70b-chat navigační lišta modelu. Na pravé straně stránky klikněte na Krajta knoflík. 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í.
Úplný zdrojový kód je k dispozici zde úložiště GitHub.
Stavba Chatbota
Nejprve vytvořte soubor Python s názvem lama_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é lama-2–70b-chat Modelka.
# 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 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.
# 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 konfiguraci stránky pro svého chatbota následovně:
# Set initial page configuration
st.set_page_config(
page_title="LLaMA2Chat",
page_icon=":volleyball:",
layout="wide"
)
Napište funkci, která inicializuje a nastavuje proměnné stavu relace.
# 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)
Funkce nastavuje základní proměnné jako chat_dialog, pre_prompt, llm, top_p, max_seq_len, a teplota 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.
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
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.
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"])
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.
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)
Tato funkce představuje uživatel se vstupním polem, kam mohou zadávat své zprávy a dotazy. Zpráva se přidá do chat_dialog ve stavu relace s uživatel jakmile uživatel zprávu odešle.
Napište funkci, která generuje odpovědi z modelu Llama 2 a zobrazuje je 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})
Funkce vytvoří řetězec historie konverzace, který obsahuje zprávy uživatele i asistenta, než zavoláte debounce_replicate_run funkce pro získání odpovědi 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.
defrender_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 pro vyvolání render_app a spusťte aplikaci při spuštění skriptu.
defmain():
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řit utils.py soubor ve vašem projektovém adresáři a přidejte funkci níže:
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_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 odezvy na debounce do svého lama_chatbot.py soubor takto:
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 tvoření chatboti s lidskou odezvou které mohou vést konverzace v reálném čase na několik témat.
- Virtuální asistenti: Jeho použití se týká vytváření virtuálních asistentů, kteří rozumí lidským jazykovým dotazům a reagují na ně.
- Jazykový překlad: Jeho použití se vztahuje na úlohy jazykového překladu.
- Textová sumarizace: Jeho 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).