تطوير تطبيق RAG باستخدام Spring الذكاء الاصطناعي وAzure OpenAI
في هذه الوحدة، ستتعلم كيفية تنفيذ الجيل المعزز باسترداد (RAG) في تطبيق Spring Boot باستخدام بحث تشابه المتجهات الذي يوفره pgvector الملحق في قاعدة بيانات PostgreSQL. نقدم مفاهيم RAG ذات الصلة مثل التضمينات ونماذج التضمين ومخازن المتجهات. بنهاية هذه الوحدة، يجب أن تفهم كيفية تطبيق هذه الأدوات لتحسين تطبيقاتك بقدرات بحث واسترداد متقدمة.
ما هي التضمينات؟
التضمينات هي تمثيلات متجهات كثيفة للبيانات. بعبارات أبسط، التضمينات هي طريقة لتحويل البيانات المعقدة، مثل الكلمات أو الصور، إلى مجموعة من الأرقام - المتجهات - التي يمكن للكمبيوتر معالجتها بسهولة. في معالجة اللغة الطبيعية (NLP)، تمثل التضمينات الكلمات أو الجمل أو المستندات كخطوط متجهة في مساحة عالية الأبعاد. في هذه الخطوط المتجهة، يتم تمثيل كل كلمة أو جملة كلقائمة من الأرقام. هذه الأرقام ليست عشوائية، فهي مصممة لالتقاط المعنى والعلاقات بين الكلمات.
تلتقط هذه الخطوط المتجهة العلاقات الدلالية، ما يتيح البحث والتحليل المتقدمين. على سبيل المثال، إذا كنت تبحث عن "ملكة" في قاعدة بيانات، يمكن للنظام أيضا العثور على مصطلحات ذات صلة مثل "الملك" أو "الملكية" لأن خطوطها المتجهة قريبة من بعضها البعض. تجعل هذه الإمكانية تضمين أداة قوية لمهام مثل محركات البحث وأنظمة التوصية وترجمة اللغة.
استخدام نماذج تضمين Azure OpenAI
تعد نماذج التضمين أدوات أساسية في معالجة اللغة الطبيعية (NLP) والتطبيقات الذكاء الاصطناعي الأخرى. فهي تحول البيانات المعقدة، مثل النص، إلى تمثيلات متجهات كثيفة تلتقط المعنى الدلالي للبيانات. يمكن بعد ذلك استخدام هذه المتجهات لمهام مختلفة، بما في ذلك البحث والتوصية وتكوين أنظمة المجموعات.
يوفر Azure OpenAI نماذج تضمين قوية يمكنك دمجها بسهولة في تطبيقاتك. يمكن لهذه النماذج إنشاء تضمينات لمختلف أنواع البيانات، ما يتيح إمكانات البحث والاسترداد المتقدمة. أحد نماذج تضمين النص الأكثر استخداما من OpenAI هو text-embedding-ada-002 النموذج. يمكنك استخدام هذا النموذج لتطبيقات مختلفة، بما في ذلك أنظمة البحث والتكتظ والتوصية، نظرا لقدرته على فهم البيانات النصية المعقدة وتمثيلها. عند استخدامه مع نماذج ChatGPT، text-embedding-ada-002 يعزز قدرة روبوت الدردشة على فهم السياق، واسترداد المعلومات ذات الصلة، وتوفير استجابات أكثر دقة ومناسبة للسياق. باستخدام text-embedding-ada-002 مع ChatGPT، يمكنك إنشاء تطبيقات أكثر ذكاء واستجابة توفر تجارب مستخدم أفضل.
تنفيذ VectorStore في Spring الذكاء الاصطناعي
VectorStore هي فئة مقدمة من بداية Spring الذكاء الاصطناعي pgvector Store Spring Boot. إنه يبسط تكامل تخزين المتجهات وقدرات البحث في تطبيقات Spring Boot الخاصة بك. ويستخدم ملحق PostgreSQL pgvector لتخزين تضمينات المستندات والاستعلام عنها بكفاءة.
يمكنك إضافة VectorStore تبعية بداية Spring Boot إلى مشروعك باستخدام التبعية التالية:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-pgvector-store-spring-boot-starter</artifactId>
</dependency>
عند بدء التشغيل، pgvector يحاول بداية Spring Boot تثبيت ملحقات قاعدة البيانات المطلوبة وإنشاء الجدول المطلوب vector_store باستخدام فهرس إذا لم يكن موجودا بالفعل.
اختياريا، يمكنك بدلا من ذلك القيام بهذه المهمة يدويا باستخدام عبارات SQL التالية:
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS hstore;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE TABLE IF NOT EXISTS vector_store (
id uuid DEFAULT uuid_generate_v4() PRIMARY KEY,
content text,
metadata json,
embedding vector(1536) // 1536 is the default embedding dimension
);
CREATE INDEX ON vector_store USING HNSW (embedding vector_cosine_ops);
VectorStore يتطلب أيضا مثيل لحساب EmbeddingModel عمليات التضمين للمستندات. لاستخدام نموذج تضمين Azure OpenAI، أضف التبعية التالية إلى مشروعك:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-azure-openai-spring-boot-starter</artifactId>
</dependency>
عند بدء تشغيل التطبيق، يقوم Spring Boot بالتكوين VectorStore التلقائي باستخدام خصائص تطبيق Azure OpenAI التالية:
spring.ai.azure.openai.api-key=${AZURE_OPENAI_API_KEY}
spring.ai.azure.openai.endpoint=${AZURE_OPENAI_ENDPOINT}
spring.ai.azure.openai.chat.model=gpt-4o
spring.ai.azure.openai.embedding.model=text-embedding-ada-002
إضافة مستندات إلى مخزن المتجهات
لإضافة مستندات إلى مخزن المتجهات، تحتاج إلى إنشاء تضمينات وتخزينها مع المحتوى الأصلي. يوضح لك مثال التعليمات البرمجية VectorStore التالي كيفية استخدام الفئة في تطبيق Spring Boot لتخزين المستندات وإدارتها:
@Autowired
private VectorStore vectorStore;
List<Document> documents = List.of(
new Document("A vector store is a specialized database designed to store and manage high-dimensional vectors. ", Map.of("prompt", "What is Vector Store")),
new Document("PGVectorStore is a Spring Boot starter that simplifies the integration of vector storage and search capabilities into your Spring Boot applications.", Map.of("prompt","Why Use PGVectorStore?"))
);
vectorStore.add(documents);
توفر القائمة التالية شرحا مفصلا لكيفية عمل هذه التعليمات البرمجية:
- يقوم التعليق التوضيحي ل
@AutowiredSpring بإدخال مثيل للفئةVectorStoreفي المكون الخاص بك. - يتم إنشاء قائمة
Documentالكائنات. يحتوي كلDocumentمنها على محتوى وبيانات تعريف - على سبيل المثال، مطالبة. - تتم إضافة قائمة المستندات إلى
vectorStore.VectorStoreينشئ التضمينات باستخدام المكونEmbeddingModelويخزن كلا من المحتوى والتضمينات في قاعدة البيانات.
الاستعلام عن المستندات
بعد تخزين المستندات، يمكنك إجراء عمليات بحث عن التشابه للعثور على مستندات مشابهة دلاليا لاستعلام معين. يقوم مثال التعليمات البرمجية التالي بإجراء بحث تشابه باستخدام VectorStore الفئة :
List<Document> results = vectorStore.similaritySearch(
SearchRequest.builder()
.query("Spring")
.topK(5)
.build()
);
توفر القائمة التالية شرحا مفصلا لهذا المثال:
-
similaritySearchيتم استخدام أسلوبVectorStoreالفئة للبحث عن المستندات المشابهة لاستعلام معين. - ينشئ نمط المنشئ كائنا
SearchRequest. - يقوم
queryالأسلوب بتعيين سلسلة البحث. -
topK(5)يحدد استدعاء الأسلوب أن البحث يرجع أهم خمسة مستندات متشابهة.
ملخص الوحدة
في هذه الوحدة، تعلمت المفاهيم الكامنة وراء استخدام Spring Boot VectorStore وAzure OpenAI Spring Boot Starter لإدارة تضمينات المستندات والاستعلام منها. لقد استكشفت أهمية التضمينات، وكيفية إنشاؤها وتخزينها، وكيفية إجراء عمليات البحث عن التشابه.