import os
import openai
from dotenv import load_dotenv, find_dotenv
= load_dotenv(find_dotenv()) # read local .env file
_
= os.getenv('OPENAI_API_KEY') openai.api_key
The Chat Format
Utilize the chat format to have extended conversations with chatbots personalized or specialized for specific tasks or behaviors.
Setup
def get_completion(prompt, model="gpt-3.5-turbo"):
= [{"role": "user", "content": prompt}]
messages = openai.ChatCompletion.create(
response =model,
model=messages,
messages=0, # this is the degree of randomness of the model's output
temperature
)return response.choices[0].message["content"]
def get_completion_from_messages(messages, model="gpt-3.5-turbo", temperature=0):
= openai.ChatCompletion.create(
response =model,
model=messages,
messages=temperature, # this is the degree of randomness of the model's output
temperature
)# 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'} ] {
= get_completion_from_messages(messages, temperature=1)
response print(response)
= [
messages 'role':'system', 'content':'You are friendly chatbot.'},
{'role':'user', 'content':'Hi, my name is Isa'} ]
{= get_completion_from_messages(messages, temperature=1)
response print(response)
= [
messages 'role':'system', 'content':'You are friendly chatbot.'},
{'role':'user', 'content':'Yes, can you remind me, What is my name?'} ]
{= get_completion_from_messages(messages, temperature=1)
response print(response)
= [
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?'} ]
{= get_completion_from_messages(messages, temperature=1)
response print(response)
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(_):
= inp.value_input
prompt = ''
inp.value 'role':'user', 'content':f"{prompt}"})
context.append({= get_completion_from_messages(context)
response 'role':'assistant', 'content':f"{response}"})
context.append({
panels.append('User:', pn.pane.Markdown(prompt, width=600)))
pn.Row(
panels.append('Assistant:', pn.pane.Markdown(response, width=600, style={'background-color': '#F6F6F6'})))
pn.Row(
return pn.Column(*panels)
import panel as pn # GUI
pn.extension()
= [] # collect display
panels
= [ {'role':'system', 'content':"""
context 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
= pn.widgets.TextInput(value="Hi", placeholder='Enter text here…')
inp = pn.widgets.Button(name="Chat!")
button_conversation
= pn.bind(collect_messages, button_conversation)
interactive_conversation
= pn.Column(
dashboard
inp,
pn.Row(button_conversation),=True, height=300),
pn.panel(interactive_conversation, loading_indicator
)
dashboard
= context.copy()
messages
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 '},
= get_completion_from_messages(messages, temperature=0)
response print(response)
Try experimenting on your own!
You can modify the menu or instructions to create your own orderbot!