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.
    instagram viewer
  • 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_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

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