Megosztás a következőn keresztül:


Gyors tervezés a .NET-ben

Ebben a cikkben az alapvető gyorstervezési fogalmakat ismerheti meg. Számos AI-modell parancssori alapú, ami azt jelenti, hogy a prediktív algoritmusok által generált válaszokkal (befejezéssel) válaszolnak a felhasználói beviteli szövegre (a parancssorra). Az újabb modellek gyakran támogatják a csevegési formában történő befejezéseket, a szerepkörök (rendszer, felhasználó, asszisztens) és a csevegési előzmények alapján írt üzenetek pedig megőrzik a beszélgetéseket.

A parancssorok működése

Vegyük ezt a szöveggenerálási példát, ahol a parancssor a felhasználói bemenet, a befejezés pedig a modell kimenete:

Kérdés: "Az elnök, aki a legrövidebb ideig szolgált"

Befejezés: "Pedro Lascurain."

A befejezés helyesnek tűnik, de mi a teendő, ha az alkalmazásnak segítenie kell az amerikai történelemhallgatókon? Pedro Lascurain 45 perces ciklusa a legrövidebb elnöki ciklus, de Mexikó elnökeként szolgált. Az amerikai történelemhallgatók valószínűleg "William Henry Harrisont" keresik. Nyilvánvaló, hogy az alkalmazás hasznosabb lehet a felhasználók számára, ha valamilyen kontextust adna neki.

A parancssori tervezés útmutatásokkal, példákkal és jelzésekkel egészíti ki a kontextust a kérdéshez, hogy a modell jobb befejezéseket hoz létre.

A szöveggenerálást támogató modellek gyakran nem igényelnek konkrét formátumot, de érdemes rendszerezni az utasításokat, hogy egyértelmű legyen, mi az utasítás, és mi a példa. A csevegésalapú alkalmazásokat támogató modellek három szerepkört használnak a befejezések rendszerezéséhez: a csevegést vezérlő rendszerszerepkört, egy felhasználói szerepkört a felhasználói bemenetek megjelenítéséhez, valamint egy asszisztensi szerepkört a felhasználók válaszolásához. Ossza fel az utasításokat az egyes szerepkörök üzeneteibe:

  • A rendszerüzenetek a modell utasításait adják meg az asszisztensről. A parancssornak csak egy rendszerüzenete lehet, és az első üzenetnek kell lennie.
  • A felhasználói üzenetek közé tartoznak a felhasználótól érkező kérések, és példák, előzményüzenetek vagy az asszisztens utasításai. A csevegés befejezéséhez legalább egy felhasználói üzenetnek kell tartoznia.
  • A segédüzenetek példa- vagy előzménykiegészítéseket mutatnak, és az előző felhasználói üzenetre adott választ kell tartalmazniuk. A segédüzenetek nem szükségesek, de ha belefoglal egyet, azt egy felhasználói üzenettel párosítva kell létrehozni egy példát.

Útmutatók használata a befejezés javításához

Az utasítások olyan szövegek, amelyek a modell válaszát jelzik. Az utasítások lehetnek direktívák vagy imperatívak:

  • Az irányelvek ismertetik a modell viselkedését, de nem egyszerű parancsok – gondoljon egy improv színész karakterbeállítására: "Ön segít a diákoknak megismerni az Amerikai Egyesült Államok történelmét, ezért beszéljen az Egyesült Államokról, hacsak nem kérdeznek más országokról."
  • Az imperatív parancsok egyértelmű parancsok a modell követéséhez. "Fordítás Tagalogra:"

Az irányelvek nyitottabbak és rugalmasabbak, mint a kényszerítő tényezők:

  • Egyetlen utasításban több direktívát is kombinálhat.
  • Az utasítások általában jobban működnek, ha példákkal használja őket. Mivel azonban az imperatív parancsok egyértelműek, a modelleknek nem kell példákat használniuk a megértésükhöz (bár példa használatával megjelenítheti a modellnek a válaszok formázását). Mivel egy irányelv nem mondja meg a modellnek, hogy pontosan mit kell tennie, minden példa segíthet a modell jobb működésében.
  • Általában jobb, ha egy nehéz utasítást lépések sorozatára bontunk, amelyet irányelvek sorozatával végezhet el. Azt is meg kell mondania a modellnek, hogy adja ki az egyes lépések eredményét, hogy könnyen elvégezhesse a részletes módosításokat. Bár az utasítást saját maga is felbonthatja lépésekre, egyszerűbb, ha egyszerűen meg kell adnia a modellnek, hogy tegye meg, és hogy az egyes lépések eredményét adja ki. Ezt a megközelítést gondolatláncnak nevezzük.

Elsődleges és támogató tartalom hozzáadása környezet

Tartalommal további kontextust adhat az utasításokhoz.

Az elsődleges tartalom olyan szöveg, amelyet a modell utasítással szeretne feldolgozni. Bármilyen művelet is jár az utasítással, a modell végrehajtja azt az elsődleges tartalomon a befejezés létrehozásához.

A támogató tartalom olyan szöveg, amelyre egy utasítás hivatkozik, de nem az utasítás célja. A modell a segédtartalmat használja az utasítás végrehajtásához, ami azt jelenti, hogy a támogató tartalom a befejezésekben is megjelenik, jellemzően valamilyen struktúraként (például címsorokban vagy oszlopcímkékben).

Az utasítási tartalommal ellátott címkék segítségével a modell könnyebben kitalálhatja, hogyan használhatja azt az utasítással. Ne aggódjon túl sokat a pontosság miatt – a címkéknek nem kell pontosan egyezniük az utasításoknak, mert a modell kezelni fogja a szavak formáját és a nagybetűs megjelenítést.

Tegyük fel, hogy az "Egyesült Államok elnöki eredményeinek összegzése" utasítással készít egy listát. A modell számos módon rendszerezheti és rendezheti. De mi a teendő, ha azt szeretné, hogy a lista meghatározott kategóriák szerint csoportosítsa az eredményeket? Ezt az információt kiegészítő tartalommal veheti fel az utasításba.

Módosítsa az utasítást úgy, hogy a modell kategóriák szerint csoportosítsa, és hozzáfűzze azokat a támogató tartalmakat, amelyek meghatározzák ezeket a kategóriákat:

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
""";

Példák a modell irányítására

Ilyen például az a szöveg, amely bemutatja, hogy a modell hogyan válaszolhat a mintafelhasználói bemenet és a modell kimenetének megadásával. A modell példákat használ arra, hogy kikövetkeztesse, mit kell belefoglalni a befejezésekbe. Példák lehetnek a mérnök által megadott utasítások előtt vagy után is, de a kettőt nem szabad egymáshoz illeszteni.

Egy példa egy üzenettel kezdődik, és opcionálisan befejezést is tartalmazhat. A példában szereplő befejezésnek nem kell tartalmaznia a szó szerinti választ – lehet, hogy csak formázott szót, rendezetlen lista első listajelét vagy valami hasonlót tartalmaz, amely jelzi az egyes befejezések kezdési módját.

A példákat nulla lövéses vagy kevés lövéses tanulásként soroljuk be, attól függően, hogy szó szerinti befejezéseket tartalmaznak-e.

  • A nulla lövésű tanulási példák közé tartozik egy kérdés, amelynek nincs szó szerinti befejezése. Ez a megközelítés a modell válaszait teszteli anélkül, hogy példaadat-kimenetet adnának neki. A nulla lövésű kérések olyan kiegészítésekkel is rendelkezhetnek, amelyek cues-eket tartalmaznak, például azt jelzik, hogy a modellnek rendezett listát kell kihoznia az "1"-et is belefoglalva. befejezésként.
  • A kevés képből álló tanulási példák között több, szó szerinti befejezésű kérdéspár is szerepel. A kevés képből álló tanulás megváltoztathatja a modell viselkedését, ha hozzáadja a meglévő tudását.

A jelek ismertetése

A cue olyan szöveg, amely a kimenet kívánt szerkezetét vagy formátumát közvetíti. Az utasításokhoz hasonlóan a modell nem dolgozza fel a cue-t, mintha felhasználói bemenet lenne. Mint egy példa, egy cue azt mutatja, hogy a modell mit szeretne ahelyett, hogy megmondanák neki, mit kell tennie. Annyi cue-t adhat hozzá, amennyit csak szeretne, hogy iterálni tudja a kívánt eredményt. A parancsok utasítással vagy példával vannak használva, és a parancssor végén kell lenniük.

Tegyük fel, hogy utasítással utasítja a modellt az elnöki teljesítmények kategóriánkénti listájának elkészítésére, valamint azokat a támogató tartalmakat, amelyek közlik a modellnek, hogy milyen kategóriákat használjon. Ön úgy dönt, hogy a modell egy beágyazott listát szeretne létrehozni a kategóriákhoz tartozó összes korláttal, az egyes elnökök által elért eredmények pedig az egyes kategóriákban egy sorban jelennek meg, amelyek a nevükkel kezdődnek, és az elnökök időrendben jelennek meg. Az utasítás és a támogató tartalom után három jelzést adhat hozzá a modellnek a lista strukturálásához és formázásához:

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:
""";
  • A DOMESTIC POLICY azt a modellt jeleníti meg, amelyet az egyes csoportok indításához a kategória minden korlátjában meg szeretne jeleníteni.
  • - George Washington: azt a modellt mutatja be, amely minden szakaszt egy sorban felsorolt George Washington eredményeivel indít el.
  • - John Adams: azt a modellt mutatja, hogy időrendi sorrendben kell felsorolnia a fennmaradó elnököket.

Példakérés a .NET használatával

A .NET különböző eszközöket biztosít a különböző AI-modellek kéréséhez és csevegéséhez. A Szemantic Kernel használatával számos AI-modellhez és szolgáltatáshoz csatlakozhat, valamint más SDK-khoz, például a hivatalos OpenAI .NET-kódtárhoz. A Szemantic Kernel olyan eszközöket tartalmaz, amelyekkel különböző szerepkörökkel rendelkező kéréseket hozhat létre, és megőrizhető a csevegési előzmények, valamint számos más funkció is.

Tekintse meg az alábbi példakódot:

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();
}

Az előző kód példákat tartalmaz a következő fogalmakra:

  • Létrehoz egy csevegési előzményszolgáltatást, amely megkéri az AI-modellt a befejezésre a szerzői szerepkörök alapján.
  • Az AI-t egy AuthorRole.System üzenettel konfigurálja.
  • Elfogadja a felhasználói bemenetet, hogy lehetővé tegye a különböző típusú kéréseket egy AuthorRole.Useradott környezetben.
  • Aszinkron módon streameli a befejezést az AI-ből, hogy dinamikus csevegési élményt nyújtson.

Gyorstervezési technikák kiterjesztése

Emellett a saját cikkeiben részletesen tárgyalt, fejlettebb parancssori mérnöki technikákkal is növelheti a kérések teljesítményét.

  • Az LLM-eknek jogkivonat bemeneti korlátai vannak, amelyek korlátozzák a parancssorban elférő szöveg mennyiségét. Beágyazások és vektoradatbázis-megoldások használata az adott szöveg megjelenítéséhez szükséges jogkivonatok számának csökkentéséhez.
  • Az LLM-eket csak akkor tanítja be az adatokon, ha ön maga tanítja be őket, ami költséges és időigényes lehet. A lekéréses kiterjesztett generáció (RAG) használatával betanítás nélkül elérhetővé teheti az adatokat egy LLM-nek.