1. مقدمة
تاريخ آخر تعديل: 2023-11-27
ما هو الذكاء الاصطناعي التوليدي؟
يشير الذكاء الاصطناعي التوليدي إلى استخدام الذكاء الاصطناعي لإنشاء محتوى جديد، مثل النصوص والصور والموسيقى والملفات الصوتية والفيديوهات.
يستند الذكاء الاصطناعي التوليدي إلى النماذج الأساسية (نماذج الذكاء الاصطناعي الكبيرة) التي يمكنها تنفيذ مهام متعددة ومهام جاهزة للاستخدام، بما في ذلك التلخيص والأسئلة والأجوبة والتصنيف وغير ذلك. بالإضافة إلى ذلك، يمكن تكييف النماذج الأساسية مع حالات الاستخدام المستهدَفة باستخدام القليل جدًا من بيانات الأمثلة، وذلك لأنّها لا تتطلّب سوى الحد الأدنى من التدريب.
كيف يعمل الذكاء الاصطناعي التوليدي؟
يعمل الذكاء الاصطناعي التوليدي من خلال استخدام نموذج تعلُّم الآلة (ML) لتعلُّم الأنماط والعلاقات في مجموعة بيانات من المحتوى الذي أنشأه الإنسان. ثم يستخدم الأنماط التي تعلّمها لإنشاء محتوى جديد.
إنّ الطريقة الأكثر شيوعًا لتدريب نموذج ذكاء اصطناعي توليدي هي استخدام التعلُّم الموجَّه، حيث يتم تزويد النموذج بمجموعة من المحتوى الذي أنشأه الإنسان والتصنيفات المقابلة. بعد ذلك، يتعلّم كيفية إنشاء محتوى مشابه للمحتوى الذي ينشئه المستخدمون ويتم تصنيفه باستخدام التصنيفات نفسها.
ما هي التطبيقات الشائعة للذكاء الاصطناعي التوليدي؟
يعالج الذكاء الاصطناعي التوليدي كميات كبيرة من المحتوى، وينشئ معلومات وإجابات من خلال النصوص والصور والتنسيقات السهلة الاستخدام. يمكن استخدام الذكاء الاصطناعي التوليدي في ما يلي:
- تحسين تفاعلات العملاء من خلال تجارب محادثة وبحث محسّنة
- استكشاف كميات هائلة من البيانات غير المنظَّمة من خلال واجهات المحادثة والملخّصات
- المساعدة في المهام المتكررة، مثل الرد على طلبات تقديم المقترحات (RFP) وتكييف المحتوى التسويقي مع الثقافة المحلية بخمس لغات والتحقّق من امتثال عقود العملاء، وغير ذلك
ما هي عروض الذكاء الاصطناعي التوليدي التي تقدّمها Google Cloud؟
باستخدام Vertex AI، يمكنك التفاعل مع النماذج الأساسية وتخصيصها وتضمينها في تطبيقاتك، بدون الحاجة إلى خبرة كبيرة في تعلُّم الآلة. يمكنك الوصول إلى النماذج الأساسية على Model Garden أو ضبط النماذج من خلال واجهة مستخدم بسيطة على Generative AI Studio أو استخدام النماذج في دفتر ملاحظات لعلوم البيانات.
توفّر Vertex AI Search and Conversation للمطوّرين أسرع طريقة لإنشاء محركات بحث وبرامج دردشة تستند إلى الذكاء الاصطناعي التوليدي.
Duet AI هو أداة تعاون مستندة إلى الذكاء الاصطناعي ومتاحة على Google Cloud وبيئات التطوير المتكاملة لمساعدتك في إنجاز المزيد من المهام بشكل أسرع.
ما هو موضوع هذا الدرس التطبيقي حول الترميز؟
يركّز هذا الدرس التطبيقي حول الترميز على النموذج اللغوي الكبير PaLM 2 (LLM) المستضاف على Google Cloud Vertex AI الذي يشمل جميع منتجات وخدمات تعلُّم الآلة.
ستستخدم Java للتفاعل مع PaLM API، بالإضافة إلى أداة تنسيق إطار عمل النماذج اللغوية الكبيرة LangChain4J. ستتعرّف على أمثلة عملية مختلفة للاستفادة من النموذج اللغوي الكبير في الإجابة عن الأسئلة، وإنشاء الأفكار، واستخراج الكيانات والمحتوى المنظَّم، وتلخيص المحتوى.
أريد المزيد من المعلومات حول إطار عمل LangChain4J.
إطار عمل LangChain4J هو مكتبة مفتوحة المصدر لدمج النماذج اللغوية الكبيرة في تطبيقات Java، وذلك من خلال تنسيق المكوّنات المختلفة، مثل النموذج اللغوي الكبير نفسه، بالإضافة إلى أدوات أخرى مثل قواعد بيانات المتجهات (لعمليات البحث الدلالي) وأدوات تحميل المستندات وتقسيمها (لتحليل المستندات والتعلم منها) وأدوات تحليل الإخراج وغير ذلك.

ما ستتعلمه
- كيفية إعداد مشروع Java لاستخدام PaLM وLangChain4J
- كيفية إجراء طلبك الأول إلى نموذج PaLM النصي لإنشاء المحتوى والإجابة عن الأسئلة
- كيفية استخراج معلومات مفيدة من المحتوى غير المنظَّم (استخراج الكيانات أو الكلمات الرئيسية، الإخراج بتنسيق JSON)
- كيفية إجراء تصنيف المحتوى أو تحليل المشاعر باستخدام ميزة "الطلبات القليلة"
المتطلبات
- معرفة بلغة البرمجة Java
- مشروع على السحابة الإلكترونية من Google
- متصفّح، مثل Chrome أو Firefox
2. الإعداد والمتطلبات
إعداد البيئة بالسرعة التي تناسبك
- سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.



- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديلها في أي وقت.
- رقم تعريف المشروع هو معرّف فريد في جميع مشاريع Google Cloud ولا يمكن تغييره بعد ضبطه. تنشئ Cloud Console تلقائيًا سلسلة فريدة، ولا يهمّك عادةً ما هي. في معظم دروس البرمجة، عليك الرجوع إلى رقم تعريف مشروعك (يُشار إليه عادةً باسم
PROJECT_ID). إذا لم يعجبك المعرّف الذي تم إنشاؤه، يمكنك إنشاء معرّف عشوائي آخر. يمكنك بدلاً من ذلك تجربة اسم مستخدم من اختيارك ومعرفة ما إذا كان متاحًا. لا يمكن تغيير هذا الخيار بعد هذه الخطوة وسيظل ساريًا طوال مدة المشروع. - للعلم، هناك قيمة ثالثة، وهي رقم المشروع، تستخدمها بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات عن كل هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس التطبيقي حول الترميز الكثير، إن وُجدت أي تكلفة على الإطلاق. لإيقاف الموارد وتجنُّب تحمّل تكاليف تتجاوز هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.
بدء Cloud Shell
على الرغم من إمكانية تشغيل Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس العملي Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.
تفعيل Cloud Shell
- من Cloud Console، انقر على تفعيل Cloud Shell
.

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

يستغرق توفير Cloud Shell والاتصال به بضع لحظات فقط.

يتم تحميل هذا الجهاز الافتراضي بجميع أدوات التطوير اللازمة. توفّر هذه الخدمة دليلًا رئيسيًا دائمًا بسعة 5 غيغابايت وتعمل في Google Cloud، ما يؤدي إلى تحسين أداء الشبكة والمصادقة بشكل كبير. يمكن إنجاز معظم عملك في هذا الدرس التطبيقي حول الترميز، إن لم يكن كله، باستخدام متصفح.
بعد الاتصال بـ Cloud Shell، من المفترض أن يظهر لك أنّه تم إثبات هويتك وأنّه تم ضبط المشروع على رقم تعريف مشروعك.
- نفِّذ الأمر التالي في Cloud Shell للتأكّد من إكمال عملية المصادقة:
gcloud auth list
ناتج الأمر
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- نفِّذ الأمر التالي في Cloud Shell للتأكّد من أنّ أمر gcloud يعرف مشروعك:
gcloud config list project
ناتج الأمر
[core] project = <PROJECT_ID>
إذا لم يكن كذلك، يمكنك تعيينه من خلال هذا الأمر:
gcloud config set project <PROJECT_ID>
ناتج الأمر
Updated property [core/project].
3- إعداد بيئة التطوير
في هذا الدرس التطبيقي حول الترميز، ستستخدم وحدة Cloud Shell الطرفية وأداة تعديل الرموز البرمجية لتطوير برامج Java.
تفعيل واجهات برمجة التطبيقات في Vertex AI
- في Google Cloud Console، تأكَّد من ظهور اسم مشروعك في أعلى Google Cloud Console. إذا لم يكن كذلك، انقر على اختيار مشروع لفتح أداة اختيار المشاريع، ثم اختَر المشروع المطلوب.
- إذا لم تكن في قسم Vertex AI في وحدة تحكّم Google Cloud، اتّبِع الخطوات التالية:
- في بحث، أدخِل Vertex AI، ثم اضغط على Return
- في نتائج البحث، انقر على Vertex AI. ستظهر لوحة بيانات Vertex AI.
- انقر على تفعيل جميع واجهات برمجة التطبيقات المقترَحة في لوحة بيانات Vertex AI.
سيؤدي ذلك إلى تفعيل العديد من واجهات برمجة التطبيقات، ولكن أهمها في هذا الدرس التطبيقي حول الترميز هو aiplatform.googleapis.com، ويمكنك أيضًا تفعيله من سطر الأوامر في نافذة Cloud Shell الطرفية عن طريق تنفيذ الأمر التالي:
$ gcloud services enable aiplatform.googleapis.com
إنشاء بنية المشروع باستخدام Gradle
لإنشاء أمثلة على رموز Java البرمجية، ستستخدم أداة الإنشاء Gradle والإصدار 17 من Java. لإعداد مشروعك باستخدام Gradle، أنشئ في وحدة Cloud Shell الطرفية دليلاً (palm-workshop هنا)، ثم نفِّذ الأمر gradle init في هذا الدليل:
$ mkdir palm-workshop $ cd palm-workshop $ gradle init Select type of project to generate: 1: basic 2: application 3: library 4: Gradle plugin Enter selection (default: basic) [1..4] 2 Select implementation language: 1: C++ 2: Groovy 3: Java 4: Kotlin 5: Scala 6: Swift Enter selection (default: Java) [1..6] 3 Split functionality across multiple subprojects?: 1: no - only one application project 2: yes - application and library projects Enter selection (default: no - only one application project) [1..2] 1 Select build script DSL: 1: Groovy 2: Kotlin Enter selection (default: Groovy) [1..2] 1 Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no] Select test framework: 1: JUnit 4 2: TestNG 3: Spock 4: JUnit Jupiter Enter selection (default: JUnit Jupiter) [1..4] 4 Project name (default: palm-workshop): Source package (default: palm.workshop): > Task :init Get more help with your project: https://docs.gradle.org/7.4/samples/sample_building_java_applications.html BUILD SUCCESSFUL in 51s 2 actionable tasks: 2 executed
ستنشئ تطبيقًا (الخيار 2) باستخدام لغة Java (الخيار 3) بدون استخدام مشاريع فرعية (الخيار 1) باستخدام بنية Groovy لملف التصميم (الخيار 1) بدون استخدام ميزات التصميم الجديدة (الخيار no)، وإنشاء اختبارات باستخدام JUnit Jupiter (الخيار 4)، ويمكنك استخدام palm-workshop كاسم للمشروع، وبالمثل يمكنك استخدام palm.workshop لحزمة المصدر.
ستبدو بنية المشروع على النحو التالي:
├── gradle
│ └── ...
├── gradlew
├── gradlew.bat
├── settings.gradle
└── app
├── build.gradle
└── src
├── main
│ └── java
│ └── palm
│ └── workshop
│ └── App.java
└── test
└── ...
لنعدّل ملف app/build.gradle لإضافة بعض التبعيات اللازمة. يمكنك إزالة الاعتمادية guava إذا كانت متوفّرة، واستبدالها بتبعيات مشروع LangChain4J ومكتبة التسجيل لتجنُّب رسائل السجلّ المفقودة المزعجة:
dependencies {
// Use JUnit Jupiter for testing.
testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1'
// Logging library
implementation 'org.slf4j:slf4j-jdk14:2.0.9'
// This dependency is used by the application.
implementation 'dev.langchain4j:langchain4j-vertex-ai:0.24.0'
implementation 'dev.langchain4j:langchain4j:0.24.0'
}
هناك تبعيتان لـ LangChain4j:
- أحدهما في المشروع الأساسي،
- وواحد لوحدة Vertex AI المخصّصة.
لاستخدام Java 17 في تجميع برامجنا وتشغيلها، أضِف الكتلة التالية أسفل الكتلة plugins {}:
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
يجب إجراء تغيير آخر، وهو تعديل حزمة application في app/build.gradle، للسماح للمستخدمين بتجاوز الفئة الرئيسية التي سيتم تشغيلها في سطر الأوامر عند استدعاء أداة الإنشاء:
application {
mainClass = providers.systemProperty('javaMainClass')
.orElse('palm.workshop.App')
}
للتحقّق من أنّ ملف الإنشاء جاهز لتشغيل تطبيقك، يمكنك تشغيل الفئة الرئيسية التلقائية التي تطبع رسالة Hello World! بسيطة:
$ ./gradlew run -DjavaMainClass=palm.workshop.App > Task :app:run Hello World! BUILD SUCCESSFUL in 3s 2 actionable tasks: 2 executed
أنت الآن مستعد للبرمجة باستخدام نموذج PaLM اللغوي الكبير للنصوص، وذلك من خلال استخدام مشروع LangChain4J.
للعلم، إليك الشكل الذي يجب أن يبدو عليه ملف app/build.gradle build الكامل الآن:
plugins {
// Apply the application plugin to add support for building a CLI application in Java.
id 'application'
}
java {
toolchain {
// Ensure we compile and run on Java 17
languageVersion = JavaLanguageVersion.of(17)
}
}
repositories {
// Use Maven Central for resolving dependencies.
mavenCentral()
}
dependencies {
// Use JUnit Jupiter for testing.
testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1'
// This dependency is used by the application.
implementation 'dev.langchain4j:langchain4j-vertex-ai:0.24.0'
implementation 'dev.langchain4j:langchain4j:0.24.0'
implementation 'org.slf4j:slf4j-jdk14:2.0.9'
}
application {
mainClass = providers.systemProperty('javaMainClass').orElse('palm.workshop.App')
}
tasks.named('test') {
// Use JUnit Platform for unit tests.
useJUnitPlatform()
}
4. إجراء مكالمتك الأولى مع نموذج PaLM النصي
بعد إعداد المشروع بشكل صحيح، حان الوقت لطلب بيانات من PaLM API.
أنشئ فئة جديدة باسم TextPrompts.java في الدليل app/src/main/java/palm/workshop (بجانب الفئة التلقائية App.java)، واكتب المحتوى التالي:
package palm.workshop;
import dev.langchain4j.model.output.Response;
import dev.langchain4j.model.vertexai.VertexAiLanguageModel;
public class TextPrompts {
public static void main(String[] args) {
VertexAiLanguageModel model = VertexAiLanguageModel.builder()
.endpoint("us-central1-aiplatform.googleapis.com:443")
.project("YOUR_PROJECT_ID")
.location("us-central1")
.publisher("google")
.modelName("text-bison@001")
.maxOutputTokens(500)
.build();
Response<String> response = model.generate("What are large language models?");
System.out.println(response.content());
}
}
في المثال الأول، عليك استيراد الفئة Response ونموذج Vertex AI اللغوي لـ PaLM.
بعد ذلك، في طريقة main، ستضبط نموذج اللغة باستخدام أداة الإنشاء الخاصة بـ VertexAiLanguageModel لتحديد ما يلي:
- نقطة النهاية
- المشروع،
- المنطقة
- الناشر
- واسم النموذج (
text-bison@001).
بعد أن يصبح نموذج اللغة جاهزًا، يمكنك استدعاء طريقة generate() وتمرير "الطلب" (أي سؤالك أو تعليماتك التي تريد إرسالها إلى النموذج اللغوي الكبير). في هذا القسم، يمكنك طرح سؤال بسيط حول ماهية النماذج اللغوية الكبيرة. يمكنك تغيير هذا الطلب لتجربة أسئلة أو مهام مختلفة.
لتشغيل هذه الفئة، نفِّذ الأمر التالي في وحدة Cloud Shell الطرفية:
./gradlew run -DjavaMainClass=palm.workshop.TextPrompts
من المفترض أن تظهر لك نتيجة مشابهة لما يلي:
Large language models (LLMs) are artificial intelligence systems that can understand and generate human language. They are trained on massive datasets of text and code, and can learn to perform a wide variety of tasks, such as translating languages, writing different kinds of creative content, and answering your questions in an informative way. LLMs are still under development, but they have the potential to revolutionize many industries. For example, they could be used to create more accurate and personalized customer service experiences, to help doctors diagnose and treat diseases, and to develop new forms of creative expression. However, LLMs also raise a number of ethical concerns. For example, they could be used to create fake news and propaganda, to manipulate people's behavior, and to invade people's privacy. It is important to carefully consider the potential risks and benefits of LLMs before they are widely used. Here are some of the key features of LLMs: * They are trained on massive datasets of text and code. * They can learn to perform a wide variety of tasks, such as translating languages, writing different kinds of creative content, and answering your questions in an informative way. * They are still under development, but they have the potential to revolutionize many industries. * They raise a number of ethical concerns, such as the potential for fake news, propaganda, and invasion of privacy.
تتيح لك أداة الإنشاء VertexAILanguageModel تحديد مَعلمات اختيارية تتضمّن بعض القيم التلقائية التي يمكنك تجاهلها. وإليك بعض الأمثلة:
.temperature(0.2): لتحديد مستوى الإبداع المطلوب في الردّ (0 يعني مستوى إبداع منخفضًا وغالبًا ما يكون الردّ أكثر واقعية، بينما 1 يعني مستوى إبداع أعلى).maxOutputTokens(50)— في المثال، تم طلب 500 رمز مميز (تعادل 3 رموز مميزة حوالي 4 كلمات)، وذلك حسب طول الإجابة التي تريد إنشاءها.topK(20): لاختيار كلمة عشوائية من بين عدد أقصى من الكلمات المحتملة لإكمال النص (من 1 إلى 40).topP(0.95): لاختيار الكلمات المحتملة التي يصل مجموع احتمالاتها إلى رقم النقطة العائمة هذا (بين 0 و1).maxRetries(3): في حال تجاوزت عدد الطلبات المسموح به في كل مرة، يمكنك أن تطلب من النموذج إعادة محاولة إجراء المكالمة 3 مرات مثلاً.
تتسم النماذج اللغوية الكبيرة بقدرات هائلة، ويمكنها تقديم إجابات عن أسئلة معقّدة، كما أنّها قادرة على التعامل مع مجموعة كبيرة ومتنوعة من المهام الشيقة. في القسم التالي، سنلقي نظرة على مهمة مفيدة: استخراج البيانات المنظَّمة من النص.
5- استخراج المعلومات من النصوص غير المنظَّمة
في القسم السابق، أنشأت بعض نصوص الإخراج. لا بأس في ذلك إذا كنت تريد عرض هذا الناتج مباشرةً للمستخدمين. ولكن إذا أردت استرداد البيانات المذكورة في هذا الناتج، كيف يمكنك استخراج هذه المعلومات من النص غير المنظَّم؟
لنفترض أنّك تريد استخراج اسم شخص وعمره، مع الأخذ في الاعتبار سيرة ذاتية أو وصفًا لهذا الشخص. يمكنك توجيه النموذج اللغوي الكبير لإنشاء بنى بيانات JSON من خلال تعديل الطلب على النحو التالي (يُعرف ذلك عادةً باسم "هندسة الطلبات"):
Extract the name and age of the person described below.
Return a JSON document with a "name" and an "age" property,
following this structure: {"name": "John Doe", "age": 34}
Return only JSON, without any markdown markup surrounding it.
Here is the document describing the person:
---
Anna is a 23 year old artist based in Brooklyn, New York. She was
born and raised in the suburbs of Chicago, where she developed a
love for art at a young age. She attended the School of the Art
Institute of Chicago, where she studied painting and drawing.
After graduating, she moved to New York City to pursue her art career.
Anna's work is inspired by her personal experiences and observations
of the world around her. She often uses bright colors and bold lines
to create vibrant and energetic paintings. Her work has been
exhibited in galleries and museums in New York City and Chicago.
---
JSON:
عدِّل استدعاء model.generate() في الفئة TextPrompts لتمرير طلب النص الكامل أعلاه:
Response<String> response = model.generate("""
Extract the name and age of the person described below.
Return a JSON document with a "name" and an "age" property, \
following this structure: {"name": "John Doe", "age": 34}
Return only JSON, without any markdown markup surrounding it.
Here is the document describing the person:
---
Anna is a 23 year old artist based in Brooklyn, New York. She was born and
raised in the suburbs of Chicago, where she developed a love for art at a
young age. She attended the School of the Art Institute of Chicago, where
she studied painting and drawing. After graduating, she moved to New York
City to pursue her art career. Anna's work is inspired by her personal
experiences and observations of the world around her. She often uses bright
colors and bold lines to create vibrant and energetic paintings. Her work
has been exhibited in galleries and museums in New York City and Chicago.
---
JSON:
"""
);
إذا شغّلت هذا الطلب في فئة TextPrompts، من المفترض أن يعرض سلسلة JSON التالية التي يمكنك تحليلها باستخدام محلّل JSON، مثل مكتبة GSON:
$ ./gradlew run -DjavaMainClass=palm.workshop.TextPrompts
> Task :app:run
{"name": "Anna", "age": 23}
BUILD SUCCESSFUL in 24s
2 actionable tasks: 1 executed, 1 up-to-date
نعم. تبلغ "آنا" من العمر 23 عامًا.
6. نماذج الطلبات والطلبات المنظَّمة
ما هو أبعد من الإجابة عن الأسئلة؟
تُعدّ النماذج اللغوية الكبيرة، مثل PaLM، فعّالة في الإجابة عن الأسئلة، ولكن يمكنك استخدامها في العديد من المهام الأخرى. على سبيل المثال، جرِّب الطلبات التالية في Generative AI Studio (أو من خلال تعديل الفئة TextPrompts). غيِّر الكلمات المكتوبة بأحرف كبيرة بأفكارك الخاصة، وافحص الناتج:
- الترجمة — "ترجمة الجملة التالية إلى الفرنسية: YOUR_SENTENCE_HERE"
- التلخيص: "قدِّم ملخّصًا للمستند التالي: PASTE_YOUR_DOC"
- إنشاء محتوى إبداعي — "اكتب قصيدة عن TOPIC_OF_THE_POEM"
- البرمجة: "كيفية كتابة دالة فيبوناتشي بلغة PROGRAMMING_LANGUAGE"
نماذج الطلبات
إذا جرّبت الطلبات أعلاه للترجمة أو التلخيص أو إنشاء محتوى إبداعي أو تنفيذ مهام برمجية، تكون قد استبدلت قيم العناصر النائبة بأفكارك الخاصة. بدلاً من ذلك، يمكنك أيضًا الاستفادة من "نماذج الطلبات" التي تتيح لك تحديد قيم العناصر النائبة هذه، ثم ملء الفراغ ببياناتك.
لِنلقِ نظرة على طلب لذيذ ومبتكر، وذلك عن طريق استبدال محتوى طريقة main() بالكامل بالرمز التالي:
VertexAiLanguageModel model = VertexAiLanguageModel.builder()
.endpoint("us-central1-aiplatform.googleapis.com:443")
.project("YOUR_PROJECT_ID")
.location("us-central1")
.publisher("google")
.modelName("text-bison@001")
.maxOutputTokens(300)
.build();
PromptTemplate promptTemplate = PromptTemplate.from("""
Create a recipe for a {{dish}} with the following ingredients: \
{{ingredients}}, and give it a name.
"""
);
Map<String, Object> variables = new HashMap<>();
variables.put("dish", "dessert");
variables.put("ingredients", "strawberries, chocolate, whipped cream");
Prompt prompt = promptTemplate.apply(variables);
Response<String> response = model.generate(prompt);
System.out.println(response.content());
ومن خلال إضافة عمليات الاستيراد التالية:
import dev.langchain4j.model.input.Prompt;
import dev.langchain4j.model.input.PromptTemplate;
import java.util.HashMap;
import java.util.Map;
بعد ذلك، شغِّل التطبيق مرة أخرى. يجب أن يبدو الناتج على النحو التالي:
$ ./gradlew run -DjavaMainClass=palm.workshop.TextPrompts > Task :app:run **Strawberry Shortcake** Ingredients: * 1 pint strawberries, hulled and sliced * 1/2 cup sugar * 1/4 cup cornstarch * 1/4 cup water * 1 tablespoon lemon juice * 1/2 cup heavy cream, whipped * 1/4 cup confectioners' sugar * 1/4 teaspoon vanilla extract * 6 graham cracker squares, crushed Instructions: 1. In a medium saucepan, combine the strawberries, sugar, cornstarch, water, and lemon juice. Bring to a boil over medium heat, stirring constantly. Reduce heat and simmer for 5 minutes, or until the sauce has thickened. 2. Remove from heat and let cool slightly. 3. In a large bowl, combine the whipped cream, confectioners' sugar, and vanilla extract. Beat until soft peaks form. 4. To assemble the shortcakes, place a graham cracker square on each of 6 dessert plates. Top with a scoop of whipped cream, then a spoonful of strawberry sauce. Repeat layers, ending with a graham cracker square. 5. Serve immediately. **Tips:** * For a more elegant presentation, you can use fresh strawberries instead of sliced strawberries. * If you don't have time to make your own whipped cream, you can use store-bought whipped cream.
لذيذ!
باستخدام نماذج الطلبات، يمكنك إدخال المَعلمات المطلوبة قبل استدعاء طريقة إنشاء النصوص. هذه طريقة رائعة لنقل البيانات وتخصيص الطلبات لقيم مختلفة يقدّمها المستخدمون.
كما يوحي اسم الفئة، تنشئ الفئة PromptTemplate طلب نموذج، ويمكنك تعيين قيم لعناصر العنصر النائب من خلال تطبيق خريطة لأسماء العناصر النائبة وقيمها.
الطلبات المنظَّمة (اختياري)
هناك طريقة أخرى لتنظيم الطلبات وهي باستخدام التعليق التوضيحي @StructuredPrompt، إذا كنت تريد استخدام أسلوب أكثر ثراءً يستند إلى الكائنات. يمكنك إضافة تعليق توضيحي إلى فئة باستخدام هذا التعليق التوضيحي، وتتطابق حقولها مع العناصر النائبة المحدّدة في الطلب. لنطّلِع على ذلك عمليًا.
أولاً، نحتاج إلى بعض عمليات الاستيراد الجديدة:
import java.util.Arrays;
import java.util.List;
import dev.langchain4j.model.input.structured.StructuredPrompt;
import dev.langchain4j.model.input.structured.StructuredPromptProcessor;
بعد ذلك، يمكننا إنشاء فئة ثابتة داخلية ضمن فئة TextPrompts تجمع البيانات اللازمة لتمرير العناصر النائبة في الطلب الموصوف في التعليق التوضيحي @StructuredPrompt:
@StructuredPrompt("Create a recipe of a {{dish}} that can be prepared using only {{ingredients}}")
static class RecipeCreationPrompt {
String dish;
List<String> ingredients;
}
بعد ذلك، أنشئ مثيلاً للفئة الجديدة وقدِّم لها الطبق والمكونات الخاصة بوصفتنا، ثم أنشئ الطلب ومرِّره إلى الطريقة generate() كما فعلنا سابقًا:
RecipeCreationPrompt createRecipePrompt = new RecipeCreationPrompt();
createRecipePrompt.dish = "salad";
createRecipePrompt.ingredients = Arrays.asList("cucumber", "tomato", "feta", "onion", "olives");
Prompt prompt = StructuredPromptProcessor.toPrompt(createRecipePrompt);
Response<String> response = model.generate(prompt);
بدلاً من ملء الفجوات من خلال خريطة، يمكنك استخدام عنصر Java يتضمّن حقولاً يمكن إكمالها تلقائيًا من خلال بيئة التطوير المتكاملة (IDE)، وذلك بطريقة أكثر أمانًا من حيث النوع.
إليك الرمز الكامل إذا كنت تريد لصق هذه التغييرات بسهولة أكبر في فئة TextPrompts:
package palm.workshop;
import java.util.Arrays;
import java.util.List;
import dev.langchain4j.model.input.Prompt;
import dev.langchain4j.model.output.Response;
import dev.langchain4j.model.vertexai.VertexAiLanguageModel;
import dev.langchain4j.model.input.structured.StructuredPrompt;
import dev.langchain4j.model.input.structured.StructuredPromptProcessor;
public class TextPrompts {
@StructuredPrompt("Create a recipe of a {{dish}} that can be prepared using only {{ingredients}}")
static class RecipeCreationPrompt {
String dish;
List<String> ingredients;
}
public static void main(String[] args) {
VertexAiLanguageModel model = VertexAiLanguageModel.builder()
.endpoint("us-central1-aiplatform.googleapis.com:443")
.project("YOUR_PROJECT_ID")
.location("us-central1")
.publisher("google")
.modelName("text-bison@001")
.maxOutputTokens(300)
.build();
RecipeCreationPrompt createRecipePrompt = new RecipeCreationPrompt();
createRecipePrompt.dish = "salad";
createRecipePrompt.ingredients = Arrays.asList("cucumber", "tomato", "feta", "onion", "olives");
Prompt prompt = StructuredPromptProcessor.toPrompt(createRecipePrompt);
Response<String> response = model.generate(prompt);
System.out.println(response.content());
}
}
7. تصنيف النصوص وتحليل المشاعر
على غرار ما تعلّمته في القسم السابق، ستتعرّف على أسلوب آخر من "هندسة الطلبات" لجعل نموذج PaLM يصنّف النصوص أو يحلّل المشاعر. لنتحدّث عن التلقين ببضع أمثلة. إنّها طريقة لتحسين طلباتك من خلال تقديم بضعة أمثلة تساعد في توجيه النموذج اللغوي إلى النتيجة المطلوبة، ما يتيح له فهم قصدك بشكل أفضل.
لنعدّل فئة TextPrompts للاستفادة من نماذج الطلبات:
package palm.workshop;
import java.util.Map;
import dev.langchain4j.model.output.Response;
import dev.langchain4j.model.vertexai.VertexAiLanguageModel;
import dev.langchain4j.model.input.Prompt;
import dev.langchain4j.model.input.PromptTemplate;
public class TextPrompts {
public static void main(String[] args) {
VertexAiLanguageModel model = VertexAiLanguageModel.builder()
.endpoint("us-central1-aiplatform.googleapis.com:443")
.project("YOUR_PROJECT_ID")
.location("us-central1")
.publisher("google")
.modelName("text-bison@001")
.maxOutputTokens(10)
.build();
PromptTemplate promptTemplate = PromptTemplate.from("""
Analyze the sentiment of the text below. Respond only with one word to describe the sentiment.
INPUT: This is fantastic news!
OUTPUT: POSITIVE
INPUT: Pi is roughly equal to 3.14
OUTPUT: NEUTRAL
INPUT: I really disliked the pizza. Who would use pineapples as a pizza topping?
OUTPUT: NEGATIVE
INPUT: {{text}}
OUTPUT:
""");
Prompt prompt = promptTemplate.apply(
Map.of("text", "I love strawberries!"));
Response<String> response = model.generate(prompt);
System.out.println(response.content());
}
}
لاحظ أسلوب تقديم بعض الأمثلة على الطلبات والنتائج في الطلب. هذه هي "اللقطات القليلة" التي تساعد النموذج اللغوي الكبير في اتّباع البنية نفسها. عندما يتلقّى النموذج إدخالاً، سيسعى إلى عرض ناتج يطابق نمط الإدخال/الإخراج.
يجب أن يؤدي تشغيل البرنامج إلى عرض الكلمة POSITIVE فقط، لأنّ الفراولة لذيذة أيضًا!
$ ./gradlew run -DjavaMainClass=palm.workshop.TextPrompts
> Task :app:run
POSITIVE
يُعدّ تحليل المشاعر أيضًا أحد سيناريوهات تصنيف المحتوى. يمكنك تطبيق أسلوب "التلقين ببضعة أمثلة" نفسه لتصنيف المستندات المختلفة إلى مجموعات فئات مختلفة.
8. تهانينا
تهانينا، لقد أنشأت بنجاح أول تطبيق للذكاء الاصطناعي التوليدي في Java باستخدام LangChain4J وPaLM API. لقد تبيّن لك خلال هذه الرحلة أنّ النماذج اللغوية الكبيرة تتمتّع بقدرات هائلة ويمكنها التعامل مع مهام مختلفة، مثل الإجابة عن الأسئلة واستخراج البيانات والتلخيص وتصنيف النصوص وتحليل المشاعر وغير ذلك.
ما هي الخطوات التالية؟
اطّلِع على بعض الدروس البرمجية التالية لتتعمّق في استخدام PaLM في Java:
Further reading
- حالات الاستخدام الشائعة للذكاء الاصطناعي التوليدي
- مصادر تدريب حول الذكاء الاصطناعي التوليدي
- التفاعل مع PaLM من خلال Generative AI Studio
- الذكاء الاصطناعي المسؤول