SemRoute هو جهاز توجيه دلالي يتيح التوجيه باستخدام المعنى الدلالي للاستعلامات. تعمل هذه الأداة على تعزيز عمليات تضمين المتجهات لاتخاذ القرارات بسرعة، دون الحاجة إلى تدريب مصنف أو استدعاء نموذج لغة كبير. يعد SemRoute سهل الاستخدام ويوفر المرونة في اختيار نماذج التضمين المختلفة وأنواع العتبات وطرق التسجيل التي تناسب حالة الاستخدام الخاصة بك بشكل أفضل.
قم بتثبيت المكتبة باستخدام الأمر:
pip install semroute
حزمة باي بي آي
لاستخدام جهاز التوجيه الدلالي، تحتاج إلى إنشاء جهاز توجيه وإضافة مسارات دلالية تحدد المسارات المتاحة لاستعلام معين.
Router
from semroute import Route
router = Router (
embedder_host = "OpenAI" ,
embedder_model = "text-embedding-3-large" ,
thresholding_type = "dynamic" ,
scoring_method = "centroid"
)
خيارات التكوين
embedder_host
: يدعم SemRoute حاليًا تضمين النماذج من OpenAI
و MistralAI
. لذلك، يمكنك اختيار أي منهما لاستخدام نماذج التضمين الخاصة بهم.
embedder_model
: يمكن استخدام هذا الحقل لتحديد نموذج التضمين الذي سيتم استخدامه من embedder_host
. فيما يلي نماذج التضمين المدعومة من كل مضيف:
text-embedding-3-small
، text-embedding-3-large
، text-embedding-ada-002
]mistral-embed
] thresholding_type
: يحدد هذا الحقل نوع آلية العتبة التي سيتم استخدامها لتوجيه الاستعلامات. يدعم SemRoute نوعين من العتبات:
static
: يوجه هذا النوع جهاز التوجيه لاستخدام الحدود المعينة مسبقًا لكل نموذج تضمين لتحديد ما إذا كان الاستعلام ينتمي إلى مسار معين أم لا. إنه يعتمد على النموذج ويتم تحسين هذه الحدود لكل نموذج تضمين. إنه يؤدي إلى اتخاذ قرار توجيه أسرع لأنه لا يوجد أي حمل آخر غير إنشاء تضمينات الكلام المقدم. ومع ذلك، قد يؤدي استخدام هذا النوع من الحدود في بعض الأحيان إلى اتخاذ قرارات توجيه خاطئة لأنه لا يتم تكييفه مع نماذج النطق التي تقدمها للمسار.dynamic
: يوجه هذا النوع من العتبات جهاز التوجيه إلى تكييف العتبة لنموذج التضمين باستخدام نماذج العبارات المتوفرة في المسار. لاستخدام هذا الوضع، تحتاج إلى توفير OPENAI_API_KEY
وتعيينه كمتغير البيئة الخاص بك. يستخدم هذا الوضع GPT-3.5-Turbo
الخاص بـ OpenAI لإنشاء المزيد من الألفاظ المشابهة لتلك التي يقدمها المستخدم ويستخدمها لضبط العتبة الديناميكية. هذه الطريقة أبطأ ولكنها تؤدي إلى قرارات توجيه أكثر دقة. scoring_method
: يُستخدم هذا الحقل لتحديد الطريقة المستخدمة لتسجيل مدى تشابه الاستعلام مع كل مسار. يدعم SemRoute طريقتين للتسجيل:
individual_averaging
: في هذه الطريقة، يتم حساب درجة التشابه بين كل عبارة تتضمن المسار والاستعلام. ثم يتم استخدام متوسط أوجه التشابه هذه لاتخاذ قرار التوجيه. تحتوي هذه الطريقة على تعقيد زمني قدره O(n)
.centroid
: في هذه الطريقة، يتم حساب النقطه الوسطى لكل مسار باستخدام تضمينات الكلام الفردية ثم يتم استخدام التشابه بين هذه النقطه الوسطى وتضمين الاستعلام لاتخاذ قرار التوجيه. تحتوي هذه الطريقة على تعقيد زمني قدره O(1)
.يدعم SemRoute الآن استخدام نماذج التضمين المخصصة. يمكنك توفير وظيفة التضمين الخاصة بك بالإضافة إلى العتبة الثابتة وحجم التضمين المتجه. إذا تم توفير وظيفة تضمين مخصصة، فستكون لها الأولوية على الوظائف التي تم تكوينها مسبقًا.
فيما يلي المخطط الذي يجب على المستخدم اتباعه لتكوين التضمين المخصص:
embedding_function
: دالة قابلة للاستدعاء تأخذ قائمة من السلاسل وترجع مصفوفة numpy من التضمينات.static_threshold
: قيمة عائمة تمثل العتبة الثابتة لقرارات التوجيه.vector_embedding_size
: عدد صحيح يمثل حجم التضمينات المتجهة.تكوين المثال
custom_embedder_config = {
"embedding_function" : your_custom_embedding_function ,
"static_threshold" : 0.5 ,
"vector_embedding_size" : 768
}
router = Router (
custom_embedder = custom_embedder_config ,
thresholding_type = "static" ,
scoring_method = "centroid"
)
مثال على وظيفة التضمين المخصصة
يجب أن تلتزم وظيفة التضمين المخصصة بالتنسيق التالي:
def your_custom_embedding_function ( utterances : List [ str ]) -> np . ndarray :
# Your logic to convert utterances to embeddings
embeddings = np . array ([ your_embedding_logic ( utterance ) for utterance in utterances ])
return embeddings
في هذا المثال، استبدل your_embedding_logic
بالمنطق الخاص بنموذج التضمين الخاص بك.
من خلال توفير تكوين تضمين مخصص، يمكنك دمج أي نموذج تضمين في SemRoute، مما يجعله مرنًا للغاية وقابلاً للتكيف مع حالات الاستخدام المختلفة.
routes
router . add_route (
name = "technology" ,
utterances = [
"what's the latest in tech news?" ,
"tell me about artificial intelligence" ,
"how does blockchain work?" ,
"what is the best programming language?" ,
"can you recommend a good laptop?" ,
"what's new with the iPhone?"
],
description = "A group of utterances for when the user discusses anything related to technology"
)
router . add_route (
name = "sports" ,
utterances = [
"who won the game last night?" ,
"what's the score of the basketball game?" ,
"tell me about the latest in football" ,
"who's your favorite athlete?" ,
"do you think they'll win the championship?" ,
"when is the next World Cup?"
],
description = "A group of utterances for when the user discusses anything related to sports"
)
router . add_route (
name = "food" ,
utterances = [
"what's your favorite food?" ,
"can you recommend a good restaurant?" ,
"how do you make spaghetti?" ,
"what's a good recipe for a healthy dinner?" ,
"tell me about the best dessert you've had" ,
"what's your favorite cuisine?"
],
description = "A group of utterances for when the user discusses anything related to food"
)
router . add_route (
name = "travel" ,
utterances = [
"where's the best place to travel?" ,
"can you recommend a vacation spot?" ,
"what's the best way to travel on a budget?" ,
"tell me about your favorite trip" ,
"where should I go for my next holiday?" ,
"what are the top tourist destinations?"
],
description = "A group of utterances for when the user discusses anything related to travel"
)
router . add_route (
name = "health" ,
utterances = [
"what's the best way to stay healthy?" ,
"can you recommend a good workout?" ,
"tell me about a healthy diet" ,
"how do I reduce stress?" ,
"what are the benefits of meditation?" ,
"how do I improve my mental health?"
],
description = "A group of utterances for when the user discusses anything related to health"
)
للحصول على قرارات توجيه أفضل، تأكد من تضمين أكبر عدد ممكن من حالات النطق لكل مسار. سيساعد ذلك جهاز التوجيه على ضمان عدم ترك أي حالة حافة أثناء اتخاذ قرار التوجيه. وأيضًا، أثناء استخدام الوضع
dynamic
، يرجى التأكد من تقديمdescription
يتوافق بشكل وثيق مع غرض هذا المسار لأنه يستخدم لإنشاء عبارات مماثلة.
router . route ( "How much does the health insurance costs?" )
[OUT]: health
router . route ( "Let's go to Italy!" )
[OUT]: travel
تتيح لك الأدوات حفظ جهاز التوجيه الذي تم تكوينه في ملف اختيار باستخدام طريقة save_router
.
router . save_router ( "path/to/filename.pkl" )
يمكنك أيضًا تحميل التكوين المحفوظ الخاص بك واستخدامه لتكوين جهاز التوجيه.
from semroute import Router
router = Router ()
router . load_router ( "path/to/filename.pkl" )
router . route ( "Query to route" )
المساهمات في SemRoute هي موضع ترحيب! يرجى التأكد من أن طلبات السحب الخاصة بك موثقة جيدًا ومختبرة.
SemRoute مرخص بموجب ترخيص MIT. راجع ملف الترخيص لمزيد من التفاصيل.
بالنسبة لأية مشكلات أو طلبات ميزات، يرجى فتح مشكلة في مستودع GitHub.