واجهات البرمجة والدمج
تعلم كيفية دمج النماذج اللغوية في تطبيقاتك باستخدام واجهات البرمجة (APIs) والمكتبات المختلفة.
استخدام Hugging Face Transformers
مكتبة Transformers هي الطريقة الأكثر شيوعًا للتعامل مع النماذج اللغوية:
-
التثبيت والإعداد:
pip install transformers -
تحميل واستخدام النماذج:
from transformers import AutoModelForCausalLM, AutoTokenizer
# تحميل النموذج والمرمز
model_name = "aubmindlab/aragpt2-medium"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# توليد نص
input_text = "أهلاً بك في عالم الذكاء الاصطناعي"
inputs = tokenizer(input_text, return_tensors="pt")
outputs = model.generate(**inputs, max_length=100)
result = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(result) -
خيارات التحسين:
- استخدام
device='cuda'للتشغيل على وحدة معالجة الرسومات - تطبيق التكميم باستخدام
load_in_8bit=Trueأوbitsandbytes - تقنيات الذاكرة المؤقتة لتسريع التوليد المتكرر
- استخدام
مكتبات توليد النصوص
مكتبات متخصصة لتشغيل النماذج اللغوية وتوليد النصوص:
-
llama-cpp-python:
from llama_cpp import Llama
# تحميل نموذج بصيغة GGUF
llm = Llama(
model_path="path/to/model.gguf",
n_ctx=2048,
n_gpu_layers=-1 # استخدام كل طبقات GPU المتاحة
)
# توليد نص
output = llm(
"اكتب مقالاً عن أهمية الذكاء الاصطناعي",
max_tokens=512,
temperature=0.7,
top_p=0.95,
)
print(output["choices"][0]["text"]) -
text-generation-webui API:
import requests
# استدعاء واجهة برمجة التطبيقات المحلية
url = "http://localhost:5000/api/v1/generate"
headers = {"Content-Type": "application/json"}
data = {
"prompt": "اكتب قصة قصيرة عن",
"max_length": 200,
"temperature": 0.7,
}
response = requests.post(url, headers=headers, json=data)
result = response.json()["results"][0]["text"]
print(result)
دمج النماذج اللغوية في التطبيقات
استراتيجيات لدمج النماذج اللغوية في مختلف أنواع التطبيقات:
-
تطبيقات الويب:
from flask import Flask, request, jsonify
from transformers import pipeline
app = Flask(__name__)
# إعداد خط أنابيب للنموذج اللغوي
generator = pipeline('text-generation', model='aubmindlab/aragpt2-base')
@app.route('/generate', methods=['POST'])
def generate_text():
data = request.json
prompt = data.get('prompt', '')
max_length = data.get('max_length', 100)
result = generator(prompt, max_length=max_length)
return jsonify({'generated_text': result[0]['generated_text']})
if __name__ == '__main__':
app.run(debug=True) -
تطبيقات سطح المكتب:
import tkinter as tk
from tkinter import scrolledtext
import threading
from transformers import pipeline
class AIAssistantApp:
def __init__(self, master):
self.master = master
master.title("مساعد الذكاء الاصطناعي")
# إعداد النموذج
self.generator = pipeline('text-generation', model='aubmindlab/aragpt2-base')
# إنشاء واجهة المستخدم
self.text_area = scrolledtext.ScrolledText(master, width=60, height=15)
self.text_area.pack(pady=10)
self.prompt_entry = tk.Entry(master, width=60)
self.prompt_entry.pack(pady=10)
self.generate_button = tk.Button(master, text="توليد النص", command=self.generate)
self.generate_button.pack(pady=10)
def generate(self):
prompt = self.prompt_entry.get()
self.generate_button.config(state=tk.DISABLED)
# تنفيذ التوليد في خيط منفصل لتجنب تجميد الواجهة
threading.Thread(target=self._generate_text, args=(prompt,)).start()
def _generate_text(self, prompt):
result = self.generator(prompt, max_length=100)
self.text_area.delete(1.0, tk.END)
self.text_area.insert(tk.END, result[0]['generated_text'])
self.generate_button.config(state=tk.NORMAL)
if __name__ == "__main__":
root = tk.Tk()
app = AIAssistantApp(root)
root.mainloop() -
خدمات الواجهة الخلفية (Backend Services):
# استخدام FastAPI لإنشاء واجهة برمجة تطبيقات RESTful
from fastapi import FastAPI, BackgroundTasks
from pydantic import BaseModel
import llama_cpp
app = FastAPI()
# إعداد النموذج
llm = llama_cpp.Llama(
model_path="path/to/model.gguf",
n_ctx=2048,
n_gpu_layers=-1
)
class GenerationRequest(BaseModel):
prompt: str
max_tokens: int = 256
temperature: float = 0.7
class GenerationResponse(BaseModel):
text: str
@app.post("/generate", response_model=GenerationResponse)
async def generate_text(request: GenerationRequest):
output = llm(
request.prompt,
max_tokens=request.max_tokens,
temperature=request.temperature
)
return GenerationResponse(text=output["choices"][0]["text"])