O roteador semântico é uma camada de decisão super rápida para seus LLMs e agentes. Em vez de aguardar as gerações Slow LLM para tomar decisões de uso de ferramentas, usamos a magia do espaço vetorial semântico para tomar essas decisões- roteando nossas solicitações usando o significado semântico .
Para começar com o semântico, o instalamos assim:
pip install -qU semantic-router
❗️ Se quiser usar uma versão totalmente local do roteador semântico, você pode usar HuggingFaceEncoder e LlamaCppLLM ( pip install -qU "semantic-router[local]" , veja aqui). Para usar o HybridRouteLayer , você deve pip install -qU "semantic-router[hybrid]" .
Começamos definindo um conjunto de objetos Route . Esses são os caminhos de decisão que o roteador semântico pode decidir usar, vamos tentar duas rotas simples por enquanto - uma para conversar sobre política e outra para o 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 ] Temos nossas rotas prontas, agora inicializamos um modelo de incorporação / codificador. Atualmente, apoiamos um CohereEncoder e OpenAIEncoder - mais codificadores serão adicionados em breve. Para inicializá -los, fazemos:
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 () Com nossas routes e encoder definidos, agora criamos um RouteLayer . A camada de rota lida com nossa tomada de decisão semântica.
from semantic_router . layer import RouteLayer
rl = RouteLayer ( encoder = encoder , routes = routes )Agora podemos usar nossa camada de rota para tomar decisões super rápidas com base nas consultas do usuário. Vamos tentar com duas consultas que devem acionar nossas decisões de rota:
rl ( "don't you love politics?" ). name [Out]: 'politics'
Decisão correta, vamos tentar outro:
rl ( "how's the weather today?" ). name [Out]: 'chitchat'
Temos as duas decisões corretas! Agora vamos tentar enviar uma consulta não relacionada:
rl ( "I'm interested in learning about llama 2" ). name [Out]:
Nesse caso, nenhuma decisão poderia ser tomada, pois não tínhamos correspondências - então nossa camada de rota retornou None !
Os codificadores do roteador semântico incluem integrações fáceis de usar com Cohere, Openai, Abragem de rosto, fastembed e muito mais-até apoiamos a multimodalidade!.
Nosso espaço vetorial de enunciado também se integra com Pinecone e Qdrant!
| Caderno | Descrição |
|---|---|
| Introdução | Introdução ao roteador semântico e rotas estáticas |
| Rotas dinâmicas | Rotas dinâmicas para geração de parâmetros e chamadas de funçãoC |
| Salvar/carregar camadas | Como salvar e carregar RouteLayer do arquivo |
| Integração de Langchain | Como integrar o roteador semântico com agentes Langchain |
| Execução local | Roteador semântico totalmente local com rotas dinâmicas- modelos locais, como o Mistral 7B, supera o GPT-3.5 na maioria dos testes |
| Otimização de rota | Como treinar limiares de camada de rota para otimizar o desempenho |
| Rotas multimodais | Usando rotas multimodais para identificar fotos de shrek vs. não-shrek |

ollama / gemma2:9b Hotline