Inbeddingen gebruiken in LangChain

Inbeddingen Gebruiken In Langchain



Inbeddingen zijn een index van verwantschap met tekenreeksen en worden uitgedrukt door een vector (lijst) van gehele getallen met drijvende komma. De afstand tussen twee vectoren dient als maat voor hoe nauw ze met elkaar verbonden zijn; hoe kleiner de afstand, hoe hechter de verwantschap. De klasse LangChain Embedding is bedoeld om te dienen als interface voor inbeddingsservices zoals OpenAI, HuggingFace en andere.

Twee methoden, embed_query() en embed_documents(), worden geleverd door de basisklasse. De eerste hiervan werkt op een enkel document, terwijl de andere op veel documenten kan werken.

Dit artikel bevat de praktische demonstratie van inbedding in LangChain met behulp van de OpenAI-tekstinbedding.







Voorbeeld: een enkele invoertekst verkrijgen met behulp van de OpenAI-tekstinsluiting

Voor de eerste illustratie voeren we een enkele tekenreeks in en halen we de OpenAI-tekstinbedding ervoor op. Het programma begint met het installeren van de benodigde bibliotheken.



De eerste bibliotheek die we in ons project moeten installeren, is LangChain. Het wordt niet geleverd met de standaardbibliotheek van Python, dus we moeten het apart installeren. Omdat langchain beschikbaar is op PyPi, kunnen we het eenvoudig installeren met behulp van de pip-opdracht op de terminal. Daarom voeren we de volgende opdracht uit om de LangChain-bibliotheek te installeren:



$ pip installeer langchain

De bibliotheek wordt geïnstalleerd zodra aan de vereisten is voldaan.





We hebben ook de OpenAI-bibliotheek nodig om in ons project te worden geïnstalleerd, zodat we toegang hebben tot de OpenAI-modellen. Deze bibliotheek kan worden geopend door het pip-commando te schrijven:

$ pip installeer openai

Nu zijn beide vereiste bibliotheken in ons projectbestand geïnstalleerd. We moeten de vereiste modules importeren.



van langketen. inbeddingen . open importeren OpenAIEbeddings

importeren Jij

Jij . ongeveer [ 'OPENAI_API_KEY' ] = 'sk-YOUR_API_KEY”

Om de OpenAI-insluitingen te verkrijgen, moeten we de klasse OpenAIEmbeddings importeren uit het pakket 'langchain.embeddings.openai'. Vervolgens stellen we de API-sleutel in als de omgevingsvariabele. We hebben de geheime API-sleutel nodig om toegang te krijgen tot de verschillende OpenAI-modellen. Deze sleutel kan worden gegenereerd vanuit het OpenAI-platform. Meld u eenvoudig aan en verkrijg een geheime sleutel uit het gedeelte 'geheime sleutel bekijken' van uw profiel. Deze sleutel kan voor verschillende projecten voor een specifieke klant worden gebruikt.

De omgevingsvariabelen worden gebruikt om de API-sleutels voor een bepaalde omgeving op te slaan in plaats van ze hard te coderen in de functies. Dus om de API-sleutel in te stellen als de omgevingsvariabele, moeten we de 'os' -module importeren. De methode os.environ() wordt gebruikt om de API-sleutel in te stellen als de omgevingsvariabele. Het bevat een naam en een waarde. De naam die we hebben ingesteld is 'OPENAI_API_KEY' en de geheime sleutel is ingesteld op 'waarde'.

model = OpenAIEbeddings ( )

invoer_tekst = 'Dit is voor demonstratie.'

resultaat = model. embed_query ( invoer_tekst )

afdrukken ( resultaat )

afdrukken ( alleen ( resultaat ) )

We hebben al een interface gehad met de OpenAI-inbeddingswrapper. Daarna noemen we de constructor van de klasse OpenAIEmbedding. OpenAI biedt verschillende inbeddingsmodellen, maar u moet ervoor betalen. Hier gaan we met het standaard inbeddingsmodel van OpenAI, d.w.z. text-embedding-ada-002, dat gratis is. Als u geen modelnaam als parameter opgeeft, wordt het standaardmodel gebruikt.

Vervolgens specificeren we de tekst waarvan we de inbedding moeten verkrijgen. De tekst wordt gespecificeerd als 'Dit is voor demonstratie.' en sla het op in de variabele input_text. Daarna wordt de methode embed_query() om de opgegeven tekst in te sluiten aangeroepen met het model dat wordt gebruikt en de input_text die de tekenreeks heeft om de insluiting op te halen die als parameter is opgegeven. De opgehaalde inbeddingen worden toegewezen aan het uitkomstobject.

Ten slotte hebben we de methode print() van Python om het resultaat zichtbaar te maken. We hoeven alleen maar het object dat de waarde opslaat die we willen weergeven, door te geven aan de methode print(). Daarom roepen we deze functie twee keer aan; eerst om de lijst met zwevende getallen weer te geven en ten tweede om de lengte van deze waarden af ​​te drukken met behulp van de len() methode.

De lijst met zwevende waarden is te zien in de volgende momentopname met de lengte van deze waarden:

Voorbeeld: het verkrijgen van meerdere invoertekst/document met behulp van de OpenAI-tekstinsluiting

Naast het verkrijgen van inbedding voor een enkele invoertekst, kunnen we deze ook ophalen voor meerdere invoerstrings. We implementeren dit in deze illustratie.

We hebben de bibliotheken in de vorige afbeelding al geïnstalleerd. Een andere bibliotheek die we hier moeten installeren, is de tiktoken-bibliotheek van Python. Schrijf het commando op de terminal om het te installeren:

$ pip tiktoken installeren

Het tiktoken-pakket is een Byte Pair Encoding-tokenizer. Het wordt gebruikt met de OpenAI-modellen en splitst tekst op in tokens. Dit wordt gebruikt omdat de opgegeven strings soms wat lang zijn voor het gespecificeerde OpenAI-model. Dus, het splitst de tekst en codeert ze in tokens. Laten we nu aan het hoofdproject werken.

van langketen. inbeddingen . open importeren OpenAIEbeddings

model = OpenAIEbeddings ( openai_api_key = 'sk-YOUR_API_KEY”

tekenreeksen = ['
Dit is voor demonstratie. ', ' Dit snaar is Ook voor demonstratie. ', ' Dit is nog een demo snaar . ', ' Deze is laatst snaar . ']

resultaat = model.embed_documents(strings)

afdrukken(resultaat)

print(len(resultaat))

De klasse OpenAIEmbeddings wordt geïmporteerd uit het pakket 'langchain.embeddings.openai'. In het vorige voorbeeld hebben we de API-sleutel ingesteld als de omgevingsvariabele. Maar voor deze geven we het rechtstreeks door aan de constructeur. We hoeven de 'os' -module hier dus niet te importeren.

Na het aanroepen van het OpenAI-model, de OpenAIEmbeddings, geven we de geheime API-sleutel door. In de volgende regel worden de tekenreeksen gespecificeerd. Hier slaan we vier tekststrings op in de objectstrings. Deze strings zijn 'Dit is voor demonstratie', 'Deze string is ook voor demonstratie', 'Dit is nog een demo-string', en 'Dit is de laatste string.'

U kunt meerdere tekenreeksen specificeren door ze eenvoudig te scheiden met een komma. In het vorige geval werd de methode embed_text() aangeroepen, maar we kunnen deze hier niet gebruiken omdat deze alleen werkt voor de enkele tekenreeks. Om meerdere strings in te sluiten, is de methode die we hebben de embed_document(). We noemen het dus met het opgegeven OpenAI-model en tekststrings als argument. De uitvoer wordt bewaard in het resultaatobject. Ten slotte wordt de Python-methode print() gebruikt met het objectresultaat als parameter om de uitvoer weer te geven. We willen ook de lengte van deze zwevende waarden zien. We roepen dus de len() methode aan binnen de print() methode.

De opgehaalde uitvoer wordt geleverd in de volgende afbeelding:

Conclusie

Dit bericht besprak het concept van inbedding in LangChain. We leerden wat inbedding is en hoe het werkt. Een praktische implementatie van het insluiten van tekstreeksen wordt hier getoond. We hebben twee illustraties gemaakt. Het eerste voorbeeld werkte aan het ophalen van de inbedding van een enkele tekenreeks en het tweede voorbeeld begreep hoe de inbedding van meerdere invoerstrings kon worden verkregen met behulp van het OpenAI-inbeddingsmodel.