يدمج هذا المشروع Langchain مع fastapi بطريقة غير متزامنة وقابلة للتطوير ، مما يوفر إطار عمل لفهرسة المستندات واسترجاعها ، باستخدام postgresql/pgvector.
يتم تنظيم الملفات في التضمينات بواسطة file_id . حالة الاستخدام الأساسي هي للتكامل مع Librechat ، ولكن يمكن استخدام API البسيطة هذه لأي حالة استخدام قائمة على الهوية.
السبب الرئيسي لاستخدام نهج المعرف هو العمل مع التضمين على مستوى الملف. هذا يجعل للاستعلامات المستهدفة عند دمجها مع بيانات تعريف الملف المخزنة في قاعدة بيانات ، كما يتم ذلك بواسطة Librechat.
ستتطور واجهة برمجة التطبيقات مع مرور الوقت لاستخدام طرق مختلفة للاستعلام/إعادة التصنيف ، ونماذج التضمين ، ومخازن المتجهات.
.env بناءً على القسم أدناهdocker compose up (يبدأ أيضًا RAG API)docker compose -f ./db-compose.yaml updocker compose up (يبدأ أيضًا PSQL/PGVector)docker compose -f ./api-compose.yaml upDB_HOST إلى اسم مضيف قاعدة البيانات الصحيحpip install -r requirements.txt
uvicorn main:appمطلوب متغيرات البيئة التالية لتشغيل التطبيق:
RAG_OPENAI_API_KEY : مفتاح API لتضمينات API OpenAI (إذا كنت تستخدم الإعدادات الافتراضية).
OPENAI_API_KEY لكن RAG_OPENAI_API_KEY سيتجاوزها حتى لا تتعارض مع إعداد Librechat. RAG_OPENAI_BASEURL : (اختياري) عنوان URL الأساسي لتضمينات Openai API الخاصة بك
RAG_OPENAI_PROXY : (اختياري) وكيل للتضمينات API Openai
VECTOR_DB_TYPE : (اختياري) حدد نوع قاعدة بيانات المتجه ، الافتراضي إلى pgvector .
POSTGRES_DB : (اختياري) اسم قاعدة بيانات postgresql ، المستخدمة عند VECTOR_DB_TYPE=pgvector .
POSTGRES_USER : (اختياري) اسم المستخدم للاتصال بقاعدة بيانات postgresql.
POSTGRES_PASSWORD : (اختياري) كلمة المرور للاتصال بقاعدة بيانات postgresql.
DB_HOST : (اختياري) اسم المضيف أو عنوان IP لخادم قاعدة بيانات postgresql.
DB_PORT : (اختياري) رقم المنفذ لخادم قاعدة بيانات postgresql.
RAG_HOST : (اختياري) اسم المضيف أو عنوان IP حيث سيتم تشغيل خادم API. الإعدادات الافتراضية إلى "0.0.0.0"
RAG_PORT : (اختياري) رقم المنفذ حيث سيتم تشغيل خادم API. الإعدادات الافتراضية إلى المنفذ 8000.
JWT_SECRET : (اختياري) المفتاح السري المستخدم للتحقق من الرموز JWT للطلبات.
COLLECTION_NAME : (اختياري) اسم المجموعة في متجر المتجهات. القيمة الافتراضية هي "TestCollection".
CHUNK_SIZE : (اختياري) حجم القطع لمعالجة النص. القيمة الافتراضية هي "1500".
CHUNK_OVERLAP : (اختياري) التداخل بين القطع أثناء معالجة النص. القيمة الافتراضية هي "100".
RAG_UPLOAD_DIR : (اختياري) الدليل حيث يتم تخزين الملفات التي تم تحميلها. القيمة الافتراضية هي "./uploads/".
PDF_EXTRACT_IMAGES : (اختياري) قيمة منطقية تشير إلى ما إذا كنت تريد استخراج الصور من ملفات PDF. القيمة الافتراضية "خاطئة".
DEBUG_RAG_API : (اختياري) تم تعيينه على "TRUE" لإظهار المزيد من الإخراج المسجّل المطوّل في وحدة التحكم في الخادم ، ولتمكين مسارات قاعدة بيانات postgresql
CONSOLE_JSON : (اختياري) تم تعيينه على "True" لتسجيل الدخول إلى JSON لتجمعات التسجيل السحابية
EMBEDDINGS_PROVIDER : (اختياري) إما "Openai" أو "Bedrock" أو "Azure" أو "Huggingface" أو "HuggingFacetei" أو "Ollama" ، حيث "Huggingface" يستخدم Sentence_Transformers ؛ الإعدادات الافتراضية لـ "Openai"
EMBEDDINGS_MODEL : (اختياري) قم بتعيين نموذج تضمينات صالح لاستخدامه من المزود المكون.
RAG_AZURE_OPENAI_API_VERSION : (اختياري) الافتراضي هو 2023-05-15 . إصدار Azure Openai API.
RAG_AZURE_OPENAI_API_KEY : (اختياري) مفتاح API لخدمة Azure Openai.
AZURE_OPENAI_API_KEY لكن RAG_AZURE_OPENAI_API_KEY سوف يتجاوزونه حتى لا يتعارض مع إعداد Librechat. RAG_AZURE_OPENAI_ENDPOINT : (اختياري) عنوان URL لنقطة النهاية لخدمة Azure Openai ، بما في ذلك المورد.
https://YOUR_RESOURCE_NAME.openai.azure.com .AZURE_OPENAI_ENDPOINT ولكن RAG_AZURE_OPENAI_ENDPOINT سيتجاوزها حتى لا تتعارض مع إعداد Librechat. HF_TOKEN : (اختياري) إذا لزم الأمر لخيار huggingface .
OLLAMA_BASE_URL : (اختياري) الإعدادات الافتراضية إلى http://ollama:11434 .
ATLAS_SEARCH_INDEX : (اختياري) اسم فهرس البحث المتجه إذا كان يستخدم ATLAS MONGODB ، الافتراضية إلى vector_index
MONGO_VECTOR_COLLECTION : تم إهماله لـ mongodb ، يرجى استخدام ATLAS_SEARCH_INDEX و COLLECTION_NAME
AWS_DEFAULT_REGION : (اختياري) الإعدادات الافتراضية us-east-1
AWS_ACCESS_KEY_ID : (اختياري) مطلوب لتضمينات الأساس
AWS_SECRET_ACCESS_KEY : (اختياري) مطلوب لتضمينات الأساس
تأكد من تعيين متغيرات البيئة هذه قبل تشغيل التطبيق. يمكنك تعيينها في ملف .env أو كمتغيرات بيئة النظام.
بدلاً من استخدام PGVector الافتراضي ، يمكننا استخدام Atlas MongoDB كقاعدة بيانات المتجه. للقيام بذلك ، قم بتعيين متغيرات البيئة التالية
VECTOR_DB_TYPE = atlas-mongo
ATLAS_MONGO_DB_URI = <mongodb+srv://...>
COLLECTION_NAME = <vector collection>
ATLAS_SEARCH_INDEX = <vector search index> يمكن أن يكون ATLAS_MONGO_DB_URI هو نفسه أو مختلف عما يستخدمه Librechat. حتى لو كان الأمر نفسه ، يجب أن تكون مجموعة $COLLECTION_NAME مجموعة جديدة تمامًا ، منفصلة عن جميع المجموعات التي تستخدمها Librechat. بالإضافة إلى ذلك ، قم بإنشاء فهرس بحث متجه للمجموعة أعلاه (تذكر تعيين $ATLAS_SEARCH_INDEX ) مع JSON التالي:
{
"fields" : [
{
"numDimensions" : 1536 ,
"path" : " embedding " ,
"similarity" : " cosine " ,
"type" : " vector "
},
{
"path" : " file_id " ,
"type" : " filter "
}
]
}اتبع إحدى الطرق الأربع الموثقة لإنشاء فهرس المتجه.
تأكد من أن مثيل RDS Postgres الخاص بك يلتزم بهذا المطلب:
The pgvector extension version 0.5.0 is available on database instances in Amazon RDS running PostgreSQL 15.4-R2 and higher, 14.9-R2 and higher, 13.12-R2 and higher, and 12.16-R2 and higher in all applicable AWS Regions, including the AWS GovCloud (US) Regions.
من أجل إعداد RDS Postgres باستخدام RAG API ، يمكنك اتباع هذه الخطوات:
قم بإنشاء مثيل/مجموعة RDS باستخدام وثائق AWS المقدمة.
قم بتسجيل الدخول إلى مجموعة RDS باستخدام سلسلة اتصال نقطة النهاية من وحدة التحكم RDS أو من إخراج حل IAC الخاص بك.
تسجيل الدخول عبر المستخدم الرئيسي .
إنشاء قاعدة بيانات مخصصة لـ RAG_API: create database rag_api; .
إنشاء مستخدم مخصص دور قاعدة البيانات هذه: create role rag;
قم بالتبديل إلى قاعدة البيانات التي قمت بإنشائها للتو: c rag_api
تمكين امتداد المتجه: create extension vector;
استخدم الوثائق المقدمة أعلاه لإعداد سلسلة الاتصال إلى مثيل RDS Postgres Cluster.
ملحوظات:
create role x with superuser;قم بتشغيل الأوامر التالية لتثبيت Formatter قبل الالتزام ، والذي يستخدم تنسيق الرمز الأسود:
pip install pre-commit
pre-commit install