اگر اهل فن آوری هستید و در رسانه های اجتماعی فعال هستید، به احتمال زیاد در مورد ChatGPT، مدل زبان محبوب OpenAI شنیده اید که می تواند مکالمه ای روان داشته باشد به گونه ای که گاها از یک انسان قابل تشخیص نیست.
OpenAI یک وب سایت تعاملی ارائه می دهد که در آن می توانید با ChatGPT در https چت کنید:
قبل از شروع یک کلید OpenAI API در اینجا درخواست کنید.
با پیروی از بهترین روشهای پایتون، به عنوان اولین گام برای ایجاد ربات چت، یک دایرکتوری جداگانه برای پروژه ایجاد میکنید. سپس بسته های پایتون را که برای چت بات مورد نیاز است نصب کنید.
اگر از سیستم یونیکس یا macOS استفاده میکنید، یک ترمینال باز کنید و دستورات زیر را برای انجام کارهایی که در بالا توضیح داده شد ، وارد کنید:
mkdir python-chatgpt
cd python-chatgpt
python3 -m venv venv
source venv/bin/activate
pip install openai python-dotenv
برای ویندوز :
md python-chatgpt
cd python-chatgpt
python -m venv venv
venv\Scripts\activate
pip install openai python-dotenv
آخرین دستور از pip
، نصب کننده بسته پایتون، برای نصب دو بسته ای که قرار است در این پروژه استفاده کنیم، استفاده می کند که عبارتند از:
کتابخانه کلاینت OpenAI Python، برای ارسال درخواست به موتور OpenAI ChatGPT.
بسته python-dotenv، برای خواندن یک فایل پیکربندی.
پیکربندی
همانطور که در بالا ذکر شد، این پروژه به یک کلید API از OpenAI نیاز دارد. برنامه پایتون باید به این کلید دسترسی داشته باشد، بنابراین یک فایل env. ایجاد کنید و آن را در دایرکتوری پروژه ذخیره کنید.
یک فایل env. در دایرکتوری پروژه خود ایجاد کنید (به نقطه اصلی توجه کنید) و پیکربندی زیر را در فایل قرار دهید، و your-openai-api-key-here
را با کلید API خود جایگزین کنید:
OPENAI_KEY=your-openai-api-key-here
در قسمت بعدی نحوه کار با این فایل را یاد خواهید گرفت.
توجه داشته باشید که اگر قصد دارید پروژه خود را open sourse کنید،مطمئن شوید که این فایل حذف شده است، زیرا نمی خواهید به طور تصادفی کلید OpenAI خود را به اشتراک بگذارید.
استفاده از ChatGPT در پایتون
در این بخش می خواهید کد پشتیبانی را ایجاد کنید که با موتور ChatGPT کار می کند. کد در فایلی به نام chatgpt.py ذخیره می شود. در زیر می توانید محتویات این فایل را مشاهده کنید:
import os
from dotenv import load_dotenv
import openai
load_dotenv()
openai.api_key = os.environ.get('OPENAI_KEY')
completion = openai.ChatCompletion()
def askgpt(question, chat_log=None):
if chat_log is None:
chat_log = [{
'role': 'system',
'content': 'You are a helpful, upbeat and funny assistant.',
}]
chat_log.append({'role': 'user', 'content': question})
response = completion.create(model='gpt-3.5-turbo', messages=chat_log)
answer = response.choices[0]['message']['content']
chat_log.append({'role': 'assistant', 'content': answer})
return answer, chat_log
تابع ()load_dotenv
داده های ذخیره شده در فایل env. را به عنوان environment variables وارد می کند، که در این مورد برای خواندن کلید OpenAI که قبلا در این فایل ذخیره کرده بودید انجام می شود. توجه داشته باشید که چگونه از متغیر OPENAI_KEY در خط زیر برای مقداردهی اولیه OpenAI با کلید استفاده می شود. متغیر completion
، کلاینت واقعی را نگه می دارد که به موتور ChatGPT متصل می شود. این شیئی است که با سرویس OpenAI تعامل خواهد داشت.
تابع ()askgpt
جایی است که همه جادوها اتفاق می افتد. این تابع سؤال یا درخواست را از کاربر به عنوان اولین آرگومان می گیرد و به دنبال آن یک گزارش چت اختیاری قرار می گیرد. اگر گزارش چت ارائه نشده باشد، تابع آن را با یک عنصر مقداردهی اولیه می کند.
گزارش چت شامل تمام تبادلات بین کاربر و ChatGPT است. هنگامی که یک مکالمه شروع می شود، گزارش چت تنها با یک ورودی مقدار دهی اولیه می شود که هدف آن آماده سازی موتور چت و تنظیم آهنگ برای آن است.
به هر پیام در گزارش چت یک نقش اختصاص داده شده است. سه نقش موجود عبارتند از:
system
: فقط در اولین اعلان استفاده می شود تا به موتور چت برخی دستورالعمل ها در مورد شخصیت آن و نحوه پاسخگویی و تعامل با کاربر ارائه شود.user
: سؤالات یا درخواست هایی که کاربر وارد می کند.assistant
: پاسخهایی که موتور ChatGPT برای سؤالات قبلی برگردانده است.
پیام اولیه سیستم را می توان برای ایجاد سبک های مختلف چت ربات تغییر داد. من توصیه میکنم که اعلانهای مختلف سیستم را امتحان کنید تا ببینید پاسخها چگونه تغییر میکنند.
این تابع سوال کاربر را با نقش کاربر به لیست chat_log
اضافه می کند و سپس لیست را به تابع ()completion.create
می فرستد که پاسخ موتور چت را برمی گرداند. آرگومان مدل که همراه با گزارش چت ارسال می شود برای تعیین مدل زبانی استفاده می شود. مدل gpt-3.5-turbo
برای کار با ChatGPT در زمانی که من این مطلب را می نویسم طراحی شده است، اما مطمئن شوید که اسناد ChatGPT API را بررسی کنید زیرا ممکن است تا زمانی که این مطلب را می خوانید، این مدل با مدل جدیدتر جایگزین شده باشد.
پاسخ از ChatGPT یک شی است که دارای یک ویژگی choise
است، که لیستی از پاسخ های ممکن است. در این زمان، این لیست همیشه با یک پاسخ باز می گردد. عنصر message
در این پاسخ دارای متن پاسخ در عنصر فرعی content
است. قبل از پایان، تابع متن بازگردانده شده توسط ChaptGPT را از اشیاء پاسخ استخراج کرده و با استفاده از نقش assistant
به گزارش چت اضافه می کند. سپس هم پاسخ و هم گزارش چت به روز شده را برمی گرداند.
برای آزمایش تابع ()askgpt
یک پوسته پایتون راه اندازی کنید:
>>> from chatgpt import askgpt
>>> answer, log = askgpt('Why did the chicken cross the road?')
>>> print(answer)
To get to the other side! Classic joke, but it still makes me chuckle every time. Do you have a favorite joke?
>>> answer, log = askgpt('Knock, knock.', log)
>>> print(answer)
Who's there?
>>> answer, log = askgpt('Goat.', log)
>>> print(answer)
Goat who?
>>> answer, log = askgpt('Goat to the door and find out!', log)
>>> print(answer)
Haha, that's a good one! You got me with that punchline. Do you know any more knock-knock jokes?
عالیه، درسته؟ توجه داشته باشید که چگونه با ارسال گزارش چت که از سوال دوم شروع میشود، موتور زمینه بحث را میداند و میتواند موضوع گفتگو را در چندین پیام حفظ کند، درست مانند یک انسان.
توجه داشته باشید که ChatGPT گاهی اوقات ممکن است خیلی شلوغ باشد و ممکن است پاسخ های خطا دریافت کنید. در این صورت، کمی صبر کنید و دوباره امتحان کنید.
نتیجه
این یک پروژه کوچک خوب بود، فکر نمی کنید؟ اکنون نوبت شماست که خلاق باشید و تابع ()askgpt
را که در بالا نشان دادم در پروژه پایتون خود بگنجانید.
دوست دارم ببینم با پایتون و ChatGPT چه می سازید!