Αξιοποιήστε το ανοιχτού κώδικα Llama 2 LLM για να δημιουργήσετε ένα προσαρμοσμένο chatbot με την Python.
Το Llama 2 είναι ένα μοντέλο ανοιχτού κώδικα μεγάλης γλώσσας (LLM) που αναπτύχθηκε από τη Meta. Είναι ένα ικανό μοντέλο ανοιχτού κώδικα μεγάλης γλώσσας, αναμφισβήτητα καλύτερο από ορισμένα κλειστά μοντέλα όπως το GPT-3.5 και το PaLM 2. Αποτελείται από τρία προεκπαιδευμένα και βελτιωμένα μεγέθη μοντέλων δημιουργίας κειμένου, συμπεριλαμβανομένων των μοντέλων παραμέτρων 7 δισεκατομμυρίων, 13 δισεκατομμυρίων και 70 δισεκατομμυρίων.
Θα εξερευνήσετε τις δυνατότητες συνομιλίας του Llama 2 δημιουργώντας ένα chatbot χρησιμοποιώντας το Streamlit και το Llama 2.
Κατανόηση του Llama 2: Χαρακτηριστικά και Οφέλη
Πόσο διαφορετικό είναι το Llama 2 από τον προκάτοχό του μεγάλο γλωσσικό μοντέλο, Λάμα 1;
- Μεγαλύτερο μέγεθος μοντέλου: Το μοντέλο είναι μεγαλύτερο, με έως και 70 δισεκατομμύρια παραμέτρους. Αυτό του δίνει τη δυνατότητα να μάθει πιο περίπλοκους συσχετισμούς μεταξύ λέξεων και προτάσεων.
- Βελτιωμένες ικανότητες συνομιλίας: Ενισχυτική μάθηση από την ανθρώπινη ανατροφοδότηση (RLHF) βελτιώνει τις ικανότητες εφαρμογής συνομιλίας. Αυτό επιτρέπει στο μοντέλο να δημιουργεί περιεχόμενο παρόμοιο με τον άνθρωπο ακόμα και σε περίπλοκες αλληλεπιδράσεις.
- Ταχύτερη εξαγωγή συμπερασμάτων: Εισάγει μια νέα μέθοδο που ονομάζεται προσοχή στο ομαδικό ερώτημα για την επιτάχυνση της εξαγωγής συμπερασμάτων. Αυτό έχει ως αποτέλεσμα την ικανότητά του να δημιουργεί πιο χρήσιμες εφαρμογές όπως chatbot και εικονικούς βοηθούς.
- Πιο αποτελεσματικό: Είναι πιο αποδοτική στη μνήμη και στους υπολογιστικούς πόρους από τον προκάτοχό του.
- Άδεια ανοιχτού κώδικα και μη εμπορική: Είναι ανοιχτού κώδικα. Οι ερευνητές και οι προγραμματιστές μπορούν να χρησιμοποιήσουν και να τροποποιήσουν το Llama 2 χωρίς περιορισμούς.
Το Llama 2 ξεπερνά σημαντικά τον προκάτοχό του από όλες τις απόψεις. Αυτά τα χαρακτηριστικά το καθιστούν ένα ισχυρό εργαλείο για πολλές εφαρμογές, όπως chatbots, εικονικούς βοηθούς και κατανόηση φυσικής γλώσσας.
Ρύθμιση ενός ευέλικτου περιβάλλοντος για την ανάπτυξη Chatbot
Για να ξεκινήσετε τη δημιουργία της εφαρμογής σας, πρέπει να δημιουργήσετε ένα περιβάλλον ανάπτυξης. Αυτό γίνεται για να απομονώσετε το έργο σας από τα υπάρχοντα έργα στο μηχάνημά σας.
Πρώτα, ξεκινήστε από δημιουργώντας ένα εικονικό περιβάλλον χρησιμοποιώντας την Pipenv βιβλιοθήκη ως εξής:
pipenv shell
Στη συνέχεια, εγκαταστήστε τις απαραίτητες βιβλιοθήκες για τη δημιουργία του chatbot.
pipenv install streamlit replicate
Streamlit: Είναι ένα πλαίσιο εφαρμογών ιστού ανοιχτού κώδικα που αποδίδει γρήγορα τις εφαρμογές μηχανικής εκμάθησης και επιστήμης δεδομένων.
Αντιγραφή: Είναι μια πλατφόρμα cloud που παρέχει πρόσβαση σε μεγάλα μοντέλα μηχανικής μάθησης ανοιχτού κώδικα για ανάπτυξη.
Αποκτήστε το διακριτικό API του Llama 2 από το Replicate
Για να αποκτήσετε ένα Replicate token key, πρέπει πρώτα να εγγραφείτε σε έναν λογαριασμό Αντιγραφή χρησιμοποιώντας τον λογαριασμό σας στο GitHub.
Το Replicate επιτρέπει τη σύνδεση μόνο μέσω α Λογαριασμός GitHub.
Αφού αποκτήσετε πρόσβαση στον πίνακα εργαλείων, μεταβείτε στο Εξερευνώ κουμπί και αναζητήστε τη συνομιλία Llama 2 για να δείτε το λάμα-2–70β-συνομιλία μοντέλο.
Κάνε κλικ στο λάμα-2–70β-συνομιλία μοντέλο για να προβάλετε τα τελικά σημεία του Llama 2 API. Κάντε κλικ στο API κουμπί στο λάμα-2–70β-συνομιλία γραμμή πλοήγησης μοντέλου. Στη δεξιά πλευρά της σελίδας, κάντε κλικ στο Πύθων κουμπί. Αυτό θα σας παρέχει πρόσβαση στο διακριτικό API για εφαρμογές Python.
Αντιγράψτε το REPLICATE_API_TOKEN και αποθηκεύστε το με ασφάλεια για μελλοντική χρήση.
Ο πλήρης πηγαίος κώδικας είναι διαθέσιμος σε αυτό Αποθετήριο GitHub.
Κατασκευή του Chatbot
Πρώτα, δημιουργήστε ένα αρχείο 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 token και τα τελικά σημεία του μοντέλου στην ακόλουθη μορφή:
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'
Επικολλήστε το διακριτικό Replicate και αποθηκεύστε το αρχείο .env.
Σχεδιασμός της ροής συνομιλίας του Chatbot
Δημιουργήστε μια προτροπή για να ξεκινήσετε το μοντέλο 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."
Ρυθμίστε τη διαμόρφωση σελίδας για το chatbot σας ως εξής:
# 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)
Η συνάρτηση θέτει τις βασικές μεταβλητές όπως chat_dialogue, pre_prompt, llm, 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
Η συνάρτηση εμφανίζει την κεφαλίδα και τις μεταβλητές ρύθμισης του chatbot 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"])
Η συνάρτηση επαναλαμβάνεται μέσω του chat_dialogue που είναι αποθηκευμένο στην κατάσταση περιόδου λειτουργίας, εμφανίζοντας κάθε μήνυμα με τον αντίστοιχο ρόλο (χρήστης ή βοηθός).
Χειριστείτε την εισαγωγή του χρήστη χρησιμοποιώντας την παρακάτω λειτουργία.
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)
Αυτή η συνάρτηση παρουσιάζει το χρήστης με ένα πεδίο εισαγωγής όπου μπορούν να εισάγουν τα μηνύματα και τις ερωτήσεις τους. Το μήνυμα προστίθεται στο chat_dialogue στην κατάσταση συνόδου με το χρήστης ρόλο μόλις ο χρήστης υποβάλει το μήνυμα.
Γράψτε μια συνάρτηση που δημιουργεί απαντήσεις από το μοντέλο 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_replicate_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_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
Η συνάρτηση εκτελεί έναν μηχανισμό αναπήδησης για την αποτροπή συχνών και υπερβολικών ερωτημάτων API από την είσοδο ενός χρήστη.
Στη συνέχεια, εισαγάγετε τη συνάρτηση απόκρισης αναπήδησης στο δικό σας llama_chatbot.py αρχείο ως εξής:
from utils import debounce_replicate_run
Τώρα εκτελέστε την εφαρμογή:
streamlit run llama_chatbot.py
Αναμενόμενη έξοδος:
Η έξοδος δείχνει μια συνομιλία μεταξύ του μοντέλου και ενός ανθρώπου.
Εφαρμογές πραγματικού κόσμου των Streamlit και Llama 2 Chatbots
Μερικά παραδείγματα πραγματικών εφαρμογών Llama 2 περιλαμβάνουν:
- Chatbots: Η χρήση του ισχύει για τη δημιουργία chatbot ανθρώπινης απόκρισης που μπορεί να διεξάγει συνομιλίες σε πραγματικό χρόνο για πολλά θέματα.
- Εικονικοί βοηθοί: Η χρήση του ισχύει για τη δημιουργία εικονικών βοηθών που κατανοούν και ανταποκρίνονται σε ερωτήματα ανθρώπινης γλώσσας.
- Μετάφραση γλώσσας: Η χρήση του ισχύει για εργασίες μετάφρασης γλώσσας.
- Σύνοψη κειμένου: Η χρήση του είναι εφαρμόσιμη στη σύνοψη μεγάλων κειμένων σε σύντομα κείμενα για εύκολη κατανόηση.
- Ερευνα: Μπορείτε να εφαρμόσετε το Llama 2 για ερευνητικούς σκοπούς απαντώντας σε ερωτήσεις σε μια σειρά θεμάτων.
Το μέλλον της τεχνητής νοημοσύνης
Με κλειστά μοντέλα όπως το GPT-3.5 και το GPT-4, είναι πολύ δύσκολο για τους μικρούς παίκτες να δημιουργήσουν οτιδήποτε ουσιαστικό χρησιμοποιώντας LLM, καθώς η πρόσβαση στο API μοντέλου GPT μπορεί να είναι αρκετά δαπανηρή.
Το άνοιγμα προηγμένων μοντέλων μεγάλων γλωσσών όπως το Llama 2 στην κοινότητα προγραμματιστών είναι μόνο η αρχή μιας νέας εποχής τεχνητής νοημοσύνης. Θα οδηγήσει σε πιο δημιουργική και καινοτόμο εφαρμογή των μοντέλων σε εφαρμογές πραγματικού κόσμου, οδηγώντας σε μια επιταχυνόμενη κούρσα προς την επίτευξη της Τεχνητής Σούπερ Νοημοσύνης (ASI).