1. Giriş
Son güncelleme tarihi: 27.11.2023
Üretken yapay zeka nedir?
Üretken yapay zeka veya üretken yapay zeka; metin, resim, müzik, ses ve video gibi yeni içerikler oluşturmak için yapay zekanın kullanılmasını ifade eder.
Üretken yapay zeka, çoklu görevler gerçekleştirebilen ve özetleme, soru-cevap, sınıflandırma gibi kullanıma hazır görevleri gerçekleştirebilen temel modellerden (büyük yapay zeka modelleri) desteklenir. Ayrıca temel modeller, minimum eğitim gereksinimiyle, çok az örnek veriyle hedeflenen kullanım alanları için uyarlanabilir.
Üretken yapay zeka nasıl çalışır?
Üretken yapay zeka, insan tarafından oluşturulan içeriklerden oluşan bir veri kümesindeki kalıpları ve ilişkileri öğrenmek için ML (Makine Öğrenimi) modeli kullanarak çalışır. Ardından öğrenilen kalıpları kullanarak yeni içerikler üretir.
Üretken yapay zeka modellerini eğitmenin en yaygın yöntemi, gözetimli öğrenmedir. Modele, insan tarafından oluşturulan bir dizi içerik ve ilgili etiketler verilir. Ardından, insan tarafından oluşturulan içeriğe benzer ve aynı etiketlerle etiketlenmiş içerikler üretmeyi öğrenir.
Yaygın olarak kullanılan üretken yapay zeka uygulamaları nelerdir?
Üretken yapay zeka çok büyük içerikleri işleyerek metinler, resimler ve kullanıcı dostu biçimler aracılığıyla analizler ve yanıtlar oluşturur. Üretken yapay zeka şu amaçlarla kullanılabilir:
- Gelişmiş sohbet ve arama deneyimleriyle müşteri etkileşimlerini iyileştirin
- Sohbet arayüzleri ve özetler sayesinde çok sayıda yapılandırılmamış veriyi keşfedin
- Teklif taleplerini (RFP'leri) yanıtlama, pazarlama içeriğini beş dilde yerelleştirme, müşteri sözleşmelerini uygunluk açısından kontrol etme gibi tekrarlanan görevler konusunda destek sağlama ve daha pek çok işlem
Google Cloud hangi üretken yapay zeka tekliflerini sunuyor?
Vertex AI sayesinde temel modellerle etkileşime girin, bunları özelleştirin ve uygulamalarınızda kullanın (makine öğrenimine çok az hakim olun veya hiç gerektirmez). Model Bahçe'de temel modellere erişin, Üretken Yapay Zeka Studio'daki basit bir kullanıcı arayüzüyle modellerde ince ayar yapın veya modelleri bir veri bilimi not defterinde kullanın.
Vertex AI Arama ve Sohbet, geliştiricilere üretken yapay zeka destekli arama motorları ve chatbot'lar geliştirmenin en hızlı yolunu sunar.
Duet AI ise Google Cloud ve IDE'lerde daha fazla işi daha kısa sürede yapmanıza yardımcı olan yapay zeka destekli ortak çalışmanızdır.
Bu codelab'in odaklandığı konu nedir?
Bu codelab'de, Google Cloud Vertex AI'da barındırılan ve tüm makine öğrenimi ürün ve hizmetlerini kapsayan PaLM 2 Büyük Dil Modeli (LLM) üzerinde odaklanılmaktadır.
LangChain4J LLM çerçevesi orkestratörü ile birlikte PaLM API ile etkileşim kurmak için Java'yı kullanacaksınız. Soru yanıtlama, fikir üretme, varlık ve yapılandırılmış içerik ayıklama ve özetleme konularında LLM'den yararlanmak için farklı somut örnekler üzerinden yapacaksınız.
LangChain4J çerçevesi hakkında daha fazla bilgi
LangChain4J çerçevesi, büyük dil modellerini Java uygulamalarınıza entegre ederek LLM'nin kendisi gibi çeşitli bileşenlerin yanı sıra vektör veritabanları (anlamsal aramalar için), belge yükleyiciler ve ayırıcılar (belgeleri analiz etmek ve onlardan öğrenmek için), çıkış ayrıştırıcılar ve daha fazlasını düzenleyerek diğer araçları da entegre eden açık kaynak bir kitaplıktır.
Neler öğreneceksiniz?
- PaLM ve LangChain4J'yi kullanmak için bir Java projesi oluşturma
- İçerik oluşturmak ve soruları yanıtlamak için PaLM metin modeline ilk çağrınızı yapma
- Yapılandırılmamış içerikten yararlı bilgileri ayıklama (varlık veya anahtar kelime ayıklama, JSON biçiminde çıkış)
- Birkaç çekimle içerik sınıflandırma veya yaklaşım analizi yapma
Gerekenler
- Java programlama dili bilgisi
- Bir Google Cloud projesi
- Chrome veya Firefox gibi bir tarayıcı
2. Kurulum ve şartlar
Kendi hızınızda ortam kurulumu
- Google Cloud Console'da oturum açıp yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.
- Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. İstediğiniz zaman güncelleyebilirsiniz.
- Proje Kimliği, tüm Google Cloud projelerinde benzersizdir ve değiştirilemez (belirlendikten sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. bunun ne olduğunu umursamıyorsunuz. Çoğu codelab'de proje kimliğinizi (genellikle
PROJECT_ID
olarak tanımlanır) belirtmeniz gerekir. Oluşturulan kimliği beğenmezseniz rastgele bir kimlik daha oluşturabilirsiniz. Alternatif olarak, kendi ölçümünüzü deneyip mevcut olup olmadığına bakabilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince kalır. - Bilginiz olması açısından, bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Sonraki adımda, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırmanın tekrarlanmasını önlemek amacıyla kaynakları kapatmak için oluşturduğunuz kaynakları silebilir veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.
Cloud Shell'i başlatma
Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilse de bu codelab'de Cloud'da çalışan bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız.
Cloud Shell'i etkinleştirme
- Cloud Console'da, Cloud Shell'i etkinleştir simgesini tıklayın.
Cloud Shell'i ilk kez başlatıyorsanız ne olduğunu açıklayan bir ara ekran gösterilir. Ara bir ekran görüntülendiyse Devam'ı tıklayın.
Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.
Gereken tüm geliştirme araçları bu sanal makinede yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu codelab'deki çalışmalarınızın tamamı olmasa bile büyük bir kısmı tarayıcıyla yapılabilir.
Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığını göreceksiniz.
- Kimlik doğrulamanızın tamamlandığını onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud auth list
Komut çıkışı
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- gcloud komutunun projenizi bildiğini onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project
Komut çıkışı
[core] project = <PROJECT_ID>
Doğru değilse aşağıdaki komutla ayarlayabilirsiniz:
gcloud config set project <PROJECT_ID>
Komut çıkışı
Updated property [core/project].
3. Geliştirme ortamınızı hazırlama
Bu codelab'de, Java programlarınızı geliştirmek için Cloud Shell terminalini ve kod düzenleyiciyi kullanacaksınız.
Vertex AI API'lerini etkinleştirme
- Google Cloud konsolunda projenizin adının, Google Cloud konsolunuzun en üst kısmında gösterildiğinden emin olun. Açık değilse Proje Seç'i tıklayarak Proje Seçici'yi açın ve istediğiniz projeyi seçin.
- Google Cloud Console'un Vertex AI bölümünde değilseniz aşağıdakileri yapın:
- Arama'ya Vertex AI yazıp geri dönün
- Arama sonuçlarında Vertex AI Vertex AI kontrol paneli görünür'ü tıklayın.
- Vertex AI kontrol panelinde Enable All Recommended APIs'ı (Önerilen Tüm API'leri Etkinleştir) tıklayın.
Bu işlem çeşitli API'leri etkinleştirir ancak codelab için en önemli aiplatform.googleapis.com
API'sidir. Bu API'yi komut satırından Cloud Shell terminalinde aşağıdaki komutu çalıştırarak da etkinleştirebilirsiniz:
$ gcloud services enable aiplatform.googleapis.com
Gradle ile proje yapısı oluşturma
Java kodu örneklerinizi oluşturmak için Gradle derleme aracını ve Java'nın 17 sürümünü kullanacaksınız. Gradle ile projenizi ayarlamak için Cloud Shell terminalinde bir dizin oluşturun (burada palm-workshop
), o dizinde gradle init
komutunu çalıştırın:
$ 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
Java dilini (ikinci seçenek) kullanarak, alt projeler olmadan (1. seçenek) uygulama (ikinci seçenek) ile bir uygulama (1. seçenek) kullanarak, yeni derleme özelliklerini kullanma (seçenek no.) ile testler oluşturacaksınız (4. seçenek) ve proje adı için de palm.palmpalworkshop gibi kaynak paketi kullanabilirsiniz.
Proje yapısı şöyle görünecektir:
├── gradle │ └── ... ├── gradlew ├── gradlew.bat ├── settings.gradle └── app ├── build.gradle └── src ├── main │ └── java │ └── palm │ └── workshop │ └── App.java └── test └── ...
app/build.gradle
dosyasını güncelleyerek gerekli olan bazı bağımlılıkları ekleyelim. Varsa guava
bağımlılığını kaldırabilir, yerine LangChain4J projesi ve günlük kaydı kitaplığına ilişkin bağımlılıklarla değiştirerek kayıp günlük kaydedici iletilerinin sorun yaşamasını önleyebilirsiniz:
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 için 2 bağımlılık vardır:
- biri temel projede yer alıyor
- diğeri de özel Vertex AI modülü içindir.
Programlarımızı derlemek ve çalıştırmak için Java 17'yi kullanmak istiyorsanız plugins {}
bloğunun altına şu bloğu ekleyin:
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
Yapılacak bir değişiklik daha var: app/build.gradle
ürününün application
bloğunu güncelleyerek kullanıcıların derleme aracını çağırırken komut satırında çalıştırılacak ana sınıfı geçersiz kılabilmesini sağlayın:
application {
mainClass = providers.systemProperty('javaMainClass')
.orElse('palm.workshop.App')
}
Derleme dosyanızın uygulamanızı çalıştırmaya hazır olup olmadığını kontrol etmek için, basit bir Hello World!
mesajı yazdıran varsayılan ana sınıfı çalıştırabilirsiniz:
$ ./gradlew run -DjavaMainClass=palm.workshop.App > Task :app:run Hello World! BUILD SUCCESSFUL in 3s 2 actionable tasks: 2 executed
Artık LangChain4J projesini kullanarak PaLM büyük dil metin modeliyle programlamaya hazırsınız!
Referans olması amacıyla, app/build.gradle
derleme dosyasının tamamı şu anda aşağıdaki gibi görünecektir:
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'nin metin modeline ilk çağrınız yapılıyor
Proje düzgün şekilde ayarlandığına göre PaLM API'yi çağırmanın zamanı geldi.
app/src/main/java/palm/workshop
dizininde (varsayılan App.java
sınıfının yanında) TextPrompts.java
adında yeni bir sınıf oluşturun ve şu içeriği yazın:
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());
}
}
Bu ilk örnekte Response
sınıfını ve PaLM için Vertex AI dil modelini içe aktarmanız gerekir.
Ardından, main
yönteminde VertexAiLanguageModel
için oluşturucuyu kullanarak dil modelini yapılandırarak şunları belirtin:
- uç nokta.
- gösterir.
- bölgeye,
- yayıncı,
- ve modelin adı (
text-bison@001
).
Dil modeli hazır olduğuna göre artık generate()
yöntemini çağırabilir ve "isteminizi" iletebilirsiniz (ör. sorunuz veya LLM'ye gönderilecek talimatlar). Burada LLM'lerin ne olduğu hakkında basit bir soru soruyorsunuz. Ancak farklı sorular veya görevler denemek için bu istemi değiştirmekten çekinmeyin.
Bu sınıfı çalıştırmak için Cloud Shell terminalinde aşağıdaki komutu çalıştırın:
./gradlew run -DjavaMainClass=palm.workshop.TextPrompts
Şuna benzer bir çıkış görürsünüz:
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
oluşturucu, geçersiz kılabileceğiniz bazı varsayılan değerlere sahip isteğe bağlı parametreler tanımlamanızı sağlar. Aşağıda bazı örnekler verilmiştir:
.temperature(0.2)
: Yanıtın nasıl reklam öğesi olmasını istediğinizi tanımlamak için (0 az reklam öğesi ve genellikle daha gerçekçi, 1 ise daha fazla reklam öğesi içindir).maxOutputTokens(50)
: Örnekte, oluşturulan yanıtın ne kadar süre olmasını istediğinize bağlı olarak 500 jeton istendi (3 jeton yaklaşık olarak 4 kelimeye eşdeğerdir).topK(20)
— metin tamamlama için mümkün olan maksimum sayıda kelime arasından rastgele bir kelime seçmek için (1 ile 40 arasında).topP(0.95)
— Toplam olasılığı bu kayan nokta sayısına denk gelen olası kelimeleri seçmek için (0 ile 1 arasında).maxRetries(3)
: İstek başına zaman kotasını aşıyorsanız modelin aramayı 3 kez yeniden denemesini sağlayabilirsiniz.
Büyük Dil Modelleri çok güçlüdür, karmaşık sorulara yanıt verebilir ve çok sayıda ilginç görevi yerine getirebilir. Bir sonraki bölümde, kullanışlı bir göreve göz atacağız: metinden yapılandırılmış verileri çıkarma.
5. Yapılandırılmamış metindeki bilgileri çıkarma
Önceki bölümde birtakım metin çıktıları oluşturdunuz. Bu çıkışı doğrudan son kullanıcılarınıza göstermek istiyorsanız bu bir sorun yaratmaz. Ancak bu çıkışta bahsedilen verileri almak isterseniz bu bilgileri yapılandırılmamış metinden nasıl çıkarırsınız?
Bir kişinin adını ve yaşını, biyografisi veya açıklamasına göre çıkarmak istediğinizi varsayalım. İstemi şu şekilde düzenleyerek büyük dil modeline JSON veri yapıları oluşturma talimatı verebilirsiniz (bu genellikle "istem mühendisliği" olarak adlandırılır):
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
sınıfındaki model.generate()
çağrısını yukarıdaki metin isteminin tamamını iletecek şekilde değiştirin:
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:
"""
);
Bu istemi TextPrompts
sınıfımızda çalıştırırsanız komut, GSON kitaplığı gibi bir JSON ayrıştırıcıyla ayrıştırabileceğiniz şu JSON dizesini döndürür:
$ ./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
Evet! Ayşe 23 yaşında.
6. İstem şablonları ve yapılandırılmış istemler
Soru yanıtlamanın ötesinde
PaLM gibi büyük dil modelleri soruları yanıtlamak için güçlüdür ancak bunları çok daha fazla görev için kullanabilirsiniz. Örneğin, Generative AI Studio'da aşağıdaki istemleri deneyin (veya TextPrompts
sınıfını değiştirerek). Büyük harfli kelimeleri kendi fikirlerinizle değiştirin ve çıktılarını inceleyin:
- Çeviri — "Şu cümleyi Fransızcaya çevir: YOUR_SENTENCE_HERE"
- Özet — "Şu dokümanın özetini sağlayın: PASTE_YOUR_DOC"
- Reklam öğesi oluşturma — "TOPIC_OF_THE_POEM hakkında bir şiir yazın"
- Programlama — "PROGRAMMING_LANGUAGE dilinde bir Fibonacci işlevi nasıl yazılır?"
İstem şablonları
Çeviri, özetleme, reklam öğesi oluşturma veya programlama görevleri için yukarıdaki istemleri denediyseniz yer tutucu değerleri kendi fikirlerinizle değiştirmişsiniz demektir. Ancak bazı dize düzenleme işlemleri yapmak yerine, söz konusu yer tutucu değerleri tanımlamanıza ve daha sonra boşluğu verilerinizle doldurmanıza olanak tanıyan "istem şablonları"ndan da yararlanabilirsiniz.
main()
yönteminin tüm içeriğini aşağıdaki kodla değiştirerek lezzetli ve yaratıcı bir isteme göz atalım:
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());
Aşağıdaki içe aktarma işlemlerini ekleyerek de:
import dev.langchain4j.model.input.Prompt;
import dev.langchain4j.model.input.PromptTemplate;
import java.util.HashMap;
import java.util.Map;
Ardından uygulamayı tekrar çalıştırın. Çıkış aşağıdaki gibi görünmelidir:
$ ./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.
Lezzetli!
İstem şablonlarıyla, metin oluşturma yöntemini çağırmadan önce gerekli parametreleri besleyebilirsiniz. Bu, kullanıcılarınızın sağladığı farklı değerler için veri iletmenin ve istemleri özelleştirmenin harika bir yoludur.
Sınıfın adından da anlaşılacağı gibi PromptTemplate
sınıfı bir şablon istemi oluşturur. Yer tutucu adları ve değerlerinden oluşan bir eşleme uygulayarak yer tutucu öğelere değer atayabilirsiniz.
Yapılandırılmış istemler (İSTEĞE BAĞLI)
Daha zengin nesne odaklı bir yaklaşım kullanmak istiyorsanız istemlerinizi yapılandırmanın bir başka yolu da @StructuredPrompt
ek açıklamasıdır. Bu ek açıklamayı bir sınıfa eklersiniz. Sınıfın alanları, istemde tanımlanan yer tutuculara karşılık gelir. Bunu uygulamalı olarak görelim.
İlk olarak bazı yeni içe aktarma işlemleri yapmamız gerekiyor:
import java.util.Arrays;
import java.util.List;
import dev.langchain4j.model.input.structured.StructuredPrompt;
import dev.langchain4j.model.input.structured.StructuredPromptProcessor;
Ardından TextPrompts
sınıfımızda, @StructuredPrompt
ek açıklamasında açıklanan istemdeki yer tutucuların aktarılması için gereken verileri toplayan bir iç statik sınıf oluşturabiliriz:
@StructuredPrompt("Create a recipe of a {{dish}} that can be prepared using only {{ingredients}}")
static class RecipeCreationPrompt {
String dish;
List<String> ingredients;
}
Ardından bu yeni sınıfı somutlaştırın ve tarifimizin yemeği ile malzemelerini besleyin. Ardından, istemi önceden olduğu gibi oluşturup generate()
yöntemine iletin:
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);
Boşlukları bir haritadan doldurmak yerine, IDE'niz tarafından daha güvenli bir şekilde otomatik olarak doldurulabilecek alanlara sahip bir Java nesnesi kullanabilirsiniz.
Bu değişiklikleri TextPrompts
sınıfınıza daha kolay bir şekilde yapıştırmak istiyorsanız kodun tamamını aşağıda bulabilirsiniz:
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. Metinleri sınıflandırma ve duyarlılığı analiz etme
Önceki bölümde öğrendiklerinize benzer şekilde, PaLM modelinin metinleri sınıflandırmasını veya yaklaşımları analiz etmesini sağlayan başka bir "istem mühendisliği" tekniğini keşfedeceksiniz. "Birkaç deneme" hakkında konuşalım. Bu, dil modelini istediğiniz yöne yönlendirmenize ve amacınızı daha iyi anlamanıza yardımcı olacak birkaç örnekle istemlerinizi geliştirmenin bir yoludur.
İstem şablonlarından yararlanmak için TextPrompts
sınıfımızı yeniden oluşturalım:
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());
}
}
İstemde birkaç giriş ve çıkış örneği sunma yaklaşımına dikkat edin. Bunlar birkaç hedef LLM'nin aynı yapıyı izlemesine yardımcı olacak şekilde hazırlanır. Model daha sonra bir giriş aldığında, giriş/çıkış kalıbıyla eşleşen bir çıkış döndürür.
Çilek de lezzetli olduğundan programı çalıştırmak sadece POSITIVE
kelimesini döndürecektir.
$ ./gradlew run -DjavaMainClass=palm.workshop.TextPrompts
> Task :app:run
POSITIVE
Yaklaşım analizi aynı zamanda bir içerik sınıflandırma senaryosudur. Farklı dokümanları farklı kategori grupları halinde kategorilere ayırmak için aynı "birkaç atışlık istem" yaklaşımını uygulayabilirsiniz.
8. Tebrikler
Tebrikler, LangChain4J ve PaLM API'yi kullanarak Java'da ilk üretken yapay zeka uygulamanızı başarıyla derlediniz. Bu süreçte büyük dil modellerinin oldukça güçlü ve soru/cevap, veri ayıklama, özetleme, metin sınıflandırma ve yaklaşım analizi gibi çeşitli görevleri yerine getirebildiğini keşfettiniz.
Sırada ne var?
Java'da PaLM ile ilgili daha fazla bilgi edinmek için aşağıdaki codelab'lere göz atın:
Daha fazla bilgi
- Üretken yapay zekanın yaygın kullanım alanları
- Üretken yapay zeka ile ilgili eğitim kaynakları
- Üretken Yapay Zeka Studio üzerinden PaLM ile etkileşim kurma
- Sorumlu AI