Spaces:
Runtime error
Runtime error
| """ | |
| Feedback Loop Example | |
| Demonstrates collecting and learning from user feedback | |
| """ | |
| from feedback import get_feedback_collector, get_feedback_analyzer, FeedbackCategory | |
| def example_collect_ratings(): | |
| """Example: Collect user ratings""" | |
| print("=" * 60) | |
| print("COLLECTING USER RATINGS") | |
| print("=" * 60) | |
| collector = get_feedback_collector() | |
| # Example 1: High rating (5 stars) | |
| print("\n✅ Example 1: User loves the response") | |
| feedback_id = collector.collect_rating( | |
| user_id="user123", | |
| agent_name="nutrition_agent", | |
| user_message="Tôi muốn giảm cân, nên ăn gì?", | |
| agent_response="Để giảm cân hiệu quả, bạn nên ăn nhiều rau xanh, protein...", | |
| rating=5, | |
| category=FeedbackCategory.HELPFULNESS, | |
| comment="Rất hữu ích và chi tiết!" | |
| ) | |
| print(f" Feedback ID: {feedback_id}") | |
| print(f" Rating: 5/5 ⭐⭐⭐⭐⭐") | |
| # Example 2: Low rating (2 stars) | |
| print("\n❌ Example 2: User unhappy with response") | |
| feedback_id = collector.collect_rating( | |
| user_id="user456", | |
| agent_name="nutrition_agent", | |
| user_message="Tôi bị tiểu đường, ăn gì được?", | |
| agent_response="Bạn nên ăn ít đường.", | |
| rating=2, | |
| category=FeedbackCategory.COMPLETENESS, | |
| comment="Quá chung chung, không cụ thể" | |
| ) | |
| print(f" Feedback ID: {feedback_id}") | |
| print(f" Rating: 2/5 ⭐⭐") | |
| # Example 3: Thumbs up | |
| print("\n👍 Example 3: Quick thumbs up") | |
| feedback_id = collector.collect_thumbs( | |
| user_id="user789", | |
| agent_name="exercise_agent", | |
| user_message="Tập gì để giảm mỡ bụng?", | |
| agent_response="Bạn nên tập plank, crunches, và cardio...", | |
| is_positive=True, | |
| comment="Hay!" | |
| ) | |
| print(f" Feedback ID: {feedback_id}") | |
| print(f" Thumbs: 👍") | |
| def example_collect_corrections(): | |
| """Example: Collect user corrections""" | |
| print("\n" + "=" * 60) | |
| print("COLLECTING USER CORRECTIONS") | |
| print("=" * 60) | |
| collector = get_feedback_collector() | |
| # Example: User corrects wrong information | |
| print("\n📝 User corrects incorrect BMI calculation") | |
| feedback_id = collector.collect_correction( | |
| user_id="user123", | |
| agent_name="nutrition_agent", | |
| user_message="Tôi 70kg, 175cm, BMI của tôi là bao nhiêu?", | |
| agent_response="BMI của bạn là 24.5", # Wrong! | |
| corrected_response="BMI của bạn là 22.9 (70 / 1.75²)", | |
| correction_reason="calculation_error" | |
| ) | |
| print(f" Correction ID: {feedback_id}") | |
| print(f" Original: BMI = 24.5 ❌") | |
| print(f" Corrected: BMI = 22.9 ✅") | |
| def example_report_issue(): | |
| """Example: Report problematic response""" | |
| print("\n" + "=" * 60) | |
| print("REPORTING ISSUES") | |
| print("=" * 60) | |
| collector = get_feedback_collector() | |
| # Example: Report harmful advice | |
| print("\n⚠️ User reports harmful medical advice") | |
| report_id = collector.report_issue( | |
| user_id="user999", | |
| agent_name="symptom_agent", | |
| user_message="Tôi bị đau ngực dữ dội", | |
| agent_response="Bạn nên nghỉ ngơi, uống nước", | |
| issue_type="harmful", | |
| description="Đau ngực dữ dội cần đi bệnh viện ngay, không nên chỉ nghỉ ngơi", | |
| severity="critical" | |
| ) | |
| print(f" Report ID: {report_id}") | |
| print(f" Severity: CRITICAL 🚨") | |
| def example_analyze_feedback(): | |
| """Example: Analyze feedback to find patterns""" | |
| print("\n" + "=" * 60) | |
| print("ANALYZING FEEDBACK") | |
| print("=" * 60) | |
| collector = get_feedback_collector() | |
| # Add more sample data | |
| print("\n📊 Adding sample feedback data...") | |
| for i in range(10): | |
| collector.collect_rating( | |
| user_id=f"user{i}", | |
| agent_name="nutrition_agent", | |
| user_message=f"Question {i}", | |
| agent_response=f"Response {i}", | |
| rating=4 if i % 2 == 0 else 3, | |
| category=FeedbackCategory.HELPFULNESS | |
| ) | |
| # Get statistics | |
| print("\n📈 Feedback Statistics:") | |
| stats = collector.get_feedback_stats(agent_name="nutrition_agent") | |
| print(f" Total ratings: {stats['total_ratings']}") | |
| print(f" Average rating: {stats['average_rating']:.1f}/5.0") | |
| print(f" Rating distribution:") | |
| for rating in [5, 4, 3, 2, 1]: | |
| count = stats['rating_distribution'][rating] | |
| print(f" {rating} stars: {count}") | |
| # Analyze performance | |
| print("\n🔍 Performance Analysis:") | |
| analyzer = get_feedback_analyzer(collector) | |
| analysis = analyzer.analyze_agent_performance("nutrition_agent") | |
| print(f" Overall rating: {analysis['overall_rating']:.1f}/5.0") | |
| if analysis['strengths']: | |
| print(f"\n Strengths:") | |
| for strength in analysis['strengths']: | |
| print(f" ✅ {strength}") | |
| if analysis['weaknesses']: | |
| print(f"\n Weaknesses:") | |
| for weakness in analysis['weaknesses']: | |
| print(f" ⚠️ {weakness}") | |
| def example_get_insights(): | |
| """Example: Get actionable insights""" | |
| print("\n" + "=" * 60) | |
| print("ACTIONABLE INSIGHTS") | |
| print("=" * 60) | |
| collector = get_feedback_collector() | |
| analyzer = get_feedback_analyzer(collector) | |
| # Get insights | |
| insights = analyzer.get_actionable_insights("nutrition_agent", limit=3) | |
| if insights: | |
| print("\n💡 Top Improvement Opportunities:") | |
| for i, insight in enumerate(insights, 1): | |
| print(f"\n {i}. [{insight['priority'].upper()}] {insight['category']}") | |
| print(f" Issue: {insight['issue']}") | |
| print(f" Action: {insight['action']}") | |
| if insight['examples']: | |
| print(f" Examples: {', '.join(insight['examples'][:2])}") | |
| else: | |
| print("\n No insights available yet. Collect more feedback!") | |
| def example_generate_report(): | |
| """Example: Generate improvement report""" | |
| print("\n" + "=" * 60) | |
| print("IMPROVEMENT REPORT") | |
| print("=" * 60) | |
| collector = get_feedback_collector() | |
| analyzer = get_feedback_analyzer(collector) | |
| # Generate report | |
| report = analyzer.generate_improvement_report("nutrition_agent") | |
| print(report) | |
| def example_export_for_training(): | |
| """Example: Export feedback for fine-tuning""" | |
| print("\n" + "=" * 60) | |
| print("EXPORT FOR FINE-TUNING") | |
| print("=" * 60) | |
| collector = get_feedback_collector() | |
| # Export high-quality feedback | |
| print("\n📦 Exporting high-quality feedback (rating >= 4)...") | |
| output_file = collector.export_for_fine_tuning( | |
| agent_name="nutrition_agent", | |
| min_rating=4, | |
| include_corrections=True | |
| ) | |
| print(f" ✅ Exported to: {output_file}") | |
| print(f" Ready for fine-tuning!") | |
| def example_compare_agents(): | |
| """Example: Compare agent performance""" | |
| print("\n" + "=" * 60) | |
| print("AGENT COMPARISON") | |
| print("=" * 60) | |
| collector = get_feedback_collector() | |
| # Add feedback for different agents | |
| print("\n📊 Adding feedback for multiple agents...") | |
| agents = ["nutrition_agent", "exercise_agent", "symptom_agent"] | |
| for agent in agents: | |
| for i in range(5): | |
| rating = 5 if agent == "nutrition_agent" else (4 if agent == "exercise_agent" else 3) | |
| collector.collect_rating( | |
| user_id=f"user{i}", | |
| agent_name=agent, | |
| user_message=f"Question for {agent}", | |
| agent_response=f"Response from {agent}", | |
| rating=rating | |
| ) | |
| # Compare | |
| analyzer = get_feedback_analyzer(collector) | |
| comparison = analyzer.compare_agents() | |
| print(f"\n🏆 Agent Rankings:") | |
| for i, agent in enumerate(comparison['agents'], 1): | |
| print(f" {i}. {agent['agent']}: {agent['average_rating']:.1f}/5.0 ({agent['total_feedback']} feedback)") | |
| if comparison['best_agent']: | |
| print(f"\n Best: {comparison['best_agent']['agent']} 🥇") | |
| if comparison['worst_agent']: | |
| print(f" Needs improvement: {comparison['worst_agent']['agent']} ⚠️") | |
| if __name__ == '__main__': | |
| example_collect_ratings() | |
| example_collect_corrections() | |
| example_report_issue() | |
| example_analyze_feedback() | |
| example_get_insights() | |
| example_generate_report() | |
| example_export_for_training() | |
| example_compare_agents() | |
| print("\n" + "=" * 60) | |
| print("✅ FEEDBACK LOOP DEMO COMPLETE!") | |
| print("=" * 60) | |
| print("\nNext steps:") | |
| print("1. Integrate feedback collection into your UI") | |
| print("2. Review feedback regularly") | |
| print("3. Use insights to improve agents") | |
| print("4. Export high-quality feedback for fine-tuning") | |
| print("5. Monitor trends and act on critical issues") | |