Le routeur sémantique est une couche de prise de décision super rapide pour vos LLM et agents. Plutôt que d'attendre que les générations LLM lentes prennent des décisions d'utilisation d'outils, nous utilisons la magie de l'espace vectoriel sémantique pour prendre ces décisions - achetant nos demandes en utilisant un sens sémantique .
Pour commencer avec le routeur sémantique, nous l'installons comme tel:
pip install -qU semantic-router
❗️ Si vous souhaitez utiliser une version entièrement locale du routeur sémantique, vous pouvez utiliser HuggingFaceEncoder et LlamaCppLLM ( pip install -qU "semantic-router[local]" , voir ici). Pour utiliser l' HybridRouteLayer , vous devez pip install -qU "semantic-router[hybrid]" .
Nous commençons par définir un ensemble d'objets Route . Ce sont les voies de décision que le routeur sémantique peut décider d'utiliser, essayons deux itinéraires simples pour l'instant - un pour parler de politique et un autre pour Chitchat :
from semantic_router import Route
# we could use this as a guide for our chatbot to avoid political conversations
politics = Route (
name = "politics" ,
utterances = [
"isn't politics the best thing ever" ,
"why don't you tell me about your political opinions" ,
"don't you just love the president" ,
"they're going to destroy this country!" ,
"they will save the country!" ,
],
)
# this could be used as an indicator to our chatbot to switch to a more
# conversational prompt
chitchat = Route (
name = "chitchat" ,
utterances = [
"how's the weather today?" ,
"how are things going?" ,
"lovely weather today" ,
"the weather is horrendous" ,
"let's go to the chippy" ,
],
)
# we place both of our decisions together into single list
routes = [ politics , chitchat ] Nous avons nos itinéraires prêts, maintenant nous initialisons un modèle d'intégration / d'encodeur. Nous soutenons actuellement un CohereEncoder et OpenAIEncoder - d'autres encodeurs seront ajoutés bientôt. Pour les initialiser, nous faisons:
import os
from semantic_router . encoders import CohereEncoder , OpenAIEncoder
# for Cohere
os . environ [ "COHERE_API_KEY" ] = "<YOUR_API_KEY>"
encoder = CohereEncoder ()
# or for OpenAI
os . environ [ "OPENAI_API_KEY" ] = "<YOUR_API_KEY>"
encoder = OpenAIEncoder () Avec nos routes et encoder défini, nous créons maintenant une RouteLayer . La couche d'itinéraire gère notre prise de décision sémantique.
from semantic_router . layer import RouteLayer
rl = RouteLayer ( encoder = encoder , routes = routes )Nous pouvons désormais utiliser notre couche d'itinéraire pour prendre des décisions super rapides en fonction des requêtes utilisateur. Essayons avec deux requêtes qui devraient déclencher nos décisions d'itinéraire:
rl ( "don't you love politics?" ). name [Out]: 'politics'
Décision correcte, essayons un autre:
rl ( "how's the weather today?" ). name [Out]: 'chitchat'
Nous obtenons les deux décisions correctes! Essayons maintenant d'envoyer une requête sans rapport:
rl ( "I'm interested in learning about llama 2" ). name [Out]:
Dans ce cas, aucune décision n'a pu être prise car nous n'avons pas eu de match - donc notre couche d'itinéraire n'en est restée None !
Les encodeurs du routeur sémantique incluent des intégrations faciles à utiliser avec Cohere, Openai, Embring Face, FastMed, et plus encore - nous soutenons même la multi-modalité!.
Notre espace vectoriel d'énoncé s'intègre également à Pinecone et Qdrant!
| Carnet de notes | Description |
|---|---|
| Introduction | Introduction au routeur sémantique et aux routes statiques |
| Routes dynamiques | Itinéraires dynamiques pour la génération de paramètres et les appels de fonctionc |
| Enregistrer / charger les calques | Comment enregistrer et charger RouteLayer à partir du fichier |
| Intégration de Langchain | Comment intégrer le routeur sémantique avec les agents de Langchain |
| Exécution locale | Routeur sémantique entièrement local avec des routes dynamiques - des modèles locaux tels que Mistral 7B surpassent GPT-3.5 dans la plupart des tests |
| Optimisation de l'itinéraire | Comment former les seuils de couche d'itinéraire pour optimiser les performances |
| Routes multimodales | Utilisation de routes multimodales pour identifier les images Shrek vs Not-Shrek |

ollama / gemma2:9b