البحث عن مستندات مخزن المتجهات حسب التشابه الدلالي¶
GET /vector-stores/{vector-store-id}/documents/search¶
Initiate a search operation with a query text and receive most semantically similar responses from the vector store.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
vector-store-id |
path | string | yes | The ID of the vector store. |
q |
query | string | yes | The search query text. |
n |
query | integer | Number of chunks to return. | |
t |
query | number | Matching threshold. | |
prev_chunks |
query | integer | Number of chunks before the matched chunk to include. | |
next_chunks |
query | integer | Number of chunks after the matched chunk to include. | |
x-api-key |
header | string | yes | The API key for authentication. |
Responses
200— Search results retrieved successfully.
طلبات مثال¶
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"
Info
استبدل YOUR_API_KEY بمفتاح واجهة برمجة التطبيقات الخاص بك لـ Vector Store و vs_abc123 بمعرف Vector Store الخاص بك.
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
);
Info
استبدل YOUR_API_KEY بمفتاح واجهة برمجة التطبيقات الخاص بك لـ Vector Store و vs_abc123 بمعرف Vector Store الخاص بك.
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
)
Info
استبدل YOUR_API_KEY بمفتاح واجهة برمجة التطبيقات الخاص بك لـ Vector Store و vs_abc123 بمعرف Vector Store الخاص بك.
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(/ar/developer-resources/integration-options/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
)
Info
استبدل YOUR_API_KEY بمفتاح واجهة برمجة التطبيقات الخاص بك لـ Vector Store و vs_abc123 بمعرف Vector Store الخاص بك.
معلمات المسار¶
| المعلمة | النوع | الوصف |
|---|---|---|
| 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(/ar/developer-resources/integration-options/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 ثانية) لتجنب الوصول إلى حدود معدل واجهة برمجة التطبيقات.
-
معالجة الأخطاء: نفذ معالجة أخطاء قوية للاستفسارات الفردية التي قد تفشل ضمن دفعة.
-
إدارة الاتصالات: بالنسبة للتطبيقات ذات الحجم الكبير، نفذ تجميع الاتصالات لتقليل التكاليف.
-
تكوين المهلة: قم بتعيين مهلات مناسبة لكل طلب لمنع الاستفسارات التي تستغرق وقتًا طويلاً من حظر الدفعة بأكملها.
-
معالجة النتائج: ضع في اعتبارك معالجة النتائج بشكل غير متزامن عند توفرها بدلاً من الانتظار للحصول على جميع النتائج.
-
المراقبة: تتبع مقاييس الأداء مثل متوسط وقت الاستجابة ومعدلات النجاح لتحديد فرص التحسين.
بالنسبة للتطبيقات الإنتاجية ذات أحجام الاستفسارات العالية جدًا، ضع في اعتبارك تنفيذ نظام قائمة انتظار مع عمليات عمال لإدارة الدفعات الكبيرة بكفاءة.
تتيح لك هذه النقطة البحث في متجر المتجهات الخاص بك باستخدام التشابه الدلالي. إنها تعيد المستندات التي ترتبط مفهوميًا باستفسارك، حتى لو لم تحتوي على الكلمات الرئيسية الدقيقة. وهذا يجعلها قوية بشكل خاص لاستفسارات اللغة الطبيعية والإجابة على الأسئلة.