# تكامل LangChain

## تكامل LangChain

يتكامل Rememberizer مع LangChain من خلال فئة `RememberizerRetriever`، مما يتيح لك دمج قدرات البحث الدلالي لـ Rememberizer بسهولة في تطبيقاتك المدعومة من LangChain. تشرح هذه الدليل كيفية إعداد واستخدام هذا التكامل لبناء تطبيقات LLM متقدمة مع الوصول إلى قاعدة معرفتك.

### المقدمة

LangChain هو إطار عمل شائع لبناء التطبيقات باستخدام نماذج اللغة الكبيرة (LLMs). من خلال دمج Rememberizer مع LangChain، يمكنك:

* استخدام قاعدة المعرفة الخاصة بك في Rememberizer في تطبيقات RAG (التوليد المعزز بالاسترجاع)
* إنشاء روبوتات محادثة يمكنها الوصول إلى مستنداتك وبياناتك
* بناء أنظمة للإجابة على الأسئلة تستفيد من معرفتك
* تطوير وكلاء يمكنهم البحث والتفكير في معلوماتك

التكامل متاح في وحدة `langchain_community.retrievers`.

{% embed url="<https://python.langchain.com/docs/integrations/retrievers/rememberizer/>" %}

### البدء

#### المتطلبات الأساسية

قبل أن تبدأ، تحتاج إلى:

1. حساب Rememberizer مع إنشاء المعرفة العامة
2. مفتاح API للوصول إلى معرفتك العامة
3. بيئة Python مع تثبيت LangChain

للحصول على تعليمات مفصلة حول إنشاء المعرفة العامة وتوليد مفتاح API، راجع [تسجيل واستخدام مفاتيح API](https://docs.rememberizer.ai/developer/registering-and-using-api-keys).

#### التثبيت

قم بتثبيت الحزم المطلوبة:

```bash
pip install langchain langchain_community
```

إذا كنت تخطط لاستخدام نماذج OpenAI (كما هو موضح في الأمثلة أدناه):

```bash
pip install langchain_openai
```

#### إعداد المصادقة

هناك طريقتان لمصادقة `RememberizerRetriever`:

1. **متغير البيئة**: قم بتعيين متغير البيئة `REMEMBERIZER_API_KEY`

   ```python
   import os
   os.environ["REMEMBERIZER_API_KEY"] = "rem_ck_your_api_key"
   ```
2. **معامل مباشر**: قم بتمرير مفتاح API مباشرة عند تهيئة المسترجع

   ```python
   retriever = RememberizerRetriever(rememberizer_api_key="rem_ck_your_api_key")
   ```

### خيارات التكوين

تقبل فئة `RememberizerRetriever` هذه المعلمات:

| المعلمة                | النوع | الافتراضي | الوصف                                                  |
| ---------------------- | ----- | --------- | ------------------------------------------------------ |
| `top_k_results`        | int   | 10        | عدد الوثائق التي سيتم إرجاعها من البحث                 |
| `rememberizer_api_key` | str   | None      | مفتاح API للمصادقة (اختياري إذا تم تعيينه كمتغير بيئي) |

خلف الكواليس، يقوم المسترجع بإجراء مكالمات API إلى نقطة نهاية البحث الخاصة بـ Rememberizer مع معلمات قابلة للتكوين إضافية:

| المعلمة المتقدمة      | الوصف                                                         |
| --------------------- | ------------------------------------------------------------- |
| `prev_chunks`         | عدد القطع قبل القطعة المطابقة التي يجب تضمينها (الافتراضي: 2) |
| `next_chunks`         | عدد القطع بعد القطعة المطابقة التي يجب تضمينها (الافتراضي: 2) |
| `return_full_content` | ما إذا كان يجب إرجاع محتوى الوثيقة بالكامل (الافتراضي: true)  |

### الاستخدام الأساسي

إليك مثال بسيط لاسترجاع الوثائق من Rememberizer باستخدام LangChain:

```python
import os
from langchain_community.retrievers import RememberizerRetriever
```

## قم بتعيين مفتاح واجهة برمجة التطبيقات الخاص بك

os.environ\["REMEMBERIZER\_API\_KEY"] = "rem\_ck\_your\_api\_key"

## تهيئة المسترجع

retriever = RememberizerRetriever(top\_k\_results=5)

## احصل على الوثائق ذات الصلة لاستعلام

docs = retriever.get\_relevant\_documents(query="كيف تعمل تمثيلات المتجهات؟")

## عرض الوثيقة الأولى

if docs: print(f"الوثيقة: {docs\[0].metadata\['name']}") print(f"المحتوى: {docs\[0].page\_content\[:200]}...")

````

### فهم هيكل الوثيقة

كل وثيقة يتم إرجاعها بواسطة المسترجع تحتوي على:

- `page_content`: المحتوى النصي لجزء الوثيقة المتطابق
- `metadata`: معلومات إضافية حول الوثيقة

مثال على هيكل البيانات الوصفية:

```python
{
  'id': 13646493,
  'document_id': '17s3LlMbpkTk0ikvGwV0iLMCj-MNubIaP',
  'name': 'ما هو نموذج اللغة الكبير (LLM)_ _ Cloudflare.pdf',
  'type': 'application/pdf',
  'path': '/langchain/ما هو نموذج اللغة الكبير (LLM)_ _ Cloudflare.pdf',
  'url': 'https://drive.google.com/file/d/17s3LlMbpkTk0ikvGwV0iLMCj-MNubIaP/view',
  'size': 337089,
  'created_time': '',
  'modified_time': '',
  'indexed_on': '2024-04-04T03:36:28.886170Z',
  'integration': {'id': 347, 'integration_type': 'google_drive'}
}
````

### أمثلة متقدمة

#### بناء نظام للإجابة على الأسئلة باستخدام RAG

هذا المثال ينشئ نظامًا للإجابة على الأسئلة يسترجع المعلومات من Rememberizer ويستخدم GPT-3.5 لصياغة الإجابات:

```python
import os
from langchain_community.retrievers import RememberizerRetriever
from langchain.chains import RetrievalQA
from langchain_openai import ChatOpenAI
```

## إعداد مفاتيح API

os.environ\["REMEMBERIZER\_API\_KEY"] = "rem\_ck\_your\_api\_key" os.environ\["OPENAI\_API\_KEY"] = "your\_openai\_api\_key"

## تهيئة المسترجع ونموذج اللغة

retriever = RememberizerRetriever(top\_k\_results=5) llm = ChatOpenAI(model\_name="gpt-3.5-turbo", temperature=0)

## إنشاء سلسلة استرجاع QA

qa\_chain = RetrievalQA.from\_chain\_type( llm=llm, chain\_type="stuff", # أبسط طريقة - فقط قم بتجميع جميع الوثائق في الطلب retriever=retriever, return\_source\_documents=True )

## اطرح سؤالاً

response = qa\_chain.invoke({"query": "ما هو RAG في سياق الذكاء الاصطناعي؟"})

## طباعة الإجابة

print(f"الإجابة: {response\['result']}") print("\nالمصادر:") for idx, doc in enumerate(response\['source\_documents']): print(f"{idx+1}. {doc.metadata\['name']}")

````

### بناء وكيل محادثة مع الذاكرة

هذا المثال ينشئ وكيل محادثة يمكنه الحفاظ على تاريخ المحادثة:

```python
import os
from langchain_community.retrievers import RememberizerRetriever
from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory
from langchain_openai import ChatOpenAI
````

## إعداد مفاتيح API

os.environ\["REMEMBERIZER\_API\_KEY"] = "rem\_ck\_your\_api\_key" os.environ\["OPENAI\_API\_KEY"] = "your\_openai\_api\_key"

## تهيئة المكونات

retriever = RememberizerRetriever(top\_k\_results=5) llm = ChatOpenAI(model\_name="gpt-3.5-turbo") memory = ConversationBufferMemory( memory\_key="chat\_history", return\_messages=True )

## إنشاء سلسلة المحادثة

conversation = ConversationalRetrievalChain.from\_llm( llm=llm, retriever=retriever, memory=memory )

## مثال على المحادثة

questions = \[ "ما هو RAG؟", "كيف تستخدم نماذج اللغة الكبيرة ذلك؟", "ما هي قيود هذه الطريقة؟", ]

for question in questions: response = conversation.invoke({"question": question}) print(f"السؤال: {question}") print(f"الإجابة: {response\['answer']}\n")

````

## أفضل الممارسات

### تحسين أداء الاسترجاع

1. **كن محددًا في الاستعلامات**: الاستعلامات الأكثر تحديدًا عادةً ما تعطي نتائج أفضل
2. **قم بضبط `top_k_results`**: ابدأ بـ 3-5 نتائج وقم بالتعديل بناءً على احتياجات التطبيق
3. **استخدم نوافذ السياق**: يقوم المسترجع تلقائيًا بتضمين السياق حول الأجزاء المطابقة

### اعتبارات الأمان

1. **احمِ مفتاح API الخاص بك**: خزنه بأمان باستخدام متغيرات البيئة أو أدوات إدارة الأسرار
2. **أنشئ مفاتيح مخصصة**: أنشئ مفاتيح API منفصلة لتطبيقات مختلفة
3. **قم بتدوير المفاتيح بانتظام**: قم بإنشاء مفاتيح جديدة بشكل دوري واستبدل القديمة

### أنماط التكامل

1. **معالجة ما قبل الاسترجاع**: النظر في معالجة استفسارات المستخدم مسبقًا لتحسين ملاءمة البحث
2. **تصفية ما بعد الاسترجاع**: تصفية أو ترتيب الوثائق المسترجعة قبل تمريرها إلى LLM
3. **بحث هجين**: دمج Rememberizer مع مسترجعين آخرين باستخدام `EnsembleRetriever`

```python
from langchain.retrievers import EnsembleRetriever
from langchain_community.retrievers import RememberizerRetriever, WebResearchRetriever
````

## إنشاء المسترجعين

rememberizer\_retriever = RememberizerRetriever(top\_k\_results=3) web\_retriever = WebResearchRetriever(...) # تكوين مسترجع آخر

## إنشاء مجموعة مع درجة موزونة

ensemble\_retriever = EnsembleRetriever( retrievers=\[rememberizer\_retriever, web\_retriever], weights=\[0.7, 0.3] # نتائج Rememberizer لها وزن أعلى )

````

## استكشاف الأخطاء وإصلاحها

### المشكلات الشائعة

1. **أخطاء المصادقة**: تحقق من أن مفتاح API الخاص بك صحيح ومكون بشكل صحيح
2. **عدم إرجاع نتائج**: تأكد من أن المعرفة العامة الخاصة بك تحتوي على معلومات ذات صلة
3. **تحديد المعدل**: كن حذرًا من حدود معدل API للتطبيقات ذات الحجم الكبير

### نصائح تصحيح الأخطاء

- قم بتعيين وضع تصحيح الأخطاء في LangChain لرؤية مكالمات API التفصيلية:
  ```python
  import langchain
  langchain.debug = True
````

* افحص نتائج البحث الخام قبل تمريرها إلى LLM لتحديد مشكلات الاسترجاع

### الموارد ذات الصلة

* دليل مفاهيم \[Retriever] في LangChain (<https://python.langchain.com/docs/concepts/#retrievers>)
* أدلة كيفية استخدام \[Retriever] في LangChain (<https://python.langchain.com/docs/how\\_to/#retrievers>)
* وثائق \[API] لـ Rememberizer (<https://docs.rememberizer.ai/developer/api-docs/>)
* \[متاجر المتجهات] (<https://docs.rememberizer.ai/developer/vector-stores>) في Rememberizer
* \[إنشاء GPT لـ Rememberizer] (creating-a-rememberizer-gpt.md) - نهج بديل لدمج الذكاء الاصطناعي
