0% found this document useful (0 votes)
2K views

ChatGPT Prompt Engineering For Developers

The document provides guidelines for writing clear and specific prompts for chatbots, including using delimiters, asking for structured outputs, having the model check assumptions, and giving examples (few-shot prompting). It also discusses giving models time to think by specifying steps and not rushing to conclusions.

Uploaded by

Biva Wi
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2K views

ChatGPT Prompt Engineering For Developers

The document provides guidelines for writing clear and specific prompts for chatbots, including using delimiters, asking for structured outputs, having the model check assumptions, and giving examples (few-shot prompting). It also discusses giving models time to think by specifying steps and not rushing to conclusions.

Uploaded by

Biva Wi
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 31

ChatGPT Prompt Engineering for Developers

#course #chatGPT

Source: DeepLearning.ai Course: ChatGPT Prompt Engineering for Developers


Noted by dhminh1024 - 29 Apr 2023

Introduction

In the development of LLM, there have been broadly two types of LLMs which are Base LLM and Instruction Tuned LLM.

The way that Instruction LLMs are typically trained is, you start off with a base LLMs that's been trained on a huge
amount of text data. And fine tune it with inputs and outputs that are instructions and good attempts to follow those
instructions (RLHF: Reinforcement Learning from Human Feedback).

Because instruction tuned LLMs have been trained to be helpful, honest and harmless. They're less likely to
output problematic text such as toxic outputs compared to base LLMs.

When you use an instruction tuned LLMs, think of giving instructions to another person. Say someone that's smart but
doesn't know the specifics of your task. So when an LLMs doesn't work, sometimes it's because the instructions
weren't clear enough.

For example, if you were to say, please write me something about Alan Turing. In addition to that, it can be helpful to be
clear about whether you want the text to focus on his scientific work, or his personal life or his role in history or
something else. And if you specify what you want the tone of the text to be, should it take on the tone like a professional
journalist would write? Or is it more of a casual note that you dash off to a friend that hopes the LLM generate what you
want? And of course, if you can even specify what snippets of text they should read in advance to write this text about
Alan Turing. Then that even better.

Guidelines

Prompting Principles

1. Write clear (not short) and specific instructions


1. Tactic 1: Use delimiters to clearly indicate distinct parts of the input: For example """ , <> , <tag> , </tag> , : ,
etc.
2. Tactic 2: Ask for a structured output: HTML, JSON.
3. Tactic 3: Ask the model to check whether conditions are satisfied: Check assumptions required to do the task.
4. Tactic 4: "Few-shot" prompting: Give successful examples of completing tasks, then ask model to perform the
task.
2. Give the model time to "think": if a model is making reasoning errors by rushing to an incorrect conclusion, you
should try reframing the query to request a chain of series of relevant reasoning before the model provides its final
answer.
1. Tactic 1: Specify the steps required to complete a task
2. Tactic 2: Instruct the model to work out its own solution before rushing to a conclusion.
Setup

To install the OpenAI Python library:

!pip install openai

The library needs to be configured with your account's secret key, which is available on the website.

You can either set it as the  OPENAI_API_KEY  environment variable before using the library:

!export OPENAI_API_KEY='sk-...'

Or, set  openai.api_key  to its value:

import openai

openai.api_key = "sk-..."

Load the API Key and relevant Python libaries

import openai

import os

from dotenv import load_dotenv, find_dotenv

_ = load_dotenv(find_dotenv())

openai.api_key = os.getenv('OPENAI_API_KEY')

def get_completion(prompt, model="gpt-3.5-turbo"):

messages = [{"role": "user", "content": prompt}]

response = openai.ChatCompletion.create(

model=model,

messages=messages,

temperature=0, # this is the degree of randomness of the model's output

return response.choices[0].message["content"]

Principle 1 - Write clear and specific instructions

Tactic 1: Use delimiters to clearly indicate distinct parts of the input

text = f"""

You should express what you want a model to do by \

providing instructions that are as clear and \

specific as you can possibly make them. \


This will guide the model towards the desired output, \
and reduce the chances of receiving irrelevant \
or incorrect responses. Don't confuse writing a \

clear prompt with writing a short prompt. \

In many cases, longer prompts provide more clarity \

and context for the model, which can lead to \

more detailed and relevant outputs.


"""

prompt = f"""

Summarize the text delimited by triple backticks \

into a single sentence.

```{text}```

"""

response = get_completion(prompt)

print(response)

Output

Clear and specific instructions should be provided to guide a model towards the desired output, and
longer prompts can provide more clarity and context for the model, leading to more detailed and relevant
outputs.

Tactic 2: Ask for a structured output

prompt = f"""

Generate a list of three made-up book titles along \

with their authors and genres.

Provide them in JSON format with the following keys:

book_id, title, author, genre.

"""

response = get_completion(prompt)

print(response)

Output:

"book_id": 1,

"title": "The Lost City of Zorath",

"author": "Aria Blackwood",

"genre": "Fantasy"

},

"book_id": 2,

"title": "The Last Survivors",

"author": "Ethan Stone",


"genre": "Science Fiction"

},

"book_id": 3,

"title": "The Secret Life of Bees",

"author": "Lila Rose",

"genre": "Romance"

Tactic 3: Ask the model to check whether conditions are satisfied

text_1 = f"""

Making a cup of tea is easy! First, you need to get some \

water boiling. While that's happening, \

grab a cup and put a tea bag in it. Once the water is \
hot enough, just pour it over the tea bag. \

Let it sit for a bit so the tea can steep. After a \

few minutes, take out the tea bag. If you \

like, you can add some sugar or milk to taste. \


And that's it! You've got yourself a delicious \
cup of tea to enjoy.

"""

prompt = f"""

You will be provided with text delimited by triple quotes.

If it contains a sequence of instructions, \

re-write those instructions in the following format:

Step 1 - ...

Step 2 - …

Step N - …

If the text does not contain a sequence of instructions, \

then simply write \"No steps provided.\"

\"\"\"{text_1}\"\"\"

"""

response = get_completion(prompt)

print("Completion for Text 1:")

print(response)

Output:

Completion for Text 1:

Step 1 - Get some water boiling.

Step 2 - Grab a cup and put a tea bag in it.

Step 3 - Once the water is hot enough, pour it over the tea bag.

Step 4 - Let it sit for a bit so the tea can steep.

Step 5 - After a few minutes, take out the tea bag.

Step 6 - Add some sugar or milk to taste.

Step 7 - Enjoy your delicious cup of tea!

text_2 = f"""

The sun is shining brightly today, and the birds are \

singing. It's a beautiful day to go for a \

walk in the park. The flowers are blooming, and the \

trees are swaying gently in the breeze. People \


are out and about, enjoying the lovely weather. \

Some are having picnics, while others are playing \

games or simply relaxing on the grass. It's a \

perfect day to spend time outdoors and appreciate the \


beauty of nature.

"""

prompt = f"""

You will be provided with text delimited by triple quotes.

If it contains a sequence of instructions, \

re-write those instructions in the following format:

Step 1 - ...

Step 2 - …

Step N - …

If the text does not contain a sequence of instructions, \

then simply write \"No steps provided.\"

\"\"\"{text_2}\"\"\"

"""

response = get_completion(prompt)

print("Completion for Text 2:")

print(response)

Output:

Completion for Text 2:

No steps provided.

Tactic 4: "Few-shot" prompting

prompt = f"""

Your task is to answer in a consistent style.

<child>: Teach me about patience.

<grandparent>: The river that carves the deepest \

valley flows from a modest spring; the \

grandest symphony originates from a single note; \

the most intricate tapestry begins with a solitary thread.

<child>: Teach me about resilience.


"""

response = get_completion(prompt)

print(response)

Output

<grandparent>: Resilience is like a tree that bends with the wind but never breaks. It is the ability to
bounce back from adversity and keep moving forward, even when things get tough. Just like a tree that
grows stronger with each storm it weathers, resilience is a quality that can be developed and
strengthened over time.

Principle 2 - Give the model time to "think"

Tactic 1 - Specify the steps required to complete a task

text = f"""

In a charming village, siblings Jack and Jill set out on \

a quest to fetch water from a hilltop \

well. As they climbed, singing joyfully, misfortune \

struck—Jack tripped on a stone and tumbled \

down the hill, with Jill following suit. \

Though slightly battered, the pair returned home to \

comforting embraces. Despite the mishap, \

their adventurous spirits remained undimmed, and they \


continued exploring with delight.

"""

# example 1

prompt_1 = f"""

Perform the following actions:

1 - Summarize the following text delimited by triple \

backticks with 1 sentence.

2 - Translate the summary into French.

3 - List each name in the French summary.

4 - Output a json object that contains the following \

keys: french_summary, num_names.

Separate your answers with line breaks.

Text:

```{text}```

"""

response = get_completion(prompt_1)

print("Completion for prompt 1:")

print(response)

Output:

Completion for prompt 1:

Two siblings, Jack and Jill, go on a quest to fetch water from a hilltop well, but misfortune strikes as
they both fall down the hill, yet they return home slightly battered but with their adventurous spirits
undimmed.

Deux frères et sœurs, Jack et Jill, partent en quête d'eau d'un puits au sommet d'une colline, mais ils
tombent tous les deux et retournent chez eux légèrement meurtris mais avec leur esprit d'aventure intact.

Noms: Jack, Jill.

"french_summary": "Deux frères et sœurs, Jack et Jill, partent en quête d'eau d'un puits au sommet d'une
colline, mais ils tombent tous les deux et retournent chez eux légèrement meurtris mais avec leur esprit
d'aventure intact.",

"num_names": 2
}

Ask for output in a specified format:

prompt_2 = f"""

Your task is to perform the following actions:

1 - Summarize the following text delimited by

<> with 1 sentence.


2 - Translate the summary into French.

3 - List each name in the French summary.

4 - Output a json object that contains the

following keys: french_summary, num_names.

Use the following format:

Text: <text to summarize>

Summary: <summary>

Translation: <summary translation>

Names: <list of names in Italian summary>

Output JSON: <json with summary and num_names>

Text: <{text}>

"""

response = get_completion(prompt_2)

print("\nCompletion for prompt 2:")

print(response)

Output:
Completion for prompt 2:

Summary: Jack and Jill go on a quest to fetch water, but misfortune strikes and they tumble down the
hill, returning home slightly battered but with their adventurous spirits undimmed.
Translation: Jack et Jill partent en quête d'eau, mais la malchance frappe et ils dégringolent la
colline, rentrant chez eux légèrement meurtris mais avec leurs esprits aventureux intacts.

Names: Jack, Jill

Output JSON: {"french_summary": "Jack et Jill partent en quête d'eau, mais la malchance frappe et ils
dégringolent la colline, rentrant chez eux légèrement meurtris mais avec leurs esprits aventureux
intacts.", "num_names": 2}

Tactic 2 - Instruct the model to work out its own solution before rushing to a conclusion

prompt = f"""

Determine if the student's solution is correct or not.

Question:

I'm building a solar power installation and I need \

help working out the financials.

- Land costs $100 / square foot

- I can buy solar panels for $250 / square foot

- I negotiated a contract for maintenance that will cost \

me a flat $100k per year, and an additional $10 / square \

foot

What is the total cost for the first year of operations


as a function of the number of square feet.

Student's Solution:

Let x be the size of the installation in square feet.

Costs:

1. Land cost: 100x

2. Solar panel cost: 250x

3. Maintenance cost: 100,000 + 100x


Total cost: 100x + 250x + 100,000 + 100x = 450x + 100,000

"""

response = get_completion(prompt)

print(response) # The student's solution is correct.

Note that the student's solution is actually not correct.

We can fix this by instructing the model to work out its own solution first.

prompt = f"""

Your task is to determine if the student's solution \

is correct or not.

To solve the problem do the following:

- First, work out your own solution to the problem.

- Then compare your solution to the student's solution \

and evaluate if the student's solution is correct or not.

Don't decide if the student's solution is correct until


you have done the problem yourself.

Use the following format:

Question:

```

question here

```

Student's solution:

```

student's solution here

```

Actual solution:

```

steps to work out the solution and your solution here

```

Is the student's solution the same as actual solution \

just calculated:

```

yes or no

```

Student grade:
```

correct or incorrect

```

Question:

```

I'm building a solar power installation and I need help \

working out the financials.


- Land costs $100 / square foot

- I can buy solar panels for $250 / square foot

- I negotiated a contract for maintenance that will cost \

me a flat $100k per year, and an additional $10 / square \

foot

What is the total cost for the first year of operations \

as a function of the number of square feet.

```

Student's solution:

```

Let x be the size of the installation in square feet.

Costs:

1. Land cost: 100x

2. Solar panel cost: 250x

3. Maintenance cost: 100,000 + 100x


Total cost: 100x + 250x + 100,000 + 100x = 450x + 100,000

```

Actual solution:

"""

response = get_completion(prompt)

print(response)

Output:

Let x be the size of the installation in square feet.

Costs:

1. Land cost: 100x

2. Solar panel cost: 250x

3. Maintenance cost: 100,000 + 10x

Total cost: 100x + 250x + 100,000 + 10x = 360x + 100,000

Is the student's solution the same as actual solution just calculated:


No

Student grade:
Incorrect

Model Limitations: Hallucinations

Eventhough the model is begin exposed to a vast amount of knowledge during its training process, is has not perfectly
memorised the information it's seen, and so it doesn't know the boundary of its knowledge very well. This means that it
might try to answer questions about obscure topics and can make things up that sound plausible but are not actually
true. And we call these fabricated ideas hallucinations.

Tactic to reduce hallucinations:

Ask the model to first find any relevant information from the text
Then ask it to answer the question based on the relevant information and kind of having a way to trace the answer
back to the source document.

Example of hallucinations: Boie is a real company, the product name is not real.

prompt = f"""

Tell me about AeroGlide UltraSlim Smart Toothbrush by Boie

"""

response = get_completion(prompt)

print(response)

Output:

The AeroGlide UltraSlim Smart Toothbrush by Boie is a high-tech toothbrush that uses advanced sonic
technology to provide a deep and thorough clean. It features a slim and sleek design that makes it easy
to hold and maneuver, and it comes with a range of smart features that help you optimize your brushing
routine.

One of the key features of the AeroGlide UltraSlim Smart Toothbrush is its advanced sonic technology,
which uses high-frequency vibrations to break up plaque and bacteria on your teeth and gums. This
technology is highly effective at removing even the toughest stains and buildup, leaving your teeth
feeling clean and refreshed.

In addition to its sonic technology, the AeroGlide UltraSlim Smart Toothbrush also comes with a range of
smart features that help you optimize your brushing routine. These include a built-in timer that ensures
you brush for the recommended two minutes, as well as a pressure sensor that alerts you if you're
brushing too hard.

Overall, the AeroGlide UltraSlim Smart Toothbrush by Boie is a highly advanced and effective toothbrush
that is perfect for anyone looking to take their oral hygiene to the next level. With its advanced sonic
technology and smart features, it provides a deep and thorough clean that leaves your teeth feeling fresh
and healthy.

Iterative Prompt Development


There probably isn't a perfect prompt for everything under the sun. It's more important that you have a process for
developing a good prompt for your specific application.

The process starts where you have an idea for what you want to do, the task you want to complete, and you can
then take a first attempt at writing a prompt that hopefully is clear and specific and maybe, if appropriate, gives the
system time to think.

And then you can run it and see what result you get. And if it doesn't work well enough the first time, then the iterative
process of figuring out why the instructions, for example, were not clear enough or why it didn't give the algorithm
enough time to think, allows you to refine the idea, refine the prompt, and so on. And to go around this loop multiple
times until you end up with a prompt that works for your application.

Example - Generate a marketing product description from a product fact sheet

fact_sheet_chair = """

OVERVIEW

- Part of a beautiful family of mid-century inspired office furniture,

including filing cabinets, desks, bookcases, meeting tables, and more.


- Several options of shell color and base finishes.

- Available with plastic back and front upholstery (SWC-100)

or full upholstery (SWC-110) in 10 fabric and 6 leather options.

- Base finish options are: stainless steel, matte black,

gloss white, or chrome.

- Chair is available with or without armrests.

- Suitable for home or business settings.

- Qualified for contract use.

CONSTRUCTION

- 5-wheel plastic coated aluminum base.

- Pneumatic chair adjust for easy raise/lower action.

DIMENSIONS

- WIDTH 53 CM | 20.87”

- DEPTH 51 CM | 20.08”

- HEIGHT 80 CM | 31.50”

- SEAT HEIGHT 44 CM | 17.32”


- SEAT DEPTH 41 CM | 16.14”

OPTIONS
- Soft or hard-floor caster options.

- Two choices of seat foam densities:

medium (1.8 lb/ft3) or high (2.8 lb/ft3)

- Armless or 8 position PU armrests

MATERIALS

SHELL BASE GLIDER

- Cast Aluminum with modified nylon PA6/PA66 coating.

- Shell thickness: 10 mm.

SEAT

- HD36 foam

COUNTRY OF ORIGIN

- Italy
"""

prompt = f"""

Your task is to help a marketing team create a

description for a retail website of a product based

on a technical fact sheet.

Write a product description based on the information

provided in the technical specifications delimited by

triple backticks.

Technical specifications: ```{fact_sheet_chair}```

"""

response = get_completion(prompt)

print(response)

Output:

Introducing our stunning mid-century inspired office chair, the perfect addition to any home or business
setting. Part of a beautiful family of office furniture, including filing cabinets, desks, bookcases,
meeting tables, and more, this chair is available in several options of shell color and base finishes to
suit your style. Choose from plastic back and front upholstery (SWC-100) or full upholstery (SWC-110) in
10 fabric and 6 leather options.

The chair is constructed with a 5-wheel plastic coated aluminum base and features a pneumatic chair
adjust for easy raise/lower action. It is available with or without armrests and is qualified for
contract use. The base finish options are stainless steel, matte black, gloss white, or chrome.

Measuring at a width of 53 cm, depth of 51 cm, and height of 80 cm, with a seat height of 44 cm and seat
depth of 41 cm, this chair is designed for ultimate comfort. You can also choose between soft or hard-
floor caster options and two choices of seat foam densities: medium (1.8 lb/ft3) or high (2.8 lb/ft3).
The armrests are available in either an armless or 8 position PU option.

The materials used in the construction of this chair are of the highest quality. The shell base glider is
made of cast aluminum with modified nylon PA6/PA66 coating and has a shell thickness of 10 mm. The seat
is made of HD36 foam, ensuring maximum comfort and durability.

This chair is made in Italy and is the perfect combination of style and functionality. Upgrade your
workspace with our mid-century inspired office chair today!

Issue 1: The text is too long

Limit the number of words/sentences/characters.

prompt = f"""

Your task is to help a marketing team create a

description for a retail website of a product based

on a technical fact sheet.

Write a product description based on the information

provided in the technical specifications delimited by

triple backticks.

Use at most 50 words.

Technical specifications: ```{fact_sheet_chair}```

"""

response = get_completion(prompt)

print(response)

Output:

Introducing our mid-century inspired office chair, perfect for home or business settings. Available in a
range of shell colors and base finishes, with or without armrests. Choose from 10 fabric and 6 leather
options for full or plastic upholstery. With a 5-wheel base and pneumatic chair adjust, it's both stylish
and functional. Made in Italy.

Issue 2: Text focuses on the wrong details

Ask it to focus on the aspects that are relevant to the intended audience.

prompt = f"""

Your task is to help a marketing team create a

description for a retail website of a product based

on a technical fact sheet.

Write a product description based on the information

provided in the technical specifications delimited by

triple backticks.

The description is intended for furniture retailers,

so should be technical in nature and focus on the

materials the product is constructed from.

Use at most 50 words.

Technical specifications: ```{fact_sheet_chair}```

"""

response = get_completion(prompt)

print(response)

Output:

Introducing our mid-century inspired office chair, perfect for both home and business settings. With a
range of shell colors and base finishes, including stainless steel and matte black, this chair is
available with or without armrests. The 5-wheel plastic coated aluminum base and pneumatic chair adjust
make it easy to move and adjust to your desired height. Made with high-quality materials, including a
cast aluminum shell and HD36 foam seat, this chair is built to last.

prompt = f"""

Your task is to help a marketing team create a

description for a retail website of a product based

on a technical fact sheet.

Write a product description based on the information

provided in the technical specifications delimited by

triple backticks.

The description is intended for furniture retailers,

so should be technical in nature and focus on the

materials the product is constructed from.

At the end of the description, include every 7-character

Product ID in the technical specification.

Use at most 50 words.

Technical specifications: ```{fact_sheet_chair}```

"""

response = get_completion(prompt)

print(response)

Output:

Introducing our mid-century inspired office chair, perfect for home or business settings. With a range of
shell colors and base finishes, and the option of plastic or full upholstery, this chair is both stylish
and comfortable. Constructed with a 5-wheel plastic coated aluminum base and pneumatic chair adjust, it's
also practical. Available with or without armrests and suitable for contract use. Product ID: SWC-100,
SWC-110.

Issue 3: Description needs a table of dimensions

Ask it to extract information and organize it in a table.

prompt = f"""

Your task is to help a marketing team create a

description for a retail website of a product based

on a technical fact sheet.

Write a product description based on the information

provided in the technical specifications delimited by

triple backticks.

The description is intended for furniture retailers,

so should be technical in nature and focus on the

materials the product is constructed from.

At the end of the description, include every 7-character

Product ID in the technical specification.

After the description, include a table that gives the

product's dimensions. The table should have two columns.


In the first column include the name of the dimension.

In the second column include the measurements in inches only.

Give the table the title 'Product Dimensions'.

Format everything as HTML that can be used in a website.

Place the description in a <div> element.

Technical specifications: ```{fact_sheet_chair}```

"""

response = get_completion(prompt)

print(response)

Output:

<div>

<h2>Mid-Century Inspired Office Chair</h2>

<p>Introducing our mid-century inspired office chair, part of a beautiful family of office furniture that
includes filing cabinets, desks, bookcases, meeting tables, and more. This chair is available in several
options of shell color and base finishes, allowing you to customize it to your liking. You can choose
between plastic back and front upholstery or full upholstery in 10 fabric and 6 leather options. The base
finish options are stainless steel, matte black, gloss white, or chrome. The chair is also available with
or without armrests, making it suitable for both home and business settings. Plus, it's qualified for
contract use, ensuring its durability and longevity.</p>

<p>The chair's construction features a 5-wheel plastic coated aluminum base and a pneumatic chair adjust
for easy raise/lower action. You can also choose between soft or hard-floor caster options and two
choices of seat foam densities: medium (1.8 lb/ft3) or high (2.8 lb/ft3). The armrests are also
customizable, with the option of armless or 8 position PU armrests.</p>

<p>The chair's shell base glider is made of cast aluminum with modified nylon PA6/PA66 coating, with a
shell thickness of 10 mm. The seat is made of HD36 foam, ensuring comfort and support during long work
hours. This chair is made in Italy, ensuring its quality and craftsmanship.</p>

<h3>Product ID(s): SWC-100, SWC-110</h3>

<table>

<caption>Product Dimensions</caption>

<tr>

<th>Dimension</th>

<th>Measurement (inches)</th>

</tr>

<tr>

<td>Width</td>

<td>20.87"</td>

</tr>

<tr>

<td>Depth</td>

<td>20.08"</td>

</tr>

<tr>

<td>Height</td>

<td>31.50"</td>

</tr>

<tr>

<td>Seat Height</td>

<td>17.32"</td>

</tr>

<tr>

<td>Seat Depth</td>

<td>16.14"</td>

</tr>

</table>

</div>

Summarizing texts
There's so much text in today's world, pretty much none of us have enought time to read all the things we wish we had
time to. So one of the most exciting applications of LLMs is to use it to summarize text.

Example 1 - Summarize a product review

Summarize with a word/sentence/character limit

Text to summarize

prod_review = """

Got this panda plush toy for my daughter's birthday, \

who loves it and takes it everywhere. It's soft and \

super cute, and its face has a friendly look. It's \

a bit small for what I paid though. I think there \

might be other options that are bigger for the \


same price. It arrived a day earlier than expected, \

so I got to play with it myself before I gave it \

to her.
"""

prompt = f"""

Your task is to generate a short summary of a product \

review from an ecommerce site.

Summarize the review below, delimited by triple

backticks, in at most 30 words.

Review: ```{prod_review}```

"""

response = get_completion(prompt)

print(response)

Output:

Soft and cute panda plush toy loved by daughter, but a bit small for the price. Arrived early.

Summarize with a focus on shipping and delivery

prompt = f"""

Your task is to generate a short summary of a product \

review from an ecommerce site to give feedback to the \

Shipping deparmtment.

Summarize the review below, delimited by triple

backticks, in at most 30 words, and focusing on any aspects \

that mention shipping and delivery of the product.

Review: ```{prod_review}```

"""

response = get_completion(prompt)

print(response)

Output:

The panda plush toy arrived a day earlier than expected, but the customer felt it was a bit small for the
price paid.

Summarize with a focus on price and value

prompt = f"""

Your task is to generate a short summary of a product \

review from an ecommerce site to give feedback to the \

pricing deparmtment, responsible for determining the \

price of the product.

Summarize the review below, delimited by triple

backticks, in at most 30 words, and focusing on any aspects \

that are relevant to the price and perceived value.

Review: ```{prod_review}```

"""

response = get_completion(prompt)

print(response)

Output:

The panda plush toy is soft, cute, and loved by the recipient, but the price may be too high for its
size.

Try "extract" instead of "summarize"

prompt = f"""

Your task is to extract relevant information from \

a product review from an ecommerce site to give \


feedback to the Shipping department.

From the review below, delimited by triple quotes \

extract the information relevant to shipping and \

delivery. Limit to 30 words.

Review: ```{prod_review}```

"""

response = get_completion(prompt)

print(response)

Output:

The product arrived a day earlier than expected.

Example 2 - Summarize multiple product reviews

review_1 = prod_review

# review for a standing lamp


review_2 = """

Needed a nice lamp for my bedroom, and this one \


had additional storage and not too high of a price \

point. Got it fast - arrived in 2 days. The string \

to the lamp broke during the transit and the company \

happily sent over a new one. Came within a few days \

as well. It was easy to put together. Then I had a \

missing part, so I contacted their support and they \

very quickly got me the missing piece! Seems to me \

to be a great company that cares about their customers \


and products.
"""

# review for an electric toothbrush


review_3 = """

My dental hygienist recommended an electric toothbrush, \

which is why I got this. The battery life seems to be \

pretty impressive so far. After initial charging and \

leaving the charger plugged in for the first week to \

condition the battery, I've unplugged the charger and \

been using it for twice daily brushing for the last \

3 weeks all on the same charge. But the toothbrush head \

is too small. I’ve seen baby toothbrushes bigger than \

this one. I wish the head was bigger with different \

length bristles to get between teeth better because \

this one doesn’t. Overall if you can get this one \

around the $50 mark, it's a good deal. The manufactuer's \

replacements heads are pretty expensive, but you can \

get generic ones that're more reasonably priced. This \

toothbrush makes me feel like I've been to the dentist \


every day. My teeth feel sparkly clean!

"""

# review for a blender

review_4 = """

So, they still had the 17 piece system on seasonal \

sale for around $49 in the month of November, about \

half off, but for some reason (call it price gouging) \

around the second week of December the prices all went \


up to about anywhere from between $70-$89 for the same \
system. And the 11 piece system went up around $10 or \

so in price also from the earlier sale price of $29. \

So it looks okay, but if you look at the base, the part \

where the blade locks into place doesn’t look as good \

as in previous editions from a few years ago, but I \

plan to be very gentle with it (example, I crush \

very hard items like beans, ice, rice, etc. in the \

blender first then pulverize them in the serving size \

I want in the blender then switch to the whipping \

blade for a finer flour, and use the cross cutting blade \

first when making smoothies, then use the flat blade \

if I need them finer/less pulpy). Special tip when making \

smoothies, finely cut and freeze the fruits and \


vegetables (if using spinach-lightly stew soften the \

spinach then freeze until ready for use-and if making \

sorbet, use a small to medium sized food processor) \

that you plan to use that way you can avoid adding so \

much ice if at all-when making your smoothie. \

After about a year, the motor was making a funny noise. \

I called customer service but the warranty expired \

already, so I had to buy another one. FYI: The overall \


quality has gone done in these types of products, so \

they are kind of counting on brand recognition and \

consumer loyalty to maintain sales. Got it in about \

two days.

"""

reviews = [review_1, review_2, review_3, review_4]

for i in range(len(reviews)):

prompt = f"""

Your task is to generate a short summary of a product \

review from an ecommerce site.

Summarize the review below, delimited by triple \

backticks in at most 20 words.

Review: ```{reviews[i]}```

"""

response = get_completion(prompt)

print(i, response, "\n")

Output:

0 Soft and cute panda plush toy loved by daughter, but a bit small for the price. Arrived early.

1 Affordable lamp with storage, fast shipping, and excellent customer service. Easy to assemble and
missing parts were quickly replaced.

2 Good battery life, small toothbrush head, but effective cleaning. Good deal if bought around $50.

3 The product was on sale for $49 in November, but the price increased to $70-$89 in December. The base
doesn't look as good as previous editions, but the reviewer plans to be gentle with it. A special tip for
making smoothies is to freeze the fruits and vegetables beforehand. The motor made a funny noise after a
year, and the warranty had expired. Overall quality has decreased.

Inferring
Inferring is about tasks where the model taks a text as input and performs some kind of analysis, for examples, extracting
labels, extracting names, understanding sentiment of a text.

If you want to extract a sentiment, positive or negative, with a piece of text, in the traditional machine learning workflow,
you'd have to collect the label data set, train the model, figure out how to deploy the model somewhere in the cloud and
make inferences. That can work pretty well, but it was just a lot of work to go through that process. Also for every task,
such as sentiment versus extracting names versus something else, you have to train and deploy a separate model.

One of the really nice things about a large language model is that for many tasks like these, you can just write a prompt
and have it start generating results pretty much right away. That gives tremendous speed in terms of application
development. And you can also just use one model, one API, to do many different tasks rather than needing to figure out
how to train and deploy a lot of different models.

Example - Product Review

Product review text

lamp_review = """

Needed a nice lamp for my bedroom, and this one had \

additional storage and not too high of a price point. \

Got it fast. The string to our lamp broke during the \

transit and the company happily sent over a new one. \

Came within a few days as well. It was easy to put \

together. I had a missing part, so I contacted their \

support and they very quickly got me the missing piece! \

Lumina seems to me to be a great company that cares \

about their customers and products!!

"""

Sentiment (positive/negative)

prompt = f"""

What is the sentiment of the following product review,

which is delimited with triple backticks?

Review text: '''{lamp_review}'''

"""

response = get_completion(prompt)

print(response)

Output:

The sentiment of the product review is positive.

prompt = f"""

What is the sentiment of the following product review,

which is delimited with triple backticks?

Give your answer as a single word, either "positive" \

or "negative".

Review text: '''{lamp_review}'''

"""

response = get_completion(prompt)

print(response)

Output:

positive

Identify types of emotions

prompt = f"""

Identify a list of emotions that the writer of the \

following review is expressing. Include no more than \

five items in the list. Format your answer as a list of \

lower-case words separated by commas.

Review text: '''{lamp_review}'''

"""

response = get_completion(prompt)

print(response)

Output:

happy, satisfied, grateful, impressed, content

Identify anger

prompt = f"""

Is the writer of the following review expressing anger?\


The review is delimited with triple backticks. \

Give your answer as either yes or no.

Review text: '''{lamp_review}'''

"""

response = get_completion(prompt)

print(response)

Output:

no

Extract product and company name from customer reviews

prompt = f"""

Identify the following items from the review text:

- Item purchased by reviewer


- Company that made the item
The review is delimited with triple backticks. \

Format your response as a JSON object with \

"Item" and "Brand" as the keys.

If the information isn't present, use "unknown" \


as the value.

Make your response as short as possible.

Review text: '''{lamp_review}'''

"""

response = get_completion(prompt)

print(response)

Output:

"Item": "lamp",

"Brand": "Lumina"

Doing multiple tasks at once

prompt = f"""

Identify the following items from the review text:

- Sentiment (positive or negative)

- Is the reviewer expressing anger? (true or false)

- Item purchased by reviewer


- Company that made the item

The review is delimited with triple backticks. \

Format your response as a JSON object with \

"Sentiment", "Anger", "Item" and "Brand" as the keys.

If the information isn't present, use "unknown" \


as the value.

Make your response as short as possible.

Format the Anger value as a boolean.

Review text: '''{lamp_review}'''

"""

response = get_completion(prompt)

print(response)

Output:

"Sentiment": "positive",

"Anger": false,

"Item": "lamp with additional storage",

"Brand": "Lumina"

Example 2 - Inferring topics

story = """

In a recent survey conducted by the government,

public sector employees were asked to rate their level

of satisfaction with the department they work at.

The results revealed that NASA was the most popular

department with a satisfaction rating of 95%.

One NASA employee, John Smith, commented on the findings,

stating, "I'm not surprised that NASA came out on top.

It's a great place to work with amazing people and

incredible opportunities. I'm proud to be a part of

such an innovative organization."

The results were also welcomed by NASA's management team,

with Director Tom Johnson stating, "We are thrilled to

hear that our employees are satisfied with their work at NASA.
We have a talented and dedicated team who work tirelessly

to achieve our goals, and it's fantastic to see that their

hard work is paying off."

The survey also revealed that the

Social Security Administration had the lowest satisfaction

rating, with only 45% of employees indicating they were


satisfied with their job. The government has pledged to
address the concerns raised by employees in the survey and

work towards improving job satisfaction across all departments.


"""

Infer 5 topics

prompt = f"""

Determine five topics that are being discussed in the \

following text, which is delimited by triple backticks.

Make each item one or two words long.

Format your response as a list of items separated by commas.

Text sample: '''{story}'''

"""

response = get_completion(prompt)

print(response)

Output:

government survey, job satisfaction, NASA, Social Security Administration, employee concerns

topic_list = [

"nasa", "local government", "engineering",

"employee satisfaction", "federal government"

Make a news alert for certain topics

prompt = f"""

Determine whether each item in the following list of \

topics is a topic in the text below, which


is delimited with triple backticks.

Give your answer as list with 0 or 1 for each topic.\

List of topics: {", ".join(topic_list)}

Text sample: '''{story}'''

"""

response = get_completion(prompt)

print(response)

Output:

nasa: 1
local government: 0

engineering: 0
employee satisfaction: 1

federal government: 1

topic_dict = {i.split(': ')[0]: int(i.split(': ')[1]) for i in response.split(sep='\n')}

if topic_dict['nasa'] == 1:

print("ALERT: New NASA story!")

Output:

ALERT: New NASA story!

Transforming

LLMs are very good at transforming its input to a different format, such as translation, spelling and grammar correction.
Or taking as input a piece of text that may not be fully grammatical and helping you to fix that up a bit. Or even
transforming formats such as inputting HTML and outputting JSON.

Translation

ChatGPT is trained with sources in many languages. This gives the model the ability to do translation. Here are some
examples of how to use this capability.

prompt = f"""

Translate the following English text to Vietnamese: \

```Hi, I would like to order a blender```

"""

response = get_completion(prompt)

print(response)

Output:

Xin chào, tôi muốn đặt mua một máy xay sinh tố.

prompt = f"""

Tell me which language this is:

```Combien coûte le lampadaire?```

"""

response = get_completion(prompt)

print(response)

Output:

This is French.

prompt = f"""

Translate the following text to French and Vietnamese

and English pirate: \


```I want to order a basketball```

"""

response = get_completion(prompt)

print(response)

Output:

French: ```Je voudrais commander un ballon de basket```

Vietnamese: ```Tôi muốn đặt mua một quả bóng rổ```

English: ```I want to order a basketball```

prompt = f"""

Translate the following text to Vietnamese in both the \


formal and informal forms:

'Would you like to order a pillow?'


"""

response = get_completion(prompt)

print(response)

Output:

Formal: Anh/chị có muốn đặt một cái gối không ạ?

Informal: Bạn có muốn đặt một cái gối không?

Universal Translator

Imagine you are in charge of IT at a large multinational e-commerce company. Users are messaging you with IT issues in
all their native languages. Your staff is from all over the world and speaks only their native languages. You need a
universal translator!

user_messages = [

"La performance du système est plus lente que d'habitude.",

# System performance is slower than normal

"Mi monitor tiene píxeles que no se iluminan.",

# My monitor has pixels that are not lighting

"Il mio mouse non funziona",

# My mouse is not working

"Mój klawisz Ctrl jest zepsuty",

# My keyboard has a broken control key

" 我的屏幕在闪烁 "

# My screen is flashing

for issue in user_messages:

prompt = f"Tell me what language this is: ```{issue}```"

lang = get_completion(prompt)

print(f"Original message ({lang}): {issue}")

prompt = f"""

Translate the following text to English \

and Vietnamese: ```{issue}```

"""
response = get_completion(prompt)

print(response, "\n")

Output:

Original message (This is French.): La performance du système est plus lente que d'habitude.

English: The system performance is slower than usual.

Vietnamese: Hiệu suất hệ thống chậm hơn bình thường.

Original message (This is Spanish.): Mi monitor tiene píxeles que no se iluminan.

English: My monitor has pixels that don't light up.

Vietnamese: Màn hình của tôi có các pixel không sáng lên.

Original message (This is Italian.): Il mio mouse non funziona

English: My mouse is not working.

Vietnamese: Chuột của tôi không hoạt động.

Original message (This is Polish.): Mój klawisz Ctrl jest zepsuty

English: My Ctrl key is broken.

Vietnamese: Phím Ctrl của tôi bị hỏng.

Original message (This is Chinese (Simplified).): 我的屏幕在闪烁

English: My screen is flickering.

Vietnamese: Màn hình của tôi đang nhấp nháy.

Tone Transformation

Writing can vary based on the intended audience. ChatGPT can produce different tones.

prompt = f"""

Translate the following from slang to a business letter:

'Dude, This is Joe, check out this spec on this standing lamp.'
"""

response = get_completion(prompt)

print(response)

Output:

Dear Sir/Madam,

I am writing to bring to your attention a standing lamp that I believe may be of interest to you. Please
find attached the specifications for your review.

Thank you for your time and consideration.

Sincerely,

Joe

Format Conversion

ChatGPT can translate between formats. The prompt should describe the input and output formats.
data_json = { "resturant employees" :[

{"name":"Shyam", "email":"[email protected]"},

{"name":"Bob", "email":"[email protected]"},

{"name":"Jai", "email":"[email protected]"}

]}

prompt = f"""

Translate the following python dictionary from JSON to an HTML \

table with column headers and title: {data_json}

"""

response = get_completion(prompt)

print(response)

Output:

<table>
<caption>Restaurant Employees</caption>

<thead>

<tr>

<th>Name</th>

<th>Email</th>

</tr>

</thead>

<tbody>

<tr>

<td>Shyam</td>

<td>[email protected]</td>

</tr>

<tr>

<td>Bob</td>

<td>[email protected]</td>

</tr>

<tr>

<td>Jai</td>

<td>[email protected]</td>

</tr>

</tbody>

</table>

Spellcheck/Grammar check

Here are some examples of common grammar and spelling problems and the LLM's response.

To signal to the LLM that you want it to proofread your text, you instruct the model to 'proofread' or 'proofread and
correct'.

text = [

"The girl with the black and white puppies have a ball.", # The girl has a ball.

"Yolanda has her notebook.", # ok

"Its going to be a long day. Does the car need it’s oil changed?", # Homonyms

"Their goes my freedom. There going to bring they’re suitcases.", # Homonyms

"Your going to need you’re notebook.", # Homonyms

"That medicine effects my ability to sleep. Have you heard of the butterfly affect?", # Homonyms

"This phrase is to cherck chatGPT for speling abilitty" # spelling

for t in text:

prompt = f"""Proofread and correct the following text

and rewrite the corrected version. If you don't find


and errors, just say "No errors found". Don't use

any punctuation around the text:

```{t}```"""

response = get_completion(prompt)

print(response)

Output:

The girl with the black and white puppies has a ball.

No errors found.

It's going to be a long day. Does the car need its oil changed?
Their goes my freedom. There going to bring they're suitcases.

Corrected version:

There goes my freedom. They're going to bring their suitcases.

You're going to need your notebook.


That medicine affects my ability to sleep. Have you heard of the butterfly effect?

This phrase is to check ChatGPT for spelling ability.

text = f"""

Got this for my daughter for her birthday cuz she keeps taking \

mine from my room. Yes, adults also like pandas too. She takes \

it everywhere with her, and it's super soft and cute. One of the \

ears is a bit lower than the other, and I don't think that was \

designed to be asymmetrical. It's a bit small for what I paid for it \


though. I think there might be other options that are bigger for \

the same price. It arrived a day earlier than expected, so I got \

to play with it myself before I gave it to my daughter.

"""

prompt = f"proofread and correct this review: ```{text}```"

response = get_completion(prompt)

print(response)

Output:

I got this for my daughter's birthday because she keeps taking mine from my room. Yes, adults also like
pandas too. She takes it everywhere with her, and it's super soft and cute. However, one of the ears is a
bit lower than the other, and I don't think that was designed to be asymmetrical. Additionally, it's a
bit small for what I paid for it. I think there might be other options that are bigger for the same
price. On the positive side, it arrived a day earlier than expected, so I got to play with it myself
before I gave it to my daughter.

from redlines import Redlines

diff = Redlines(text,response)

display(Markdown(diff.output_markdown))

Output:

from IPython.display import display, Markdown, Latex, HTML, JSON

prompt = f"""

proofread and correct this review. Make it more compelling.

Ensure it follows APA style guide and targets an advanced reader.

Output in markdown format.

Text: ```{text}```

"""

response = get_completion(prompt)

display(Markdown(response))

Output:

Title: A Soft and Cute Panda Plush Toy for All Ages

Introduction: As a parent, finding the perfect gift for your child's birthday can be a daunting task.
However, I stumbled upon a soft and cute panda plush toy that not only made my daughter happy but also
brought joy to me as an adult. In this review, I will share my experience with this product and provide
an honest assessment of its features.

Product Description: The panda plush toy is made of high-quality materials that make it super soft and
cuddly. Its cute design is perfect for children and adults alike, making it a versatile gift option. The
toy is small enough to carry around, making it an ideal companion for your child on their adventures.

Pros: The panda plush toy is incredibly soft and cute, making it an excellent gift for children and
adults. Its small size makes it easy to carry around, and its design is perfect for snuggling. The toy
arrived a day earlier than expected, which was a pleasant surprise.

Cons: One of the ears is a bit lower than the other, which makes the toy asymmetrical. Additionally, the
toy is a bit small for its price, and there might be other options that are bigger for the same price.

Conclusion: Overall, the panda plush toy is an excellent gift option for children and adults who love
cute and cuddly toys. Despite its small size and asymmetrical design, the toy's softness and cuteness
make up for its shortcomings. I highly recommend this product to anyone looking for a versatile and
adorable gift option.

Expanding
Expanding is the task of taking a short piece of text, such as a set of instructions or a list of topics, and having the large
language model generate a longer piece of text, such as an email or an essay about some topic. There are some great
uses of this, such as if you use a large language model as a brainstorming partner.

We'll go through an example of how you can use a language model to generate a personalized email based on some
information. The email is kind of self-proclaimed to be from an AI bot.

Customize the automated reply to a customer email

# given the sentiment from the lesson on "inferring",

# and the original customer message, customize the email


sentiment = "negative"

# review for a blender

review = f"""

So, they still had the 17 piece system on seasonal \

sale for around $49 in the month of November, about \

half off, but for some reason (call it price gouging) \

around the second week of December the prices all went \


up to about anywhere from between $70-$89 for the same \
system. And the 11 piece system went up around $10 or \

so in price also from the earlier sale price of $29. \

So it looks okay, but if you look at the base, the part \

where the blade locks into place doesn’t look as good \

as in previous editions from a few years ago, but I \

plan to be very gentle with it (example, I crush \

very hard items like beans, ice, rice, etc. in the \

blender first then pulverize them in the serving size \

I want in the blender then switch to the whipping \

blade for a finer flour, and use the cross cutting blade \

first when making smoothies, then use the flat blade \

if I need them finer/less pulpy). Special tip when making \

smoothies, finely cut and freeze the fruits and \


vegetables (if using spinach-lightly stew soften the \

spinach then freeze until ready for use-and if making \

sorbet, use a small to medium sized food processor) \

that you plan to use that way you can avoid adding so \

much ice if at all-when making your smoothie. \

After about a year, the motor was making a funny noise. \

I called customer service but the warranty expired \

already, so I had to buy another one. FYI: The overall \


quality has gone done in these types of products, so \

they are kind of counting on brand recognition and \

consumer loyalty to maintain sales. Got it in about \

two days.

"""

prompt = f"""

You are a customer service AI assistant.

Your task is to send an email reply to a valued customer.

Given the customer email delimited by ```, \

Generate a reply to thank the customer for their review.


If the sentiment is positive or neutral, thank them for \

their review.

If the sentiment is negative, apologize and suggest that \

they can reach out to customer service.

Make sure to use specific details from the review.

Write in a concise and professional tone.

Sign the email as `AI customer agent`.

Customer review: ```{review}```

Review sentiment: {sentiment}

"""

response = get_completion(prompt)

print(response)

Output:

Dear valued customer,

Thank you for taking the time to leave a review about our product. We are sorry to hear that you
experienced a price increase and that the quality of the product did not meet your expectations. We
apologize for any inconvenience this may have caused you.

If you have any further concerns or questions, please do not hesitate to reach out to our customer
service team. They will be more than happy to assist you in any way they can.

Thank you again for your feedback. We appreciate your business and hope to have the opportunity to serve
you better in the future.

Best regards,

AI customer agent

Remind the model to use details from the customer's email

We've been using temperature zero, and if you're trying to build a system that is reliable and predictable, you should go
with this. If you're trying to kind of use the model in a more creative way where you might kind of want a kind of wider
variety of different outputs, you might want to use a higher temperature.

At higher temperatures, the outputs from the model are kind of more random. You can almost think of it as that at higher
temperatures, the assistant is more distractible, but maybe more creative.
prompt = f"""

You are a customer service AI assistant.

Your task is to send an email reply to a valued customer.

Given the customer email delimited by ```, \

Generate a reply to thank the customer for their review.


If the sentiment is positive or neutral, thank them for \

their review.

If the sentiment is negative, apologize and suggest that \

they can reach out to customer service.

Make sure to use specific details from the review.

Write in a concise and professional tone.

Sign the email as `AI customer agent`.

Customer review: ```{review}```

Review sentiment: {sentiment}

"""

response = get_completion(prompt, temperature=0.7)

print(response)

Output:

Dear valued customer,

Thank you for taking the time to leave a review of our product. We apologize for any inconvenience caused
by the recent price increase of the 17 piece system. We assure you that price gouging is not our
intention, and we continuously monitor and adjust our prices to remain competitive.

We appreciate your feedback on the blade locking mechanism not looking as good as previous editions. We
will forward this information to our product development team for review.

We are sorry to hear that your motor started making a funny noise after a year of use. We recommend
reaching out to our customer service team for assistance with any issues, even if the warranty has
expired. Our team may be able to offer repair options or suggest a replacement.

Thank you again for your review and for choosing our product. We value your loyalty and feedback.

Best regards,

AI customer agent

Chatbot

Setup

import os

import openai

from dotenv import load_dotenv, find_dotenv

_ = load_dotenv(find_dotenv()) # read local .env file

openai.api_key = os.getenv('OPENAI_API_KEY')

def get_completion(prompt, model="gpt-3.5-turbo"):

messages = [{"role": "user", "content": prompt}]

response = openai.ChatCompletion.create(

model=model,

messages=messages,

temperature=0, # this is the degree of randomness of the model's output

return response.choices[0].message["content"]

def get_completion_from_messages(messages, model="gpt-3.5-turbo", temperature=0):

response = openai.ChatCompletion.create(

model=model,

messages=messages,

temperature=temperature, # this is the degree of randomness of the model's output

# print(str(response.choices[0].message))

return response.choices[0].message["content"]

messages = [

{'role':'system', 'content':'You are an assistant that speaks like Shakespeare.'},

{'role':'user', 'content':'tell me a joke'},

{'role':'assistant', 'content':'Why did the chicken cross the road'},

{'role':'user', 'content':'I don\'t know'}

response = get_completion_from_messages(messages, temperature=1)

print(response)

Output:

To get to the other side, good sir! 'Tis a classic jest.

messages = [

{'role':'system', 'content':'You are friendly chatbot.'},

{'role':'user', 'content':'Hi, my name is Isa'} ]

response = get_completion_from_messages(messages, temperature=1)

print(response)

Output:

Hello Isa, it's nice to meet you! How can I assist you today?

messages = [

{'role':'system', 'content':'You are friendly chatbot.'},

{'role':'user', 'content':'Yes, can you remind me, What is my name?'} ]

response = get_completion_from_messages(messages, temperature=1)

print(response)

Output:

I'm sorry, but I do not have access to your name unless you tell me what it is. What would you like me to
call you?

messages = [

{'role':'system', 'content':'You are friendly chatbot.'},

{'role':'user', 'content':'Hi, my name is Isa'},

{'role':'assistant', 'content': "Hi Isa! It's nice to meet you. \

Is there anything I can help you with today?"},

{'role':'user', 'content':'Yes, you can remind me, What is my name?'} ]

response = get_completion_from_messages(messages, temperature=1)

print(response)

Output:

Your name is Isa.

OrderBot

We can automate the collection of user prompts and assistant responses to build a OrderBot. The OrderBot will take
orders at a pizza restaurant.

def collect_messages(_):

prompt = inp.value_input

inp.value = ''

context.append({'role':'user', 'content':f"{prompt}"})

response = get_completion_from_messages(context)

context.append({'role':'assistant', 'content':f"{response}"})

panels.append(

pn.Row('User:', pn.pane.Markdown(prompt, width=600)))

panels.append(

pn.Row('Assistant:', pn.pane.Markdown(response, width=600, style={'background-color':


'#F6F6F6'})))

return pn.Column(*panels)

import panel as pn # GUI

pn.extension()

panels = [] # collect display

context = [ {'role':'system', 'content':"""

You are OrderBot, an automated service to collect orders for a pizza restaurant. \

You first greet the customer, then collects the order, \


and then asks if it's a pickup or delivery. \

You wait to collect the entire order, then summarize it and check for a final \

time if the customer wants to add anything else. \

If it's a delivery, you ask for an address. \

Finally you collect the payment.\

Make sure to clarify all options, extras and sizes to uniquely \

identify the item from the menu.\

You respond in a short, very conversational friendly style. \

The menu includes \

pepperoni pizza 12.95, 10.00, 7.00 \

cheese pizza 10.95, 9.25, 6.50 \

eggplant pizza 11.95, 9.75, 6.75 \

fries 4.50, 3.50 \

greek salad 7.25 \

Toppings: \

extra cheese 2.00, \

mushrooms 1.50 \

sausage 3.00 \
canadian bacon 3.50 \
AI sauce 1.50 \

peppers 1.00 \
Drinks: \

coke 3.00, 2.00, 1.00 \

sprite 3.00, 2.00, 1.00 \

bottled water 5.00 \

"""} ] # accumulate messages

inp = pn.widgets.TextInput(value="Hi", placeholder='Enter text here…')

button_conversation = pn.widgets.Button(name="Chat!")

interactive_conversation = pn.bind(collect_messages, button_conversation)

dashboard = pn.Column(

inp,

pn.Row(button_conversation),

pn.panel(interactive_conversation, loading_indicator=True, height=300),

dashboard

messages = context.copy()

messages.append(

{'role':'system', 'content':'create a json summary of the previous food order. Itemize the price for each
item\

The fields should be 1) pizza, include size 2) list of toppings 3) list of drinks, include size 4)
list of sides include size 5)total price '},

#The fields should be 1) pizza, price 2) list of toppings 3) list of drinks, include size include price
4) list of sides include size include price, 5)total price '},

response = get_completion_from_messages(messages, temperature=0)

print(response)

Output:

Sure, here's a JSON summary of the order:

```

"pizza": [

"type": "pepperoni",

"size": "large",

"price": 12.95

},

"type": "cheese",

"size": "medium",

"price": 9.25

],

"toppings": [

"type": "extra cheese",

"price": 2.00

},

"type": "mushrooms",

"price": 1.50

],

"drinks": [

"type": "coke",
"size": "medium",

"price": 2.00

},

"type": "sprite",

"size": "small",

"price": 1.00

],

"sides": [

"type": "fries",

"size": "large",

"price": 4.50

],

"total_price": 34.20

```

You might also like