Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # L5 Process Inputs: Chaining Prompts
- ## Setup
- #### Load the API key and relevant Python libaries.
- In this course, we've provided some code that loads the OpenAI API key for you.
- import os
- import openai
- from dotenv import load_dotenv, find_dotenv
- _ = load_dotenv(find_dotenv()) # read local .env file
- openai.api_key = os.environ['OPENAI_API_KEY']
- def get_completion_from_messages(messages,
- model="gpt-3.5-turbo",
- temperature=0,
- max_tokens=500):
- response = openai.ChatCompletion.create(
- model=model,
- messages=messages,
- temperature=temperature,
- max_tokens=max_tokens,
- )
- return response.choices[0].message["content"]
- ## Implement a complex task with multiple prompts
- ### Extract relevant product and category names
- delimiter = "####"
- system_message = f"""
- You will be provided with customer service queries. \
- The customer service query will be delimited with \
- {delimiter} characters.
- Output a python list of objects, where each object has \
- the following format:
- 'category': <one of ovens, \
- Washer dryer, \
- Televisions and Home Theater Systems, \
- Gaming Consoles and Accessories,
- Audio Equipment, Cameras and Camcorders>,
- OR
- 'products': <a list of products that must \
- be found in the allowed products below>
- Where the categories and products must be found in \
- the customer service query.
- If a product is mentioned, it must be associated with \
- the correct category in the allowed products list below.
- If no products or categories are found, output an \
- empty list.
- Allowed products:
- ovens category:
- Omnichef Galileo Oven
- Washer dryer:
- Omnichef Galileo Oven
- Televisions and Home Theater Systems category:
- CineView 4K TV
- SoundMax Home Theater
- CineView 8K TV
- SoundMax Soundbar
- CineView OLED TV
- Gaming Consoles and Accessories category:
- GameSphere X
- ProGamer Controller
- GameSphere Y
- ProGamer Racing Wheel
- GameSphere VR Headset
- Audio Equipment category:
- AudioPhonic Noise-Canceling Headphones
- WaveSound Bluetooth Speaker
- AudioPhonic True Wireless Earbuds
- WaveSound Soundbar
- AudioPhonic Turntable
- Cameras and Camcorders category:
- FotoSnap DSLR Camera
- ActionCam 4K
- FotoSnap Mirrorless Camera
- ZoomMaster Camcorder
- FotoSnap Instant Camera
- Only output the list of objects, with nothing else.
- """
- user_message_1 = f"""
- tell me about the Omnichef Galileo Oven . \
- Also tell me about other products """
- messages = [
- {'role':'system',
- 'content': system_message},
- {'role':'user',
- 'content': f"{delimiter}{user_message_1}{delimiter}"},
- ]
- category_and_product_response_1 = get_completion_from_messages(messages)
- print(category_and_product_response_1)
- user_message_2 = f"""
- my router isn't working"""
- messages = [
- {'role':'system',
- 'content': system_message},
- {'role':'user',
- 'content': f"{delimiter}{user_message_2}{delimiter}"},
- ]
- response = get_completion_from_messages(messages)
- print(response)
- ### Retrieve detailed product information for extracted products and categories
- products = {
- "Omnichef Galileo Oven": {
- "name": "Wi-Fi Omnichef Galileo Oven",
- "category": "ovens",
- "brand": "Smeg",
- "model_number": "SO6606WAPNR",
- "warranty": "4 year",
- "rating": 5.0,
- "features": ["SmegConnect", "vapor clean", "Galileo Multicooking"],
- "description": "Compact oven that combines traditional, steam and microwave cooking, to experiment new opportunities in the kitchen and achieve professional results right from home",
- "price": 4799.99
- },
- "Free-standing washer dryer": {
- "name": "Free-standing washer dryer",
- "category": "Washer dryer",
- "brand": "Smeg",
- "model_number": "LSF147E",
- "warranty": "2 years",
- "rating": 4.7,
- "features": ["1400rpm", "15 programs", "Drying function", "LED display"],
- "description": "A high-performance gaming laptop for an immersive experience.",
- "price": 1199.99
- },
- }
- def get_product_by_name(name):
- return products.get(name, None)
- def get_products_by_category(category):
- return [product for product in products.values() if product["category"] == category]
- print(get_product_by_name("Free-standing washer dryer"))
- print(get_products_by_category("Washer dryer"))
- print(user_message_1)
- print(category_and_product_response_1)
- ### Read Python string into Python list of dictionaries
- import json
- def read_string_to_list(input_string):
- if input_string is None:
- return None
- try:
- input_string = input_string.replace("'", "\"") # Replace single quotes with double quotes for valid JSON
- data = json.loads(input_string)
- return data
- except json.JSONDecodeError:
- print("Error: Invalid JSON string")
- return None
- category_and_product_list = read_string_to_list(category_and_product_response_1)
- print(category_and_product_list)
- #### Retrieve detailed product information for the relevant products and categories
- def generate_output_string(data_list):
- output_string = ""
- if data_list is None:
- return output_string
- for data in data_list:
- try:
- if "products" in data:
- products_list = data["products"]
- for product_name in products_list:
- product = get_product_by_name(product_name)
- if product:
- output_string += json.dumps(product, indent=4) + "\n"
- else:
- print(f"Error: Product '{product_name}' not found")
- elif "category" in data:
- category_name = data["category"]
- category_products = get_products_by_category(category_name)
- for product in category_products:
- output_string += json.dumps(product, indent=4) + "\n"
- else:
- print("Error: Invalid object format")
- except Exception as e:
- print(f"Error: {e}")
- return output_string
- product_information_for_user_message_1 = generate_output_string(category_and_product_list)
- print(product_information_for_user_message_1)
- ### Generate answer to user query based on detailed product information
- system_message = f"""
- You are a customer service assistant for a \
- large appliance manufacturer. \
- Respond in a friendly and helpful tone, \
- with very concise answers. \
- Make sure to ask the user relevant follow up questions.
- """
- user_message_1 = f"""
- tell me about the Omnichef Galileo Oven and \
- the Free-standing washer dryer."""
- messages = [
- {'role':'system',
- 'content': system_message},
- {'role':'user',
- 'content': user_message_1},
- {'role':'assistant',
- 'content': f"""Relevant product information:\n\
- {product_information_for_user_message_1}"""},
- ]
- final_response = get_completion_from_messages(messages)
- print(final_response)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement