1. مبانی مدل‌های تولید متن

مدل تولید متن شرکت OpenAI، معمولاً به عنوان Generative Pre-trained Transformer (GPT) شناخته می‌شود و بر اعتماد به مکانیزم خودتوجه در یادگیری عمیق برای فهم و پردازش زبان طبیعی بستگی دارد. آموزش مدل GPT از دو مرحله تشکیل شده است: پیش‌آموزش و تنظیم دقیق.

پیش‌آموزش

در مرحله پیش‌آموزش، مدل از یادگیری بدون نظارت با استفاده از مجموعه داده‌های متن بزرگ مورد استفاده قرار می‌گیرد. در این فرآیند، مدل با پیش‌بینی کلمه بعدی آموزش داده می‌شود. به عنوان مثال، با دیدن چند کلمه اول جمله "من یک قلم دارم"، سعی می‌کند کلمه "قلم" را پیش‌بینی کند. هدف اصلی پیش‌آموزش، توانایی مدل را برای درک ساختار و معنای زبان فراهم کند.

تنظیم دقیق

مرحله تنظیم دقیق شامل یادگیری نظارت شده بر روی وظایف خاص است. در این مرحله، مدل برای سازگاری با برنامه‌های خاص مانند سیستم‌های پرسش و پاسخ و خلاصه‌سازی اسناد تنظیم می‌شود. تنظیم دقیق شامل آموزش بیشتر مدل با مجموعه داده‌های حاوی برچسب بر اساس مدل پیش‌آموزش‌شده است و این امکان را فراهم می‌کند که مدل بهتر به وظایف خاص سازگار شود.

2. سناریوهای کاربرد

مدل تولید متن شرکت OpenAI می‌تواند در یک دسته گسترده از سناریوها به کار گرفته شود. در زیر تعدادی از کاربردهای خاص آمده است:

  • نگارش اسناد: کمک به کاربران برای سریع نوشتن و ویرایش اسناد.
  • نوشتن کد کامپیوتری: تولید برش‌های کد برای کمک در برنامه‌نویسی.
  • پاسخ به سوالات درباره پایگاه دانش: ارائه پاسخ‌های بر اساس دانش‌های ذخیره شده.
  • تحلیل متن: استخراج اطلاعات متنی، تجزیه و تحلیل احساس و غیره.
  • ارائه رابط زبان طبیعی برای نرم‌افزار: امکان برای کاربران برای تعامل با نرم‌افزار با استفاده از زبان طبیعی.
  • آموزش در رشته‌های مختلف: ارائه راهنمایی تدریس در حوزه‌های متعدد.
  • ترجمه زبان: ترجمه متن بین زبان‌های مختلف.
  • شبیه‌سازی شخصیت‌ها برای بازی‌ها: تولید گفتگوها و داستان‌های زمینه برای بازی‌ها یا سناریوهای نقش‌آفرینی.

3. معرفی مدل گفتگو

مدل گفتگو یک نوع ویژه از مدل‌های تولید متن است که از طریق پیش‌آموزش، درک و تولید گفتگوهای طبیعی را فراهم می‌کند. این مدل می‌تواند یک گفتگو بین یک کاربر و یک دستیار مجازی را شبیه‌سازی کند و برای برنامه‌های تعاملی زمان واقعی مناسب باشد.

استفاده از مدل گفتگو معمولاً شامل گفتگوهای تعاملی چند دوره است. به عنوان مثال، هنگامی که یک کاربر سوالی می‌پرسد، مدل می‌تواند پاسخ‌های مناسبی بر اساس داده‌های آموزش قبلی تولید کند. علاوه بر این، مدل گفتگو می‌تواند اطلاعات زمینه‌ای را حفظ کرده و با در نظر گرفتن محتوای گفتگوهای قبلی، پاسخ‌های بیشتری که هم‌آهنگ و طبیعی‌تر هستند، تولید کند.

سناریوهای کاربرد مدل گفتگو:

  • کمک به مشتریان: پاسخ خودکار به سوالات متداول کاربران، ارائه کمک و مشاوره.
  • ربات‌های چت: درگیر در تعاملات گفتگویی طبیعی با کاربران.
  • دستیارهای مجازی: انجام فرمان‌های صوتی کاربران مانند برنامه‌ریزی قرارها، تنظیم یادآورها و غیره.
  • بازی‌های نقش‌آفرینی: غنی‌سازی تجربه بازی با ارائه گفتگوها و شخصیت‌های منحصربه‌فرد برای بازی‌ها.

4. رابط مدل گفتگو

رابط مدل گفتگو به توسعه‌دهندگان امکان تعامل با مدل GPT با استفاده از درخواست‌های HTTP را می‌دهد. این بخش شیوه استفاده از curl برای ساختن درخواست‌ها و تجزیه پاسخ‌های بازگشتی از مدل را شرح می‌دهد.

ساخت درخواست‌ها

قبل از شروع، باید ابتدا ثبت‌نام کرده و از شرکت OpenAI یک کلید API بدست آورید که باید از طریق سربرگ‌های HTTP هویت‌سنجی شده هنگام ارسال درخواست‌ها استفاده شود.

اینجا یک مثال از استفاده curl برای ارسال یک درخواست به رابط مدل گفتگو آمده است:

curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-3.5-turbo",
    "messages": [
      {
        "role": "system",
        "content": "You are a helpful assistant."
      },
      {
        "role": "user",
        "content": "Which team won the 2020 World Series?"
      }
    ]
  }'

معنای پارامترهای مدل گفتگو

در استفاده از رابط مدل گفتگو OpenAI، پارامترهای اصلی شامل "model" و "messages" هستند که هرکدام معانی خاص و تأثیر گذار را حمل می‌کنند.

پارامترهای مدل

پارامتر مدل برای مشخص کردن نسخه‌ی مورد استفاده از مدل استفاده می‌شود. به عنوان مثال، "model": "gpt-3.5-turbo" نشان دهنده‌ی درخواست شما برای مدل GPT-3.5-Turbo است. نسخه‌ی مدل انتخاب شده اینجا با توجه به قابلیت‌ها، داده‌های آموزشی و ویژگی‌های رابط، به ورودی کاربر پاسخ خواهد داد.

اینجا نسخه‌های مدلی که در حال حاضر پشتیبانی می‌شوند را مشاهده می‌کنید:

مدل‌های پشتیبانی شده حداکثر متن زمینه توضیح مدل
gpt-4-0125-preview 128,000 توکن مدل پیش‌نمایش GPT-4 Turbo طراحی شده برای کاهش موارد "تنبل"، جایی که مدل ناتوان در تکمیل وظایف می‌شود.
gpt-4-turbo-preview 128,000 توکن در حال حاضر به مدل gpt-4-0125-preview اشاره می‌کند.
gpt-4-1106-preview 128,000 توکن مدل GPT-4 Turbo با قابلیت‌های بهبود یافته در اجرای دستورات، حالت JSON، خروجی قابل‌تکرار و فراخوانی‌های تابع موازی.
gpt-4-vision-preview 128,000 توکن مدل GPT-4 با قابلیت درک تصاویر، به‌علاوه تمامی ویژگی‌های دیگر GPT-4 Turbo.
gpt-4 8,192 توکن در حال حاضر به gpt-4-0613 اشاره می‌کند.
gpt-4-0613 8,192 توکن یک عکس‌العمل گرفته شده از GPT-4 در تاریخ 13 ژوئن 2023، که از پشتیبانی بهتر از فراخوانی تابع برخوردار است.
gpt-4-32k 32,768 توکن در حال حاضر به gpt-4-32k-0613 اشاره می‌کند. این مدل به طور گسترده معرفی نشده است و استفاده از GPT-4 Turbo را ترجیح می‌دهد.
gpt-4-32k-0613 32,768 توکن یک نسخه 32k از GPT-4 در تاریخ 13 ژوئن 2023، که از پشتیبانی بهتر از فراخوانی تابع برخوردار است. این مدل به طور گسترده معرفی نشده است و استفاده از GPT-4 Turbo را ترجیح می‌دهد.
gpt-3.5-turbo-1106 16,385 توکن آخرین مدل GPT-3.5 Turbo با بهبود اجرای دستورات، حالت JSON، خروجی قابل‌تکرار و فراخوانی‌های تابع موازی.
gpt-3.5-turbo 4,096 توکن در حال حاضر به gpt-3.5-turbo-0613 اشاره می‌کند.
gpt-3.5-turbo-16k 16,385 توکن در حال حاضر به gpt-3.5-turbo-16k-0613 اشاره می‌کند.
gpt-3.5-turbo-instruct 4,096 توکن از نظر عملکردی مشابه مدل‌های دوره GPT-3. با endpoint تکمیل سنتی سازگار است و برای تکمیل گفتگو مناسب نیست.
gpt-3.5-turbo-0613 4,096 توکن یک عکس‌العمل گرفته شده از gpt-3.5-turbo در تاریخ 13 ژوئن 2023، که به افتراق تاریخ 13 ژوئن 2024 منقضی خواهد شد.
gpt-3.5-turbo-16k-0613 16,385 توکن یک عکس‌العمل گرفته شده از gpt-3.5-16k-turbo در تاریخ 13 ژوئن 2023، که به افتراق تاریخ 13 ژوئن 2024 منقضی خواهد شد.
gpt-3.5-turbo-0301 4,096 توکن یک عکس‌العمل گرفته شده از gpt-3.5-turbo در تاریخ 1 مارس 2023، که به افتراق تاریخ 13 ژوئن 2024 منقضی خواهد شد.

پارامترهای پیام‌ها

پارامتر پیام‌ها یک آرایه است، جایی که هر عنصر یک پیام در گفتگو را نمایش می‌دهد. هر پیام یک شی است که دارای دو ویژگی است: role (نقش فرستنده) و content (محتوای خاص پیام).

  • role: نقش فرستنده پیام را مشخص می‌کند. مقادیر اختیاری شامل "system"، "user" و "assistant" می‌باشد.
  • content: محتوای خاص پیام.

انواع و توابع نقش

مقدار پارامتر نقش، نوع و تابع پیام را تعریف می‌کند. API گفتگو واکنش مدل را بر اساس نقش‌های مختلف تغییر خواهد داد.

نقش 'سیستم'

پیام‌های سیستم برای نمایان دادن رفتار مدل به صورت جهانی استفاده می‌شود. به عنوان مثال، می‌تواند نقشی که توسط مدل ایفا می‌شود را به صورت صریح مشخص کند (مانند دستیار، مترجم و غیره) یا دستورات خاصی را برای پیروی در گفتگو فراهم کند. پیام‌های سیستم تأثیر طولانی‌مدتی بر رفتار مدل در طول گفتگو دارند، اما معمولاً اختیاری هستند.

به عنوان مثال، اگر می‌خواهید که مدل در گفتگو به عنوان یک دستیار خدمات مشتری شرکت کند، می‌توانید در پیام سیستم مشخص کنید:

{
  "role": "system",
  "content": "شما یک دستیار خدمات مشتری هستید."
}

نقش 'کاربر'

پیام‌های کاربر نمایانگر سوالاتی هستند که توسط کاربر وارد شده‌اند. مدل به این پیام‌ها پاسخ می‌دهد و اطلاعات، پاسخ‌ها یا سایر اشکال خروجی را ارائه می‌دهد. این پیام‌ها بخش حیاتی‌ای از جریان کار ای پی آی گفتگو هستند و معمولاً با درخواست‌های واقعی کاربر در برنامه متناظر هستند.

به عنوان مثال، در درخواست کاربر در مثال curl بالا:

{
  "role": "user",
  "content": "کدام تیم جام‌جهانی 2020 جهانی را برده است؟"
}

نقش 'دستیار'

پیام‌های دستیار معمولاً به پاسخ‌های تولیدشده توسط مدل اشاره دارند و ممکن است بخشی از پیام‌های تاریخچه گفتگو توسط توسعه‌دهنده نیز باشند که برای شبیه‌سازی قالب پیام‌های بازگشتی هوش مصنوعی استفاده می‌شوند. در درخواست‌های ای پی آی، پیام‌های نقش دستیار معمولاً ارائه نمی‌شوند مگر اینکه نیاز به تنظیم فرمتی باشد که مدل به آن برای پاسخ به سوالات در تاریخچه گفتگو نیاز دارد تا نمونه‌های خروجی برای مدل فراهم کند.

تجزیه پاسخ

پاسخ مدل به فرمت JSON برگردانده می‌شود. در ادامه یک مثال از تجزیه پاسخ وجود دارد:

{
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": "قهرمان جام جهانی 2020 تیم لس‌آنجلس داده‌ها است.",
        "role": "assistant"
      },
      "logprobs": null
    }
  ],
  "created": 1677664795,
  "id": "chatcmpl-7QyqpwdfhqwajicIEznoc6Q47XAyW",
  "model": "gpt-3.5-turbo-0613",
  "object": "chat.completion",
  "usage": {
    "completion_tokens": 17,
    "prompt_tokens": 57,
    "total_tokens": 74
  }
}

در پاسخ فوق، پاسخ مدل را می‌توانید از choices[0].message.content دریافت کنید.

چگونگی پیاده‌سازی تابع حافظه در مدل گفتگو

در زیر، یک مثال از استفاده از رابط برنامه‌نویسی (API) تکمیل‌کننده گپت (GPT) شرکت OpenAI برای پیاده‌سازی تابع حافظه مدل GPT آورده شده است، که نشان می‌دهد چگونه می‌توان با ذخیره‌سازی‌ گفتگوهای قبلی (یعنی محتوای حافظه) در یک درخواست جدید API، گفتگوی پیوسته را به دست آورد.

import requests

api_url = "https://api.openai.com/v1/chat/completions"
api_key = "کلید API شما برای OpenAI"

headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {api_key}"
}

data = {
    "model": "gpt-3.5-turbo",  # می‌تواند با gpt-4 یا مدل‌های دیگر قابل دسترس تعویض شود
    "messages": [
      {
        "role": "system",  # پیام سیستم، برای تنظیم رفتار مدل گفتگو
        "content": "شما یک دستیار کمک‌کننده هستید."
      },
      {
        "role": "user",  # پیام کاربر، مدل به این پاسخ می‌دهد
        "content": "می‌توانید به من دلایل اصلی تغییرات آب و هوا را بگویید؟"
      },
      {
        "role": "assistant",  # پاسخ مدل
        "content": "دلایل اصلی تغییرات آب و هوا شامل گاز‌های گلخانه‌ای، سوخت سوزی سوخت فسیلی و عمل تخریب جنگل‌ها و غیره می‌باشد."
      },
      {
        "role": "user",  # سوال جدید بر اساس پاسخ مدل
        "content": "چگونه می‌توانیم انتشار گاز‌های گلخانه‌ای را کاهش دهیم؟"
      }
    ]
}

response = requests.post(api_url, headers=headers, json=data)

if response.status_code == 200:
    reply_content = response.json()['choices'][0]['message']['content']
    print(f"پاسخ مدل => {reply_content}")
else:
    print(f"خطا در درخواست: {response.status_code}")

در این مثال، ما یک شبیه‌سازی از یک کاربر ابتدا درباره دلایل اصلی تغییرات آب و هوا می‌پرسد و سپس سوالی دیگر بر اساس توضیح مدل مطرح می‌کند. در درخواست‌های بعدی، ما محتوای گفتگوی قبلی را نگهداری می‌کنیم تا اطمینان حاصل کنیم که مدل قادر به یادآوری تاریخچه گفتگوهای قبلی و تولید پاسخ بر اساس آن است. این روش با استفاده از ورودی و خروجی مراحل گفتگوی قبلی به عنوان پیام‌های تاریخی درخواست جدید، بدست آوردن و یادآوری وضعیت گفتگو را انجام می‌دهد.

نکته: برای پیاده‌سازی تابع حافظه گفتگو، به دلیل محدودیت حداکثر نماد‌ها مدل، امکان وارد کردن تمام پیام‌های گفتگوی تاریخی برای هر درخواست وجود ندارد. به‌طور معمول، پیام‌های مرتبط مرتبط با سوالات فعلی به عنوان پیام‌های تاریخی وارد مدل می‌شوند و بخش‌های بعدی، چگونگی دستیابی به شباهت متن را با استفاده از ویژگی‌های جاسازی معرفی خواهد کرد.

5. طرح JSON

طرح JSON یک ویژگی از API مدل گفتگو است که به کاربران این امکان را می‌دهد که به مدل دستور دهند همواره یک شی JSON بازگردانده شود، که برای سناریوهایی که نیاز به دریافت پاسخ‌ها به فرمت JSON دارند، مناسب است.

استفاده از طرح JSON

برای استفاده از طرح JSON، شما باید فیلد response_format را به { "type": "json_object" } در بدنه درخواست HTTP تنظیم کنید و اطمینان حاصل کنید که پیام سیستم نشان دهنده این است که خروجی مدل به فرمت JSON است. در زیر، یک مثال درخواست curl برای فعال‌سازی طرح JSON آورده شده است:

curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-3.5-turbo-1106",
    "response_format": { "type": "json_object" },
    "messages": [
      {
        "role": "system",
        "content": "شما یک دستیار مفید هستید که برای بازگردانی جیسون طراحی شده است."
      },
      {
        "role": "user",
        "content": "کدام تیم در سال 2020 سری جهانی را برنده شد؟"
      }
    ]
  }'

تجزیه پاسخ با ساختار JSON Schema

در حالت JSON Schema، پاسخ حاوی یک شی JSON کامل و به درستی تجزیه شده است. این حالت اطمینان می‌دهد که خروجی مدل یک شی JSON معتبر است که می‌توان آن را مستقیماً تجزیه و استفاده کرد. در زیر مثالی از یک پاسخ که با استفاده از JSON Schema بازگردانی می‌شود آمده است:

{
  "choices": [
    {
      "finish_reason": "stop",
      "message": {
        "content": "{\"winner\": \"Los Angeles Dodgers\"}"
      }
    }
  ]
}

در پایتون، می‌توانید از کد زیر برای استخراج محتوا از پاسخ استفاده کنید:

import json

response = {
  "choices": [
    {
      "finish_reason": "stop",
      "message": {
        "content": "{\"winner\": \"Los Angeles Dodgers\"}"
      }
    }
  ]
}

response_content = json.loads(response['choices'][0]['message']['content'])

print(response_content)

خروجی به شکل زیر خواهد بود:

{'winner': 'Los Angeles Dodgers'}

JSON Schema یک روش قابل اعتماد برای اطمینان از قالب صحیح پاسخ‌ها برای موارد مصرف خاص فراهم می‌کند. بنابراین، توصیه می‌شود که در صورت وجود نیازهای خاص برای قالب پاسخ API، از JSON Schema استفاده شود.