البحث عن وثائق متجر المتجهات حسب التشابه الدلالي
البحث في مستندات Vector Store باستخدام التشابه الدلالي وعمليات الدفعة
Initiate a search operation with a query text and receive most semantically similar responses from the vector store.
The ID of the vector store.
The search query text.
Number of chunks to return.
Matching threshold.
Number of chunks before the matched chunk to include.
Number of chunks after the matched chunk to include.
The API key for authentication.
Search results retrieved successfully.
GET /api/v1/vector-stores/{vector-store-id}/documents/search?q=text HTTP/1.1
Host: api.rememberizer.ai
x-api-key: text
Accept: */*
Search results retrieved successfully.
{
"vector_store": {
"id": "text",
"name": "text"
},
"matched_chunks": [
{
"document": {
"id": 1,
"name": "text",
"type": "text",
"size": 1,
"indexed_on": "2025-11-14T18:07:16.599Z",
"vector_store": "text",
"created": "2025-11-14T18:07:16.599Z",
"modified": "2025-11-14T18:07:16.599Z"
},
"matched_content": "text",
"distance": 1
}
]
}طلبات مثال
curl -X GET \
"https://api.rememberizer.ai/api/v1/vector-stores/vs_abc123/documents/search?q=كيف%20نقوم%20بدمج%20منتجنا%20مع%20أنظمة%20طرف%20ثالث&n=5&prev_chunks=1&next_chunks=1" \
-H "x-api-key: YOUR_API_KEY"const searchVectorStore = async (vectorStoreId, query, numResults = 5, prevChunks = 1, nextChunks = 1) => {
const url = new URL(`https://api.rememberizer.ai/api/v1/vector-stores/${vectorStoreId}/documents/search`);
url.searchParams.append('q', query);
url.searchParams.append('n', numResults);
url.searchParams.append('prev_chunks', prevChunks);
url.searchParams.append('next_chunks', nextChunks);
const response = await fetch(url.toString(), {
method: 'GET',
headers: {
'x-api-key': 'YOUR_API_KEY'
}
});
const data = await response.json();
console.log(data);
};
searchVectorStore(
'vs_abc123',
'كيف نقوم بدمج منتجنا مع أنظمة طرف ثالث',
5,
1,
1
);import requests
def search_vector_store(vector_store_id, query, num_results=5, prev_chunks=1, next_chunks=1):
headers = {
"x-api-key": "YOUR_API_KEY"
}
params = {
"q": query,
"n": num_results,
"prev_chunks": prev_chunks,
"next_chunks": next_chunks
}
response = requests.get(
f"https://api.rememberizer.ai/api/v1/vector-stores/{vector_store_id}/documents/search",
headers=headers,
params=params
)
data = response.json()
print(data)
search_vector_store(
'vs_abc123',
'كيف نقوم بدمج منتجنا مع أنظمة طرف ثالث',
5,
1,
1
)require 'net/http'
require 'uri'
require 'json'
def search_vector_store(vector_store_id, query, num_results=5, prev_chunks=1, next_chunks=1)
uri = URI("https://api.rememberizer.ai/api/v1/vector-stores/#{vector_store_id}/documents/search")
params = {
q: query,
n: num_results,
prev_chunks: prev_chunks,
next_chunks: next_chunks
}
uri.query = URI.encode_www_form(params)
request = Net::HTTP::Get.new(uri)
request['x-api-key'] = 'YOUR_API_KEY'
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
response = http.request(request)
data = JSON.parse(response.body)
puts data
end
search_vector_store(
'vs_abc123',
'كيف نقوم بدمج منتجنا مع أنظمة طرف ثالث',
5,
1,
1
)معلمات المسار
vector-store-id
سلسلة
مطلوب. معرف متجر المتجهات الذي سيتم البحث فيه.
معلمات الاستعلام
q
سلسلة
مطلوب. نص استعلام البحث.
n
عدد صحيح
عدد النتائج التي سيتم إرجاعها. الافتراضي: 10.
t
رقم
عتبة المطابقة. الافتراضي: 0.7.
prev_chunks
عدد صحيح
عدد الأجزاء قبل الجزء المطابق لتضمينه. الافتراضي: 0.
next_chunks
عدد صحيح
عدد الأجزاء بعد الجزء المطابق لتضمينه. الافتراضي: 0.
تنسيق الاستجابة
{
"vector_store": {
"id": "vs_abc123",
"name": "وثائق المنتج"
},
"matched_chunks": [
{
"document": {
"id": 1234,
"name": "دليل التكامل.pdf",
"type": "application/pdf",
"size": 250000,
"indexed_on": "2023-06-15T10:30:00Z",
"vector_store": "vs_abc123",
"created": "2023-06-15T10:15:00Z",
"modified": "2023-06-15T10:30:00Z"
},
"matched_content": "يقدم منتجنا عدة خيارات للتكامل مع أنظمة الطرف الثالث. الطريقة الأساسية هي من خلال واجهة برمجة التطبيقات RESTful الخاصة بنا، التي تدعم مصادقة OAuth2. بالإضافة إلى ذلك، يمكنك استخدام مجموعة أدوات التطوير المتاحة بلغة بايثون، وجافا سكريبت، وجافا.",
"distance": 0.123
},
// ... المزيد من الأجزاء المتطابقة
]
}المصادقة
تتطلب هذه النقطة النهائية المصادقة باستخدام مفتاح API في رأس x-api-key.
استجابات الخطأ
400
طلب غير صالح - معلمات مطلوبة مفقودة أو تنسيق غير صالح
401
غير مصرح - مفتاح API غير صالح أو مفقود
404
غير موجود - لم يتم العثور على متجر المتجهات
500
خطأ في الخادم الداخلي
نصائح تحسين البحث
نوافذ السياق
استخدم معلمات prev_chunks و next_chunks للتحكم في مقدار السياق المضمن مع كل تطابق:
اضبط كلاهما على 0 للحصول على تطابقات دقيقة بدون سياق
اضبط كلاهما على 1-2 للحصول على تطابقات مع سياق ضئيل
اضبط كلاهما على 3-5 للحصول على تطابقات مع سياق كبير
عتبة المطابقة
يتحكم معلم t في مدى دقة تصفية المطابقات:
القيم الأعلى (مثل 0.9) تعيد فقط المطابقات القريبة جدًا
القيم الأدنى (مثل 0.5) تعيد المزيد من المطابقات بتنوع أكبر
القيمة الافتراضية (0.7) توفر نهجًا متوازنًا
العمليات الجماعية
لتطبيقات عالية الإنتاجية، يدعم Rememberizer عمليات جماعية فعالة على مخازن المتجهات. تعمل هذه الطرق على تحسين الأداء عند معالجة استعلامات بحث متعددة.
تنفيذ البحث الجماعي
import requests
import time
import concurrent.futures
def batch_search_vector_store(vector_store_id, queries, num_results=5, batch_size=10):
"""
إجراء عمليات بحث جماعية ضد مخزن المتجهات
Args:
vector_store_id: معرف مخزن المتجهات للبحث
queries: قائمة بسلاسل استعلام البحث
num_results: عدد النتائج لكل استعلام
batch_size: عدد الطلبات المتوازية
Returns:
قائمة بنتائج البحث
"""
headers = {
"x-api-key": "YOUR_API_KEY"
}
results = []
# المعالجة في دفعات لتجنب إغراق واجهة برمجة التطبيقات
for i in range(0, len(queries), batch_size):
batch_queries = queries[i:i+batch_size]
with concurrent.futures.ThreadPoolExecutor(max_workers=batch_size) as executor:
futures = []
for query in batch_queries:
params = {
"q": query,
"n": num_results,
"prev_chunks": 1,
"next_chunks": 1
}
# إرسال الطلب إلى مجموعة الخيوط
future = executor.submit(
requests.get,
f"https://api.rememberizer.ai/api/v1/vector-stores/{vector_store_id}/documents/search",
headers=headers,
params=params
)
futures.append(future)
# جمع النتائج من جميع المستقبلات
for future in futures:
response = future.result()
if response.status_code == 200:
results.append(response.json())
else:
results.append({"error": f"فشل مع رمز الحالة: {response.status_code}"})
# إضافة تأخير بين الدفعات لتجنب تحديد المعدل
if i + batch_size < len(queries):
time.sleep(1)
return results
# مثال على الاستخدام
queries = [
"التكامل مع واجهات برمجة التطبيقات REST",
"بروتوكولات المصادقة",
"كيفية النشر في الإنتاج",
"تقنيات تحسين الأداء",
"أفضل الممارسات في معالجة الأخطاء"
]
search_results = batch_search_vector_store("vs_abc123", queries, num_results=3, batch_size=5)/**
* إجراء عمليات بحث جماعية ضد مخزن المتجهات
*
* @param {string} vectorStoreId - معرف مخزن المتجهات
* @param {string[]} queries - قائمة استعلامات البحث
* @param {Object} options - خيارات التكوين
* @returns {Promise<Array>} - قائمة نتائج البحث
*/
async function batchSearchVectorStore(vectorStoreId, queries, options = {}) {
const {
numResults = 5,
batchSize = 10,
delayBetweenBatches = 1000,
prevChunks = 1,
nextChunks = 1,
distanceThreshold = 0.7
} = options;
const results = [];
const apiKey = 'YOUR_API_KEY';
// المعالجة في دفعات لإدارة تحميل واجهة برمجة التطبيقات
for (let i = 0; i < queries.length; i += batchSize) {
const batchQueries = queries.slice(i, i + batchSize);
// إنشاء مصفوفة من الوعود للطلبات المتوازية
const batchPromises = batchQueries.map(query => {
const url = new URL(`https://api.rememberizer.ai/api/v1/vector-stores/${vectorStoreId}/documents/search`);
url.searchParams.append('q', query);
url.searchParams.append('n', numResults);
url.searchParams.append('prev_chunks', prevChunks);
url.searchParams.append('next_chunks', nextChunks);
url.searchParams.append('t', distanceThreshold);
return fetch(url.toString(), {
method: 'GET',
headers: {
'x-api-key': apiKey
}
})
.then(response => {
if (response.ok) {
return response.json();
} else {
return { error: `فشل مع الحالة: ${response.status}` };
}
})
.catch(error => {
return { error: error.message };
});
});
// الانتظار حتى تكتمل جميع الطلبات في الدفعة
const batchResults = await Promise.all(batchPromises);
results.push(...batchResults);
// إضافة تأخير بين الدفعات لتجنب تحديد المعدل
if (i + batchSize < queries.length) {
await new Promise(resolve => setTimeout(resolve, delayBetweenBatches));
}
}
return results;
}
// مثال على الاستخدام
const queries = [
"التكامل مع واجهات برمجة التطبيقات REST",
"بروتوكولات المصادقة",
"كيفية النشر في الإنتاج",
"تقنيات تحسين الأداء",
"أفضل الممارسات في معالجة الأخطاء"
];
const options = {
numResults: 3,
batchSize: 5,
delayBetweenBatches: 1000,
prevChunks: 1,
nextChunks: 1
};
batchSearchVectorStore("vs_abc123", queries, options)
.then(results => console.log(results))
.catch(error => console.error("فشل البحث الجماعي:", error));require 'net/http'
require 'uri'
require 'json'
require 'concurrent'
# إجراء عمليات بحث جماعية ضد مخزن المتجهات
#
# @param vector_store_id [String] معرف متجر المتجهات
# @param queries [Array<String>] قائمة استعلامات البحث
# @param num_results [Integer] عدد النتائج لكل استعلام
# @param batch_size [Integer] عدد الطلبات المتوازية
# @param delay_between_batches [Float] ثوانٍ للانتظار بين الدفعات
# @return [Array] نتائج البحث لكل استعلام
def batch_search_vector_store(vector_store_id, queries, num_results: 5, batch_size: 10, delay_between_batches: 1.0)
results = []
api_key = 'YOUR_API_KEY'
# المعالجة على دفعات
queries.each_slice(batch_size).with_index do |batch_queries, batch_index|
# إنشاء مجموعة خيوط للتنفيذ المتزامن
pool = Concurrent::FixedThreadPool.new(batch_size)
futures = []
batch_queries.each do |query|
# إرسال كل طلب إلى مجموعة الخيوط
futures << Concurrent::Future.execute(executor: pool) do
uri = URI("https://api.rememberizer.ai/api/v1/vector-stores/#{vector_store_id}/documents/search")
params = {
q: query,
n: num_results,
prev_chunks: 1,
next_chunks: 1
}
uri.query = URI.encode_www_form(params)
request = Net::HTTP::Get.new(uri)
request['x-api-key'] = api_key
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
begin
response = http.request(request)
if response.code.to_i == 200
JSON.parse(response.body)
else
{ "error" => "فشل مع رمز الحالة: #{response.code}" }
end
rescue => e
{ "error" => e.message }
end
end
end
# جمع النتائج من جميع المستقبلات
batch_results = futures.map(&:value)
results.concat(batch_results)
# إضافة تأخير بين الدفعات
if batch_index < (queries.length / batch_size.to_f).ceil - 1
sleep(delay_between_batches)
end
end
pool.shutdown
results
end
# مثال على الاستخدام
queries = [
"التكامل مع واجهات برمجة التطبيقات REST",
"بروتوكولات المصادقة",
"كيفية النشر في الإنتاج",
"تقنيات تحسين الأداء",
"أفضل الممارسات في التعامل مع الأخطاء"
]
results = batch_search_vector_store(
"vs_abc123",
queries,
num_results: 3,
batch_size: 5
)
puts resultsتحسين الأداء لعمليات الدفعات
عند تنفيذ عمليات الدفعات لعمليات بحث متجر المتجهات، ضع في اعتبارك هذه الممارسات الجيدة:
حجم الدفعة الأمثل: بالنسبة لمعظم التطبيقات، فإن معالجة 5-10 استفسارات في وقت واحد توفر توازنًا جيدًا بين الإنتاجية واستخدام الموارد.
الوعي بتحديد المعدل: قم بتضمين آليات تأخير بين الدفعات (عادةً 1-2 ثانية) لتجنب الوصول إلى حدود معدل واجهة برمجة التطبيقات.
معالجة الأخطاء: نفذ معالجة أخطاء قوية للاستفسارات الفردية التي قد تفشل ضمن دفعة.
إدارة الاتصالات: بالنسبة للتطبيقات ذات الحجم الكبير، نفذ تجميع الاتصالات لتقليل التكاليف.
تكوين المهلة: قم بتعيين مهلات مناسبة لكل طلب لمنع الاستفسارات التي تستغرق وقتًا طويلاً من حظر الدفعة بأكملها.
معالجة النتائج: ضع في اعتبارك معالجة النتائج بشكل غير متزامن عند توفرها بدلاً من الانتظار للحصول على جميع النتائج.
المراقبة: تتبع مقاييس الأداء مثل متوسط وقت الاستجابة ومعدلات النجاح لتحديد فرص التحسين.
بالنسبة للتطبيقات الإنتاجية ذات أحجام الاستفسارات العالية جدًا، ضع في اعتبارك تنفيذ نظام قائمة انتظار مع عمليات عمال لإدارة الدفعات الكبيرة بكفاءة.
تتيح لك هذه النقطة البحث في متجر المتجهات الخاص بك باستخدام التشابه الدلالي. إنها تعيد المستندات التي ترتبط مفهوميًا باستفسارك، حتى لو لم تحتوي على الكلمات الرئيسية الدقيقة. وهذا يجعلها قوية بشكل خاص لاستفسارات اللغة الطبيعية والإجابة على الأسئلة.
Last updated