system-prompts-and-models-o.../salesflow-saas/backend/app/agents/discovery/enrichment.py

97 lines
4.5 KiB
Python

"""
Layer 2: Data Enricher + Company Researcher
=============================================
Deep intelligence for every company.
"""
import json
import logging
import os
from datetime import datetime, timezone
from typing import Dict, List
import httpx
from app.agents.base_agent import BaseAgent, AgentPriority
logger = logging.getLogger("dealix.agents.discovery")
class DataEnricherAgent(BaseAgent):
"""وكيل إثراء البيانات — يجمع معلومات عميقة عن كل شركة."""
def __init__(self):
super().__init__(name="data_enricher", name_ar="وكيل إثراء البيانات", layer=2,
description="إثراء بيانات الشركات بمعلومات تفصيلية من مصادر متعددة")
def get_capabilities(self) -> List[str]:
return [
"حجم الشركة (صغيرة/متوسطة/كبيرة)", "عدد الموظفين التقريبي",
"الموقع والسوشيال ميديا", "صنّاع القرار", "التقنيات المستخدمة",
"أخبار الشركة الأخيرة", "تقييم Google + مراجعات",
"هل عندهم واتساب بزنس", "الإيرادات التقديرية",
]
async def execute(self, task: Dict) -> Dict:
action = task.get("action", "enrich")
if action == "enrich":
return await self._enrich_company(task.get("company", {}))
elif action == "batch_enrich":
results = []
for company in task.get("companies", []):
results.append(await self._enrich_company(company))
return {"enriched": len(results), "results": results}
return {"error": "Unknown action"}
async def _enrich_company(self, company: Dict) -> Dict:
enrichment = await self.think_json(f"""أثري بيانات هذه الشركة السعودية:
الاسم: {company.get('name', '')}
القطاع: {company.get('sector', '')}
المدينة: {company.get('city', '')}
أعطني كل المعلومات المتاحة:
{{"company_size": "صغيرة/متوسطة/كبيرة", "employees_estimate": 0, "revenue_estimate_sar": "",
"website": "", "linkedin": "", "twitter": "", "instagram": "",
"decision_makers": [{{"name": "...", "title": "...", "email_pattern": ""}}],
"tech_stack": ["..."], "pain_points": ["..."], "competitors": ["..."],
"has_whatsapp_business": true/false, "google_rating": 0, "recent_news": ["..."],
"growth_signals": ["..."], "buying_readiness": 0}}""", task_type="enrichment")
company.update(enrichment)
company["enriched"] = True
company["enriched_at"] = datetime.now(timezone.utc).isoformat()
return company
class CompanyResearcherAgent(BaseAgent):
"""وكيل بحث الشركات — بحث عميق عن أي شركة قبل التواصل."""
DEPTH_LEVELS = {"quick": 30, "deep": 120, "full": 300} # seconds
def __init__(self):
super().__init__(name="company_researcher", name_ar="وكيل البحث العميق", layer=2,
description="بحث عميق ومتعدد المصادر عن أي شركة مستهدفة")
def get_capabilities(self) -> List[str]:
return [
"بحث سريع (30 ثانية): اسم + هاتف + قطاع",
"بحث عميق (2 دقيقة): + حجم + منافسين + فرص",
"بحث كامل (5 دقائق): + أخبار + مالية + صنّاع قرار",
"تحليل SWOT مختصر", "تحليل فرص البيع", "اقتراح طريقة التواصل المثلى",
]
async def execute(self, task: Dict) -> Dict:
depth = task.get("depth", "deep")
company = task.get("company", task.get("name", ""))
result = await self.think_json(f"""ابحث بعمق عن هذه الشركة:
الاسم: {company if isinstance(company, str) else company.get('name', '')}
مستوى البحث: {depth}
أعطني تقرير بحثي:
{{"overview": "...", "industry": "...", "size": "...", "strengths": ["..."],
"weaknesses": ["..."], "opportunities": ["..."], "threats": ["..."],
"sales_approach": "...", "key_contacts": [{{"name": "...", "role": "..."}}],
"deal_size_estimate_sar": 0, "closing_probability": 0, "recommended_channel": "whatsapp/email/call",
"personalized_pitch": "...", "research_confidence": 0}}""", task_type="research")
return {"company": company, "depth": depth, "research": result,
"researched_at": datetime.now(timezone.utc).isoformat()}