Skip to content

Latest commit

 

History

History
659 lines (456 loc) · 34.2 KB

File metadata and controls

659 lines (456 loc) · 34.2 KB

بناء تطبيقات توليد النصوص

بناء تطبيقات توليد النصوص

(اضغط على الصورة أعلاه لمشاهدة الفيديو الخاص بهذا الدرس)

لقد رأيت حتى الآن من خلال هذا المنهج الدراسي أن هناك مفاهيم أساسية مثل المطالبات وحتى مجال كامل يسمى "هندسة المطالبات". العديد من الأدوات التي يمكنك التفاعل معها مثل ChatGPT، Office 365، Microsoft Power Platform وغيرها، تدعم استخدامك للمطالبات لتحقيق شيء ما.

لكي تضيف مثل هذه التجربة إلى تطبيق، تحتاج إلى فهم مفاهيم مثل المطالبات، الإكمالات واختيار مكتبة للعمل بها. هذا بالضبط ما ستتعلمه في هذا الفصل.

المقدمة

في هذا الفصل، سوف:

  • تتعرف على مكتبة openai ومفاهيمها الأساسية.
  • تبني تطبيقًا لتوليد النصوص باستخدام openai.
  • تفهم كيفية استخدام مفاهيم مثل المطالبات، درجة الحرارة، والرموز لبناء تطبيق لتوليد النصوص.

أهداف التعلم

في نهاية هذا الدرس، ستكون قادرًا على:

  • شرح ما هو تطبيق توليد النصوص.
  • بناء تطبيق لتوليد النصوص باستخدام openai.
  • تكوين تطبيقك لاستخدام عدد أكبر أو أقل من الرموز وتغيير درجة الحرارة للحصول على نتائج متنوعة.

ما هو تطبيق توليد النصوص؟

عادةً عندما تبني تطبيقًا، يكون له نوع من الواجهة مثل ما يلي:

  • يعتمد على الأوامر. التطبيقات القائمة على الكونسول هي تطبيقات نموذجية حيث تكتب أمرًا ويقوم بتنفيذ مهمة. على سبيل المثال، git هو تطبيق يعتمد على الأوامر.
  • واجهة المستخدم (UI). بعض التطبيقات لديها واجهات مستخدم رسومية (GUIs) حيث تنقر على الأزرار، تدخل النصوص، تختار الخيارات والمزيد.

التطبيقات القائمة على الكونسول وواجهة المستخدم محدودة

قارنها بتطبيق يعتمد على الأوامر حيث تكتب أمرًا:

  • محدودة. لا يمكنك كتابة أي أمر، فقط الأوامر التي يدعمها التطبيق.
  • مخصصة للغة معينة. بعض التطبيقات تدعم العديد من اللغات، ولكن بشكل افتراضي يتم بناء التطبيق بلغة معينة، حتى لو كان بإمكانك إضافة دعم للغات أخرى.

فوائد تطبيقات توليد النصوص

إذن كيف يختلف تطبيق توليد النصوص؟

في تطبيق توليد النصوص، لديك المزيد من المرونة، فأنت لست مقيدًا بمجموعة من الأوامر أو لغة إدخال معينة. بدلاً من ذلك، يمكنك استخدام اللغة الطبيعية للتفاعل مع التطبيق. فائدة أخرى هي أنك تتفاعل بالفعل مع مصدر بيانات تم تدريبه على مجموعة ضخمة من المعلومات، بينما قد يكون التطبيق التقليدي محدودًا بما هو موجود في قاعدة البيانات.

ماذا يمكنني أن أبني باستخدام تطبيق توليد النصوص؟

هناك العديد من الأشياء التي يمكنك بناؤها. على سبيل المثال:

  • روبوت دردشة. روبوت دردشة يجيب على الأسئلة حول مواضيع، مثل شركتك ومنتجاتها يمكن أن يكون مناسبًا.
  • مساعد. النماذج اللغوية الكبيرة (LLMs) رائعة في أشياء مثل تلخيص النصوص، الحصول على رؤى من النصوص، إنتاج نصوص مثل السير الذاتية والمزيد.
  • مساعد برمجي. اعتمادًا على نموذج اللغة الذي تستخدمه، يمكنك بناء مساعد برمجي يساعدك في كتابة الكود. على سبيل المثال، يمكنك استخدام منتج مثل GitHub Copilot وكذلك ChatGPT لمساعدتك في كتابة الكود.

كيف يمكنني البدء؟

حسنًا، تحتاج إلى إيجاد طريقة للتكامل مع نموذج اللغة الكبير (LLM) والذي يتطلب عادةً أحد النهجين التاليين:

  • استخدام واجهة برمجة التطبيقات (API). هنا تقوم بإنشاء طلبات ويب مع مطالبتك وتحصل على نصوص مولدة.
  • استخدام مكتبة. المكتبات تساعد في تغليف استدعاءات واجهة برمجة التطبيقات وتجعلها أسهل في الاستخدام.

المكتبات/حزم التطوير البرمجية (SDKs)

هناك بعض المكتبات المعروفة للعمل مع النماذج اللغوية الكبيرة مثل:

  • openai، هذه المكتبة تجعل من السهل الاتصال بنموذجك وإرسال المطالبات.

ثم هناك مكتبات تعمل على مستوى أعلى مثل:

  • Langchain. Langchain معروفة وتدعم لغة Python.
  • Semantic Kernel. Semantic Kernel هي مكتبة من Microsoft تدعم لغات C#، Python، وJava.

التطبيق الأول باستخدام openai

دعونا نرى كيف يمكننا بناء تطبيقنا الأول، ما هي المكتبات التي نحتاجها، وما هو المطلوب.

تثبيت openai

هناك العديد من المكتبات المتاحة للتفاعل مع OpenAI أو Azure OpenAI. من الممكن استخدام العديد من لغات البرمجة أيضًا مثل C#، Python، JavaScript، Java والمزيد. لقد اخترنا استخدام مكتبة Python openai، لذا سنستخدم pip لتثبيتها.

pip install openai

إنشاء مورد

تحتاج إلى تنفيذ الخطوات التالية:

تحديد مفتاح API ونقطة النهاية

في هذه المرحلة، تحتاج إلى إخبار مكتبة openai بمفتاح API الذي ستستخدمه. للعثور على مفتاح API الخاص بك، انتقل إلى قسم "Keys and Endpoint" في مورد Azure OpenAI الخاص بك ونسخ قيمة "Key 1".

Keys and Endpoint resource blade in Azure Portal

الآن بعد أن قمت بنسخ هذه المعلومات، دعنا نوجه المكتبات لاستخدامها.

Note

من المفيد فصل مفتاح API الخاص بك عن الكود الخاص بك. يمكنك القيام بذلك باستخدام متغيرات البيئة.

  • قم بتعيين متغير البيئة OPENAI_API_KEY إلى مفتاح API الخاص بك. export OPENAI_API_KEY='sk-...'

إعداد تكوين Azure

إذا كنت تستخدم Azure OpenAI، فإليك كيفية إعداد التكوين:

openai.api_type = 'azure'
openai.api_key = os.environ["OPENAI_API_KEY"]
openai.api_version = '2023-05-15'
openai.api_base = os.getenv("API_BASE")

في الأعلى، قمنا بتعيين ما يلي:

  • api_type إلى azure. هذا يخبر المكتبة باستخدام Azure OpenAI وليس OpenAI.
  • api_key، هذا هو مفتاح API الخاص بك الموجود في بوابة Azure.
  • api_version، هذا هو إصدار API الذي تريد استخدامه. في وقت كتابة هذا النص، أحدث إصدار هو 2023-05-15.
  • api_base، هذا هو نقطة النهاية الخاصة بـ API. يمكنك العثور عليها في بوابة Azure بجانب مفتاح API الخاص بك.

[!NOTE] > os.getenv هي وظيفة تقرأ متغيرات البيئة. يمكنك استخدامها لقراءة متغيرات البيئة مثل OPENAI_API_KEY وAPI_BASE. قم بتعيين هذه المتغيرات في البيئة الخاصة بك أو باستخدام مكتبة مثل dotenv.

توليد النصوص

الطريقة لتوليد النصوص هي استخدام فئة Completion. إليك مثال:

prompt = "Complete the following: Once upon a time there was a"

completion = openai.Completion.create(model="davinci-002", prompt=prompt)
print(completion.choices[0].text)

في الكود أعلاه، نقوم بإنشاء كائن إكمال ونمرر النموذج الذي نريد استخدامه والمطالبة. ثم نقوم بطباعة النص المولد.

إكمال الدردشة

حتى الآن، رأيت كيف استخدمنا Completion لتوليد النصوص. ولكن هناك فئة أخرى تسمى ChatCompletion وهي أكثر ملاءمة لروبوتات الدردشة. إليك مثال على استخدامها:

import openai

openai.api_key = "sk-..."

completion = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Hello world"}])
print(completion.choices[0].message.content)

المزيد عن هذه الوظيفة في فصل قادم.

تمرين - تطبيق توليد النصوص الأول الخاص بك

الآن بعد أن تعلمنا كيفية إعداد وتكوين openai، حان الوقت لبناء تطبيق توليد النصوص الأول الخاص بك. لبناء التطبيق الخاص بك، اتبع الخطوات التالية:

  1. قم بإنشاء بيئة افتراضية وقم بتثبيت openai:

    python -m venv venv
    source venv/bin/activate
    pip install openai

    [!NOTE] إذا كنت تستخدم Windows، اكتب venv\Scripts\activate بدلاً من source venv/bin/activate.

    [!NOTE] حدد مفتاح Azure OpenAI الخاص بك عن طريق الذهاب إلى https://portal.azure.com/ وابحث عن Open AI واختر مورد Open AI ثم اختر Keys and Endpoint ونسخ قيمة Key 1.

  2. قم بإنشاء ملف app.py وأضف إليه الكود التالي:

    import openai
    
    openai.api_key = "<replace this value with your open ai key or Azure OpenAI key>"
    
    openai.api_type = 'azure'
    openai.api_version = '2023-05-15'
    openai.api_base = "<endpoint found in Azure Portal where your API key is>"
    deployment_name = "<deployment name>"
    
    # add your completion code
    prompt = "Complete the following: Once upon a time there was a"
    messages = [{"role": "user", "content": prompt}]
    
    # make completion
    completion = openai.chat.completions.create(model=deployment_name, messages=messages)
    
    # print response
    print(completion.choices[0].message.content)

    [!NOTE] إذا كنت تستخدم Azure OpenAI، تحتاج إلى تعيين api_type إلى azure وتعيين api_key إلى مفتاح Azure OpenAI الخاص بك.

    يجب أن ترى مخرجات مثل ما يلي:

     very unhappy _____.
    
    Once upon a time there was a very unhappy mermaid.
    

أنواع مختلفة من المطالبات لأغراض مختلفة

الآن رأيت كيف يمكن توليد النصوص باستخدام مطالبة. لديك حتى برنامج يعمل يمكنك تعديله وتغييره لتوليد أنواع مختلفة من النصوص.

يمكن استخدام المطالبات لمهام متعددة. على سبيل المثال:

  • توليد نوع معين من النصوص. على سبيل المثال، يمكنك توليد قصيدة، أسئلة لاختبار، إلخ.
  • البحث عن معلومات. يمكنك استخدام المطالبات للبحث عن معلومات مثل المثال التالي "ما معنى CORS في تطوير الويب؟".
  • توليد الكود. يمكنك استخدام المطالبات لتوليد الكود، على سبيل المثال تطوير تعبير منتظم يستخدم للتحقق من صحة البريد الإلكتروني أو حتى توليد برنامج كامل، مثل تطبيق ويب.

استخدام عملي أكثر: مولد وصفات الطعام

تخيل أن لديك مكونات في المنزل وتريد طهي شيء ما. لهذا، تحتاج إلى وصفة. إحدى الطرق للعثور على الوصفات هي استخدام محرك بحث أو يمكنك استخدام نموذج لغوي كبير للقيام بذلك.

يمكنك كتابة مطالبة مثل:

"أظهر لي 5 وصفات لطبق يحتوي على المكونات التالية: دجاج، بطاطس، وجزر. لكل وصفة، قم بتحديد جميع المكونات المستخدمة."

بالنظر إلى المطالبة أعلاه، قد تحصل على استجابة مشابهة لـ:

1. Roasted Chicken and Vegetables:
Ingredients:
- 4 chicken thighs
- 2 potatoes, cut into cubes
- 2 carrots, cut into cubes
- 2 tablespoons olive oil
- 2 cloves garlic, minced
- 1 teaspoon dried thyme
- 1 teaspoon dried oregano
- Salt and pepper, to taste

2. Chicken and Potato Stew:
Ingredients:
- 2 tablespoons olive oil
- 1 onion, diced
- 2 cloves garlic, minced
- 2 chicken breasts, cut into cubes
- 2 potatoes, cut into cubes
- 2 carrots, cut into cubes
- 1 teaspoon dried oregano
- 1 teaspoon dried thyme
- 1 cup chicken broth
- Salt and pepper, to taste

3. Chicken and Potato Bake:
Ingredients:
- 2 tablespoons olive oil
- 2 chicken breasts, cut into cubes
- 2 potatoes, cut into cubes
- 2 carrots, cut into cubes
- 1 onion, diced
- 2 cloves garlic, minced
- 1 teaspoon dried oregano
- 1 teaspoon dried thyme
- 1 cup chicken broth
- Salt and pepper, to taste

4. Chicken and Potato Soup:
Ingredients:
- 2 tablespoons olive oil
- 1 onion, diced
- 2 cloves garlic, minced
- 2 chicken breasts, cut into cubes
- 2 potatoes, cut into cubes
- 2 carrots, cut into cubes
- 1 teaspoon dried oregano
- 1 teaspoon dried thyme
- 4 cups chicken broth
- Salt and pepper, to taste

5. Chicken and Potato Hash:
Ingredients:
- 2 tablespoons olive oil
- 2 chicken breasts, cut into cubes
- 2 potatoes, cut into cubes
- 2 carrots, cut into cubes
- 1 onion, diced
- 2 cloves garlic, minced
- 1 teaspoon dried oregano

هذه النتيجة رائعة، أعرف ماذا أطبخ. في هذه المرحلة، ما يمكن أن يكون تحسينات مفيدة هو:

  • استبعاد المكونات التي لا أحبها أو التي لدي حساسية منها.
  • إنشاء قائمة تسوق، في حال لم يكن لدي جميع المكونات في المنزل.

بالنسبة للحالات المذكورة أعلاه، دعنا نضيف مطالبة إضافية:

"يرجى إزالة الوصفات التي تحتوي على الثوم لأنني لدي حساسية واستبداله بشيء آخر. أيضًا، يرجى إنشاء قائمة تسوق للوصفات، مع الأخذ في الاعتبار أن لدي بالفعل دجاج، بطاطس وجزر في المنزل."

الآن لديك نتيجة جديدة، وهي:

1. Roasted Chicken and Vegetables:
Ingredients:
- 4 chicken thighs
- 2 potatoes, cut into cubes
- 2 carrots, cut into cubes
- 2 tablespoons olive oil
- 1 teaspoon dried thyme
- 1 teaspoon dried oregano
- Salt and pepper, to taste

2. Chicken and Potato Stew:
Ingredients:
- 2 tablespoons olive oil
- 1 onion, diced
- 2 chicken breasts, cut into cubes
- 2 potatoes, cut into cubes
- 2 carrots, cut into cubes
- 1 teaspoon dried oregano
- 1 teaspoon dried thyme
- 1 cup chicken broth
- Salt and pepper, to taste

3. Chicken and Potato Bake:
Ingredients:
- 2 tablespoons olive oil
- 2 chicken breasts, cut into cubes
- 2 potatoes, cut into cubes
- 2 carrots, cut into cubes
- 1 onion, diced
- 1 teaspoon dried oregano
- 1 teaspoon dried thyme
- 1 cup chicken broth
- Salt and pepper, to taste

4. Chicken and Potato Soup:
Ingredients:
- 2 tablespoons olive oil
- 1 onion, diced
- 2 chicken breasts, cut into cubes
- 2 potatoes, cut into cubes
- 2 carrots, cut into cubes
- 1 teaspoon dried oregano
- 1 teaspoon dried thyme
- 4 cups chicken broth
- Salt and pepper, to taste

5. Chicken and Potato Hash:
Ingredients:
- 2 tablespoons olive oil
- 2 chicken breasts, cut into cubes
- 2 potatoes, cut into cubes
- 2 carrots, cut into cubes
- 1 onion, diced
- 1 teaspoon dried oregano

Shopping List:
- Olive oil
- Onion
- Thyme
- Oregano
- Salt
- Pepper

هذه هي الوصفات الخمس الخاصة بك، دون ذكر الثوم، ولديك أيضًا قائمة تسوق تأخذ في الاعتبار ما لديك بالفعل في المنزل.

تمرين - بناء مولد وصفات الطعام

الآن بعد أن قمنا بتوضيح سيناريو، دعنا نكتب الكود ليتطابق مع السيناريو الموضح. للقيام بذلك، اتبع الخطوات التالية:

  1. استخدم ملف app.py الحالي كنقطة انطلاق.

  2. حدد متغير prompt وقم بتغيير الكود الخاص به إلى ما يلي:

    prompt = "Show me 5 recipes for a dish with the following ingredients: chicken, potatoes, and carrots. Per recipe, list all the ingredients used"

    إذا قمت الآن بتشغيل الكود، يجب أن ترى مخرجات مشابهة لـ:

    -Chicken Stew with Potatoes and Carrots: 3 tablespoons oil, 1 onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 bay leaf, 1 thyme sprig, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 1 1/2 cups chicken broth, 1/2 cup dry white wine, 2 tablespoons chopped fresh parsley, 2 tablespoons unsalted butter, 1 1/2 pounds boneless, skinless chicken thighs, cut into 1-inch pieces
    -Oven-Roasted Chicken with Potatoes and Carrots: 3 tablespoons extra-virgin olive oil, 1 tablespoon Dijon mustard, 1 tablespoon chopped fresh rosemary, 1 tablespoon chopped fresh thyme, 4 cloves garlic, minced, 1 1/2 pounds small red potatoes, quartered, 1 1/2 pounds carrots, quartered lengthwise, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 1 (4-pound) whole chicken
    -Chicken, Potato, and Carrot Casserole: cooking spray, 1 large onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and shredded, 1 potato, peeled and shredded, 1/2 teaspoon dried thyme leaves, 1/4 teaspoon salt, 1/4 teaspoon black pepper, 2 cups fat-free, low-sodium chicken broth, 1 cup frozen peas, 1/4 cup all-purpose flour, 1 cup 2% reduced-fat milk, 1/4 cup grated Parmesan cheese
    
    -One Pot Chicken and Potato Dinner: 2 tablespoons olive oil, 1 pound boneless, skinless chicken thighs, cut into 1-inch pieces, 1 large onion, chopped, 3 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 bay leaf, 1 thyme sprig, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 2 cups chicken broth, 1/2 cup dry white wine
    
    -Chicken, Potato, and Carrot Curry: 1 tablespoon vegetable oil, 1 large onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 teaspoon ground coriander, 1 teaspoon ground cumin, 1/2 teaspoon ground turmeric, 1/2 teaspoon ground ginger, 1/4 teaspoon cayenne pepper, 2 cups chicken broth, 1/2 cup dry white wine, 1 (15-ounce) can chickpeas, drained and rinsed, 1/2 cup raisins, 1/2 cup chopped fresh cilantro
    

    ملاحظة، النموذج اللغوي الكبير غير حتمي، لذا قد تحصل على نتائج مختلفة في كل مرة تقوم فيها بتشغيل البرنامج.

    رائع، دعنا نرى كيف يمكننا تحسين الأمور. لتحسين الأمور، نريد التأكد من أن الكود مرن، بحيث يمكن تحسين وتغيير المكونات وعدد الوصفات.

  3. دعنا نغير الكود بالطريقة التالية:

    no_recipes = input("No of recipes (for example, 5): ")
    
    ingredients = input("List of ingredients (for example, chicken, potatoes, and carrots): ")
    
    # interpolate the number of recipes into the prompt an ingredients
    prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used"

    تشغيل الكود لاختباره، قد يبدو كالتالي:

    No of recipes (for example, 5): 3
    List of ingredients (for example, chicken, potatoes, and carrots): milk,strawberries
    
    -Strawberry milk shake: milk, strawberries, sugar, vanilla extract, ice cubes
    -Strawberry shortcake: milk, flour, baking powder, sugar, salt, unsalted butter, strawberries, whipped cream
    -Strawberry milk: milk, strawberries, sugar, vanilla extract
    

تحسين بإضافة فلتر وقائمة تسوق

لدينا الآن تطبيق يعمل قادر على إنتاج الوصفات وهو مرن لأنه يعتمد على مدخلات المستخدم، سواء من حيث عدد الوصفات أو المكونات المستخدمة.

لتحسينه أكثر، نريد إضافة ما يلي:

  • استبعاد المكونات. نريد أن نكون قادرين على استبعاد المكونات التي لا نحبها أو التي لدينا حساسية منها. لتحقيق هذا التغيير، يمكننا تعديل المطالبة الحالية وإضافة شرط الفلتر في نهايتها كما يلي:

    filter = input("Filter (for example, vegetarian, vegan, or gluten-free): ")
    
    prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used, no {filter}"

    أعلاه، أضفنا {filter} إلى نهاية المطالبة وقمنا أيضًا بالتقاط قيمة الفلتر من المستخدم.

    يمكن أن يبدو إدخال مثال لتشغيل البرنامج الآن كما يلي:

    No of recipes (for example, 5): 3
    List of ingredients (for example, chicken, potatoes, and carrots): onion,milk
    Filter (for example, vegetarian, vegan, or gluten-free): no milk
    
    1. French Onion Soup
    
    Ingredients:
    
    -1 large onion, sliced
    -3 cups beef broth
    -1 cup milk
    -6 slices french bread
    -1/4 cup shredded Parmesan cheese
    -1 tablespoon butter
    -1 teaspoon dried thyme
    -1/4 teaspoon salt
    -1/4 teaspoon black pepper
    
    Instructions:
    
    1. In a large pot, sauté onions in butter until golden brown.
    2. Add beef broth, milk, thyme, salt, and pepper. Bring to a boil.
    3. Reduce heat and simmer for 10 minutes.
    4. Place french bread slices on soup bowls.
    5. Ladle soup over bread.
    6. Sprinkle with Parmesan cheese.
    
    2. Onion and Potato Soup
    
    Ingredients:
    
    -1 large onion, chopped
    -2 cups potatoes, diced
    -3 cups vegetable broth
    -1 cup milk
    -1/4 teaspoon black pepper
    
    Instructions:
    
    1. In a large pot, sauté onions in butter until golden brown.
    2. Add potatoes, vegetable broth, milk, and pepper. Bring to a boil.
    3. Reduce heat and simmer for 10 minutes.
    4. Serve hot.
    
    3. Creamy Onion Soup
    
    Ingredients:
    
    -1 large onion, chopped
    -3 cups vegetable broth
    -1 cup milk
    -1/4 teaspoon black pepper
    -1/4 cup all-purpose flour
    -1/2 cup shredded Parmesan cheese
    
    Instructions:
    
    1. In a large pot, sauté onions in butter until golden brown.
    2. Add vegetable broth, milk, and pepper. Bring to a boil.
    3. Reduce heat and simmer for 10 minutes.
    4. In a small bowl, whisk together flour and Parmesan cheese until smooth.
    5. Add to soup and simmer for an additional 5 minutes, or until soup has thickened.
    

    كما ترى، تم استبعاد أي وصفات تحتوي على الحليب. ولكن، إذا كنت تعاني من عدم تحمل اللاكتوز، قد ترغب في استبعاد الوصفات التي تحتوي على الجبن أيضًا، لذا هناك حاجة إلى أن تكون واضحًا.

  • إنشاء قائمة تسوق. نريد إنشاء قائمة تسوق، مع الأخذ في الاعتبار ما لدينا بالفعل في المنزل.

    بالنسبة لهذه الوظيفة، يمكننا إما محاولة حل كل شيء في مطالبة واحدة أو يمكننا تقسيمها إلى مطالبتين. دعنا نجرب النهج الأخير. هنا نقترح إضافة مطالبة إضافية، ولكن لكي يعمل ذلك، نحتاج إلى إضافة نتيجة المطالبة الأولى كالسياق للمطالبة الثانية.

    حدد الجزء في الكود الذي يطبع النتيجة من المطالبة الأولى وأضف الكود التالي أدناه:

    old_prompt_result = completion.choices[0].message.content
    prompt = "Produce a shopping list for the generated recipes and please don't include ingredients that I already have."
    
    new_prompt = f"{old_prompt_result} {prompt}"
    messages = [{"role": "user", "content": new_prompt}]
    completion = openai.Completion.create(engine=deployment_name, messages=messages, max_tokens=1200)
    
    # print response
    print("Shopping list:")
    print(completion.choices[0].message.content)

    لاحظ ما يلي:

    1. نحن نقوم بإنشاء موجه جديد عن طريق إضافة نتيجة الموجه الأول إلى الموجه الجديد:

      new_prompt = f"{old_prompt_result} {prompt}"
    2. نقوم بإنشاء طلب جديد، مع الأخذ في الاعتبار عدد الرموز التي طلبناها في الموجه الأول، لذا هذه المرة نقول أن max_tokens هو 1200.

      completion = openai.Completion.create(engine=deployment_name, prompt=new_prompt, max_tokens=1200)

      عند تجربة هذا الكود، نحصل الآن على النتيجة التالية:

      No of recipes (for example, 5): 2
      List of ingredients (for example, chicken, potatoes, and carrots): apple,flour
      Filter (for example, vegetarian, vegan, or gluten-free): sugar
      
      
      -Apple and flour pancakes: 1 cup flour, 1/2 tsp baking powder, 1/2 tsp baking soda, 1/4 tsp salt, 1 tbsp sugar, 1 egg, 1 cup buttermilk or sour milk, 1/4 cup melted butter, 1 Granny Smith apple, peeled and grated
      -Apple fritters: 1-1/2 cups flour, 1 tsp baking powder, 1/4 tsp salt, 1/4 tsp baking soda, 1/4 tsp nutmeg, 1/4 tsp cinnamon, 1/4 tsp allspice, 1/4 cup sugar, 1/4 cup vegetable shortening, 1/4 cup milk, 1 egg, 2 cups shredded, peeled apples
      Shopping list:
      -Flour, baking powder, baking soda, salt, sugar, egg, buttermilk, butter, apple, nutmeg, cinnamon, allspice
      

تحسين الإعداد الخاص بك

ما لدينا حتى الآن هو كود يعمل، ولكن هناك بعض التعديلات التي يجب أن نقوم بها لتحسين الأمور أكثر. بعض الأشياء التي يجب أن نقوم بها هي:

  • فصل الأسرار عن الكود، مثل مفتاح API. الأسرار لا تنتمي إلى الكود ويجب تخزينها في مكان آمن. لفصل الأسرار عن الكود، يمكننا استخدام متغيرات البيئة ومكتبات مثل python-dotenv لتحميلها من ملف. إليك كيف يمكن أن يبدو ذلك في الكود:

    1. قم بإنشاء ملف .env بالمحتوى التالي:

      OPENAI_API_KEY=sk-...

      ملاحظة، بالنسبة لـ Azure، تحتاج إلى تعيين متغيرات البيئة التالية:

      OPENAI_API_TYPE=azure
      OPENAI_API_VERSION=2023-05-15
      OPENAI_API_BASE=<replace>

      في الكود، يمكنك تحميل متغيرات البيئة كما يلي:

      from dotenv import load_dotenv
      
      load_dotenv()
      
      openai.api_key = os.environ["OPENAI_API_KEY"]
  • كلمة عن طول الرموز. يجب أن نأخذ في الاعتبار عدد الرموز التي نحتاجها لإنشاء النص الذي نريده. الرموز تكلف المال، لذا حيثما أمكن، يجب أن نحاول أن نكون اقتصاديين في عدد الرموز التي نستخدمها. على سبيل المثال، هل يمكننا صياغة الموجه بحيث نستخدم عددًا أقل من الرموز؟

    لتغيير الرموز المستخدمة، يمكنك استخدام معامل max_tokens. على سبيل المثال، إذا كنت تريد استخدام 100 رمز، يمكنك القيام بما يلي:

    completion = client.chat.completions.create(model=deployment, messages=messages, max_tokens=100)
  • التجربة مع درجة الحرارة. درجة الحرارة هي شيء لم نذكره حتى الآن ولكنه سياق مهم لكيفية أداء برنامجنا. كلما زادت قيمة درجة الحرارة، كلما كان الناتج أكثر عشوائية. وعلى العكس، كلما قلت قيمة درجة الحرارة، كلما كان الناتج أكثر توقعًا. فكر فيما إذا كنت تريد تنوعًا في الناتج أم لا.

    لتغيير درجة الحرارة، يمكنك استخدام معامل temperature. على سبيل المثال، إذا كنت تريد استخدام درجة حرارة 0.5، يمكنك القيام بما يلي:

    completion = client.chat.completions.create(model=deployment, messages=messages, temperature=0.5)

    ملاحظة، كلما اقتربت القيمة من 1.0، كلما كان الناتج أكثر تنوعًا.

المهمة

بالنسبة لهذه المهمة، يمكنك اختيار ما تريد بناؤه.

إليك بعض الاقتراحات:

  • قم بتعديل تطبيق مولد الوصفات لتحسينه أكثر. جرب قيم درجة الحرارة والموجهات لترى ما يمكنك التوصل إليه.
  • قم ببناء "رفيق دراسي". يجب أن يكون هذا التطبيق قادرًا على الإجابة عن أسئلة حول موضوع معين مثل Python، يمكنك أن يكون لديك موجهات مثل "ما هو موضوع معين في Python؟"، أو يمكنك أن يكون لديك موجه يقول، أرني الكود لموضوع معين، إلخ.
  • روبوت التاريخ، اجعل التاريخ ينبض بالحياة، وجه الروبوت ليلعب دور شخصية تاريخية معينة واسأله أسئلة عن حياته وأوقاته.

الحل

رفيق دراسي

فيما يلي موجه بداية، انظر كيف يمكنك استخدامه وتعديله حسب رغبتك.

- "You're an expert on the Python language

    Suggest a beginner lesson for Python in the following format:

    Format:
    - concepts:
    - brief explanation of the lesson:
    - exercise in code with solutions"

روبوت التاريخ

إليك بعض الموجهات التي يمكنك استخدامها:

- "You are Abe Lincoln, tell me about yourself in 3 sentences, and respond using grammar and words like Abe would have used"
- "You are Abe Lincoln, respond using grammar and words like Abe would have used:

   Tell me about your greatest accomplishments, in 300 words"

اختبار المعرفة

ما الذي تفعله فكرة درجة الحرارة؟

  1. تتحكم في مدى عشوائية الناتج.
  2. تتحكم في حجم الاستجابة.
  3. تتحكم في عدد الرموز المستخدمة.

🚀 التحدي

عند العمل على المهمة، حاول تغيير درجة الحرارة، جرب تعيينها إلى 0، 0.5، و1. تذكر أن 0 هو الأقل تنوعًا و1 هو الأكثر. ما القيمة التي تعمل بشكل أفضل لتطبيقك؟

عمل رائع! استمر في التعلم

بعد إكمال هذا الدرس، تحقق من مجموعة تعلم الذكاء الاصطناعي التوليدي لمواصلة تطوير معرفتك بالذكاء الاصطناعي التوليدي!

انتقل إلى الدرس السابع حيث سننظر في كيفية بناء تطبيقات الدردشة!


إخلاء المسؤولية:
تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي Co-op Translator. بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.