ChatGPT набув шаленої популярності за останній місяць, отримавши мільйон користувачів лише за тиждень. Дивно, але основна модель, GPT-3, дебютувала у 2020 році та була випущена для загального доступу
понад рік тому!Для тих, хто не знає, ChatGPT — це нова мовна модель від OpenAI, яка була доопрацьована з GPT-3 для оптимізації спілкування. Вона має зручний інтерфейс чату, у якому ви можете вказати вхідні дані та отримати відповідь від помічника на основі ШІ. Ви можете знайти його на сайті chat.openai.com.
Хоча ранні версії GPT-3 не були такими просунутими, як поточна серія GPT-3.5, вони все одно приємно вражали. Ці моделі доступні через API та
платформи вебінтерфейсу, який дозволяє налаштовувати певні гіперпараметри конфігурації та пробні запити. GPT-3 отримав значну популярність, але він не наблизився до вірусного розповсюдження ChatGPT.
Що робить ChatGPT таким успішним у порівнянні з GPT-3, так це його доступність як безпосереднього помічника на основі ШІ для звичайної людини, незалежно від її знань у галузі даних, мовних моделей чи ШІ.
У цій статті я розглядаю, як чат-боти, такі як ChatGPT, можуть бути розроблені за допомогою великої мовної моделі, як-от GPT-3.
Ця стаття була написана частково завдяки твіту від
Райлі Гудсайд, у якому зазначено, як можна було б розробити ChatGPT.
Як створити власний підробний ChatGPT за допомогою GPT‑3 (text‑davinci‑003) — де ви можете налаштувати правила відповідно до своїх потреб і отримати доступ до створеного чат-бота через API. pic.twitter.com/9jHrs91VHW
— Райлі Гудсайд
26 грудня 2022 р.
Як і інші моделі серії GPT-3.5, ChatGPT було навчено за допомогою RLHF, але більша частина його ефективності залежить від використання потрібного запиту.
Повний запит чат-бота Скіппі із заголовка статті
Здійснення пошуку за запитом — це процес надання вказівок ШІ щось зробити.
Як ви, напевно, бачили в прикладах ChatGPT в Інтернеті, ви можете надати йому запит зробити будь-що. Типовими прикладами його використання є анотування тексту, написання контенту на основі опису або створення таких речей, як вірші, рецепти та багато іншого.
ChatGPT — це і мовна модель, і інтерфейс користувача. Запит, введений користувачем до інтерфейсу, фактично вставляється в більший запит, який містить увесь діалог між користувачем і ChatGPT. Це дозволяє базовій мовній моделі зрозуміти контекст розмови та відповідати належним чином.
Приклад вставки запиту користувача перед надсиланням його до моделі
Мовна модель доповнює запит, з’ясовуючи, які слова будуть наступними на основі ймовірностей, які вона вивчила під час попередньої підготовки.
GPT-3 здатний "навчатися" з простих вказівок або кількох прикладів у запиті. Останнє називається методом кількох прикладів, або навчанням за контекстом. У запиті вище я створюю фіктивного чат-бота під назвою Skippy і даю йому вказівку надавати відповіді користувачам. GPT-3 підбирає зворотний формат, КОРИСТУВАЧ: {user input}
і СКІППІ: {skippy response}
. GPT-3 розуміє, що Скіппі — це чат-бот, а попередні обміни інформацією — це діалог, тому, коли ми надаємо вхідні дані наступного користувача, Скіппі відреагує.
Попередні обміни інформацією між Скіппі та користувачем додаються до наступного запиту. Щоразу, коли ми надаємо більше вхідних даних користувачів і отримуємо більше результатів від чат-бота, запит розширюється, щоб включити цей новий обмін. Ось як чат-боти, такі як Skippy і ChatGPT, можуть запам'ятовувати попередні введення. Однак, існує обмеження на те, скільки чат-бот GPT-3 може запам’ятати.
Запити можуть стати об'ємними після кількох обмінів, особливо якщо ми використовуємо чат-бота для створення довгих відповідей, як-от дописів у блозі. Запити, надіслані до GPT-3, перетворюються на токени, які є окремими словами або їх частинами. Існує обмеження на
4097 токенів (приблизно 3000 слів)
для комбінованого запиту та згенерованої відповіді для моделей GPT-3, включно з ChatGPT.
Існує багато різних випадків використання запитів чат-бота, які зберігають попередні діалоги. ChatGPT був створений для того, щоб бути універсальним загальним помічником, і, з мого досвіду, він рідко вимагає додаткових дій.
Мати чат-бота, який активно ставить запитання та отримує зворотний зв'язок від користувача, може стати в пригоді. Нижче наведено приклад запиту чат-бота Therapy, який ставитиме запитання та відповідатиме, щоб допомогти користувачеві подумати про свій день.
Запит для чат-бота Therapy
Мішель Хуан використовувала GPT-3, щоб поспілкуватися з молодшою собою. Запит використовує певний контекст, у цьому випадку старі записи щоденника, у поєднанні з форматом чат-бота. GPT-3 здатний імітувати людську особистість на основі цих записів.
я показала чат-боту на основі ШІ записи у щоденнику мого дитинства, щоб я могла вести діалог у реальному часі зі своєю "внутрішньою дитиною"
кілька прикладів нижче:
— Мішель Хуан
27 листопада 2022 р.
Запит із твіту:
Нижче наведено розмову з дорослою Мішель (вік [redacted]) і юною Мішель (14 років).
Юна Мішель вносила такі записи в щоденнику:
[записи в щоденнику тут]
Доросла Мішель: [введіть тут свої запитання]
Автор зазначає, що записи в щоденнику можуть досягати обмеження токенів. У цьому випадку ви можете вибрати кілька записів або спробувати коротко узагальнити декілька записів.
Я розповім про кодування простого чат-бота на базі GPT-3 мовою Python. Включити GPT-3 у програму, яку ви створюєте, неймовірно легко за допомогою OpenAI API. Вам потрібно буде створити обліковий запис на OpenAI та отримати ключ API. Перегляньте їхні документи
тут.Огляд того, що нам потрібно зробити:
Ось запит, який я використаю. Ми можемо використовувати мову Python для заміни
<conversation history>і
<user input>для їхніх фактичних значень.
chatbot_prompt = """
Як для просунутого чат-бота, ваша головна мета — якнайкраще допомагати користувачам. Це може охоплювати відповіді на запитання, надання корисної інформації або виконання завдань на основі вхідних даних користувача. Щоб ефективно допомагати користувачам, важливо бути детальними та ґрунтовними у своїх відповідях. Використовуйте приклади та докази, щоб підтвердити свої думки та обґрунтувати свої рекомендації чи рішення.
<conversation history>
User:
<user input>
Chatbot:"""
Я відстежую як наступні вхідні дані користувача, так і попередній діалог. Новий обмін даними між чат-ботом і користувачем додається до кожного циклу.
import openai
openai.api_key = "YOUR API KEY HERE"
model_engine = "text-davinci-003"
chatbot_prompt = """
Як для просунутого чат-бота, ваша головна мета — якнайкраще допомагати користувачам. Це може охоплювати відповіді на запитання, надання корисної інформації або виконання завдань на основі вхідних даних користувача. Щоб ефективно допомагати користувачам, важливо бути детальними та ґрунтовними у своїх відповідях. Використовуйте приклади та докази, щоб підтвердити свої думки та обґрунтувати свої рекомендації чи рішення.
<conversation history>
User:
<user input>
Chatbot:"""
def get_response(conversation_history, user_input):
prompt = chatbot_prompt.replace("<conversation history>", conversation_history).replace("<user input>", user_input)
# Get the response from GPT-3
response = openai.Completion.create(
engine=model_engine, prompt=prompt, max_tokens=2048, n=1, stop=None, temperature=0.5)
# Extract the response from the response object
response_text = response["choices"][0]["text"]
chatbot_response = response_text.strip()
return chatbot_response
def main():
conversation_history = ""
while True:
user_input = input(">")
if user_input == "exit":
break
chatbot_response = get_response(conversation_history, user_input)
print(f"Chatbot: {chatbot_response}")
conversation_history += f"User: {user_input}\nChatbot: {chatbot_response}\n"
main()
Ось посилання
на повний код простого чат-бота.
Тепер усе, що залишилося, це створити гарний інтерфейс, із яким користувачі зможуть взаємодіяти!
Автор: jayo78.
OpenAI. (2022). ChatGPT: Optimizing Language Models for Dialogue. https://openai.com/blog/chatgpt/. https://openai.com/blog/chatgpt/ ↩
Jurafsky, D., & Martin, J. H. (2009). Speech and Language Processing: An Introduction to Natural Language Processing, Computational Linguistics and Speech Recognition. Prentice Hall. ↩
Brown, T. B. (2020). Language models are few-shot learners. arXiv Preprint arXiv:2005.14165. ↩