Prompt Engineering II : Reasoning & Structured Output
Business Scenario
Welcome!
Previously, you improved a vague prompt using task, limits, format, audience and compared zero-shot and few-shot prompting on real queries, explored how role prompting changes responses, created a Kart system prompt with rules to fix known v1 problems and upgraded SmartCart v1
Today, your manager has assigned you a task to
Git Pull
git pull origin branchNamePre-Lab Preparation
Dataset :
Topic : Prompt Engineering II : Reasoning & Structured Output
1) Chain of Thought Prompting
2) Output Formatting
3) Conversational Memory
Task 1: Reload & Continue in Lab 10
!pip install -q -r requirements.txt
import os
import pandas as pd
from google.colab import userdata
os.environ["GROQ_API_KEY"] = userdata.get("GROQ_API_KEY")
from smartcart_v1 import llm
from langchain_core.messages import SystemMessage, HumanMessage
def ask(prompt):
"""Send one prompt and return the reply text."""
return llm.invoke(prompt).content vague_prompt = "suggest earbuds"
clear_prompt = (
"Recommend exactly 3 wireless earbuds for gym use under Rs. 2,000 "
"for a college student. For each, give the name, the price in "
"rupees and one reason. Use a numbered list." ) Task 2 : Instructions Clarity
vague_prompt = "suggest earbuds"
clear_prompt = (
"Recommend exactly 3 wireless earbuds for gym use under Rs. 2,000 "
"for a college student. For each, give the name, the price in "
"rupees and one reason. Use a numbered list." )
for name, prompt in [("VAGUE", vague_prompt), ("CLEAR", clear_prompt)]:
reply = ask(prompt)
print(f"=== {name} ({len(reply.split())} words) ===")
print(reply[:300], "\n")Output
Task 3 : Zero Shot Vs Few Shot Prompting
Write both prompts
1
def zero_shot_prompt(query):
return ("Classify this shopping query into a category.\n"
f"Query: {query}")
EXAMPLES = """Query: wireless mouse for laptop -> Electronics
Query: organic sugar nestle -> Grocery
Query: kids dress grey size 8 -> Apparel"""
def few_shot_prompt(query):
return ("Classify each shopping query as Electronics, Grocery or Apparel.\n\n"
f"{EXAMPLES}\n"
f"Query: {query} ->")queries = pd.read_csv("smartcart_customer_queries.csv").sample(20, random_state=42)
scores = {"zero_shot": 0, "few_shot": 0}
for _, row in queries.iterrows():
query = " ".join(row["query_text"].split())
if ask(zero_shot_prompt(query)).strip() == row["category"]:
scores["zero_shot"] += 1
if ask(few_shot_prompt(query)).strip() == row["category"]:
scores["few_shot"] += 1
print("Zero-shot accuracy:", scores["zero_shot"] / 20)
print("Few-shot accuracy :", scores["few_shot"] / 20)
print("\nExample zero-shot reply:", ask(zero_shot_prompt("KIDS DRESS GREY SIZE 8"))) Test on real queries
2
Output
Task 4 : Role-Play Prompt
question = "I want a smartphone for my father. Budget Rs. 15,000."
roles = {
"No role": "",
"Budget advisor": "You are a strict budget advisor who always looks for savings. ",
"SmartCart helper": "You are a warm, patient SmartCart assistant helping first-time
online shoppers. ", }
for name, role in roles.items():
reply = ask(role + question + " Answer in under 60 words.")
print(f"=== {name} ===\n{reply}\n")Output
Task 5 : System Prompts & SmartCart Persona
SYSTEM_PROMPT = """You are Kart, SmartCart's friendly shopping assistant for shoppers in
India.
Persona: - Warm, patient and to the point. Prices are always in rupees.
Rules:
1. Only help with shopping. For anything else, politely say you can only help with
shopping.
2. Recommend exactly 3 products as a numbered list: name – approximate price – one reason.
3. Reply in the same style as the shopper: English stays English, Hinglish stays Hinglish.
4. Never make up SmartCart store policies (returns, delivery, refunds).
Say: "Please check the Help page in the SmartCart app for our latest policy."
5. Keep every reply under 100 words."""Write SmartCart system prompt
1
Use system prompt
2
tests = [
"who won the cricket match yesterday",
"What is SmartCart's return policy for opened electronics?",
"office ke liye formal shirt chahiye under 1500 rupees",]
for text in tests:
messages = [SystemMessage(content=SYSTEM_PROMPT), HumanMessage(content=text)]
print("You :", text)
print("Kart:", llm.invoke(messages).content, "\n")Output
Task 6 : Upgrade SmartCart v1 with System Prompt
%%writefile smartcart_v1.py
import os
from langchain_groq import ChatGroq
from langchain_core.messages import SystemMessage, HumanMessage
if not os.environ.get("GROQ_API_KEY"):
raise SystemExit("GROQ_API_KEY not found. Add it to Colab Secrets (Lab 9, Task 2).")
llm = ChatGroq(
model="qwen/qwen3.8-27b",
temperature=0.7,
max_tokens=300,
model_kwargs={"top_p": 0.95},
reasoning_effort="none",)
SYSTEM_PROMPT = """You are Kart, SmartCart's friendly shopping assistant for shoppers in
India.
Persona: - Warm, patient and to the point. Prices are always in rupees.
Rules:
1. Only help with shopping. For anything else, politely say you can only help with
shopping.
2. Recommend exactly 3 products as a numbered list: name – approximate price – one reason.
3. Reply in the same style as the shopper: English stays English, Hinglish stays Hinglish.
4. Never make up SmartCart store policies (returns, delivery, refunds).
Say: "Please check the Help page in the SmartCart app for our latest policy."
5. Keep every reply under 100 words."""%%writefile smartcart_v1.py
import os
from langchain_groq import ChatGroq
from langchain_core.messages import SystemMessage, HumanMessage
if not os.environ.get("GROQ_API_KEY"):
raise SystemExit("GROQ_API_KEY not found. Add it to Colab Secrets (Lab 9, Task 2).")
llm = ChatGroq(
model="qwen/qwen3.8-27b",
temperature=0.7,
max_tokens=300,
model_kwargs={"top_p": 0.95},
reasoning_effort="none",)
SYSTEM_PROMPT = """You are Kart, SmartCart's friendly shopping assistant for shoppers in
India.
Persona: - Warm, patient and to the point. Prices are always in rupees.
Rules:
1. Only help with shopping. For anything else, politely say you can only help with
shopping.
2. Recommend exactly 3 products as a numbered list: name – approximate price – one reason.
3. Reply in the same style as the shopper: English stays English, Hinglish stays Hinglish.
4. Never make up SmartCart store policies (returns, delivery, refunds).
Say: "Please check the Help page in the SmartCart app for our latest policy."
5. Keep every reply under 100 words."""
def ask_smartcart(shopper_request):
"""Send one shopping request with the system prompt; return the AIMessage."""
messages = [
SystemMessage(content=SYSTEM_PROMPT),
HumanMessage(content=shopper_request),
]
return llm.invoke(messages)from smartcart_v1_chat import check_input, safe_ask
tests = pd.read_csv("smartcart_v1_test_results.csv")
new_replies = []
for text in tests["input"]:
cleaned, problem = check_input(text)
new_replies.append(problem if problem else safe_ask(cleaned))
tests["reply_v1_1"] = new_replies
tests.to_csv("smartcart_v1_1_test_results.csv", index=False)
print(tests[["id", "type", "reply_v1_1"]].to_string(max_colwidth=55)) Task 7 : Test Chatbot Behaviour
Output :
Great job!
You have successfully improved a vague prompt using the clarity checklist—task, limits, format, audience and compared zero-shot and few-shot prompting on real queries, explored how role prompting changes responses, created a Kart system prompt with rules to fix known v1 problems and upgraded SmartCart v1.
Checkpoint
Git Push
git push origin branchNameNext-Lab Preparation
Topic : Prompt Engineering II : Reasoning & Structured Output
1) Chain of Thought Prompting
2) Output Formatting
3) Conversational Memory