تحليلات LangChain CSV وSQLite: أساس أكثر أماناً للذكاء الاصطناعي

Share:

ابنِ أساساً حتمياً لتحليلات CSV إلى SQLite عبر SQL محمي للقراءة فقط. صُمم هذا الأساس كحد آمن يمكن لوكيل بأسلوب LangChain استدعاؤه بعد التحقق من تكامله مع الإطار والنموذج وفق الوثائق الرسمية الحالية.

ما الذي ينجزه هذا الشرح العملي، وما الذي لا يتحقق منه

يوضح سياق البحث المتاح النمط العام لاستخدام وكلاء LangChain مع الأدوات الخارجية، وحالة الاستخدام الأوسع لطرح الأسئلة حول بيانات CSV. لكنه لا يوفر وثائق موثوقة وحديثة لإصدار محدد من LangChain أو نموذج OpenAI أو API لحزمة أو منتج تتبع أو إطار ويب. لذلك، يتجنب هذا الشرح العملي عمداً تقديم كود غير متحقق منه لإطار الوكلاء بوصفه جاهزاً للإنتاج.

بدلاً من ذلك، ستبني الجزء الحتمي الذي ينبغي أن يبقى تحت تحكم التطبيق، بصرف النظر عن النموذج أو إطار التنسيق الذي ستختاره لاحقاً. ينشئ المشروع ملف CSV، ويستورده إلى قاعدة بيانات SQLite محلية، ويصف الـschema المعتمد، ويتحقق من عبارة SQL واحدة للقراءة فقط في كل مرة، ويفتح قاعدة البيانات بوضع القراءة فقط لاستعلامات التحليلات، ويضع حداً لعدد الصفوف المعادة، ويختبر السلوكيات المهمة غير المرتبطة بالنموذج.

هذا الفصل مهم. يمكن للنموذج اللغوي المساعدة في اختيار أداة وصياغة سؤال، لكنه لا ينبغي أن يحصل على اتصال قابل للكتابة بقاعدة البيانات، أو دالة shell، أو تنفيذ Python غير مقيّد، أو أسرار. ينبغي أن يحتفظ تطبيقك بالتحكم في استيراد CSV، والوصول إلى قاعدة البيانات، وحدود الاستعلامات، والتفويض، وسياسة التسجيل، وتعريف مؤشرات الأعمال المعتمدة.

المتطلبات المسبقة وهيكل المشروع

يستخدم هذا المثال Python 3.10 أو إصداراً أحدث، ومكتبة Python القياسية فقط للتطبيق القابل للتشغيل. يتم الوصول إلى SQLite عبر وحدة sqlite3 المدمجة في Python. ثبّت pytest بشكل منفصل إذا أردت تشغيل الاختبارات.

mkdir csv-sqlite-analytics
cd csv-sqlite-analytics

python -m venv .venv

# macOS and Linux
source .venv/bin/activate

# Windows PowerShell
# ..venvScriptsActivate.ps1

python -m pip install --upgrade pip
python -m pip install pytest

mkdir data tests

أنشئ أربعة ملفات: sample_data.py وdatabase.py وapp.py وtests/test_database.py. يقبل برنامج سطر الأوامر SQL محمياً في هذا الإصدار. يمكن لمحول وكيل مستقبلي ترجمة الأسئلة باللغة الطبيعية إلى SQL، لكن يجب أن يستدعي حد التحقق والتنفيذ نفسه المعروض هنا.

الخطوة ١: إنشاء ملف CSV قابل للتكرار

تسهّل العينة الحتمية فحص السلوك واختباره. تحتوي العينة على معرّفات الطلبات والمناطق والحالات والفئات والكميات والأسعار والإجماليات. وهي بيانات توضيحية فقط؛ استبدلها بتصدير تمت مراجعته فقط بعد إزالة الحقول التي لا ينبغي لمستخدميك أو تطبيقك الوصول إليها.

from __future__ import annotations

import csv
from pathlib import Path


ORDERS = [
    ["ORD-1001", "2026-01-05", "North", "Enterprise", "Analytics", "completed", 3, 1200.00],
    ["ORD-1002", "2026-01-06", "South", "SMB", "Support", "completed", 8, 150.00],
    ["ORD-1003", "2026-01-07", "West", "Enterprise", "Security", "completed", 2, 2500.00],
    ["ORD-1004", "2026-01-08", "East", "Mid-Market", "Analytics", "pending", 4, 900.00],
    ["ORD-1005", "2026-01-09", "North", "SMB", "Support", "completed", 12, 125.00],
    ["ORD-1006", "2026-01-11", "West", "Enterprise", "Analytics", "completed", 5, 1450.00],
    ["ORD-1007", "2026-01-13", "South", "Mid-Market", "Security", "cancelled", 1, 2200.00],
    ["ORD-1008", "2026-01-15", "East", "SMB", "Support", "completed", 6, 175.00],
    ["ORD-1009", "2026-01-18", "North", "Mid-Market", "Analytics", "completed", 7, 980.00],
    ["ORD-1010", "2026-01-21", "West", "SMB", "Security", "completed", 2, 2400.00],
    ["ORD-1011", "2026-01-25", "East", "Enterprise", "Analytics", "completed", 4, 1600.00],
    ["ORD-1012", "2026-01-28", "South", "Mid-Market", "Support", "pending", 10, 140.00],
]


def create_sample_csv(destination: Path) -> None:
    destination.parent.mkdir(parents=True, exist_ok=True)
    with destination.open("w", newline="", encoding="utf-8") as file:
        writer = csv.writer(file)
        writer.writerow([
            "order_id", "order_date", "region", "customer_segment",
            "product_category", "status", "quantity", "unit_price", "order_total",
        ])
        for order_id, order_date, region, segment, category, status, quantity, unit_price in ORDERS:
            writer.writerow([
                order_id, order_date, region, segment, category, status,
                quantity, f"{unit_price:.2f}", f"{quantity * unit_price:.2f}",
            ])


if __name__ == "__main__":
    create_sample_csv(Path("data/orders.csv"))
    print("Created data/orders.csv with 12 records.")

شغّل python sample_data.py. يُفضّل استخدام كاتب CSV القياسي على إنشاء سلاسل مفصولة بفواصل يدوياً، لأنه يتعامل بشكل صحيح مع القيم التي تتضمن فواصل أو علامات اقتباس أو فواصل أسطر.

الخطوة ٢: استيراد بيانات CSV إلى SQLite

يقوم المستورد التالي بتوحيد رؤوس CSV إلى معرّفات آمنة لقاعدة البيانات، وينشئ جدول orders، ويستخدم عمليات إدراج ذات معاملات للقيم. تُخزن الحقول المستوردة كنص. هذا التمثيل المتحفظ يتجنب التحويل غير المرغوب للقيم، مثل المعرّفات التي تبدأ بأصفار. ويحوّل التحليل الرقمي الحقول المناسبة صراحةً إلى REAL.

from __future__ import annotationsimport csv
import re
import sqlite3
from pathlib import Path
from typing import AnyTABLE_NAME = "orders"
IDENTIFIER = re.compile(r"^[A-Za-z_][A-Za-z0-9_]*$")def normalize_identifier(value: str, used: set[str]) -> str:
name = re.sub(r"[^A-Za-z0-9_]", "_", value.strip().lower())
name = re.sub(r"_+", "_", name).strip("_") or "column"
if name[0].isdigit():
name = f"column_{name}"
candidate = name
suffix = 2
while candidate in used:
candidate = f"{name}_{suffix}"
suffix += 1
used.add(candidate)
return candidatedef quote_identifier(identifier: str) -> str:
if not IDENTIFIER.fullmatch(identifier):
raise ValueError(f"Unsafe identifier: {identifier!r}")
return f'"{identifier}"'def load_csv_into_sqlite(csv_path: Path, sqlite_path: Path) -> list[str]:
if not csv_path.exists():
raise FileNotFoundError(f"CSV file does not exist: {csv_path}")with csv_path.open("r", newline="", encoding="utf-8-sig") as file:
...

تابع القراءة

سجل دخولك مجاناً لقراءة المقال كاملاً والوصول إلى أدوات الذكاء الاصطناعي.

تسجيل الدخول / إنشاء حساب

هل كان هذا الشرح مفيداً؟

مرشد بوابة الذكاء الاصطناعي
نشط للخدمة
مرحباً بك في بوابة الذكاء الاصطناعي! أنا مرشدك هنا لمساعدتك في فهم خدمات المنصة، باقات التشغيل وخطط الضمان المالي. كيف يمكنني إرشادك اليوم؟