תוכן העניינים[להתחבא][הופעה]
LangChain הוא כלי חדשני וחזק שפותח כדי לרתום את הכוח של מודלים של שפה גדולה (LLMs).
LLMs אלה הם בעלי יכולות יוצאות דופן ויכולים להתמודד ביעילות עם מגוון רחב של משימות. עם זאת, חשוב לציין שהכוח שלהם טמון באופי הכללי שלהם ולא במומחיות מעמיקה בתחום. הפופולריות שלו גדלה במהירות מאז הצגת GPT-4.
בעוד ש-LLMs מצטיינים בטיפול במשימות שונות, הם עשויים להתמודד עם מגבלות בכל הנוגע למתן תשובות ספציפיות או התמודדות עם משימות הדורשות ידע מעמיק בתחום. שקול, למשל, שימוש ב-LLM כדי לענות על שאלות או לבצע משימות בתחומים מיוחדים כמו רפואה או משפטים.
בעוד שה-LLM בהחלט יכול להגיב לפניות כלליות על תחומים אלה, הוא עשוי להתקשות להציע תשובות מפורטות יותר או מגוונות יותר המחייבות ידע או מומחיות מיוחדים.
הסיבה לכך היא ש- LLMs מאומנים על כמויות עצומות של נתוני טקסט ממקורות שונים, מה שמאפשר להם ללמוד דפוסים, להבין את ההקשר וליצור תגובות קוהרנטיות. עם זאת, הכשרתם אינה כרוכה בדרך כלל ברכישת ידע ספציפי לתחום או רכישת ידע מיוחד באותה מידה כמו מומחים אנושיים בתחומים אלה.
לכן, בעוד LangChain, בשילוב עם LLMs, יכול להיות כלי רב ערך עבור מגוון רחב של משימות, חשוב להכיר בכך שמומחיות עמוקה בתחום עדיין עשויה להיות נחוצה במצבים מסוימים. מומחים אנושיים בעלי ידע מיוחד יכולים לספק את העומק הנחוץ, ההבנה הניואנסית והתובנות הספציפיות להקשר, שעשויות להיות מעבר ליכולות של לימודי LLM בלבד.
אנו ממליצים לעיין במסמכים של LangChain או GitHub מאגר להבנה מעמיקה יותר של מקרי השימוש הטיפוסיים שלו. מומלץ מאוד לקבל תמונה רחבה יותר של החבילה הזו.
איך זה עובד?
כדי להבין את המטרה והעבודה של LangChain, בואו נשקול דוגמה מעשית. אנו מודעים לכך של-GPT-4 יש ידע כללי מרשים והוא יכול לספק תשובות מהימנות למגוון רחב של שאלות.
עם זאת, מה אם נרצה מידע ספציפי מהנתונים שלנו, כגון מסמך אישי, ספר, קובץ PDF או מסד נתונים קנייני?
LangChain מאפשר לנו לחבר א מודל שפה גדול כמו GPT-4 למקורות הנתונים שלנו. זה מעבר להדבקה פשוטה של קטע טקסט בממשק צ'אט. במקום זאת, אנו יכולים להפנות למסד נתונים שלם המלא בנתונים שלנו.
לאחר שנשיג את המידע הרצוי, LangChain יכולה לסייע לנו בביצוע פעולות ספציפיות. לדוגמה, אנו יכולים להורות לו לשלוח דוא"ל המכיל פרטים מסוימים.
כדי להשיג זאת, אנו עוקבים אחר גישת צינור באמצעות LangChain. ראשית, אנחנו לוקחים את המסמך שאנחנו רוצים מודל שפה להתייחס ולחלק אותו לנתחים קטנים יותר. נתחים אלה מאוחסנים לאחר מכן כהטבעות, שהם ייצוגים וקטוריים של הטקסט, במסד נתונים וקטור.
עם הגדרה זו, אנו יכולים לבנות יישומי מודל שפה העוקבים אחר צינור סטנדרטי: משתמש שואל שאלה ראשונית, שנשלחת לאחר מכן למודל השפה. הייצוג הווקטורי של השאלה משמש לביצוע חיפוש דמיון במסד הנתונים של וקטור, לאחזר את נתחי המידע הרלוונטיים.
נתחים אלה מוזנים לאחר מכן למודל השפה, ומאפשרים לו לספק תשובה או לבצע את הפעולה הרצויה.
LangChain מאפשרת את הפיתוח של יישומים שמודעים לנתונים, מכיוון שאנו יכולים להתייחס לנתונים שלנו בחנות וקטורית, ואותנטיים, מכיוון שהם יכולים לבצע פעולות מעבר למענה על שאלות. ט
שלו פותח מספר רב של מקרי שימוש מעשיים, במיוחד בסיוע אישי, שבו מודל שפה גדול יכול להתמודד עם משימות כמו הזמנת טיסות, העברת כסף או סיוע בנושאי מס.
בנוסף, ההשלכות על לימוד ולימוד נושאים חדשים הן משמעותיות, שכן מודל שפה יכול להתייחס לסילבוס שלם ולזרז את תהליך הלמידה. גם קידוד, ניתוח נתונים ומדעי הנתונים צפויים להיות מושפעים מאוד מההתקדמות הללו.
אחד הסיכויים המלהיבים ביותר הוא חיבור מודלים של שפות גדולות לנתונים קיימים של החברה, כגון מידע על לקוחות או נתוני שיווק. שילוב זה עם ממשקי API מתקדמים כמו ה-API של Meta או ה-API של Google מבטיח התקדמות אקספוננציאלית בניתוח נתונים ובמדעי הנתונים.
כיצד לבנות דף אינטרנט (הדגמה)
נכון לעכשיו, Langchain זמין כחבילות Python ו-JavaScript.
אנו יכולים ליצור אפליקציית אינטרנט להדגמה תוך שימוש ב-Streamlit, LangChain ומודל OpenAI GPT-3 כדי ליישם את קונספט LangChain.
אבל ראשית, עלינו להתקין כמה תלות, כולל Streamlit, LangChain ו-OpenAI.
מקדים
זרימה: חבילת Python פופולרית ליצירת יישומי אינטרנט הקשורים למדעי נתונים
OpenAI: יש צורך בגישה למודל השפה GPT-3 של OpenAI.
כדי להתקין את התלות הללו, השתמש בפקודות הבאות ב-cmd:
pip install streamlit
pip install langchain
pip install openai
חבילות יבוא
אנו מתחילים בייבוא החבילות הנדרשות, כגון OpenAI, LangChain ו-Streamlit. שרשראות מודל השפה שלנו מוגדרות ומבוצעות באמצעות שלוש מחלקות מ-LangChain: LLMChain, SimpleSequentialChain ו-PromptTemplate.
import streamlit as st
from langchain.chains import LLMChain, SimpleSequentialChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
הגדרות בסיסיות
הבסיס המבני של הפרויקט שלנו הוקם אז באמצעות תחביר Streamlit. נתנו לאפליקציה את הכותרת "What's TRUE: Using Simple Sequential Chain" וכללנו קישור סימון למאגר GitHub ששימש כהשראה של האפליקציה.
import streamlit as st
from langchain.chains import LLMChain, SimpleSequentialChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
ווידג'טים קדמיים
הגדרנו את האפליקציה עם מעט מידע רלוונטי, תוך שימוש בתחביר פשוט של Streamlit:
# If an API key has been provided, create an OpenAI language model instance
if API:
llm = OpenAI(temperature=0.7, openai_api_key=API)
else:
# If an API key hasn't been provided, display a warning message
st.warning("Enter your OPENAI API-KEY. Get your OpenAI API key from [here](https://platform.openai.com/account/api-keys).\n")
כדי להוסיף ווידג'טים חזיתיים
יתר על כן, עלינו לספק ווידג'ט קלט כדי לאפשר למשתמשים שלנו להזין כל שאלה.
# Add a text input box for the user's question
user_question = st.text_input(
"Enter Your Question : ",
placeholder = "Cyanobacteria can perform photosynthetsis , are they considered as plants?",
)
הכל בוצע! השרשראות פועלות!
אנו מעסיקים שרשראות פעולות שונות יחד עם SimpleSequentialChain
כדי להגיב לשאילתה של המשתמש. השרשראות מתבצעות ברצף הבא כאשר המשתמש בוחר את "Tell me about it"
כפתור:
if st.button("Tell me about it", type="primary"):
# Chain 1: Generating a rephrased version of the user's question
template = """{question}\n\n"""
prompt_template = PromptTemplate(input_variables=["question"], template=template)
question_chain = LLMChain(llm=llm, prompt=prompt_template)
# Chain 2: Generating assumptions made in the statement
template = """Here is a statement:
{statement}
Make a bullet point list of the assumptions you made when producing the above statement.\n\n"""
prompt_template = PromptTemplate(input_variables=["statement"], template=template)
assumptions_chain = LLMChain(llm=llm, prompt=prompt_template)
assumptions_chain_seq = SimpleSequentialChain(
chains=[question_chain, assumptions_chain], verbose=True
)
# Chain 3: Fact checking the assumptions
template = """Here is a bullet point list of assertions:
{assertions}
For each assertion, determine whether it is true or false. If it is false, explain why.\n\n"""
prompt_template = PromptTemplate(input_variables=["assertions"], template=template)
fact_checker_chain = LLMChain(llm=llm, prompt=prompt_template)
fact_checker_chain_seq = SimpleSequentialChain(
chains=[question_chain, assumptions_chain, fact_checker_chain], verbose=True
)
# Final Chain: Generating the final answer to the user's question based on the facts and assumptions
template = """In light of the above facts, how would you answer the question '{}'""".format(
user_question
)
template = """{facts}\n""" + template
prompt_template = PromptTemplate(input_variables=["facts"], template=template)
answer_chain = LLMChain(llm=llm, prompt=prompt_template)
overall_chain = SimpleSequentialChain(
chains=[question_chain, assumptions_chain, fact_checker_chain, answer_chain],
verbose=True,
)
# Running all the chains on the user's question and displaying the final answer
st.success(overall_chain.run(user_question))
question_chain
: שהוא השלב הראשון בצנרת שלנו, מקבל את השאלה של המשתמש כקלט ופלט. השאילתה של המשתמש משמשת כתבנית של השרשרת.- בהתבסס על הצהרה המקושרת לשאלה, ה
assumptions_chain
יוצר רשימת תבליט של הנחות באמצעות הפלט מה-question_chain
כקלט. הLLMChain
וOpenAI
מודל מ-LangChain שימש לבניית ההצהרה. על המשתמש מוטלת המשימה ליצור רשימה של ההנחות שנעשו על מנת להפיק את ההצהרה באמצעות התבנית עבור שרשרת זו. - מבוסס על התפוקות מה-
question_chain
וassumptions_chain
, הfact_checker_chain
יוצר רשימה של קביעות בצורה של נקודות תבליט. התביעות מופקות באמצעותOpenAI
דגם וLLMChain
מ-LangChain. על המשתמש מוטלת המשימה לקבוע אם כל טענה מדויקת או שגויה ולספק הצדקה לאלו שכן. - השמיים
answer_chain
משתמש בפלטים מה-question_chain
,assumptions_chain
, וfact_checker_chain
כקלט ליצירת תשובה לשאלת המשתמש תוך שימוש בנתונים שהופקו על ידי הרשתות הקודמות. התבנית עבור שרשרת זו מבקשת מהמשתמש להגיב לשאילתה הראשונה באמצעות העובדות שנוצרו. - על מנת לתת את המענה האולטימטיבי לפניית המשתמש בהתבסס על המידע שהפיקו הרשתות הקודמות, אנו משלבים את הרשתות הללו בשרשרת הכוללת. לאחר השלמת השרשראות, אנו משתמשים
st.success()
כדי להראות למשתמש את הפתרון.
סיכום
אנחנו יכולים פשוט לשרשר יחד פעולות שונות של מודל שפה כדי ליצור צינורות מסובכים יותר על ידי שימוש ב- SimpleSequentialChain
מודול של LangChain. עבור מגוון רחב של יישומי NLP, כולל צ'אטבוטים, מערכות שאלות ותשובות וכלי תרגום לשפות, זה עשוי להיות מועיל למדי.
הזוהר של LangChain נמצא ביכולת ההפשטה שלה, מה שמאפשר למשתמש להתרכז בנושא הנוכחי ולא בפרטים הספציפיים של דוגמנות שפה.
LangChain הופכת את תהליך יצירת מודלים של שפה מתוחכמים לידידותי יותר על ידי הצעת מודלים מאומנים מראש ומבחר תבניות.
זה נותן לך את האפשרות לכוונן את דגמי השפה באמצעות הנתונים שלהם, מה שמקל על התאמה אישית של דגמי השפה. זה מאפשר פיתוח של מודלים מדויקים יותר, ספציפיים לתחום, אשר, עבור עבודה נתונה, עולים על המודלים המאומנים.
השמיים SimpleSequentialChain
מודול ותכונות אחרות של LangChain הופכות אותו לכלי יעיל לפיתוח ופריסה מהירה של מערכות NLP מתוחכמות.
השאירו תגובה