mirror of
https://github.com/x1xhlol/system-prompts-and-models-of-ai-tools.git
synced 2026-06-18 15:29:36 +00:00
97 lines
4.5 KiB
Python
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()}
|