Atlas / docs /features /search-optimization.md
findEthics
feat: add comprehensive search optimization and ChromaDB caching system
4b28fb0
|
Raw
History Blame Contribute Delete
11.8 kB
# Search Optimization Features
## Overview
Atlas includes an intelligent search optimization system that automatically determines when web searches are necessary, reducing unnecessary searches by 40-60% while maintaining high response quality. This results in faster responses, lower costs, and better conversation flow.
## How It Works
### Smart Decision Engine
Atlas uses a sophisticated hybrid system to decide when to search:
```
User Question → Analyze Context → Make Decision → Respond
↓ ↓ ↓ ↓
"Tell me more" → Has history? → Skip search → Use history
"Latest news" → No context → Perform search → Web + AI
```
### Two-Phase Analysis
1. **Fast Rule-Based Patterns** (< 1ms)
- Detects follow-up questions ("tell me more", "elaborate")
- Identifies referential questions ("what about that?")
- Recognizes clarification requests ("what do you mean?")
2. **AI-Powered Analysis** (for ambiguous cases)
- Deep semantic understanding using Google Gemini
- Context sufficiency assessment
- Information recency requirements
## Key Features
### 🧠 Intelligent Pattern Recognition
**Follow-up Questions**: Automatically detected
- "Tell me more about that"
- "Can you elaborate?"
- "Explain that better"
- "What else should I know?"
**Referential Questions**: Context-aware
- "How does this work?"
- "What about the previous point?"
- "Can you expand on it?"
**New Information Requests**: Always searched
- "Latest news about AI"
- "Current stock prices"
- "What happened today?"
### ⚡ Context-Aware Request Flow
**First Message (No History)**:
- Cache-first approach for performance
- Check vector database for similar queries
- Search only if no relevant cached results
**Follow-up Messages (Has History)**:
- Analyze conversation context first
- Search only when new information needed
- Leverage existing conversation knowledge
### 🗄️ ChromaDB Vector Caching
**Semantic Similarity Matching**:
- Finds similar queries even with different wording
- "machine learning basics" matches "intro to ML"
- Persistent storage across server restarts
**Performance Benefits**:
- Instant responses for cached queries
- Reduced API costs and latency
- Automatic cache cleanup and management
## Configuration Options
### Search Decision Modes
Control how aggressively the system searches:
#### Conservative Mode
```json
{
"prompt": "Tell me about AI",
"search_decision_mode": "conservative"
}
```
- **Behavior**: Strongly prefers conversation history
- **Use Case**: Follow-up heavy conversations, cost optimization
- **Search Reduction**: ~60-70%
#### Balanced Mode (Default)
```json
{
"prompt": "Tell me about AI",
"search_decision_mode": "balanced"
}
```
- **Behavior**: Smart balance between search and history
- **Use Case**: General purpose usage
- **Search Reduction**: ~40-50%
#### Aggressive Mode
```json
{
"prompt": "Tell me about AI",
"search_decision_mode": "aggressive"
}
```
- **Behavior**: Prefers fresh web search results
- **Use Case**: News, current events, frequently changing topics
- **Search Reduction**: ~20-30%
### Force Search Override
Complete control over search behavior:
```json
{
"prompt": "What is 2+2?",
"force_search": true
}
```
**Values**:
- `true`: Always search, ignore optimization
- `false`: Never search, use only conversation history
- `null` (default): Use intelligent optimization
## Usage Examples
### Basic Usage
**Let the system optimize automatically:**
```bash
curl -X POST /chat -d '{
"prompt": "What is machine learning?"
}'
# System will search (no conversation history)
```
```bash
curl -X POST /chat -d '{
"prompt": "Tell me more about neural networks",
"history": [
{"role": "user", "content": "What is machine learning?"},
{"role": "assistant", "content": "Machine learning is..."}
]
}'
# System will likely skip search (elaboration request)
```
### Advanced Configuration
**Conservative approach for cost optimization:**
```javascript
const response = await fetch('/chat', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
prompt: "Can you explain that concept better?",
search_decision_mode: "conservative",
history: conversationHistory
})
});
```
**Aggressive approach for current events:**
```javascript
const response = await fetch('/chat', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
prompt: "What are today's tech headlines?",
search_decision_mode: "aggressive"
})
});
```
**Force search for specific needs:**
```javascript
const response = await fetch('/chat', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
prompt: "Company internal policy on remote work",
force_search: true // Ensure fresh search
})
});
```
## Response Information
### Search Decision Details
Every response includes detailed search decision information:
```json
{
"response": "Neural networks are...",
"search_decision": {
"should_search": false,
"reason": "Elaboration request with sufficient context",
"confidence": 0.85,
"decision_method": "rule_based"
},
"cache_info": {
"cache_hit": false,
"flow_type": "search_decision_skip"
}
}
```
**search_decision fields**:
- `should_search`: Final decision made
- `reason`: Human-readable explanation
- `confidence`: Decision confidence (0.0-1.0)
- `decision_method`: "rule_based", "hybrid", or "fallback"
**cache_info fields**:
- `cache_hit`: Whether results came from cache
- `flow_type`: Request processing flow used
- `cache_type`: Caching system used (e.g., "chromadb_vector")
### Flow Types
**Cache-First Flows** (No conversation history):
- `cache_first_hit`: Found cached results
- `cache_first_miss`: No cache, performed search
**Search-Decision-First Flows** (Has conversation history):
- `search_decision_skip`: Smart system skipped search
- `search_decision_cache_hit`: Decided to search, found in cache
- `search_decision_cache_miss`: Decided to search, performed web search
## Performance Benefits
### Response Time Improvements
**Cached Responses**: < 200ms
- Instant retrieval from ChromaDB
- No web search delays
- No API rate limiting
**Skipped Searches**: < 500ms
- Fast rule-based decisions (< 1ms)
- Direct conversation history usage
- No external API calls
**Regular Searches**: 2-5 seconds
- Only when truly needed
- Fresh information guaranteed
- Full web search capabilities
### Cost Optimization
**API Call Reduction**:
- Search API calls: -40 to -60%
- AI model calls: Optimized caching
- Rate limit utilization: More efficient
**Resource Usage**:
- Server CPU: Reduced search processing
- Network bandwidth: Fewer external requests
- Storage: Efficient vector caching
## Best Practices
### For Different Use Cases
**Customer Support Chatbots**:
```json
{
"search_decision_mode": "conservative",
"force_search": false
}
```
- Rely heavily on conversation context
- Minimize external searches for common questions
- Use aggressive mode only for account-specific queries
**News and Information Services**:
```json
{
"search_decision_mode": "aggressive",
"force_search": null
}
```
- Prioritize fresh information
- Let system decide on follow-up questions
- Cache recent searches for popular topics
**Educational Applications**:
```json
{
"search_decision_mode": "balanced",
"force_search": null
}
```
- Balance between comprehensive info and follow-ups
- Trust the system's optimization
- Use force_search for specific research needs
### Conversation Design
**Effective Follow-ups** (will skip search):
- "Can you explain that in simpler terms?"
- "What are some examples of this?"
- "How does this relate to what we discussed?"
**New Topic Indicators** (will trigger search):
- "Now tell me about [different topic]"
- "What's the latest on [topic]?"
- "I have a question about [new subject]"
## Monitoring and Analytics
### Cache Performance
Check cache effectiveness at `/analytics/cache`:
```json
{
"cache_statistics": {
"hit_rate_percentage": 65.4,
"cache_size": 1250,
"memory_usage_mb": 45.2
},
"cache_effectiveness": "High"
}
```
### Search Decision Analytics
View optimization impact at `/analytics/dashboard`:
- **Search reduction percentage**
- **Response time improvements**
- **Decision accuracy metrics**
- **Cache hit rates over time**
### Individual Query Analysis
Each response includes optimization details for monitoring:
```javascript
// Log search decisions for analysis
console.log(`Decision: ${response.search_decision.should_search}`);
console.log(`Reason: ${response.search_decision.reason}`);
console.log(`Confidence: ${response.search_decision.confidence}`);
console.log(`Cache hit: ${response.cache_info.cache_hit}`);
```
## Troubleshooting
### Common Issues
**Too Many Searches**:
- Use "conservative" mode
- Check conversation history format
- Verify follow-up question patterns
**Missing Information**:
- Use "aggressive" mode for current events
- Check cache expiration settings
- Use force_search for critical updates
**Slow Responses**:
- Monitor cache hit rates
- Check ChromaDB performance
- Verify conversation history size
### Performance Optimization
**For High Traffic**:
- Use conservative mode to maximize cache hits
- Implement client-side conversation management
- Monitor cache performance metrics
**For Accuracy**:
- Use aggressive mode for dynamic content
- Implement domain-specific force_search logic
- Monitor false negative rates
## Advanced Features
### Custom Integration Patterns
**Progressive Enhancement**:
```javascript
class SmartChatClient {
constructor() {
this.mode = "balanced"; // Start balanced
}
// Adapt based on conversation type
setContextMode(conversationType) {
switch(conversationType) {
case "support": this.mode = "conservative"; break;
case "news": this.mode = "aggressive"; break;
default: this.mode = "balanced";
}
}
}
```
**Domain-Specific Rules**:
```javascript
function getSearchMode(prompt) {
if (prompt.includes("latest") || prompt.includes("current")) {
return "aggressive";
}
if (prompt.includes("explain") || prompt.includes("clarify")) {
return "conservative";
}
return "balanced";
}
```
### Integration with Analytics
**Track Optimization Impact**:
```javascript
// Monitor search reduction
const searchReduction = (totalRequests - actualSearches) / totalRequests;
// Track response time improvements
const avgResponseTime = responseTimes.reduce((a, b) => a + b) / responseTimes.length;
// Measure user satisfaction
const satisfactionScore = positiveResponses / totalResponses;
```
## Future Enhancements
### Planned Features
- **User Learning**: Personalized optimization based on usage patterns
- **Domain Adaptation**: Industry-specific optimization rules
- **Multimodal Context**: Support for image and document context
- **Real-time Adaptation**: Dynamic threshold adjustment based on performance
### Feedback and Improvement
The search optimization system continuously improves based on:
- **Usage patterns**: Common conversation flows
- **Performance metrics**: Response times and accuracy
- **User feedback**: Explicit and implicit satisfaction signals
- **Cache effectiveness**: Hit rates and relevance scoring
---
The search optimization system makes Atlas smarter, faster, and more cost-effective while maintaining the high-quality responses users expect. By intelligently determining when fresh information is needed versus when conversation history suffices, Atlas provides an optimal balance of performance and accuracy.