یک چت ربات اس ام اس بسکتبال با الگوهای درخواست LangChain در پایتون بسازید
همانطور که با OpenAI API (و مدلهای DALL·E و تنظیم دقیق) بازی کردهام و بیشتر وارد ML شدهام، توسعهدهندگانی که میبینم (و همچنین من همکار فوق العاده کریگ دنیس کسی که در مورد این آموزش به من توصیه کرد) مدام به من می گویند که از LangChain استفاده کنم، یک چارچوب قدرتمند و انعطاف پذیر برای توسعه برنامه های کاربردی با مدل های زبان.
برای یادگیری نحوه ساخت یک چت ربات پیامکی با استفاده از الگوهای اعلانات LangChain، OpenAI، پیامرسانی برنامهپذیر Twilio و Python به ادامه مطلب بروید.
مدل های زبان بزرگ
مدلهای زبان بزرگ بر روی مقادیر زیادی از دادههای متنی آموزش داده میشوند (به عنوان مثال در مورد ChatGPT، کل اینترنت تا سال 2021—بنابراین میتوانید زمینه یا دادههای بیشتری را که مدل از دست داده است با مهندسی سریع و الگوهای اعلان ارائه دهید – در آینده بیشتر در مورد آنها بیشتر خواهد شد). پاسخهایی شبیه انسان به گفتگو یا سایر ورودیهای زبان طبیعی ایجاد میکند.
برای به دست آوردن این پاسخ های زبان طبیعی، LLM ها از مدل های یادگیری عمیق (DL) استفاده می کنند که از شبکه های عصبی چند لایه برای پردازش، تجزیه و تحلیل و پیش بینی با داده های پیچیده استفاده می کنند.
LangChain
LangChain اواخر سال گذشته منتشر شد و در حال حاضر بیش از 43000 ستاره در GitHub و یک جامعه پر رونق از مشارکت کنندگان دارد.
این چیزهای زیادی است، اما در نهایت در هسته آن یک چارچوب متن باز است که توسعه برنامه ها را با استفاده از مدل های زبان بزرگ (LLMs)، مانند OpenAI یا Hugging Face ساده می کند. توسعهدهندگان میتوانند از آن برای چتباتها، پاسخگویی به سؤالات (GQA)، خلاصهسازی و موارد دیگر استفاده کنند.
با LangChain، توسعهدهندگان میتوانند اجزای مختلف LLM را به هم متصل کنند تا موارد استفاده پیشرفتهتری را در اطراف LLM ایجاد کنند. زنجیره ها می توانند از چندین جزء از چندین ماژول تشکیل شده باشند:
- Prompt Templates: الگوهای Prompt الگوهایی برای انواع مختلف درخواست ها هستند. مانند الگوهای سبک «chatbot»، پاسخگویی به سؤالات ELI5 و غیره
- LLM: مدل های زبان بزرگ مانند GPT-3، Hugging Face، BLOOM و غیره
- نمایندگان: نمایندگان از LLM برای تصمیم گیری در مورد اقداماتی که باید انجام شود استفاده می کنند. می توان از ابزارهایی مانند جستجوی وب یا ماشین حساب استفاده کرد و همه در یک حلقه منطقی از عملیات بسته بندی می شوند.
- حافظه: حافظه کوتاه مدت، حافظه بلند مدت. LangChain قدرت دستورات را تشخیص می دهد و مجموعه کاملی از اشیاء را برای آنها ساخته است. همچنین یک بسته بندی در اطراف LLM های مختلف ارائه می دهد تا بتوانید به راحتی مدل ها را تغییر دهید و آنها را با الگوهای مختلف جایگزین کنید. مدل چت می تواند متفاوت باشد، اما اجرا و فراخوانی آن یکسان است – یک مفهوم بسیار شبیه جاوا! ## LangChain Twilio Tool اخیراً، LangChain با ابزار Twilio عرضه شد تا نمایندگان LangChain شما بتوانند پیامهای متنی ارسال کنند. برای مثال، LLM شما میتواند ورودی را به زبان طبیعی درک کند، اما Agents میتواند به شما اجازه دهد کارهای مختلفی مانند فراخوانی یک API را انجام دهید.
شما به اعتبارنامه Twilio خود و نصب آن با آن نیاز دارید pip install twilio
. کد این ابزار چیزی شبیه به این خواهد بود:
from langchain.utilities.twilio import TwilioAPIWrapper
twilio = TwilioAPIWrapper(
account_sid="YOUR-ACCOUNT-SID",
auth_token="YOUR-TWILIO-AUTH-TOKEN",
from_number="YOUR-TWILIO-NUMBER,"
)
twilio.run("hello world", "NUMBER-TO-TEXT")
با این حال، این آموزش به شما نشان می دهد که چگونه از الگوهای درخواست LangChain با Twilio برای ساخت یک ربات گفتگوی پیامکی استفاده کنید.
الگوهای درخواست LangChain
“Prompt” به ورودی مدل اشاره دارد و معمولاً کدگذاری سختی ندارند، اما اغلب از چندین مؤلفه ساخته میشوند. یک الگوی Prompt به ساخت این ورودی کمک میکند. LangChain چندین کلاس و توابع را فراهم میکند تا ساخت و کار با اعلانها را آسان کند.
درخواست هایی که به LLM ها وارد می شوند اغلب به روش های مختلفی ساختار می شوند تا بتوانیم نتایج متفاوتی دریافت کنیم. برای پرسش و پاسخ، میتوانید سؤال کاربر را بگیرید و آن را برای سبکهای پرسش و پاسخ مختلف، مانند پرسش و پاسخ معمولی، فهرستی از پاسخها، یا حتی خلاصهای از مشکلات مربوط به سؤال داده شده، قالببندی کنید. میتوانید در اینجا در مستندات LangChain درباره دستورات بیشتر بخوانید.
الگوهای اعلان یک راه تکرارپذیر برای ایجاد یک اعلان ارائه می دهند. مانند یک قالب HTML قابل استفاده مجدد، می توانید آن را به اشتراک بگذارید، آزمایش کنید، استفاده مجدد کنید و تکرار کنید و به روز می شود. وقتی یک الگوی درخواستی را بهروزرسانی میکنید، برای افراد دیگری که از آن استفاده میکنند یا کل مجموعه برنامههایی که میتوانند از آن استفاده کنند، بهروزرسانی میشود.
الگوهای درخواست حاوی یک رشته متنی (با نام مستعار “الگو”) هستند که می تواند مجموعه ای از پارامترها را از کاربر دریافت کند و یک اعلان ایجاد کند.
وارد کردن و مقداردهی اولیه یک LangChain PromptTemplate
کلاس به این صورت خواهد بود:
from langchain import PromptTemplate
template = """Question: {question}
Answer: """
prompt = PromptTemplate(
template=template,
input_variables=['question']
)
# user question
question = "Which NBA team won the finals in 1996?"
از آنجایی که OpenAI LLM پس از سپتامبر 2021 فاقد داده است، مدل های آن نمی توانند بدون زمینه اضافی به هر چیزی که پس از آن رخ داده است پاسخ دهند. الگوهای سریع به ارائه زمینه اضافی کمک می کنند، اما با تنظیم دقیق تفاوت دارند – تنظیم دقیق مانند هدایت مدل با داده های جدید برای به دست آوردن خروجی مشخص است، اما مهندسی سریع با الگوهای اعلان داده های خاص مدل را برای کمک به خروجی مورد نظر در اختیار مدل قرار می دهد.
بیایید از این الگو برای ساخت ربات چت استفاده کنیم.
پیش نیازها
- یک حساب Twilio – برای یک حساب رایگان در اینجا ثبت نام کنید
- شماره تلفن Twilio با قابلیت پیامک – نحوه خرید شماره تلفن Twilio را از اینجا بیاموزید
- حساب OpenAI – در اینجا یک حساب OpenAI ایجاد کنید
- پایتون نصب شد – پایتون را از اینجا دانلود کنید
ngrok، یک ابزار مفید برای اتصال نسخه توسعه برنامه پایتون ما که روی دستگاه شما اجرا می شود به یک URL عمومی که Twilio می تواند به آن دسترسی داشته باشد.
⚠️ ngrok برای نسخه توسعه برنامه مورد نیاز است زیرا رایانه شما احتمالاً پشت یک روتر یا فایروال است، بنابراین مستقیماً در اینترنت قابل دسترسی نیست. همچنین می توانید همانطور که در این مقاله نشان داده شده است، ngrok را خودکار کنید.
پیکربندی
از آنجایی که تعدادی بسته پایتون را برای این پروژه نصب خواهید کرد، باید یک فهرست پروژه جدید و یک محیط مجازی ایجاد کنید.
اگر از سیستم یونیکس یا macOS استفاده می کنید، یک ترمینال را باز کنید و دستورات زیر را وارد کنید:
mkdir lc-sms
cd lc-sms
python3 -m venv venv
source venv/bin/activate
!pip install langchain
!pip install openai
pip install Flask
pip install twilio
pip install load_dotenv
اگر این آموزش را در ویندوز دنبال می کنید، دستورات زیر را در پنجره خط فرمان وارد کنید:
mkdir lc-sms
cd lc-sms
python -m venv venv
venv\Scripts\activate
pip install langchain
pip install openai
pip install Flask
pip install twilio
pip install load_dotenv
آخرین دستور استفاده می کند pip
، نصب کننده بسته Python، برای نصب سه بسته ای که قرار است در این پروژه استفاده کنید، که عبارتند از:
ایجاد یک env در دایرکتوری ریشه پروژه خود فایل کنید و خط متن زیر را وارد کنید و حتما جایگزین کنید <OPENAI_API_KEY>
با کلید واقعی شما:
OPENAI_API_KEY= <YOUR-OPENAI-KEY>
مطمئن شوید که OPENAI_API_KEY ایمن است و خود را فاش نمیکنید env فایل در یک مکان عمومی مانند GitHub.
اکنون، برنامه Flask شما باید از طریق وب قابل مشاهده باشد، بنابراین Twilio می تواند درخواست ها را به آن ارسال کند. ngrok به شما امکان می دهد این کار را انجام دهید: با نصب ngrok، اجرا کنید ngrok http 5000
در یک تب ترمینال جدید در دایرکتوری که کد شما در آن است.
باید صفحه بالا را ببینید. آن ngrok را بگیر URL بازارسال برای پیکربندی شماره Twilio: شماره Twilio خود را در زیر انتخاب کنید اعداد فعال در کنسول Twilio خود، به بخش پیامرسانی بروید و سپس مسیریابی شماره تلفن را با چسباندن URL ngrok در کادر متنی مربوط به زمان تغییر دهید. یک پیام وارد می شود همانطور که در زیر نشان داده شده است:
کلیک صرفه جویی و اکنون شماره تلفن Twilio شما به گونهای پیکربندی شده است که به سرور برنامه وب شما که به صورت محلی روی رایانه شما اجرا میشود، نگاشت شود. حالا بیایید آن برنامه را بسازیم.
تولید متن از طریق LangChain با OpenAI در پایتون از طریق SMS
داخل شما lc-sms
دایرکتوری، یک فایل جدید به نام بسازید app.py.
کد زیر را کپی و در آن پیست کنید app.py برای راه اندازی برنامه پیام کوتاه ChatGPT مانند برای وارد کردن کتابخانه های مورد نیاز.
from flask import Flask, request, redirect
from dotenv import load_dotenv
from twilio.twiml.messaging_response import MessagingResponse
from langchain.llms import OpenAI
from langchain import PromptTemplate
import os
سپس، شی OpenAI LLM را بسازید (که میتواند LLM دیگری باشد – اینجاست که LangChain میتواند استفاده مجدد را آسانتر کند!)، نام مدل و کلید API را از فایل .env به آن ارسال کنید و یک برنامه Flask ایجاد کنید.
load_dotenv()
llm = OpenAI(
model_name="text-davinci-003",
openai_api_key=os.environ.get('OPENAI_API_KEY')
)
app = Flask(__name__)
شروع کنید /پیامک وب هوکی حاوی پاسخ TwiML برای پاسخ به پیامک های ورودی با.
@app.route("/sms", methods=['GET', 'POST'])
def sms_reply():
# Start our TwiML response
resp = MessagingResponse()
کد الگوی زیر را برای کمک به شکلدهی پرسشها و پاسخهای LLM اضافه کنید. در این آموزش، موضوع بسکتبال Warriors است. (بله، من می دانم که فینال NBA 2023 هیت در مقابل ناگتس است. یک دختر می تواند رویاپردازی کند.)
template = """Answer the question based on the context below. If the question cannot be answered using the information provided, answer with "I don't know, but the Warriors are the best team in the NBA".
Context: Steph Curry has won 4 NBA Finals series. His Golden State Warriors defeated the Cleveland Cavaliers three times and the Boston Celtics once.
In 2015 Steph Curry and the Warriors defeated the Cleveland Cavaliers. The Cavs featured LeBron James, Kyrie Irving and not much else!
In 2017 Steph Curry, Kevin Durant and the Warriors defeated the Cavs again. The Cavs still had Lebron and Kyrie.
In 2018 the Warriors, featuring Steph and KD again, defeated the Cavs for the third time in four years. The Cavs still had Kyrie and Lebron.
In 2022 Steph and the Warriors defeated the Boston Celtics for his fourth title. The Celtics featured Jayson Tatum and Jaylen Brown. Steph Curry and the Golden State Warriors lost one NBA Finals series to the Cleveland Cavaliers and one to the Toronto Raptors.
In 2016 Steph, Klay, Draymond and the rest of the Warriors lost to the Cleveland Cavaliers. The Cavs starred LeBron James and Kyrie Irving.
In 2019 the Steph and the Warriors, missing an injured KD, lost to the Toronto Raptors. The Raptors featured Kawhi Leonard in his only season in Canada alongside Kyle Lowry and Pascal Siakham. Steph Curry has only won one NBA Finals MVP up to this point in his career. .
In 2022 Steph Curry averaged 31 points, 6 rebounds and 5 assists per game to win the MVP award in the Warriors 6-game defeat of the Boston Celtics.
In 2015 Andre Iguodala won the MVP in the Warriors defeat of the Cavs.
In both 2017 & 2018 Kevin Durant was Finals MVP in the Warriors victories over the Cavs. Steph Curry's 4-2 NBA Finals record puts him ahead of many NBA greats including Larry Bird (3-2) and LeBron James (4-6). Steph still comes up short of the greatest NBA Finals winners including Bill Russell (11-1) and Michael Jordan (6-0).
Question: {query}
Answer: """
basketball_query_template = PromptTemplate(
input_variables=["query"],
template=template
)
سؤال کاربر را از طریق پیام متنی ورودی دریافت کنید، با ارسال سؤال به الگوی درخواستی و قالب بندی آن، پاسخ را چاپ کنید و سپس آن را به عنوان پیام متنی به Twilio ارسال کنید تا به کاربر ارسال شود.
question = request.form['Body'].lower().strip()
print(llm(
basketball_query_template.format(
query=question
)
))
resp.message(openai(
basketball_query_template.format(
query=question
)
))
return str(resp)
if __name__ == "__main__":
app.run(debug=True)
در یک برگه ترمینال جدید (در حالی که برگه ترمینال دیگر هنوز در حال اجرا است ngrok http 5000
)، اجرا کن python app.py
. اکنون می توانید شماره Twilio خود را پیامک کنید (سؤالاتی در مورد Warriors زیرا ما مدل زمینه Warriors را ارائه کردیم) که از بالا پیکربندی شده است.
کد کامل را می توانید در اینجا در GitHub پیدا کنید.
آینده برای Twilio و LangChain چیست
LangChain را می توان برای چت بات ها (نه فقط با مضمون رزمندگان/بسکتبال)، زنجیره وظایف مختلف، پاسخگویی به سؤالات (GQA)، خلاصه سازی و موارد دیگر استفاده کرد. برای مطالب بیشتر LangChain و Twilio با وبلاگ Twilio همراه باشید و به من اطلاع دهید که با هوش مصنوعی چه چیزی می سازید!