Aracılığıyla paylaş


.NET'te istem mühendisliği

Bu makalede, temel istem mühendisliği kavramlarını keşfedersiniz. Birçok yapay zeka modeli istem tabanlıdır, yani kullanıcı giriş metnine (istem) tahmine dayalı algoritmalar (tamamlama) tarafından oluşturulan bir yanıtla yanıt verir. Daha yeni modeller genellikle sohbet biçiminde tamamlamaları destekler ve konuşmaları korumak için rollere (sistem, kullanıcı, yardımcı) ve sohbet geçmişine dayalı iletiler içerir.

İstemlerle çalışma

İstemin kullanıcı girişi, tamamlamanın ise model çıkışı olduğu bu metin oluşturma örneğini düşünün:

İstem: "En kısa dönem hizmet eden başkan"

Tamamlama: "Pedro Lascurain."

Tamamlama doğru görünüyor, ancak uygulamanızın ABD tarih öğrencilerine yardımcı olması gerekiyorsa ne olacak? Pedro Lascurain'in 45 dakikalık süresi herhangi bir başkan için en kısa dönemdir, ancak Meksika başkanı olarak görev yaptı. ABD tarih öğrencileri muhtemelen "William Henry Harrison"ı arıyor. Açıkçası uygulama, belirli bir bağlam verirseniz hedeflenen kullanıcılar için daha yararlı olabilir.

İstem mühendisliği, modelin daha iyi tamamlamalar oluşturmasına yardımcı olmak için yönergeler, örnekler ve ipuçları sağlayarak istemin bağlamını ekler.

Metin oluşturmayı destekleyen modeller genellikle belirli bir biçim gerektirmez, ancak yönergelerin ve örneğin ne olduğunu net bir şekilde görebilmek için istemlerinizi düzenlemeniz gerekir. Sohbet tabanlı uygulamaları destekleyen modeller tamamlamaları düzenlemek için üç rol kullanır: sohbeti denetleen bir sistem rolü, kullanıcı girişini temsil eden bir kullanıcı rolü ve kullanıcılara yanıt vermek için bir yardımcı rolü. İstemlerinizi her rol için iletilere bölün:

  • Sistem iletileri modele yardımcı hakkında yönergeler verir. İstemde yalnızca bir sistem iletisi olabilir ve ilk ileti olmalıdır.
  • Kullanıcı iletileri kullanıcıdan gelen istemleri içerir ve örnekler, geçmiş istemleri gösterir veya yardımcı için yönergeler içerir. Örnek bir sohbet tamamlama işleminde en az bir kullanıcı iletisi olmalıdır.
  • Yardımcı iletileri örnek veya geçmiş tamamlamaları gösterir ve önceki kullanıcı iletisine bir yanıt içermelidir. Yardımcı iletileri gerekli değildir, ancak bir ileti eklerseniz örnek oluşturmak için bir kullanıcı iletisiyle eşleştirilmelidir.

Tamamlama işlemini geliştirmek için yönergeleri kullanma

Yönerge, modele nasıl yanıt vereceğini bildiren metindir. Yönerge bir yönerge veya kesinlik temelli olabilir:

  • Yönergeler modele nasıl davranacaklarını söyler, ancak basit komutlar değildir; bir doğaçlama aktör için karakter kurulumunu düşünün: "Öğrencilerin ABD tarihi hakkında bilgi edinmelerine yardımcı oluyorsunuz, bu nedenle özellikle diğer ülkeler hakkında soru sormadıkları sürece ABD hakkında konuşun."
  • Kesinlik değerleri , modelin izlemesi için kesin olmayan komutlardır. "Tagalog'a çevir:"

Yönergeler, kesinliklerden daha açık uçlu ve esnektir:

  • Birkaç yönergeyi tek yönergede birleştirebilirsiniz.
  • Yönergeler genellikle örneklerle birlikte kullanıldığında daha iyi çalışır. Ancak kesinlik temelliler kesin olmayan komutlar olduğundan, modellerin bunları anlaması için örneklere gerek yoktur (ancak modelin yanıtları nasıl biçimlendireceğini göstermek için bir örnek kullanabilirsiniz). Bir yönerge modele tam olarak ne yapacağını söylemediğinden, her örnek modelin daha iyi çalışmasına yardımcı olabilir.
  • Genellikle zor bir yönergeyi bir dizi yönergeyle yapabileceğiniz bir dizi adıma bölmek daha iyidir. Ayrıntılı ayarlamaları kolayca yapabilmeniz için modele her adımın sonucunun çıkışını yapmasını da söylemeniz gerekir. Yönergeyi adımlara ayırabilirsiniz ancak modele bunu gerçekleştirmesini söylemek ve her adımın sonucunu çıkarmak daha kolaydır. Bu yaklaşım, düşünce zinciri istemleri olarak adlandırılır.

Birincil ve destekleyici içerik bağlam ekleme

Yönergelere daha fazla bağlam eklemek için içerik sağlayabilirsiniz.

Birincil içerik , modelin bir yönergeyle işlemesini istediğiniz metindir. Yönergenin gerektirdiği eylem ne olursa olsun, model bunu birincil içerikte gerçekleştirerek bir tamamlama oluşturur.

Destekleyici içerik , yönergede başvurduğunuz ancak yönergenin hedefi olmayan metindir. Model, yönergeyi tamamlamak için destekleyici içeriği kullanır, yani destekleyici içerik genellikle bir tür yapı (başlıklar veya sütun etiketleri gibi) olarak tamamlanmalarda da görünür.

Modelin yönergeyle birlikte nasıl kullanılacağını belirlemesine yardımcı olmak için etiketleri yönerge içeriğinizle birlikte kullanın. Duyarlık konusunda çok fazla endişelenmeyin; etiketlerin yönergelerle tam olarak eşleşmesi gerekmez çünkü model sözcük biçimi ve büyük harf kullanımı gibi şeyleri işler.

Liste oluşturmak için "ABD Başkanlık başarılarını özetleme" yönergesini kullandığınızı varsayalım. Model, istediğiniz şekilde düzenleyebilir ve sıralayabilir. Peki listenin başarıları belirli bir kategori kümesine göre gruplandırmasını istiyorsanız ne olur? Yönergeye bu bilgileri eklemek için destekleyici içeriği kullanın.

Modelin kategoriye göre gruplandırması için yönergenizi ayarlayın ve bu kategorileri belirten destekleyici içeriği ekleyin:

prompt = """
Instructions: Summarize US Presidential accomplishments, grouped by category.
Categories: Domestic Policy, US Economy, Foreign Affairs, Space Exploration.
Accomplishments: 'George Washington
- First president of the United States.
- First president to have been a military veteran.
- First president to be elected to a second term in office.
- Received votes from every presidential elector in an election.
- Filled the entire body of the United States federal judges; including the Supreme Court.
- First president to be declared an honorary citizen of a foreign country, and an honorary citizen of France.
John Adams ...' ///Text truncated
""";

Modeli yönlendirmek için örnekleri kullanma

Örnek kullanıcı girişi ve model çıkışı sağlayarak modelin nasıl yanıt vereceğini gösteren metin örnektir. Model, tamamlamalara nelerin dahil olduğunu çıkarsamak için örnekler kullanır. Örnekler, mühendislik istemindeki yönergelerden önce veya sonra gelebilir, ancak ikisi birbirine karıştırılmamalıdır.

Örnek bir istemle başlar ve isteğe bağlı olarak bir tamamlama içerebilir. Bir örnekteki tamamlama işleminin ayrıntılı yanıt içermesi gerekmez; yalnızca biçimlendirilmiş bir sözcük, sıralanmamış bir listedeki ilk madde işareti veya her tamamlamanın nasıl başlaması gerektiğini gösteren benzer bir şey içerebilir.

Örnekler, ayrıntılı tamamlamalar içerip içermediklerine bağlı olarak sıfır çekim öğrenme veya az çekim öğrenme olarak sınıflandırılır.

  • Sıfır çekim öğrenme örnekleri, tam tamamlama olmadan bir istem içerir. Bu yaklaşım, modele örnek veri çıkışı vermeden modelin yanıtlarını test eder. Sıfır çekim istemleri, modelin "1" dahil ederek sıralı bir liste çıkışı vermesi gerektiğini belirtmek gibi ipuçları içeren tamamlamalara sahip olabilir. tamamlandı olarak.
  • Az çekim öğrenme örnekleri, ayrıntılı tamamlamalar içeren birkaç istem çifti içerir. Az denemeli öğrenme, mevcut bilgilerine ekleyerek modelin davranışını değiştirebilir.

ipuçlarını anlama

İpucu, istenen çıktı yapısını veya biçimini ileten metindir. Yönerge gibi bir ipucu da model tarafından kullanıcı girişiymiş gibi işlenmez. Bir örnek gibi, modele ne yapacağını söylemek yerine ne yapmak istediğinizi gösteren bir ipucu. İstediğiniz kadar ipucu ekleyebilirsiniz, böylece istediğiniz sonucu elde etmek için yineleme yapabilirsiniz. ipuçları bir yönerge veya örnekle kullanılır ve istem sonunda olmalıdır.

Modele kategoriye göre başkanlık başarılarının listesini oluşturmasını ve modele hangi kategorilerin kullanılacağını söyleyen destekleyici içerik üretmesini söyleyen bir yönerge kullandığınızı varsayalım. Modelin kategoriler için tüm büyük harflerle iç içe yerleştirilmiş bir liste oluşturmasını istediğinize karar verirsiniz. Her başkanın her kategorideki başarıları kendi adıyla başlayan tek bir satırda listelenir ve başkanlar kronolojik olarak listelenir. Yönergenizden ve destekleyici içeriklerden sonra, modelin listeyi nasıl yapılandırıp biçimlendireceğini göstermek için üç ipucu ekleyebilirsiniz:

prompt = """
Instructions: Summarize US Presidential accomplishments, grouped by category.
Categories: Domestic Policy, US Economy, Foreign Affairs, Space Exploration.
Accomplishments: George Washington
First president of the United States.
First president to have been a military veteran.
First president to be elected to a second term in office.
First president to receive votes from every presidential elector in an election.
First president to fill the entire body of the United States federal judges; including the Supreme Court.
First president to be declared an honorary citizen of a foreign country, and an honorary citizen of France.
John Adams ...  /// Text truncated

DOMESTIC POLICY
- George Washington: 
- John Adams:
""";
  • YURT İçİ İLKE , her grubu tüm büyük harflerle kategoriyle başlatmasını istediğiniz modeli gösterir.
  • - George Washington: George Washington'un başarılarının tek satırda listelendiği her bölüme başlama modelini gösterir.
  • - John Adams: Kalan başkanları kronolojik sırada listelemesi gereken modeli gösterir.

.NET kullanarak örnek istem

.NET, farklı yapay zeka modelleriyle sorup sohbet etmek için çeşitli araçlar sağlar. Çok çeşitli yapay zeka modelleri ve hizmetlerinin yanı sıra resmi OpenAI .NET kitaplığı gibi diğer SDK'lara bağlanmak için Anlam Çekirdeği'ni kullanın. Anlam Çekirdeği, farklı rollere sahip istemler oluşturmaya ve sohbet geçmişinin yanı sıra diğer birçok özelliğe sahip olan araçlar içerir.

Aşağıdaki kod örneğini inceleyin:

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;

// Create a kernel with OpenAI chat completion
#pragma warning disable SKEXP0010
Kernel kernel = Kernel.CreateBuilder()
                    .AddOpenAIChatCompletion(
                        modelId: "phi3:mini",
                        endpoint: new Uri("http://localhost:11434"),
                        apiKey: "")
                    .Build();

var aiChatService = kernel.GetRequiredService<IChatCompletionService>();
var chatHistory = new ChatHistory();
chatHistory.Add(
    new ChatMessageContent(AuthorRole.System, "You are a helpful AI Assistant."));

while (true)
{
    // Get user prompt and add to chat history
    Console.WriteLine("Your prompt:");
    chatHistory.Add(new ChatMessageContent(AuthorRole.User, Console.ReadLine()));

    // Stream the AI response and add to chat history
    Console.WriteLine("AI Response:");
    var response = "";
    await foreach (var item in
        aiChatService.GetStreamingChatMessageContentsAsync(chatHistory))
    {
        Console.Write(item.Content);
        response += item.Content;
    }
    chatHistory.Add(new ChatMessageContent(AuthorRole.Assistant, response));
    Console.WriteLine();
}

Yukarıdaki kod aşağıdaki kavramların örneklerini sağlar:

  • Yazar rollerini temel alarak yapay zeka modelinden tamamlamaları isteyen bir sohbet geçmişi hizmeti oluşturur.
  • Yapay zekayı bir AuthorRole.System iletiyle yapılandırıyor.
  • bağlamında farklı türde istemlere AuthorRole.Userizin vermek için kullanıcı girişini kabul eder.
  • Dinamik sohbet deneyimi sağlamak için yapay zekadan tamamlama işlemini zaman uyumsuz olarak akışa alır.

İstem mühendisliği tekniklerinizi genişletme

Ayrıca kendi makalelerinde ayrıntılı olarak ele alınan daha gelişmiş istem mühendisliği teknikleri ile istemlerinizin gücünü artırabilirsiniz.

  • LLM'ler, bir istem içine sığdırabileceğiniz metin miktarını kısıtlayan belirteç giriş sınırlarına sahiptir. Belirli bir metin parçasını temsil etmek için ihtiyacınız olan belirteç sayısını azaltmak için eklemeleri ve vektör veritabanı çözümlerini kullanın.
  • LLM'ler, kendiniz eğitmediğiniz sürece verileriniz üzerinde eğitilmiyor ve bu da maliyetli ve zaman alıcı olabilir. Verilerinizi eğitmeden LLM'nin kullanımına açmak için alma artırılmış neslini (RAG) kullanın.