Manfaatkan Llama 2 LLM sumber terbuka untuk membuat chatbot khusus dengan Python.
Llama 2 adalah model bahasa besar (LLM) sumber terbuka yang dikembangkan oleh Meta. Ini adalah model bahasa besar sumber terbuka yang kompeten, bisa dibilang lebih baik daripada beberapa model tertutup seperti GPT-3.5 dan PaLM 2. Ini terdiri dari tiga ukuran model teks generatif yang telah dilatih sebelumnya dan disempurnakan, termasuk model parameter 7 miliar, 13 miliar, dan 70 miliar.
Anda akan mengeksplorasi kemampuan percakapan Llama 2 dengan membuat chatbot menggunakan Streamlit dan Llama 2.
Pengertian Llama 2: Fitur dan Manfaat
Betapa berbedanya Llama 2 dengan pendahulunya model bahasa besar, Lama 1?
- Ukuran model lebih besar: Modelnya lebih besar, dengan hingga 70 miliar parameter. Hal ini memungkinkannya mempelajari hubungan yang lebih rumit antara kata dan kalimat.
- Peningkatan kemampuan percakapan: Pembelajaran Penguatan dari Umpan Balik Manusia (RLHF) meningkatkan kemampuan aplikasi percakapan. Hal ini memungkinkan model menghasilkan konten mirip manusia bahkan dalam interaksi yang berbelit-belit.
- Inferensi lebih cepat: Ini memperkenalkan metode baru yang disebut perhatian kueri yang dikelompokkan untuk mempercepat inferensi. Hal ini menghasilkan kemampuannya untuk membangun aplikasi yang lebih berguna seperti chatbots dan asisten virtual.
- Lebih hemat: Ini lebih hemat memori dan sumber daya komputasi dibandingkan pendahulunya.
- Lisensi sumber terbuka dan non-komersial: Ini adalah sumber terbuka. Peneliti dan pengembang dapat menggunakan dan memodifikasi Llama 2 tanpa batasan.
Llama 2 secara signifikan mengungguli pendahulunya dalam segala hal. Karakteristik ini menjadikannya alat yang ampuh untuk banyak aplikasi, seperti chatbots, asisten virtual, dan pemahaman bahasa alami.
Menyiapkan Lingkungan Streamlit untuk Pengembangan Chatbot
Untuk mulai membangun aplikasi, Anda harus menyiapkan lingkungan pengembangan. Ini untuk mengisolasi proyek Anda dari proyek yang ada di mesin Anda.
Pertama, mulailah dari awal menciptakan lingkungan virtual menggunakan pipanv perpustakaan sebagai berikut:
pipenv shell
Selanjutnya, instal perpustakaan yang diperlukan untuk membangun chatbot.
pipenv install streamlit replicate
Lampu aliran: Ini adalah kerangka aplikasi web sumber terbuka yang merender aplikasi pembelajaran mesin dan ilmu data dengan cepat.
Mengulangi: Ini adalah platform cloud yang menyediakan akses ke model pembelajaran mesin sumber terbuka yang besar untuk penerapan.
Dapatkan Token API Llama 2 Anda Dari Replika
Untuk mendapatkan kunci token Replikasi, Anda harus mendaftarkan akun terlebih dahulu Mengulangi menggunakan akun GitHub Anda.
Replikasi hanya mengizinkan masuk melalui a akun GitHub.
Setelah Anda mengakses dasbor, navigasikan ke Mengeksplorasi tombol dan cari obrolan Llama 2 untuk melihat llama-2–70b-obrolan model.
Klik pada llama-2–70b-obrolan model untuk melihat titik akhir API Llama 2. Klik API tombol di llama-2–70b-obrolan bilah navigasi model. Di sisi kanan halaman, klik ular piton tombol. Ini akan memberi Anda akses ke token API untuk Aplikasi Python.
Salin REPLICATE_API_TOKEN dan menyimpannya dengan aman untuk digunakan di masa mendatang.
Kode sumber lengkap tersedia di sini Repositori GitHub.
Membangun Chatbot
Pertama, buat file Python bernama llama_chatbot.py dan file env (.env). Anda akan menulis kode Anda di llama_chatbot.py dan menyimpan kunci rahasia dan token API Anda di file .env.
Pada file llama_chatbot.py, impor perpustakaan sebagai berikut.
import streamlit as st
import os
import replicate
Selanjutnya, atur variabel global dari llama-2–70b-obrolan model.
# 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='')
Pada file .env, tambahkan token Replikasi dan titik akhir model dalam format berikut:
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'
Tempelkan token Replikasi Anda dan simpan file .env.
Merancang Alur Percakapan Chatbot
Buat perintah awal untuk memulai model Llama 2 tergantung pada tugas apa yang ingin Anda lakukan. Dalam hal ini, Anda ingin model bertindak sebagai asisten.
# 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."
Siapkan konfigurasi halaman untuk chatbot Anda sebagai berikut:
# Set initial page configuration
st.set_page_config(
page_title="LLaMA2Chat",
page_icon=":volleyball:",
layout="wide"
)
Tulis fungsi yang menginisialisasi dan menyiapkan variabel status sesi.
# 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)
Fungsi ini mengatur variabel-variabel penting seperti obrolan_dialog, pra_prompt, llm, atas_p, max_seq_len, Dan suhu dalam keadaan sesi. Ini juga menangani pemilihan model Llama 2 berdasarkan pilihan pengguna.
Tulis fungsi untuk merender konten sidebar aplikasi 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
Fungsi ini menampilkan header dan variabel pengaturan chatbot Llama 2 untuk penyesuaian.
Tulis fungsi yang menampilkan riwayat obrolan di area konten utama aplikasi 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"])
Fungsi ini mengulangi melalui chat_dialogue yang disimpan dalam status sesi, menampilkan setiap pesan dengan peran yang sesuai (pengguna atau asisten).
Tangani masukan pengguna menggunakan fungsi di bawah ini.
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)
Fungsi ini menyajikan pengguna dengan kolom masukan tempat mereka dapat memasukkan pesan dan pertanyaan. Pesan tersebut ditambahkan ke obrolan_dialog dalam keadaan sesi dengan pengguna peran setelah pengguna mengirimkan pesan.
Tulis fungsi yang menghasilkan tanggapan dari model Llama 2 dan menampilkannya di area obrolan.
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})
Fungsi ini membuat string riwayat percakapan yang mencakup pesan pengguna dan asisten sebelum memanggil debounce_replication_run berfungsi untuk mendapatkan respons asisten. Itu terus-menerus mengubah respons di UI untuk memberikan pengalaman obrolan waktu nyata.
Tulis fungsi utama yang bertanggung jawab untuk merender seluruh aplikasi Streamlit.
defrender_app():
setup_session_state()
render_sidebar()
render_chat_history()
handle_user_input()
generate_assistant_response()
Ini memanggil semua fungsi yang ditentukan untuk mengatur status sesi, merender sidebar, riwayat obrolan, menangani input pengguna, dan menghasilkan respons asisten dalam urutan yang logis.
Tulis fungsi untuk memanggil render_app berfungsi dan memulai aplikasi saat skrip dijalankan.
defmain():
render_app()
if __name__ == "__main__":
main()
Sekarang aplikasi Anda harus siap untuk dieksekusi.
Menangani Permintaan API
Membuat utils.py file di direktori proyek Anda dan tambahkan fungsi di bawah ini:
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_timeif 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
Fungsi ini menjalankan mekanisme debounce untuk mencegah kueri API yang sering dan berlebihan dari masukan pengguna.
Selanjutnya, impor fungsi respons debounce ke file Anda llama_chatbot.py mengajukan sebagai berikut:
from utils import debounce_replicate_run
Sekarang jalankan aplikasinya:
streamlit run llama_chatbot.py
Hasil yang diharapkan:
Outputnya menunjukkan percakapan antara model dan manusia.
Aplikasi Streamlit dan Llama 2 Chatbots di Dunia Nyata
Beberapa contoh aplikasi Llama 2 di dunia nyata meliputi:
- bot obrolan: Penggunaannya berlaku untuk berkreasi chatbot respons manusia yang dapat mengadakan percakapan real-time tentang beberapa topik.
- Asisten virtual: Penggunaannya berlaku untuk membuat asisten virtual yang memahami dan merespons pertanyaan bahasa manusia.
- Terjemahan bahasa: Penggunaannya berlaku untuk tugas penerjemahan bahasa.
- Peringkasan teks: Penggunaannya dapat diterapkan dalam merangkum teks besar menjadi teks pendek agar mudah dipahami.
- Riset: Anda dapat menerapkan Llama 2 untuk tujuan penelitian dengan menjawab pertanyaan di berbagai topik.
Masa Depan AI
Dengan model tertutup seperti GPT-3.5 dan GPT-4, cukup sulit bagi pemain kecil untuk membangun substansi apa pun menggunakan LLM karena mengakses API model GPT bisa jadi cukup mahal.
Membuka model bahasa besar yang canggih seperti Llama 2 kepada komunitas pengembang hanyalah awal dari era baru AI. Hal ini akan mengarah pada penerapan model yang lebih kreatif dan inovatif dalam aplikasi dunia nyata, yang mengarah pada percepatan pencapaian Artificial Super Intelligence (ASI).