Искористите Ллама 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б-чет модел.

# 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='')

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

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 у зависности од тога који задатак желите да уради. У овом случају желите да модел делује као помоћник.

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

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

# Set initial page configuration
st.set_page_config(
page_title="LLaMA2Chat",
page_icon=":volleyball:",
layout="wide"
)

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

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

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

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

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

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

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

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

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

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

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)

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

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

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

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

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

defrender_app():
setup_session_state()
render_sidebar()
render_chat_history()
handle_user_input()
generate_assistant_response()

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

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

defmain():
render_app()

if __name__ == "__main__":
main()

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

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

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

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

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

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

from utils import debounce_replicate_run

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

streamlit run llama_chatbot.py

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

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

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

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

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

Будућност АИ

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

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