Loading
Loading
Azure AI Foundry (سابقاً Azure AI Studio) هو المنصة الشاملة لبناء حلول AI مؤسسية.
import json
from dataclasses import dataclass, field
from typing import List, Dict, Any
# ─── Azure AI Foundry Simulation ───────────────────────────
@dataclass
class FoundryModel:
name: str
provider: str
family: str
input_cost: float # per 1K tokens
output_cost: float
CATALOG = [
FoundryModel("gpt-4o", "OpenAI", "GPT-4", 0.005, 0.015),
FoundryModel("gpt-35-turbo", "OpenAI", "GPT-3", 0.0005, 0.0015),
FoundryModel("llama-3-70b", "Meta", "Llama", 0.001, 0.003),
FoundryModel("mistral-large", "Mistral", "Mistral",0.004, 0.012),
FoundryModel("phi-3-mini", "Microsoft", "Phi", 0.0001, 0.0002),
FoundryModel("claude-3-sonnet", "Anthropic", "Claude", 0.003, 0.015),
]
@dataclass
class PromptFlowStep:
name: str
kind: str # "llm", "python", "prompt", "search"
config: Dict[str, Any] = field(default_factory=dict)
@dataclass
class PromptFlow:
name: str
steps: List[PromptFlowStep] = field(default_factory=list)
def add_step(self, name: str, kind: str, **cfg) -> "PromptFlow":
self.steps.append(PromptFlowStep(name, kind, config=cfg))
return self
def run(self, inputs: Dict[str, Any]) -> Dict[str, Any]:
context = dict(inputs)
print(f" 🔄 تشغيل Prompt Flow: {self.name}")
for step in self.steps:
print(f" [{step.kind.upper()}] {step.name}...", end=" ")
if step.kind == "search":
context["retrieved_docs"] = [
f"وثيقة ذات صلة بـ '{context.get('query', '')}' #{i}" for i in range(3)
]
context["num_docs"] = 3
elif step.kind == "llm":
q = context.get("query", "")
docs = context.get("retrieved_docs", [])
context["answer"] = f"[{step.config.get('model','gpt-4o')}] إجابة على '{q[:40]}' بناءً على {len(docs)} وثيقة"
elif step.kind == "python":
fn = step.config.get("fn", lambda c: c)
context = fn(context)
elif step.kind == "prompt":
pass # تنسيق الـ prompt
print("✅")
return context
class AIFoundryProject:
def __init__(self, hub: str, name: str):
self.hub = hub
self.name = name
self.flows: List[PromptFlow] = []
self._eval_results: List[Dict] = []
def create_flow(self, flow_name: str) -> PromptFlow:
flow = PromptFlow(flow_name)
self.flows.append(flow)
print(f" 📊 Flow: {flow_name}")
return flow
def evaluate(self, flow: PromptFlow, test_cases: List[Dict]) -> Dict:
scores = []
for tc in test_cases:
result = flow.run(tc)
quality = 0.85 + len(result.get("answer", "")) * 0.0001
scores.append(min(0.99, quality))
avg = sum(scores) / len(scores)
self._eval_results.append({"flow": flow.name, "avg_score": avg, "cases": len(test_cases)})
return {"flow": flow.name, "avg_score": round(avg, 4), "num_cases": len(test_cases)}
# ─── بناء RAG Pipeline ─────────────────────────────────────
print("🔵 Azure AI Foundry — بناء RAG Chatbot:")
print("=" * 52)
# عرض Model Catalog
print("\n📦 Model Catalog (مختارات):")
for m in CATALOG:
in_s = "$" + f"{m.input_cost:.4f}"
out_s = "$" + f"{m.output_cost:.4f}"
print(f" [{m.provider:<12}] {m.name:<22} in:{in_s} out:{out_s}")
# إنشاء المشروع
print(f"\n\n🏗️ إنشاء AI Foundry Project:")
project = AIFoundryProject("hub-enterprise-001", "customer-support-ai")
# بناء RAG Flow
print(f"\n📊 بناء Prompt Flow (RAG):")
rag_flow = (
project.create_flow("customer-support-rag")
.add_step("format-query", "prompt", template="Answer this: {query}")
.add_step("search-knowledge", "search", index="support-docs", top_k=3)
.add_step("generate-answer", "llm", model="gpt-4o", temp=0.3)
.add_step("post-process", "python",
fn=lambda c: {**c, "formatted": c.get("answer","")[:100] + "..."})
)
print(f" الخطوات: {len(rag_flow.steps)}")
# تشغيل
print(f"\n▶️ تشغيل Pipeline:")
result = rag_flow.run({"query": "كيف أعيد ضبط كلمة المرور؟", "lang": "ar"})
print(f" الإجابة: {result.get('answer','')[:80]}...")
print(f" الوثائق المسترجعة: {result.get('num_docs', 0)}")
# التقييم
print(f"\n📊 تقييم الـ Flow:")
test_cases = [
{"query": "كيف أعيد ضبط كلمة المرور؟"},
{"query": "ما أوقات الدعم الفني؟"},
{"query": "كيف أطلب استرداد المبلغ؟"},
]
eval_r = project.evaluate(rag_flow, test_cases)
score_s = f"{eval_r['avg_score']:.4f}"
print(f" النتيجة: {score_s} ({eval_r['num_cases']} حالات اختبار)")
print(f"\n✅ Azure AI Foundry RAG Pipeline جاهز للإنتاج!")