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.User
adott 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.