SemRoute adalah router semantik yang memungkinkan perutean menggunakan makna semantik dari kueri. Alat ini memanfaatkan penyematan vektor untuk mengambil keputusan dengan cepat, tanpa perlu melatih pengklasifikasi atau memanggil Model Bahasa Besar. SemRoute mudah digunakan dan menawarkan fleksibilitas dalam memilih model penyematan yang berbeda, jenis ambang batas, dan metode penilaian yang paling sesuai dengan kasus penggunaan Anda.
Instal perpustakaan menggunakan perintah:
pip install semroute
Paket PyPI
Untuk menggunakan router semantik, Anda perlu membuat Router dan menambahkan rute semantik yang akan menentukan rute yang tersedia untuk kueri tertentu.
Router
from semroute import Route
router = Router (
embedder_host = "OpenAI" ,
embedder_model = "text-embedding-3-large" ,
thresholding_type = "dynamic" ,
scoring_method = "centroid"
)
Opsi Konfigurasi
embedder_host
: SemRoute saat ini mendukung penyematan model dari OpenAI
dan MistralAI
. Jadi, Anda dapat memilih salah satu dari keduanya untuk menggunakan model penyematannya.
embedder_model
: Bidang ini dapat digunakan untuk menentukan model penyematan yang akan digunakan dari embedder_host
. Di bawah ini adalah model penyematan yang didukung dari setiap host:
text-embedding-3-small
, text-embedding-3-large
, text-embedding-ada-002
]mistral-embed
] thresholding_type
: Bidang ini menentukan jenis mekanisme ambang batas yang akan digunakan untuk merutekan kueri. SemRoute mendukung dua jenis ambang batas:
static
: Tipe ini menginstruksikan router untuk menggunakan ambang batas yang telah ditetapkan untuk setiap model penyematan guna menentukan apakah kueri termasuk dalam rute tertentu atau tidak. Hal ini bergantung pada model dan ambang batas ini disempurnakan untuk setiap model penyematan. Hal ini menghasilkan keputusan perutean yang lebih cepat karena tidak ada overhead lain selain menghasilkan penyematan ucapan yang disediakan. Namun, penggunaan jenis ambang batas ini terkadang dapat menyebabkan keputusan perutean yang salah karena tidak disesuaikan dengan contoh ucapan yang Anda berikan untuk rute tersebut.dynamic
: Tipe ambang batas ini menginstruksikan Router untuk mengadaptasi ambang batas untuk model penyematan menggunakan contoh ucapan yang disediakan dalam rute. Untuk menggunakan mode ini, Anda perlu menyediakan OPENAI_API_KEY
dan menetapkannya sebagai variabel lingkungan Anda. Mode ini menggunakan GPT-3.5-Turbo
OpenAI untuk menghasilkan lebih banyak ucapan serupa dengan yang diberikan oleh pengguna dan menggunakannya untuk menyempurnakan ambang batas dinamis. Metode ini lebih lambat tetapi menghasilkan keputusan perutean yang lebih akurat. scoring_method
: Bidang ini digunakan untuk menentukan metode yang digunakan untuk menilai seberapa mirip kueri dengan setiap rute. SemRoute mendukung dua metode penilaian:
individual_averaging
: Dalam metode ini, skor kesamaan dihitung antara setiap ucapan yang disematkan pada rute dan kueri. Kemudian rata-rata kesamaan tersebut digunakan untuk membuat keputusan routing. Metode ini memiliki kompleksitas waktu O(n)
.centroid
: Dalam metode ini, centroid dihitung untuk setiap rute menggunakan penyematan ucapan individual dan kemudian kesamaan antara centroid ini dan penyematan kueri digunakan untuk membuat keputusan perutean. Metode ini memiliki kompleksitas waktu O(1)
.SemRoute sekarang mendukung penggunaan model penyematan khusus. Anda dapat menyediakan fungsi penyematan Anda sendiri beserta ambang batas statis dan ukuran penyematan vektornya. Jika fungsi penyematan khusus disediakan, fungsi tersebut akan diutamakan dibandingkan fungsi yang telah dikonfigurasikan sebelumnya.
Berikut adalah skema yang harus diikuti pengguna untuk konfigurasi penyematan khusus:
embedding_function
: Fungsi yang dapat dipanggil yang mengambil daftar string dan mengembalikan array embeddings yang numpy.static_threshold
: Nilai float yang mewakili ambang batas statis untuk keputusan perutean.vector_embedding_size
: Bilangan bulat yang mewakili ukuran penyematan vektor.Contoh konfigurasi
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"
)
Contoh fungsi penyematan khusus
Fungsi penyematan khusus Anda harus mengikuti format berikut:
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
Dalam contoh ini, ganti your_embedding_logic
dengan logika khusus untuk model penyematan Anda.
Dengan menyediakan konfigurasi penyematan khusus, Anda dapat mengintegrasikan model penyematan apa pun ke SemRoute, menjadikannya sangat fleksibel dan mudah beradaptasi dengan berbagai kasus penggunaan.
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"
)
Untuk keputusan perutean yang lebih baik, pastikan untuk menyertakan sebanyak mungkin kasus ucapan untuk setiap rute. Ini akan membantu router untuk memastikan bahwa tidak ada kasus tepi yang tertinggal saat membuat keputusan perutean. Selain itu, saat menggunakan mode
dynamic
, pastikan untuk memberikandescription
yang sangat sesuai dengan maksud rute tersebut karena digunakan untuk menghasilkan ucapan serupa.
router . route ( "How much does the health insurance costs?" )
[OUT]: health
router . route ( "Let's go to Italy!" )
[OUT]: travel
Alat ini memungkinkan Anda untuk menyimpan router yang dikonfigurasi ke dalam file acar menggunakan metode save_router
.
router . save_router ( "path/to/filename.pkl" )
Anda juga dapat memuat konfigurasi tersimpan dan menggunakannya untuk mengkonfigurasi router.
from semroute import Router
router = Router ()
router . load_router ( "path/to/filename.pkl" )
router . route ( "Query to route" )
Kontribusi ke SemRoute dipersilakan! Harap pastikan permintaan penarikan Anda terdokumentasi dan diuji dengan baik.
SemRoute dilisensikan di bawah Lisensi MIT. Lihat file LISENSI untuk lebih jelasnya.
Untuk masalah atau permintaan fitur apa pun, silakan buka masalah di repositori GitHub.