Како направити цхат бота користећи Стреамлит и Ллама 2

Ллама 2 је модел великог језика отвореног кода (ЛЛМ) који је развио Мета. То је компетентан модел великог језика отвореног кода, вероватно бољи од неких затворених модела као што су ГПТ-3.5 и ПаЛМ 2. Састоји се од три унапред обучена и фино подешена генеративна модела текста, укључујући 7 милијарди, 13 милијарди и 70 милијарди параметарских модела.

Истражићете конверзацијске могућности Лламе 2 тако што ћете направити цхатбот користећи Стреамлит и Ллама 2.

Разумевање Лламе 2: карактеристике и предности

Колико се Ллама 2 разликује од свог претходника великог језичког модела, Ллама 1?

  • Већа величина модела: Модел је већи, са до 70 милијарди параметара. Ово му омогућава да научи сложеније асоцијације између речи и реченица.
  • Побољшане способности конверзације: Учење за појачавање на основу повратних информација од људи (РЛХФ) побољшава способности конверзацијске примене. Ово омогућава моделу да генерише садржај сличан човеку чак и у замршеним интеракцијама.
  • Брже закључивање: Уводи нови метод који се зове пажња груписаног упита за убрзање закључивања. Ово резултира његовом способношћу да направи корисније апликације као што су цхатботови и виртуелни асистенти.
  • Ефикаснији: ефикаснији је за меморију и рачунарске ресурсе од свог претходника.
  • Лиценца отвореног кода и некомерцијална лиценца: Она је отвореног кода. Истраживачи и програмери могу да користе и модификују Ллама 2 без ограничења.

Ллама 2 значајно надмашује свог претходника у свим аспектима. Ове карактеристике га чине моћним алатом за многе апликације, као што су цхатботови, виртуелни асистенти и разумевање природног језика.

Постављање модерног окружења за развој четбота

Да бисте почели да правите своју апликацију, морате да подесите развојно окружење. Ово је да бисте изоловали ваш пројекат од постојећих пројеката на вашој машини.

Прво, почните креирањем виртуелног окружења користећи Пипенв библиотеку на следећи начин:

 pipenv shell 

Затим инсталирајте потребне библиотеке да бисте направили цхатбот.

 pipenv install streamlit replicate 

Стреамлит: То је оквир веб апликација отвореног кода који брзо приказује апликације за машинско учење и науку о подацима.

  Како да искључите обавештења о Инстаграм причама

Реплицате: То је платформа у облаку која омогућава приступ великим отвореним моделима машинског учења за примену.

Набавите свој Ллама 2 АПИ токен из реплике

Да бисте добили реплицирани кључ токена, прво морате да региструјете налог Реплицате користећи свој ГитХуб налог.

Када приступите контролној табли, идите до дугмета Истражи и потражите Ллама 2 ћаскање да бисте видели модел лама-2–70б-четовања.

Кликните на ллама-2–70б-цхат модел да видите Ллама 2 АПИ крајње тачке. Кликните на дугме АПИ на траци за навигацију модела лама-2–70б-цхат. На десној страни странице кликните на дугме Питхон. Ово ће вам омогућити приступ АПИ токену за Питхон апликације.

Копирајте РЕПЛИЦАТЕ_АПИ_ТОКЕН и сачувајте га безбедно за будућу употребу.

Изградња четбота

Прво направите Питхон датотеку под називом ллама_цхатбот.пи и енв датотеку (.енв). Написаћете свој код у ллама_цхатбот.пи и сачувати своје тајне кључеве и АПИ токене у .енв датотеци.

У датотеци ллама_цхатбот.пи увезите библиотеке на следећи начин.

 import streamlit as st 
import os
import replicate

Затим поставите глобалне варијабле лама-2–70б-цхат модела.

 
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="")

У .енв датотеци додајте токен Реплицате и крајње тачке модела у следећем формату:

 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'

Налепите свој реплицирани токен и сачувајте .енв датотеку.

Дизајнирање тока разговора четбота

Креирајте пре-промпт за покретање модела Ллама 2 у зависности од тога који задатак желите да уради. У овом случају желите да модел делује као помоћник.

 
PRE_PROMPT = "You are a helpful assistant. You do not respond as " \
            "'User' or pretend to be 'User'." \
            " You only respond once as Assistant."

Подесите конфигурацију странице за ваш цхатбот на следећи начин:

 
st.set_page_config(
   page_title="LLaMA2Chat",
   page_icon=":volleyball:",
   layout="wide"
)

Напишите функцију која иницијализује и поставља променљиве стања сесије.

 
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(
       '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)

Функција поставља основне варијабле као што су цхат_диалогуе, пре_промпт, ллм, топ_п, мак_сек_лен и температура у стању сесије. Такође се бави избором модела Ллама 2 на основу избора корисника.

  Коначан водич за анализу осећања

Напишите функцију за приказивање садржаја бочне траке апликације Стреамлит.

 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

Функција приказује заглавље и варијабле подешавања Ллама 2 цхат бота ради подешавања.

Напишите функцију која приказује историју ћаскања у области главног садржаја апликације Стреамлит.

 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"])

Функција се понавља кроз цхат_диалогуе сачуван у стању сесије, приказујући сваку поруку са одговарајућом улогом (корисник или помоћник).

Управљајте уносом корисника користећи функцију испод.

 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)

Ова функција представља кориснику поље за унос у које може да унесе своје поруке и питања. Порука се додаје у цхат_диалогуе у стању сесије са улогом корисника када корисник пошаље поруку.

Напишите функцију која генерише одговоре из модела Ллама 2 и приказује их у области за ћаскање.

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

Функција креира стринг историје разговора који укључује и корисничке и помоћне поруке пре него што позове функцију дебоунце_реплицате_рун да би добила одговор помоћника. Непрестано модификује одговор у корисничком интерфејсу да би пружио искуство ћаскања у реалном времену.

Напишите главну функцију одговорну за приказивање целе Стреамлит апликације.

 def render_app():
   setup_session_state()
   render_sidebar()
   render_chat_history()
   handle_user_input()
   generate_assistant_response()

Позива све дефинисане функције за подешавање стања сесије, приказивање бочне траке, историју ћаскања, руковање корисничким уносом и генерисање одговора помоћника у логичном редоследу.

  Симетрично, асиметрично, хеш и још много тога…

Напишите функцију за позивање функције рендер_апп и покретање апликације када се скрипта изврши.

 def main():
   render_app()

if __name__ == "__main__":
   main()

Сада би ваша апликација требала бити спремна за извршење.

Руковање АПИ захтевима

Направите датотеку утилс.пи у директоријуму вашег пројекта и додајте функцију испод:

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

Функција врши механизам за уклањање одбијања како би спречила честе и прекомерне АПИ упите од корисничког уноса.

Затим увезите функцију одговора за одбијање у вашу ллама_цхатбот.пи датотеку на следећи начин:

 from utils import debounce_replicate_run 

Сада покрените апликацију:

 streamlit run llama_chatbot.py 

Очекивани излаз:

Излаз приказује разговор између модела и човека.

Примене Стреамлит и Ллама 2 четботова у стварном свету

Неки примери апликација Ллама 2 из стварног света укључују:

  • Цхатботови: Његова употреба се односи на креирање чет робота који могу да воде разговоре у реалном времену о неколико тема.
  • Виртуелни асистенти: Његова употреба се односи на креирање виртуелних помоћника који разумеју и одговарају на упите људског језика.
  • Превођење језика: Његова употреба се односи на задатке превођења језика.
  • Сажимање текста: Његова употреба је применљива за сажимање великих текстова у кратке текстове ради лакшег разумевања.
  • Истраживање: Лламу 2 можете применити у истраживачке сврхе тако што ћете одговарати на питања у низу тема.

Будућност АИ

Са затвореним моделима као што су ГПТ-3.5 и ГПТ-4, малим играчима је прилично тешко да направе било шта од суштинског значаја користећи ЛЛМ јер приступ АПИ-ју ГПТ модела може бити прилично скуп.

Отварање напредних великих језичких модела као што је Ллама 2 заједници програмера само је почетак нове ере АИ. То ће довести до креативније и иновативније примене модела у апликацијама у стварном свету, што ће довести до убрзане трке ка постизању вештачке супер интелигенције (АСИ).