Skip to content

Latest commit

 

History

History
667 lines (464 loc) · 28.7 KB

File metadata and controls

667 lines (464 loc) · 28.7 KB

Bygga applikationer för textgenerering

Building Text Generation Applications

(Klicka på bilden ovan för att se videon för denna lektion)

Du har hittills i detta kursmaterial sett att det finns grundläggande begrepp som prompts och till och med en hel disciplin som kallas "prompt engineering". Många verktyg du kan interagera med, som ChatGPT, Office 365, Microsoft Power Platform och fler, stödjer dig genom att använda prompts för att utföra något.

För att du ska kunna lägga till en sådan upplevelse i en app behöver du förstå begrepp som prompts, completions och välja ett bibliotek att arbeta med. Det är precis vad du kommer att lära dig i detta kapitel.

Introduktion

I detta kapitel kommer du att:

  • Lära dig om openai-biblioteket och dess grundläggande begrepp.
  • Bygga en app för textgenerering med openai.
  • Förstå hur du använder begrepp som prompt, temperature och tokens för att bygga en app för textgenerering.

Lärandemål

I slutet av denna lektion kommer du att kunna:

  • Förklara vad en app för textgenerering är.
  • Bygga en app för textgenerering med openai.
  • Konfigurera din app för att använda fler eller färre tokens och även ändra temperaturen för varierat resultat.

Vad är en app för textgenerering?

Normalt när du bygger en app har den någon form av gränssnitt som följande:

  • Kommandobaserad. Konsolappar är typiska appar där du skriver ett kommando och den utför en uppgift. Till exempel är git en kommandobaserad app.
  • Användargränssnitt (UI). Vissa appar har grafiska användargränssnitt (GUI) där du klickar på knappar, skriver in text, väljer alternativ och mer.

Konsol- och UI-appar är begränsade

Jämför det med en kommandobaserad app där du skriver ett kommando:

  • Den är begränsad. Du kan inte bara skriva vilket kommando som helst, utan bara de som appen stödjer.
  • Språkspecifik. Vissa appar stödjer många språk, men som standard är appen byggd för ett specifikt språk, även om du kan lägga till fler språkstöd.

Fördelar med appar för textgenerering

Så hur skiljer sig en app för textgenerering?

I en app för textgenerering har du mer flexibilitet, du är inte begränsad till en uppsättning kommandon eller ett specifikt inmatningsspråk. Istället kan du använda naturligt språk för att interagera med appen. En annan fördel är att eftersom du redan interagerar med en datakälla som har tränats på en enorm mängd information, medan en traditionell app kan vara begränsad till vad som finns i en databas.

Vad kan jag bygga med en app för textgenerering?

Det finns många saker du kan bygga. Till exempel:

  • En chatbot. En chatbot som svarar på frågor om ämnen, som ditt företag och dess produkter, kan vara en bra match.
  • Hjälpare. LLM:er är utmärkta på saker som att sammanfatta text, få insikter från text, producera text som CV:n och mer.
  • Kodassistent. Beroende på vilket språkmodell du använder kan du bygga en kodassistent som hjälper dig att skriva kod. Till exempel kan du använda produkter som GitHub Copilot samt ChatGPT för att hjälpa dig skriva kod.

Hur kommer jag igång?

Jo, du behöver hitta ett sätt att integrera med en LLM vilket vanligtvis innebär följande två tillvägagångssätt:

  • Använd en API. Här konstruerar du webbförfrågningar med din prompt och får genererad text tillbaka.
  • Använd ett bibliotek. Bibliotek hjälper till att kapsla in API-anropen och gör dem enklare att använda.

Bibliotek/SDK:er

Det finns några välkända bibliotek för att arbeta med LLM:er som:

  • openai, detta bibliotek gör det enkelt att koppla upp sig mot din modell och skicka in prompts.

Sedan finns bibliotek som arbetar på en högre nivå som:

  • Langchain. Langchain är välkänt och stödjer Python.
  • Semantic Kernel. Semantic Kernel är ett bibliotek från Microsoft som stödjer språken C#, Python och Java.

Första appen med openai

Låt oss se hur vi kan bygga vår första app, vilka bibliotek vi behöver, hur mycket som krävs och så vidare.

Installera openai

Det finns många bibliotek för att interagera med OpenAI eller Azure OpenAI. Det är möjligt att använda flera programmeringsspråk som C#, Python, JavaScript, Java och fler. Vi har valt att använda openai Python-biblioteket, så vi använder pip för att installera det.

pip install openai

Skapa en resurs

Du behöver utföra följande steg:

Hitta API-nyckel och endpoint

Vid detta tillfälle behöver du tala om för ditt openai-bibliotek vilken API-nyckel som ska användas. För att hitta din API-nyckel, gå till avsnittet "Keys and Endpoint" i din Azure OpenAI-resurs och kopiera värdet för "Key 1".

Keys and Endpoint resource blade in Azure Portal

Nu när du har kopierat denna information, låt oss instruera biblioteken att använda den.

Note

Det är värt att separera din API-nyckel från din kod. Det kan du göra genom att använda miljövariabler.

  • Sätt miljövariabeln OPENAI_API_KEY till din API-nyckel. export OPENAI_API_KEY='sk-...'

Konfigurera Azure

Om du använder Azure OpenAI, så här konfigurerar du:

openai.api_type = 'azure'
openai.api_key = os.environ["OPENAI_API_KEY"]
openai.api_version = '2023-05-15'
openai.api_base = os.getenv("API_BASE")

Ovan sätter vi följande:

  • api_type till azure. Detta talar om för biblioteket att använda Azure OpenAI och inte OpenAI.
  • api_key, detta är din API-nyckel som du hittar i Azure-portalen.
  • api_version, detta är versionen av API:et du vill använda. Vid skrivande stund är den senaste versionen 2023-05-15.
  • api_base, detta är API:ets endpoint. Du hittar den i Azure-portalen bredvid din API-nyckel.

[!NOTE] > os.getenv är en funktion som läser miljövariabler. Du kan använda den för att läsa miljövariabler som OPENAI_API_KEY och API_BASE. Sätt dessa miljövariabler i din terminal eller genom att använda ett bibliotek som dotenv.

Generera text

Sättet att generera text är att använda klassen Completion. Här är ett exempel:

prompt = "Complete the following: Once upon a time there was a"

completion = openai.Completion.create(model="davinci-002", prompt=prompt)
print(completion.choices[0].text)

I koden ovan skapar vi ett completion-objekt och skickar in modellen vi vill använda samt prompten. Sedan skriver vi ut den genererade texten.

Chat completions

Hittills har du sett hur vi använt Completion för att generera text. Men det finns en annan klass som heter ChatCompletion som är mer lämpad för chatbots. Här är ett exempel på hur man använder den:

import openai

openai.api_key = "sk-..."

completion = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Hello world"}])
print(completion.choices[0].message.content)

Mer om denna funktionalitet i ett kommande kapitel.

Övning – din första app för textgenerering

Nu när vi har lärt oss hur man sätter upp och konfigurerar openai är det dags att bygga din första app för textgenerering. Följ dessa steg för att bygga din app:

  1. Skapa en virtuell miljö och installera openai:

    python -m venv venv
    source venv/bin/activate
    pip install openai

    [!NOTE] Om du använder Windows, skriv venv\Scripts\activate istället för source venv/bin/activate.

    [!NOTE] Hitta din Azure OpenAI-nyckel genom att gå till https://portal.azure.com/, sök efter Open AI, välj Open AI resource, gå sedan till Keys and Endpoint och kopiera värdet för Key 1.

  2. Skapa en fil som heter app.py och ge den följande kod:

    import openai
    
    openai.api_key = "<replace this value with your open ai key or Azure OpenAI key>"
    
    openai.api_type = 'azure'
    openai.api_version = '2023-05-15'
    openai.api_base = "<endpoint found in Azure Portal where your API key is>"
    deployment_name = "<deployment name>"
    
    # add your completion code
    prompt = "Complete the following: Once upon a time there was a"
    messages = [{"role": "user", "content": prompt}]
    
    # make completion
    completion = openai.chat.completions.create(model=deployment_name, messages=messages)
    
    # print response
    print(completion.choices[0].message.content)

    [!NOTE] Om du använder Azure OpenAI behöver du sätta api_type till azure och api_key till din Azure OpenAI-nyckel.

    Du bör se en utdata som liknar följande:

     very unhappy _____.
    
    Once upon a time there was a very unhappy mermaid.
    

Olika typer av prompts för olika saker

Nu har du sett hur man genererar text med en prompt. Du har till och med ett program igång som du kan modifiera och ändra för att generera olika typer av text.

Prompts kan användas för alla möjliga uppgifter. Till exempel:

  • Generera en typ av text. Till exempel kan du generera en dikt, frågor till en quiz osv.
  • Hämta information. Du kan använda prompts för att söka information som i exemplet 'Vad betyder CORS inom webbutveckling?'.
  • Generera kod. Du kan använda prompts för att generera kod, till exempel utveckla ett reguljärt uttryck för att validera e-postadresser eller varför inte generera ett helt program, som en webbapp?

Ett mer praktiskt exempel: en receptgenerator

Föreställ dig att du har ingredienser hemma och vill laga något. För det behöver du ett recept. Ett sätt att hitta recept är att använda en sökmotor eller så kan du använda en LLM för det.

Du kan skriva en prompt så här:

"Visa mig 5 recept på en rätt med följande ingredienser: kyckling, potatis och morötter. Lista alla ingredienser som används per recept."

Givet ovanstående prompt kan du få ett svar som liknar:

1. Roasted Chicken and Vegetables:
Ingredients:
- 4 chicken thighs
- 2 potatoes, cut into cubes
- 2 carrots, cut into cubes
- 2 tablespoons olive oil
- 2 cloves garlic, minced
- 1 teaspoon dried thyme
- 1 teaspoon dried oregano
- Salt and pepper, to taste

2. Chicken and Potato Stew:
Ingredients:
- 2 tablespoons olive oil
- 1 onion, diced
- 2 cloves garlic, minced
- 2 chicken breasts, cut into cubes
- 2 potatoes, cut into cubes
- 2 carrots, cut into cubes
- 1 teaspoon dried oregano
- 1 teaspoon dried thyme
- 1 cup chicken broth
- Salt and pepper, to taste

3. Chicken and Potato Bake:
Ingredients:
- 2 tablespoons olive oil
- 2 chicken breasts, cut into cubes
- 2 potatoes, cut into cubes
- 2 carrots, cut into cubes
- 1 onion, diced
- 2 cloves garlic, minced
- 1 teaspoon dried oregano
- 1 teaspoon dried thyme
- 1 cup chicken broth
- Salt and pepper, to taste

4. Chicken and Potato Soup:
Ingredients:
- 2 tablespoons olive oil
- 1 onion, diced
- 2 cloves garlic, minced
- 2 chicken breasts, cut into cubes
- 2 potatoes, cut into cubes
- 2 carrots, cut into cubes
- 1 teaspoon dried oregano
- 1 teaspoon dried thyme
- 4 cups chicken broth
- Salt and pepper, to taste

5. Chicken and Potato Hash:
Ingredients:
- 2 tablespoons olive oil
- 2 chicken breasts, cut into cubes
- 2 potatoes, cut into cubes
- 2 carrots, cut into cubes
- 1 onion, diced
- 2 cloves garlic, minced
- 1 teaspoon dried oregano

Det här resultatet är toppen, jag vet vad jag ska laga. Vid det här laget kan användbara förbättringar vara:

  • Filtrera bort ingredienser jag inte gillar eller är allergisk mot.
  • Skapa en inköpslista, ifall jag inte har alla ingredienser hemma.

För ovanstående fall, låt oss lägga till en extra prompt:

"Ta bort recept med vitlök eftersom jag är allergisk och ersätt det med något annat. Skapa också en inköpslista för recepten, med tanke på att jag redan har kyckling, potatis och morötter hemma."

Nu får du ett nytt resultat, nämligen:

1. Roasted Chicken and Vegetables:
Ingredients:
- 4 chicken thighs
- 2 potatoes, cut into cubes
- 2 carrots, cut into cubes
- 2 tablespoons olive oil
- 1 teaspoon dried thyme
- 1 teaspoon dried oregano
- Salt and pepper, to taste

2. Chicken and Potato Stew:
Ingredients:
- 2 tablespoons olive oil
- 1 onion, diced
- 2 chicken breasts, cut into cubes
- 2 potatoes, cut into cubes
- 2 carrots, cut into cubes
- 1 teaspoon dried oregano
- 1 teaspoon dried thyme
- 1 cup chicken broth
- Salt and pepper, to taste

3. Chicken and Potato Bake:
Ingredients:
- 2 tablespoons olive oil
- 2 chicken breasts, cut into cubes
- 2 potatoes, cut into cubes
- 2 carrots, cut into cubes
- 1 onion, diced
- 1 teaspoon dried oregano
- 1 teaspoon dried thyme
- 1 cup chicken broth
- Salt and pepper, to taste

4. Chicken and Potato Soup:
Ingredients:
- 2 tablespoons olive oil
- 1 onion, diced
- 2 chicken breasts, cut into cubes
- 2 potatoes, cut into cubes
- 2 carrots, cut into cubes
- 1 teaspoon dried oregano
- 1 teaspoon dried thyme
- 4 cups chicken broth
- Salt and pepper, to taste

5. Chicken and Potato Hash:
Ingredients:
- 2 tablespoons olive oil
- 2 chicken breasts, cut into cubes
- 2 potatoes, cut into cubes
- 2 carrots, cut into cubes
- 1 onion, diced
- 1 teaspoon dried oregano

Shopping List:
- Olive oil
- Onion
- Thyme
- Oregano
- Salt
- Pepper

Det är dina fem recept, utan vitlök nämnt och du har även en inköpslista med hänsyn till vad du redan har hemma.

Övning – bygg en receptgenerator

Nu när vi har spelat upp ett scenario, låt oss skriva kod som matchar det visade scenariot. Gör så här:

  1. Använd den befintliga filen app.py som utgångspunkt

  2. Hitta variabeln prompt och ändra dess kod till följande:

    prompt = "Show me 5 recipes for a dish with the following ingredients: chicken, potatoes, and carrots. Per recipe, list all the ingredients used"

    Om du nu kör koden bör du se en utdata som liknar:

    -Chicken Stew with Potatoes and Carrots: 3 tablespoons oil, 1 onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 bay leaf, 1 thyme sprig, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 1 1/2 cups chicken broth, 1/2 cup dry white wine, 2 tablespoons chopped fresh parsley, 2 tablespoons unsalted butter, 1 1/2 pounds boneless, skinless chicken thighs, cut into 1-inch pieces
    -Oven-Roasted Chicken with Potatoes and Carrots: 3 tablespoons extra-virgin olive oil, 1 tablespoon Dijon mustard, 1 tablespoon chopped fresh rosemary, 1 tablespoon chopped fresh thyme, 4 cloves garlic, minced, 1 1/2 pounds small red potatoes, quartered, 1 1/2 pounds carrots, quartered lengthwise, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 1 (4-pound) whole chicken
    -Chicken, Potato, and Carrot Casserole: cooking spray, 1 large onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and shredded, 1 potato, peeled and shredded, 1/2 teaspoon dried thyme leaves, 1/4 teaspoon salt, 1/4 teaspoon black pepper, 2 cups fat-free, low-sodium chicken broth, 1 cup frozen peas, 1/4 cup all-purpose flour, 1 cup 2% reduced-fat milk, 1/4 cup grated Parmesan cheese
    
    -One Pot Chicken and Potato Dinner: 2 tablespoons olive oil, 1 pound boneless, skinless chicken thighs, cut into 1-inch pieces, 1 large onion, chopped, 3 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 bay leaf, 1 thyme sprig, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 2 cups chicken broth, 1/2 cup dry white wine
    
    -Chicken, Potato, and Carrot Curry: 1 tablespoon vegetable oil, 1 large onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 teaspoon ground coriander, 1 teaspoon ground cumin, 1/2 teaspoon ground turmeric, 1/2 teaspoon ground ginger, 1/4 teaspoon cayenne pepper, 2 cups chicken broth, 1/2 cup dry white wine, 1 (15-ounce) can chickpeas, drained and rinsed, 1/2 cup raisins, 1/2 cup chopped fresh cilantro
    

    NOTE, din LLM är icke-deterministisk, så du kan få olika resultat varje gång du kör programmet.

    Bra, låt oss se hur vi kan förbättra saker. För att förbättra vill vi göra koden flexibel, så att ingredienser och antal recept kan ändras och förbättras.

  3. Låt oss ändra koden på följande sätt:

    no_recipes = input("No of recipes (for example, 5): ")
    
    ingredients = input("List of ingredients (for example, chicken, potatoes, and carrots): ")
    
    # interpolate the number of recipes into the prompt an ingredients
    prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used"

    Att ta koden för ett testkörning kan se ut så här:

    No of recipes (for example, 5): 3
    List of ingredients (for example, chicken, potatoes, and carrots): milk,strawberries
    
    -Strawberry milk shake: milk, strawberries, sugar, vanilla extract, ice cubes
    -Strawberry shortcake: milk, flour, baking powder, sugar, salt, unsalted butter, strawberries, whipped cream
    -Strawberry milk: milk, strawberries, sugar, vanilla extract
    

Förbättra genom att lägga till filter och inköpslista

Vi har nu en fungerande app som kan producera recept och den är flexibel eftersom den bygger på användarens inmatningar, både antal recept och vilka ingredienser som används.

För att förbättra den ytterligare vill vi lägga till följande:

  • Filtrera bort ingredienser. Vi vill kunna filtrera bort ingredienser vi inte gillar eller är allergiska mot. För att göra denna ändring kan vi redigera vår befintliga prompt och lägga till ett filtervillkor i slutet, så här:

    filter = input("Filter (for example, vegetarian, vegan, or gluten-free): ")
    
    prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used, no {filter}"

    Ovan lägger vi till {filter} i slutet av prompten och fångar även upp filtervärdet från användaren.

    Ett exempel på inmatning när programmet körs kan nu se ut så här:

    No of recipes (for example, 5): 3
    List of ingredients (for example, chicken, potatoes, and carrots): onion,milk
    Filter (for example, vegetarian, vegan, or gluten-free): no milk
    
    1. French Onion Soup
    
    Ingredients:
    
    -1 large onion, sliced
    -3 cups beef broth
    -1 cup milk
    -6 slices french bread
    -1/4 cup shredded Parmesan cheese
    -1 tablespoon butter
    -1 teaspoon dried thyme
    -1/4 teaspoon salt
    -1/4 teaspoon black pepper
    
    Instructions:
    
    1. In a large pot, sauté onions in butter until golden brown.
    2. Add beef broth, milk, thyme, salt, and pepper. Bring to a boil.
    3. Reduce heat and simmer for 10 minutes.
    4. Place french bread slices on soup bowls.
    5. Ladle soup over bread.
    6. Sprinkle with Parmesan cheese.
    
    2. Onion and Potato Soup
    
    Ingredients:
    
    -1 large onion, chopped
    -2 cups potatoes, diced
    -3 cups vegetable broth
    -1 cup milk
    -1/4 teaspoon black pepper
    
    Instructions:
    
    1. In a large pot, sauté onions in butter until golden brown.
    2. Add potatoes, vegetable broth, milk, and pepper. Bring to a boil.
    3. Reduce heat and simmer for 10 minutes.
    4. Serve hot.
    
    3. Creamy Onion Soup
    
    Ingredients:
    
    -1 large onion, chopped
    -3 cups vegetable broth
    -1 cup milk
    -1/4 teaspoon black pepper
    -1/4 cup all-purpose flour
    -1/2 cup shredded Parmesan cheese
    
    Instructions:
    
    1. In a large pot, sauté onions in butter until golden brown.
    2. Add vegetable broth, milk, and pepper. Bring to a boil.
    3. Reduce heat and simmer for 10 minutes.
    4. In a small bowl, whisk together flour and Parmesan cheese until smooth.
    5. Add to soup and simmer for an additional 5 minutes, or until soup has thickened.
    

    Som du ser har alla recept med mjölk filtrerats bort. Men om du är laktosintolerant kanske du också vill filtrera bort recept med ost, så det är viktigt att vara tydlig.

  • Skapa en inköpslista. Vi vill skapa en inköpslista med hänsyn till vad vi redan har hemma.

    För denna funktionalitet kan vi antingen försöka lösa allt i en prompt eller dela upp det i två prompts. Låt oss prova det senare. Här föreslår vi att lägga till en extra prompt, men för att det ska fungera behöver vi lägga till resultatet från den första prompten som kontext till den andra prompten.

    Hitta delen i koden som skriver ut resultatet från den första prompten och lägg till följande kod nedanför:

    old_prompt_result = completion.choices[0].message.content
    prompt = "Produce a shopping list for the generated recipes and please don't include ingredients that I already have."
    
    new_prompt = f"{old_prompt_result} {prompt}"
    messages = [{"role": "user", "content": new_prompt}]
    completion = openai.Completion.create(engine=deployment_name, messages=messages, max_tokens=1200)
    
    # print response
    print("Shopping list:")
    print(completion.choices[0].message.content)

    Observera följande:

    1. Vi konstruerar en ny prompt genom att lägga till resultatet från den första prompten till den nya prompten:

      new_prompt = f"{old_prompt_result} {prompt}"
  1. Vi gör en ny förfrågan, men tar också hänsyn till antalet tokens vi bad om i den första prompten, så den här gången sätter vi max_tokens till 1200.
     completion = openai.Completion.create(engine=deployment_name, prompt=new_prompt, max_tokens=1200)
     ```

När vi testar den här koden får vi följande resultat:

```output
     No of recipes (for example, 5): 2
     List of ingredients (for example, chicken, potatoes, and carrots): apple,flour
     Filter (for example, vegetarian, vegan, or gluten-free): sugar


     -Apple and flour pancakes: 1 cup flour, 1/2 tsp baking powder, 1/2 tsp baking soda, 1/4 tsp salt, 1 tbsp sugar, 1 egg, 1 cup buttermilk or sour milk, 1/4 cup melted butter, 1 Granny Smith apple, peeled and grated
     -Apple fritters: 1-1/2 cups flour, 1 tsp baking powder, 1/4 tsp salt, 1/4 tsp baking soda, 1/4 tsp nutmeg, 1/4 tsp cinnamon, 1/4 tsp allspice, 1/4 cup sugar, 1/4 cup vegetable shortening, 1/4 cup milk, 1 egg, 2 cups shredded, peeled apples
     Shopping list:
     -Flour, baking powder, baking soda, salt, sugar, egg, buttermilk, butter, apple, nutmeg, cinnamon, allspice
     ```

## Förbättra din setup

Det vi har hittills är kod som fungerar, men det finns några justeringar vi bör göra för att förbättra saker ytterligare. Några saker vi bör göra är:

- **Separera hemligheter från koden**, som API-nyckeln. Hemligheter hör inte hemma i koden och bör lagras  en säker plats. För att separera hemligheter från koden kan vi använda miljövariabler och bibliotek som `python-dotenv` för att ladda dem från en fil.  här kan det se ut i koden:

  1. Skapa en `.env`-fil med följande innehåll:

     ```bash
     OPENAI_API_KEY=sk-...
     ```

     
> Observera, för Azure behöver du sätta följande miljövariabler:

     ```bash
     OPENAI_API_TYPE=azure
     OPENAI_API_VERSION=2023-05-15
     OPENAI_API_BASE=<replace>
     ```

     I koden laddar du miljövariablerna  här:

     ```python
     from dotenv import load_dotenv

     load_dotenv()

     openai.api_key = os.environ["OPENAI_API_KEY"]
     ```

- **Ett ord om tokenlängd**. Vi bör tänka  hur många tokens vi behöver för att generera den text vi vill ha. Tokens kostar pengar,  där det är möjligt bör vi försöka vara ekonomiska med antalet tokens vi använder. Kan vi till exempel formulera prompten  att vi kan använda färre tokens?

  För att ändra antalet tokens som används kan du använda parametern `max_tokens`. Om du till exempel vill använda 100 tokens gör du  här:

  ```python
  completion = client.chat.completions.create(model=deployment, messages=messages, max_tokens=100)
  • Experimentera med temperature. Temperature är något vi inte nämnt hittills men som är en viktig parameter för hur vårt program presterar. Ju högre temperature-värde, desto mer slumpmässigt blir resultatet. Ju lägre temperature-värde, desto mer förutsägbart blir resultatet. Fundera på om du vill ha variation i ditt resultat eller inte.

    För att ändra temperature kan du använda parametern temperature. Om du till exempel vill använda en temperature på 0.5 gör du så här:

    completion = client.chat.completions.create(model=deployment, messages=messages, temperature=0.5)

    Observera, ju närmare 1.0, desto mer varierat blir resultatet.

Uppgift

Till den här uppgiften kan du välja vad du vill bygga.

Här är några förslag:

  • Justera receptgenerator-appen för att förbättra den ytterligare. Lek med temperature-värden och promptar för att se vad du kan komma fram till.
  • Bygg en "studiekompis". Den här appen ska kunna svara på frågor om ett ämne, till exempel Python. Du kan ha promptar som "Vad är ett visst ämne i Python?", eller en prompt som säger, visa mig kod för ett visst ämne osv.
  • Historiebot, få historien att leva, instruera boten att spela en viss historisk person och ställ frågor om dess liv och tid.

Lösning

Studiekompis

Nedan finns en startprompt, se hur du kan använda den och anpassa den efter eget tycke.

- "You're an expert on the Python language

    Suggest a beginner lesson for Python in the following format:

    Format:
    - concepts:
    - brief explanation of the lesson:
    - exercise in code with solutions"

Historiebot

Här är några promptar du kan använda:

- "You are Abe Lincoln, tell me about yourself in 3 sentences, and respond using grammar and words like Abe would have used"
- "You are Abe Lincoln, respond using grammar and words like Abe would have used:

   Tell me about your greatest accomplishments, in 300 words"

Kunskapskontroll

Vad gör konceptet temperature?

  1. Det styr hur slumpmässigt resultatet blir.
  2. Det styr hur stort svaret blir.
  3. Det styr hur många tokens som används.

🚀 Utmaning

När du jobbar med uppgiften, försök variera temperature, testa att sätta den till 0, 0.5 och 1. Kom ihåg att 0 ger minst variation och 1 mest. Vilket värde fungerar bäst för din app?

Bra jobbat! Fortsätt lära dig

Efter att du har slutfört den här lektionen, kolla in vår Generative AI Learning collection för att fortsätta utveckla dina kunskaper inom Generative AI!

Gå vidare till Lektion 7 där vi tittar på hur man bygger chattapplikationer!

Ansvarsfriskrivning:
Detta dokument har översatts med hjälp av AI-översättningstjänsten Co-op Translator. Även om vi strävar efter noggrannhet, vänligen observera att automatiska översättningar kan innehålla fel eller brister. Det ursprungliga dokumentet på dess modersmål bör betraktas som den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för några missförstånd eller feltolkningar som uppstår vid användning av denna översättning.