Python ile özel bir sohbet robotu oluşturmak için açık kaynaklı Llama 2 LLM'den yararlanın.

Llama 2, Meta tarafından geliştirilen açık kaynaklı bir büyük dil modelidir (LLM). GPT-3.5 ve PaLM 2 gibi bazı kapalı modellerden tartışmasız daha iyi olan yetkin bir açık kaynaklı büyük dil modelidir. 7 milyar, 13 milyar ve 70 milyar parametre modelleri dahil olmak üzere, önceden eğitilmiş ve ince ayar yapılmış üç üretken metin modeli boyutundan oluşur.

Streamlit ve Llama 2'yi kullanarak bir sohbet robotu oluşturarak Llama 2'nin konuşma yeteneklerini keşfedeceksiniz.

Lama 2'yi Anlamak: Özellikleri ve Faydaları

Llama 2 selefinden ne kadar farklı? büyük dil modeli, Lama 1?

  • Daha büyük model boyutu: Model, 70 milyara kadar parametreyle daha büyüktür. Bu, kelimeler ve cümleler arasındaki daha karmaşık ilişkileri öğrenmesini sağlar.
  • Geliştirilmiş konuşma yetenekleri: İnsan Geri Bildiriminden Takviyeli Öğrenme (RLHF), konuşmaya dayalı uygulama yeteneklerini geliştirir. Bu, modelin karmaşık etkileşimlerde bile insan benzeri içerik üretmesine olanak tanır.
  • instagram viewer
  • Daha hızlı çıkarım: Çıkarımı hızlandırmak için gruplandırılmış sorgu dikkati adı verilen yeni bir yöntem sunar. Bu, sohbet robotları ve sanal asistanlar gibi daha kullanışlı uygulamalar oluşturma becerisiyle sonuçlanır.
  • Daha verimli: Önceki modele göre daha fazla bellek ve hesaplama kaynağı açısından verimlidir.
  • Açık kaynak ve ticari olmayan lisans: Açık kaynaklıdır. Araştırmacılar ve geliştiriciler Llama 2'yi kısıtlama olmaksızın kullanabilir ve değiştirebilirler.

Llama 2, selefinden her bakımdan önemli ölçüde daha iyi performans gösteriyor. Bu özellikler onu sohbet robotları, sanal asistanlar ve doğal dil anlama gibi birçok uygulama için güçlü bir araç haline getiriyor.

Chatbot Geliştirme için Kolaylaştırılmış Bir Ortam Oluşturma

Uygulamanızı oluşturmaya başlamak için bir geliştirme ortamı ayarlamanız gerekir. Bu, projenizi makinenizdeki mevcut projelerden ayırmak içindir.

Öncelikle şununla başlayın: sanal bir ortam oluşturmak kullanmak Pipenv kütüphane şu şekilde:

pipenv shell

Ardından, sohbet robotunu oluşturmak için gerekli kitaplıkları yükleyin.

pipenv install streamlit replicate

Kolaylaştırılmış: Makine öğrenimi ve veri bilimi uygulamalarını hızlı bir şekilde gerçekleştiren açık kaynaklı bir web uygulaması çerçevesidir.

Tekrarlamak: Dağıtım için büyük açık kaynaklı makine öğrenimi modellerine erişim sağlayan bir bulut platformudur.

Replikadan Llama 2 API Simgenizi Alın

Replika belirteç anahtarı almak için öncelikle şu adreste bir hesap kaydetmeniz gerekir: Tekrarlamak GitHub hesabınızı kullanarak.

Replikasyon yalnızca bir oturum açma işlemine izin verir GitHub hesabı.

Kontrol paneline eriştikten sonra şuraya gidin: Keşfetmek düğmesini tıklayın ve Llama 2 sohbetini arayın. lama-2–70b-sohbet modeli.

Tıkla lama-2–70b-sohbet Llama 2 API uç noktalarını görüntülemek için model. Tıkla API'si üzerindeki düğmeye lama-2–70b-sohbet modelin gezinme çubuğu. Sayfanın sağ tarafında, Piton düğme. Bu size Python Uygulamaları için API belirtecine erişim sağlayacaktır.

Kopyala REPLICATE_API_TOKEN ve ileride kullanmak üzere güvenli bir şekilde saklayın.

Kaynak kodunun tamamı burada mevcuttur GitHub deposu.

Chatbot'u Oluşturmak

Öncelikle adında bir Python dosyası oluşturun. llama_chatbot.py ve bir env dosyası (.env). Kodunuzu llama_chatbot.py dosyasına yazacak ve gizli anahtarlarınızı ve API belirteçlerinizi .env dosyasında saklayacaksınız.

Llama_chatbot.py dosyasında kütüphaneleri aşağıdaki gibi içe aktarın.

import streamlit as st 
import os
import replicate

Daha sonra global değişkenleri ayarlayın. lama-2–70b-sohbet modeli.

# 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 dosyasına, Çoğaltma belirtecini ve model uç noktalarını aşağıdaki biçimde ekleyin:

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'

Çoğaltma belirtecinizi yapıştırın ve .env dosyasını kaydedin.

Chatbot'un Konuşma Akışını Tasarlama

Hangi görevi yapmasını istediğinize bağlı olarak Llama 2 modelini başlatmak için bir ön bilgi istemi oluşturun. Bu durumda modelin asistan olarak hareket etmesini istiyorsunuz.

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

Chatbot'unuzun sayfa yapılandırmasını aşağıdaki gibi ayarlayın:

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

Oturum durumu değişkenlerini başlatan ve ayarlayan bir fonksiyon yazın.

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

İşlev aşağıdaki gibi temel değişkenleri ayarlar: chat_dialogue, pre_prompt, llm, top_p, max_seq_len, Ve sıcaklık oturum durumunda. Ayrıca kullanıcının tercihine göre Llama 2 modelinin seçimini de gerçekleştirir.

Streamlit uygulamasının kenar çubuğu içeriğini işlemek için bir işlev yazın.

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

İşlev, ayarlamalar için Llama 2 sohbet robotunun başlığını ve ayar değişkenlerini görüntüler.

Streamlit uygulamasının ana içerik alanına sohbet geçmişini işleyen fonksiyonu yazın.

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

İşlev, oturum durumunda kaydedilen chat_dialogue aracılığıyla yinelenir ve her mesajı karşılık gelen rolle (kullanıcı veya asistan) görüntüler.

Aşağıdaki işlevi kullanarak kullanıcının girişini işleyin.

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)

Bu fonksiyon şunları sunar: kullanıcı mesajlarını ve sorularını girebilecekleri bir giriş alanı ile. Mesaj eklendi chat_dialogue oturum durumunda kullanıcı Kullanıcı mesajı gönderdiğinde rol.

Llama 2 modelinden yanıtlar üreten ve bunları sohbet alanında görüntüleyen bir fonksiyon yazın.

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

İşlev, çağrı yapmadan önce hem kullanıcı hem de asistan mesajlarını içeren bir konuşma geçmişi dizesi oluşturur. debounce_replicate_run Asistanın yanıtını alma işlevi. Gerçek zamanlı bir sohbet deneyimi sunmak için kullanıcı arayüzündeki yanıtı sürekli olarak değiştirir.

Streamlit uygulamasının tamamının oluşturulmasından sorumlu ana işlevi yazın.

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

Oturum durumunu ayarlamak, kenar çubuğunu oluşturmak, sohbet geçmişini oluşturmak, kullanıcı girişini yönetmek ve asistan yanıtlarını mantıksal bir sırayla oluşturmak için tanımlanmış tüm işlevleri çağırır.

çağıracak bir fonksiyon yazın render_app Betik çalıştırıldığında işlevi çalıştırın ve uygulamayı başlatın.

defmain():
render_app()

if __name__ == "__main__":
main()

Artık uygulamanız yürütmeye hazır olmalıdır.

API İsteklerini İşleme

Oluşturmak utils.py proje dizininize dosya ekleyin ve aşağıdaki işlevi ekleyin:

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

İşlev, kullanıcının girişinden kaynaklanan sık ve aşırı API sorgularını önlemek için bir geri dönüş mekanizması gerçekleştirir.

Daha sonra, geri dönme tepkisi fonksiyonunu cihazınıza aktarın. llama_chatbot.py aşağıdaki gibi dosya:

from utils import debounce_replicate_run

Şimdi uygulamayı çalıştırın:

streamlit run llama_chatbot.py

Beklenen çıktı:

Çıktı, model ile bir insan arasındaki konuşmayı gösterir.

Streamlit ve Llama 2 Chatbot'ların Gerçek Dünya Uygulamaları

Llama 2 uygulamalarının gerçek dünyadaki bazı örnekleri şunları içerir:

  • Sohbet robotları: Kullanımı yaratma için geçerlidir insan tepkisi sohbet robotları çeşitli konularda gerçek zamanlı konuşmalar gerçekleştirebilir.
  • Sanal asistanlar: Kullanımı, insan dili sorgularını anlayan ve yanıtlayan sanal asistanlar oluşturmak için geçerlidir.
  • Dil çevirisi: Kullanımı dil çeviri görevleri için geçerlidir.
  • Metin özetleme: Kullanımı kolay anlaşılması için büyük metinlerin kısa metinlere özetlenmesinde uygulanabilir.
  • Araştırma: Çeşitli konulardaki soruları yanıtlayarak Llama 2'yi araştırma amacıyla uygulayabilirsiniz.

Yapay Zekanın Geleceği

GPT-3.5 ve GPT-4 gibi kapalı modellerde, GPT model API'sine erişim oldukça pahalı olabileceğinden, küçük oyuncuların LLM'leri kullanarak önemli bir şey oluşturması oldukça zordur.

Llama 2 gibi gelişmiş büyük dil modellerinin geliştirici topluluğuna açılması, yeni bir yapay zeka çağının yalnızca başlangıcıdır. Modellerin gerçek dünya uygulamalarında daha yaratıcı ve yenilikçi bir şekilde uygulanmasına yol açacak ve Yapay Süper Zeka (ASI) elde etme yolunda hızlandırılmış bir yarışa yol açacak.