Используйте Llama 2 LLM с открытым исходным кодом для создания собственного чат-бота на Python.

Llama 2 — это модель большого языка (LLM) с открытым исходным кодом, разработанная Meta. Это компетентная модель большого языка с открытым исходным кодом, возможно, лучше, чем некоторые закрытые модели, такие как GPT-3.5 и PaLM 2. Он состоит из трех предварительно обученных и точно настроенных размеров генеративных текстовых моделей, включая модели с 7 миллиардами, 13 миллиардами и 70 миллиардами параметров.

Вы изучите возможности общения Llama 2, создав чат-бота с помощью Streamlit и Llama 2.

Понимание Llama 2: особенности и преимущества

Насколько Llama 2 отличается от своего предшественника большая языковая модель, Лама 1?

  • Больший размер модели: Модель крупнее и содержит до 70 миллиардов параметров. Это позволяет ему выучить более сложные ассоциации между словами и предложениями.
  • Улучшенные возможности разговора: Обучение с подкреплением на основе обратной связи с человеком (RLHF) улучшает способности к диалогу. Это позволяет модели генерировать человеческий контент даже при запутанных взаимодействиях.
    instagram viewer
  • Более быстрый вывод: Он представляет новый метод, называемый вниманием к групповым запросам, для ускорения вывода. Это приводит к возможности создавать более полезные приложения, такие как чат-боты и виртуальные помощники.
  • Более эффективным: он более эффективен в отношении памяти и вычислительных ресурсов, чем его предшественник.
  • Открытая и некоммерческая лицензия: Это открытый исходный код. Исследователи и разработчики могут использовать и модифицировать Llama 2 без ограничений.

Llama 2 значительно превосходит своего предшественника по всем параметрам. Эти характеристики делают его мощным инструментом для многих приложений, таких как чат-боты, виртуальные помощники и понимание естественного языка.

Настройка среды Streamlit для разработки чат-ботов

Чтобы начать создавать приложение, вам необходимо настроить среду разработки. Это делается для того, чтобы изолировать ваш проект от существующих проектов на вашем компьютере.

Во-первых, начните с создание виртуальной среды используя Пипенв библиотека следующим образом:

pipenv shell

Затем установите необходимые библиотеки для создания чат-бота.

pipenv install streamlit replicate

Стримлит: это платформа веб-приложений с открытым исходным кодом, которая быстро отображает приложения машинного обучения и обработки данных.

Репликация: это облачная платформа, которая обеспечивает доступ к крупным моделям машинного обучения с открытым исходным кодом для развертывания.

Получите свой токен API Llama 2 от репликации

Чтобы получить ключ репликации токена, необходимо сначала зарегистрировать учетную запись на Репликация используя свою учетную запись GitHub.

Репликация позволяет войти в систему только через Аккаунт GitHub.

Получив доступ к панели управления, перейдите к Исследовать кнопку и найдите чат Llama 2, чтобы увидеть лама-2–70б-чат модель.

Нажать на лама-2–70б-чат модель для просмотра конечных точек API Llama 2. Нажмите кнопку API кнопка на лама-2–70б-чат панель навигации модели. В правой части страницы нажмите на кнопку Питон кнопка. Это предоставит вам доступ к токену API для приложений Python.

Скопируйте REPLICATE_API_TOKEN и сохраните его для будущего использования.

Полный исходный код доступен в этом Репозиторий GitHub.

Создание чат-бота

Сначала создайте файл Python с именем llama_chatbot.py и файл env (.env). Вы напишете свой код в llama_chatbot.py и сохраните свои секретные ключи и токены API в файле .env.

В файле llama_chatbot.py импортируйте библиотеки следующим образом.

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

В файл .env добавьте токен репликации и конечные точки модели в следующем формате:

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'

Вставьте свой токен репликации и сохраните файл .env.

Проектирование потока общения чат-бота

Создайте предварительную подсказку для запуска модели Llama 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)

Функция устанавливает важные переменные, такие как чат_диалог, pre_prompt, лм, top_p, max_seq_len, и температура в состоянии сеанса. Он также осуществляет выбор модели Llama 2 по выбору пользователя.

Напишите функцию для рендеринга содержимого боковой панели приложения 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

Функция отображает заголовок и переменные настроек чат-бота Llama 2 для корректировки.

Напишите функцию, которая отображает историю чата в основной области содержимого приложения 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"])

Функция перебирает диалог чата, сохраненный в состоянии сеанса, отображая каждое сообщение с соответствующей ролью (пользователь или помощник).

Обработайте ввод пользователя, используя функцию ниже.

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)

Эта функция представляет пользователь с полем ввода, куда они могут вводить свои сообщения и вопросы. Сообщение добавляется в чат_диалог в состоянии сеанса с пользователь роль после того, как пользователь отправит сообщение.

Напишите функцию, которая генерирует ответы из модели Llama 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})

Функция создает строку истории разговоров, которая включает в себя сообщения как пользователя, так и помощника, прежде чем вызывать debounce_replication_run Функция получения ответа помощника. Он постоянно изменяет ответ в пользовательском интерфейсе, чтобы обеспечить общение в режиме реального времени.

Напишите основную функцию, отвечающую за рендеринг всего приложения Streamlit.

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

Он вызывает все определенные функции для настройки состояния сеанса, отображения боковой панели, истории чата, обработки ввода пользователя и генерации ответов помощника в логическом порядке.

Напишите функцию, вызывающую render_app функцию и запускайте приложение при выполнении сценария.

defmain():
render_app()

if __name__ == "__main__":
main()

Теперь ваше приложение должно быть готово к выполнению.

Обработка запросов API

Создать utils.py файл в каталоге вашего проекта и добавьте функцию ниже:

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

Функция выполняет механизм устранения дребезга, чтобы предотвратить частые и чрезмерные запросы API от пользовательского ввода.

Затем импортируйте функцию ответа на дребезг в свой llama_chatbot.py файл следующим образом:

from utils import debounce_replicate_run

Теперь запустите приложение:

streamlit run llama_chatbot.py

Ожидаемый результат:

Результат показывает разговор между моделью и человеком.

Реальное применение чат-ботов Streamlit и Llama 2

Некоторые реальные примеры приложений Llama 2 включают в себя:

  • Чат-боты: Его использование применимо к созданию чат-боты с человеческим ответом который может вести разговоры в реальном времени на несколько тем.
  • Виртуальные помощники: Его использование применяется для создания виртуальных помощников, которые понимают запросы на человеческом языке и отвечают на них.
  • Языковой перевод: Его использование применимо к задачам языкового перевода.
  • Обобщение текста: Его использование применимо при объединении больших текстов в короткие для облегчения понимания.
  • Исследовать: вы можете применять «Ламу 2» в исследовательских целях, отвечая на вопросы по широкому кругу тем.

Будущее искусственного интеллекта

С закрытыми моделями, такими как GPT-3.5 и GPT-4, мелким игрокам довольно сложно создать что-либо существенное с использованием LLM, поскольку доступ к API модели GPT может быть довольно дорогим.

Открытие для сообщества разработчиков продвинутых больших языковых моделей, таких как Llama 2, — это только начало новой эры искусственного интеллекта. Это приведет к более творческой и инновационной реализации моделей в реальных приложениях, что приведет к ускорению гонки за достижением искусственного сверхинтеллекта (ASI).