import os import json import re import requests import numpy as np from typing import Dict, List, Any, Union, Tuple, Optional from datetime import datetime class LLMProcessor: """ فئة للتعامل مع نماذج اللغة الكبيرة (LLM) لتحليل المناقصات """ def __init__(self, model_name: str = "claude-3-haiku-20240307", use_rag: bool = True): """ تهيئة معالج نماذج اللغة الكبيرة المعاملات: ---------- model_name : str, optional اسم النموذج المستخدم (افتراضي: "claude-3-haiku-20240307") use_rag : bool, optional استخدام تقنية RAG (Retrieval-Augmented Generation) (افتراضي: True) """ self.model_name = model_name self.use_rag = use_rag # الحصول على مفتاح واجهة برمجة التطبيقات من متغيرات البيئة self.api_key = os.getenv("ANTHROPIC_API_KEY") # تهيئة قاعدة بيانات المتجهات إذا كان استخدام RAG مفعلاً if self.use_rag: self.vector_db = VectorDB() def analyze_requirements(self, requirements: List[Dict[str, Any]], context: Dict[str, Any]) -> Dict[str, Any]: """ تحليل المتطلبات باستخدام نموذج اللغة الكبيرة المعاملات: ---------- requirements : List[Dict[str, Any]] قائمة المتطلبات المستخرجة من المستندات context : Dict[str, Any] معلومات السياق الإضافية المخرجات: -------- Dict[str, Any] نتائج تحليل المتطلبات """ # إعداد الاستعلام بناءً على المتطلبات والسياق prompt = self._prepare_requirements_prompt(requirements, context) # استدعاء النموذج response = self._call_llm(prompt) # معالجة الاستجابة analysis = self._parse_requirements_response(response) return analysis def analyze_local_content(self, local_content_data: Dict[str, Any], context: Dict[str, Any]) -> Dict[str, Any]: """ تحليل بيانات المحتوى المحلي باستخدام نموذج اللغة الكبيرة المعاملات: ---------- local_content_data : Dict[str, Any] بيانات المحتوى المحلي المستخرجة context : Dict[str, Any] معلومات السياق الإضافية المخرجات: -------- Dict[str, Any] نتائج تحليل المحتوى المحلي """ # إعداد الاستعلام بناءً على بيانات المحتوى المحلي والسياق prompt = self._prepare_local_content_prompt(local_content_data, context) # استدعاء النموذج response = self._call_llm(prompt) # معالجة الاستجابة analysis = self._parse_local_content_response(response) return analysis def analyze_supply_chain(self, supply_chain_data: Dict[str, Any], context: Dict[str, Any]) -> Dict[str, Any]: """ تحليل بيانات سلسلة الإمداد باستخدام نموذج اللغة الكبيرة المعاملات: ---------- supply_chain_data : Dict[str, Any] بيانات سلسلة الإمداد المستخرجة context : Dict[str, Any] معلومات السياق الإضافية المخرجات: -------- Dict[str, Any] نتائج تحليل سلسلة الإمداد """ # إعداد الاستعلام بناءً على بيانات سلسلة الإمداد والسياق prompt = self._prepare_supply_chain_prompt(supply_chain_data, context) # استدعاء النموذج response = self._call_llm(prompt) # معالجة الاستجابة analysis = self._parse_supply_chain_response(response) return analysis def generate_summary(self, extracted_data: Dict[str, Any], analysis_results: Dict[str, Any]) -> Dict[str, Any]: """ إعداد ملخص شامل للمناقصة ونتائج التحليل المعاملات: ---------- extracted_data : Dict[str, Any] البيانات المستخرجة من المستندات analysis_results : Dict[str, Any] نتائج التحليلات المختلفة المخرجات: -------- Dict[str, Any] الملخص والتوصيات """ # إعداد الاستعلام بناءً على البيانات المستخرجة ونتائج التحليل prompt = self._prepare_summary_prompt(extracted_data, analysis_results) # استدعاء النموذج response = self._call_llm(prompt) # معالجة الاستجابة summary = self._parse_summary_response(response) return summary def _prepare_requirements_prompt(self, requirements: List[Dict[str, Any]], context: Dict[str, Any]) -> str: """ إعداد استعلام لتحليل المتطلبات """ prompt = """ أنت خبير في تحليل المناقصات والعقود. يرجى تحليل المتطلبات التالية وتقديم نظرة ثاقبة حول جودتها واكتمالها ووضوحها وأي فجوات أو مخاطر محتملة. المتطلبات: """ for i, req in enumerate(requirements): prompt += f"\n{i+1}. {req.get('title', 'متطلب')}: {req.get('description', '')}" prompt += f"\n الفئة: {req.get('category', 'عامة')}, الأهمية: {req.get('importance', 'عادية')}" prompt += """ الرجاء ت