Building an Intelligent E-commerce Assistant: LLM-Powered Intent Recognition Using Cohere and Gradio
Eddie Otudor
Posted on November 8, 2024
As e-commerce continues to evolve, understanding customer intent has become crucial for providing exceptional shopping experiences. In this article, I'll share how we built a sophisticated intent recognition system using Cohere's Command model and Gradio, creating an interactive demo that showcases the power of LLMs in e-commerce.
The Challenge
Traditional e-commerce search and navigation systems often struggle with understanding natural language queries like "I need a waterproof watch that won't break the bank" or "Can you help me find a gift for my tech-savvy dad?". These systems typically rely on keyword matching and predefined rules, missing the nuanced understanding that modern customers expect.
Solution: LLM-Powered Intent Recognition
We've built an interactive demo using Gradio that showcases how Large Language Models (LLMs) can revolutionize e-commerce interactions. Our system:
- Understands complex, natural language queries
- Extracts relevant entities and specifications
- Determines user intent with high accuracy
- Provides detailed analysis in real-time
Technical Implementation
1. Core Intent Recognition System
@dataclass
class IntentResponse:
intent: str
confidence: float
entities: Dict
suggested_action: str
explanation: str
class EcommerceLLMIntentRecognizer:
def __init__(self):
api_key = os.getenv('COHERE_API_KEY')
self.co = cohere.Client(api_key)
self.valid_intents = {
'product_search': 'SEARCH_CATALOG',
'price_inquiry': 'FETCH_PRICE',
'order_status': 'CHECK_ORDER_STATUS',
'return_request': 'INITIATE_RETURN',
'cart_management': 'MODIFY_CART',
'availability_check': 'CHECK_INVENTORY',
'checkout_help': 'ASSIST_CHECKOUT',
'shipping_info': 'PROVIDE_SHIPPING_INFO'
}
2. LLM Prompt Engineering
The key to accurate intent recognition lies in our carefully crafted prompt:
def _generate_prompt(self, query: str) -> str:
return f"""As an e-commerce AI assistant, analyze the following customer query and extract the shopping intent, relevant entities, and determine the appropriate action.
Valid intents are: {', '.join(self.valid_intents.keys())}
Customer Query: "{query}"
Provide your analysis in the following JSON format:
{{
"intent": "the_identified_intent",
"confidence": 0.XX,
"entities": {{
"product": "identified_product",
"category": "product_category",
"specifications": ["any", "relevant", "specs"],
"price_range": {{
"min": "if_mentioned",
"max": "if_mentioned"
}}
}},
"explanation": "Brief explanation of why this intent was chosen"
}}"""
3. Interactive Demo with Gradio
One of the most powerful aspects of our implementation is the interactive demo built with Gradio:
def process_query(user_query: str) -> str:
try:
recognizer = EcommerceLLMIntentRecognizer()
response = recognizer.recognize_intent(user_query)
return json.dumps({
'timestamp': datetime.now().isoformat(),
'query': user_query,
'intent': response.intent,
'confidence': response.confidence,
'entities': response.entities,
'suggested_action': response.suggested_action,
'explanation': response.explanation
}, indent=2)
except ValueError as e:
return json.dumps({
'error': str(e),
'hint': 'Please ensure COHERE_API_KEY is set in your .env file'
}, indent=2)
# Create Gradio interface
iface = gr.Interface(
fn=process_query,
inputs=gr.Textbox(label="Enter customer query"),
outputs=gr.JSON(label="Intent Analysis"),
title="E-commerce LLM Intent Recognition System",
description="Enter your query to see the detailed intent analysis.",
examples=[
["I'm looking for a waterproof smart watch under $300"],
["Can you compare the iPhone 13 and iPhone 14 Pro?"],
["Need to return my order #ABC123, it's the wrong size"],
["Do you have this dress in size medium and in red?"],
["What's your shipping time to California?"]
]
)
Real-World Examples
Let's look at some example queries and their analysis:
1. Product Search with Specifications
Query: "I need a waterproof smartwatch under $300"
Response:
{
"intent": "product_search",
"confidence": 0.95,
"entities": {
"product": "smartwatch",
"specifications": ["waterproof"],
"price_range": {
"max": 300
}
},
"explanation": "Query specifies a product type with specific features and price constraint"
}
2. Order Status Check
Query: "Where's my order #ABC123?"
Response:
{
"intent": "order_status",
"confidence": 0.98,
"entities": {
"order_id": "ABC123"
},
"explanation": "Direct question about order status with order number"
}
Benefits of Our Approach
1. Interactive Demo
- Instant feedback through Gradio interface
- Easy to test different queries
- Visual JSON output for clear understanding
2. Developer-Friendly
- Simple setup process
- Clear code structure
- Easy to extend and modify
3. Business Value
- Better customer understanding
- Improved search accuracy
- Automated query classification
Implementation Guide
Want to try it yourself? Here's how:
1. Install Requirements
pip install cohere gradio python-dotenv
2. Set Up Environment
Create a .env file:
COHERE_API_KEY=your_api_key_here
3. Run the Demo
python app.py
Future Enhancements
1. Enhanced Analysis
- Sentiment analysis
- Multiple intent detection
- Confidence scoring improvements
2. UI Improvements
- Visual intent mapping
- Real-time suggestions
- Mobile optimization
3. Integration Capabilities
- API endpoint creation
- Webhook support
- Database integration
Conclusion
By combining the power of Cohere's LLM with Gradio's user-friendly interface, we've created a powerful tool for understanding e-commerce customer intentions. This demo showcases how modern AI can transform the way we interact with e-commerce platforms.
The application is running as a Hugging Face Space over here. Feel free to reach out if you have questions or want to discuss implementing similar solutions for your e-commerce platform.
Author's Note: I'm passionate about building practical AI solutions that bridge the gap between advanced technology and real-world applications. Connect with me to discuss more about AI in e-commerce or to explore collaboration opportunities.
Posted on November 8, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.