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

يعد استخلاص الرؤى من المستندات والبيانات أمرًا بالغ الأهمية في اتخاذ قرارات مستنيرة. ومع ذلك، تنشأ مخاوف تتعلق بالخصوصية عند التعامل مع المعلومات الحساسة. يتيح لك LangChain، بالاشتراك مع OpenAI API، تحليل مستنداتك المحلية دون الحاجة إلى تحميلها عبر الإنترنت.

إنهم يحققون ذلك عن طريق الاحتفاظ ببياناتك محليًا، باستخدام التضمينات والتوجيه للتحليل، وتنفيذ العمليات داخل بيئتك. لا تستخدم OpenAI البيانات المقدمة من العملاء عبر واجهة برمجة التطبيقات (API) الخاصة بهم لتدريب نماذجهم أو تحسين خدماتهم.

إعداد بيئتك

إنشاء بيئة بايثون افتراضية جديدة. سيضمن هذا عدم وجود تعارضات في إصدار المكتبة. ثم قم بتشغيل الأمر الطرفي التالي لتثبيت المكتبات المطلوبة.

pip install langchain openai tiktoken faiss-cpu pypdf

فيما يلي تفاصيل لكيفية استخدام كل مكتبة:

  • لانجشين: ستستخدمه في إنشاء وإدارة السلاسل اللغوية لمعالجة النصوص وتحليلها. سيوفر وحدات لتحميل المستندات وتقسيم النص والتضمين وتخزين المتجهات.
  • OpenAI: ستستخدمه لتشغيل الاستعلامات والحصول على النتائج من نموذج اللغة.
  • instagram viewer
  • com.tiktoken: ستستخدمه لحساب عدد الرموز (وحدات النص) في نص معين. هذا لتتبع عدد الرموز المميزة عند التفاعل مع OpenAI API والتي يتم فرض رسوم عليها بناءً على عدد الرموز المميزة التي تستخدمها.
  • فايس: ستستخدمه لإنشاء مخزن متجهات وإدارته، مما يسمح بالاسترجاع السريع للمتجهات المشابهة استنادًا إلى تضميناتها.
  • بيبدف: تقوم هذه المكتبة باستخراج النص من ملفات PDF. فهو يساعد على تحميل ملفات PDF واستخراج النصوص الخاصة بها لمزيد من المعالجة.

بعد تثبيت كافة المكتبات، أصبحت البيئة الخاصة بك جاهزة الآن.

الحصول على مفتاح OpenAI API

عند تقديم طلبات إلى OpenAI API، يتعين عليك تضمين مفتاح API كجزء من الطلب. يسمح هذا المفتاح لموفر واجهة برمجة التطبيقات (API) بالتحقق من أن الطلبات تأتي من مصدر شرعي وأن لديك الأذونات اللازمة للوصول إلى ميزاته.

للحصول على مفتاح OpenAI API، انتقل إلى منصة OpenAI.

ثم، ضمن الملف الشخصي لحسابك في الجزء العلوي الأيسر، انقر فوق عرض مفاتيح API. ال مفاتيح واجهة برمجة التطبيقات سوف تظهر الصفحة.

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

كود المصدر الكامل متاح في مستودع جيثب.

استيراد المكتبات المطلوبة

لتتمكن من استخدام المكتبات المثبتة في بيئتك الافتراضية، تحتاج إلى استيرادها.

from langchain.document_loaders import PyPDFLoader, TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

لاحظ أنك قمت باستيراد مكتبات التبعية من LangChain. يتيح لك هذا استخدام ميزات محددة لإطار عمل LangChain.

تحميل الوثيقة للتحليل

ابدأ بإنشاء متغير يحمل مفتاح API الخاص بك. ستستخدم هذا المتغير لاحقًا في التعليمات البرمجية للمصادقة.

# Hardcoded API key
openai_api_key = "Your API key"

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

بعد ذلك، قم بإنشاء وظيفة تقوم بتحميل مستند. يجب أن تقوم الوظيفة بتحميل ملف PDF أو ملف نصي. إذا لم يكن المستند كذلك، فيجب أن ترفع الوظيفة a خطأ القيمة.

defload_document(filename):
if filename.endswith(".pdf"):
loader = PyPDFLoader(filename)
documents = loader.load()
elif filename.endswith(".txt"):
loader = TextLoader(filename)
documents = loader.load()
else:
raise ValueError("Invalid file type")

بعد تحميل المستندات قم بإنشاء ملف CharacterTextSplitter. سيقوم هذا المقسم بتقسيم المستندات المحملة إلى أجزاء أصغر بناءً على الأحرف.

 text_splitter = CharacterTextSplitter(chunk_size=1000, 
chunk_overlap=30, separator="\n")

return text_splitter.split_documents(documents=documents)

يضمن تقسيم المستند أن تكون الأجزاء ذات حجم يمكن التحكم فيه وأن تظل متصلة ببعض السياق المتداخل. وهذا مفيد لمهام مثل تحليل النص واسترجاع المعلومات.

الاستعلام عن الوثيقة

أنت بحاجة إلى طريقة للاستعلام عن المستند الذي تم تحميله لاستخلاص الأفكار منه. للقيام بذلك، قم بإنشاء دالة تأخذ استفسار سلسلة و المسترد كمدخل. ثم يقوم بإنشاء ملف استرجاع سؤال وجواب المثال باستخدام المسترد ومثال لنموذج لغة OpenAI.

defquery_pdf(query, retriever):
qa = RetrievalQA.from_chain_type(llm=OpenAI(openai_api_key=openai_api_key),
chain_type="stuff", retriever=retriever)
result = qa.run(query)
print(result)

تستخدم هذه الوظيفة مثيل ضمان الجودة الذي تم إنشاؤه لتشغيل الاستعلام وطباعة النتيجة.

إنشاء الوظيفة الرئيسية

الوظيفة الرئيسية سوف تتحكم في التدفق العام للبرنامج. سوف يستغرق الأمر إدخال المستخدم لاسم ملف المستند وتحميل هذا المستند. ثم قم بإنشاء OpenAIEmbeddings سبيل المثال للتضمين وبناء أ متجر ناقلات استنادا إلى الوثائق المحملة و التضمينات. احفظ مخزن المتجهات هذا في ملف محلي.

بعد ذلك، قم بتحميل مخزن المتجهات المستمر من الملف المحلي. ثم أدخل حلقة حيث يمكن للمستخدم إدخال الاستعلامات. ال رئيسي تقوم الدالة بتمرير هذه الاستعلامات إلى query_pdf تعمل جنبًا إلى جنب مع المسترد الخاص بمتجر المتجهات المستمر. ستستمر الحلقة حتى يدخل المستخدم "الخروج".

defmain():
filename = input("Enter the name of the document (.pdf or .txt):\n")
docs = load_document(filename)
embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)
vectorstore = FAISS.from_documents(docs, embeddings)
vectorstore.save_local("faiss_index_constitution")
persisted_vectorstore = FAISS.load_local("faiss_index_constitution", embeddings)
query = input("Type in your query (type 'exit' to quit):\n")

while query != "exit":
query_pdf(query, persisted_vectorstore.as_retriever())
query = input("Type in your query (type 'exit' to quit):\n")

تقوم عمليات التضمين بالتقاط العلاقات الدلالية بين الكلمات. المتجهات هي نموذج يمكنك من خلاله تمثيل أجزاء من النص.

يقوم هذا الكود بتحويل البيانات النصية الموجودة في المستند إلى متجهات باستخدام التضمينات التي تم إنشاؤها بواسطة OpenAIEmbeddings. ثم يقوم بفهرسة هذه المتجهات باستخدام فايس، من أجل استرجاع ومقارنة المتجهات المماثلة بكفاءة. وهذا ما يسمح بتحليل المستند الذي تم تحميله.

وأخيرا، استخدم بناء __name__ == "__main__". لاستدعاء الوظيفة الرئيسية إذا كان المستخدم يقوم بتشغيل البرنامج بشكل مستقل:

if __name__ == "__main__":
main()

هذا التطبيق هو تطبيق سطر الأوامر. كامتداد، يمكنك استخدم Streamlit لإضافة واجهة ويب إلى التطبيق.

إجراء تحليل المستندات

لإجراء تحليل المستند، قم بتخزين المستند الذي تريد تحليله في نفس المجلد الموجود فيه مشروعك، ثم قم بتشغيل البرنامج. سيطلب منك اسم المستند الذي تريد تحليله. أدخل اسمه بالكامل، ثم أدخل الاستعلامات ليقوم البرنامج بتحليلها.

توضح لقطة الشاشة أدناه نتائج تحليل ملف PDF.

يوضح الإخراج التالي نتائج تحليل ملف نصي يحتوي على التعليمات البرمجية المصدر.

تأكد من أن الملفات التي تريد تحليلها موجودة بتنسيق PDF أو نصي. إذا كانت مستنداتك بتنسيقات أخرى، فيمكنك ذلك تحويلها إلى تنسيق PDF باستخدام الأدوات عبر الإنترنت.

فهم التكنولوجيا وراء نماذج اللغات الكبيرة

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