استفد من Llama 2 LLM مفتوح المصدر لإنشاء روبوت دردشة مخصص باستخدام Python.

Llama 2 هو نموذج لغة كبير مفتوح المصدر (LLM) تم تطويره بواسطة Meta. إنه نموذج لغة كبير مفتوح المصدر، ويمكن القول إنه أفضل من بعض النماذج المغلقة مثل GPT-3.5 وPaLM 2. وهو يتألف من ثلاثة أحجام نماذج نصية تم تدريبها مسبقًا وضبطها بدقة، بما في ذلك نماذج المعلمات 7 مليارات و13 مليارًا و70 مليارًا.

سوف تستكشف إمكانيات المحادثة في Llama 2 من خلال إنشاء روبوت محادثة باستخدام Streamlit وLlama 2.

فهم اللاما 2: الميزات والفوائد

ما مدى اختلاف Llama 2 عن سابقتها؟ نموذج لغة كبير، اللاما 1؟

  • حجم الموديل الأكبر: النموذج أكبر، مع ما يصل إلى 70 مليار معلمة. وهذا يتيح له معرفة الارتباطات الأكثر تعقيدًا بين الكلمات والجمل.
  • تحسين قدرات المحادثة: التعلم المعزز من ردود الفعل البشرية (RLHF) يعمل على تحسين قدرات تطبيق المحادثة. يسمح هذا للنموذج بإنشاء محتوى يشبه الإنسان حتى في التفاعلات المعقدة.
  • استنتاج أسرع: يقدم طريقة جديدة تسمى الاهتمام بالاستعلام المجمع لتسريع الاستدلال. وينتج عن ذلك قدرته على إنشاء تطبيقات أكثر فائدة مثل برامج الدردشة الآلية والمساعدين الافتراضيين.
  • instagram viewer
  • أكثر فعالية: إنها أكثر كفاءة في استخدام الذاكرة والموارد الحسابية من سابقتها.
  • ترخيص مفتوح المصدر وغير تجاري: إنه مفتوح المصدر. يمكن للباحثين والمطورين استخدام وتعديل Llama 2 دون قيود.

تتفوق Llama 2 بشكل كبير على سابقتها من جميع النواحي. هذه الخصائص تجعلها أداة فعالة للعديد من التطبيقات، مثل برامج الدردشة الآلية والمساعدين الافتراضيين وفهم اللغة الطبيعية.

إعداد بيئة مبسطة لتطوير Chatbot

للبدء في بناء التطبيق الخاص بك، عليك إعداد بيئة التطوير. وذلك لعزل مشروعك عن المشاريع الموجودة على جهازك.

أولاً، ابدأ خلق بيئة افتراضية باستخدام بيبينف المكتبة على النحو التالي:

pipenv shell

بعد ذلك، قم بتثبيت المكتبات اللازمة لإنشاء برنامج الدردشة الآلي.

pipenv install streamlit replicate

ستريمليت: إنه إطار عمل لتطبيق ويب مفتوح المصدر يعرض تطبيقات التعلم الآلي وعلوم البيانات بسرعة.

استنساخ: إنها منصة سحابية توفر الوصول إلى نماذج كبيرة مفتوحة المصدر للتعلم الآلي للنشر.

احصل على رمز Llama 2 API المميز من Replicate

للحصول على مفتاح الرمز المميز المتماثل، يجب عليك أولاً تسجيل حساب على استنساخ باستخدام حساب جيثب الخاص بك.

يسمح النسخ المتماثل فقط بتسجيل الدخول من خلال ملف حساب جيثب.

بعد الدخول إلى لوحة التحكم، انتقل إلى يستكشف زر وابحث عن دردشة Llama 2 لرؤية اللاما-2–70ب-دردشة نموذج.

اضغط على اللاما-2–70ب-دردشة نموذج لعرض نقاط نهاية Llama 2 API. انقر على واجهة برمجة التطبيقات زر على اللاما-2–70ب-دردشة شريط التنقل الخاص بالنموذج. على الجانب الأيمن من الصفحة، انقر على بايثون زر. سيوفر لك هذا إمكانية الوصول إلى رمز API المميز لتطبيقات Python.

انسخ ال REPLICATE_API_TOKEN وتخزينها آمنة للاستخدام في المستقبل.

كود المصدر الكامل متاح في هذا مستودع جيثب.

بناء الشات بوت

أولاً، قم بإنشاء ملف بايثون يسمى 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.

تصميم تدفق المحادثة في 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

تعرض الوظيفة الرأس ومتغيرات الإعداد الخاصة بـ Llama 2 chatbot لإجراء التعديلات.

اكتب الوظيفة التي تعرض سجل الدردشة في منطقة المحتوى الرئيسية لتطبيق 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_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 ما يلي:

  • روبوتات الدردشة: ينطبق استخدامه على الخلق روبوتات الدردشة للاستجابة البشرية يمكنها إجراء محادثات في الوقت الفعلي حول عدة مواضيع.
  • المساعدين الظاهريين: ينطبق استخدامه على إنشاء مساعدين افتراضيين يفهمون استفسارات اللغة البشرية ويستجيبون لها.
  • ترجمة اللغة: ينطبق استخدامه على مهام ترجمة اللغة.
  • تلخيص النص: ينطبق استخدامه في تلخيص النصوص الكبيرة إلى نصوص قصيرة لسهولة الفهم.
  • بحث: يمكنك تطبيق Llama 2 لأغراض البحث من خلال الإجابة على الأسئلة عبر مجموعة من المواضيع.

مستقبل الذكاء الاصطناعي

مع النماذج المغلقة مثل GPT-3.5 وGPT-4، من الصعب جدًا على اللاعبين الصغار بناء أي شيء ذو أهمية باستخدام LLMs نظرًا لأن الوصول إلى واجهة برمجة تطبيقات نموذج GPT قد يكون مكلفًا للغاية.

يعد فتح نماذج اللغات الكبيرة المتقدمة مثل Llama 2 لمجتمع المطورين مجرد بداية لعصر جديد من الذكاء الاصطناعي. وسوف يؤدي ذلك إلى تنفيذ أكثر إبداعًا وابتكارًا للنماذج في تطبيقات العالم الحقيقي، مما يؤدي إلى سباق متسارع نحو تحقيق الذكاء الاصطناعي الفائق (ASI).