Inleiding: Grote taalmodellen (LLM's) hebben de ontwikkeling van applicaties gerevolutioneerd door krachtige mogelijkheden voor natuurlijke taalverwerking mogelijk te maken. Het integreren van LLM's met andere bronnen van berekeningen of kennis kan echter hun functionaliteit verder verbeteren. In dit artikel laten we u zien hoe u een eenvoudig script kunt gebruiken dat gebruik maakt van LangChain, een bibliotheek die is ontworpen om LLM's te combineren met verschillende tools en hulpprogramma's. We zullen specifiek laten zien hoe u ChatGPT, een van de LLM's, kunt gebruiken op uw eigen tekstbestanden om vraag- en antwoordfunctionaliteiten en chatbot-functionaliteiten mogelijk te maken.

Bron : https://github.com/techleadhd/chatgpt-retrieval

Stapsgewijze handleiding:

  1. Installatie en configuratie: Begin met het installeren van de LangChain-bibliotheek door het uitvoeren van "pip install langchain" of "conda install langchain -c conda-forge" in uw terminal.
  2. Importeren van bibliotheken: Importeer de benodigde bibliotheken in uw Python-script. Dit omvat "os", "sys", "openai" en verschillende modules van de LangChain-bibliotheek, zoals "RetrievalQA", "ChatOpenAI", "DirectoryLoader", "TextLoader", "OpenAIEmbeddings", "VectorstoreIndexCreator" en "Chroma".
  3. Instellen van de API-sleutel: Stel uw OpenAI API-sleutel in door deze toe te wijzen aan de omgevingsvariabele "OPENAI_API_KEY". Vervang "constants.APIKEY" in het script door uw daadwerkelijke API-sleutel.
  4. Laden en indexeren van gegevens: Definieer de bron van uw gegevens door een "TextLoader" of "DirectoryLoader" object te maken, afhankelijk van of u wilt werken met een enkel tekstbestand of een map met meerdere bestanden. Pas de loader dienovereenkomstig aan en geef het bestand of de map op.
  5. Creëren van de index: Maak een index met behulp van "VectorstoreIndexCreator" door de loader door te geven als parameter. Als u de index wilt cachen en hergebruiken, stelt u "PERSIST" in op True en geeft u een persistente map op. Anders stelt u "PERSIST" in op False.
  6. Initialiseren van de ChatGPT-LangChain Chain: Maak een instantie van een RetrievalQA-chain met behulp van "ChatOpenAI" als taalmodel (bijvoorbeeld model="gpt-3.5-turbo"). Specificeer de retriever als de eerder gemaakte index vector store met behulp van "as_retriever(search_kwargs={"k": 1})".
  7. Uitvoeren van zoekopdrachten: Geef een zoekopdracht op als argument voor het script, die kan worden doorgegeven via de opdrachtregel. Bijvoorbeeld, voer het script uit met "python script.py "Wat is de hoofdstad van Frankrijk?"". Het script zal het antwoord van ChatGPT afdrukken op basis van de verstrekte zoekopdracht.

Conclusie: Door de stappen in dit artikel te volgen en gebruik te maken van het meegeleverde script, kunt u eenvoudig ChatGPT en LangChain integreren om vraag- en antwoordtaken en chatbot-functionaliteiten uit te voeren op uw eigen tekstbestanden. De LangChain-bibliotheek biedt aanvullende functionaliteiten en integraties, waardoor u verschillende toepassingen van grote taalmodellen in uw projecten kunt verkennen. Raadpleeg de LangChain-documentatie voor meer details en geavanceerd gebruik.

ChatGPT-script met LangChain-integratie

import os
import sys

import openai
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
from langchain.document_loaders import DirectoryLoader, TextLoader
from langchain.embeddings import OpenAIEmbeddings
from langchain.indexes import VectorstoreIndexCreator
from langchain.llms import OpenAI
from langchain.vectorstores import Chroma

import constants

os.environ["OPENAI_API_KEY"] = constants.APIKEY

# Inschakelen om het model op schijf te cachen en opnieuw te gebruiken (voor herhaalde zoekopdrachten op dezelfde gegevens)
PERSIST = False

query = sys.argv[1]

if PERSIST and os.path.exists("persist"):
  print("Index wordt opnieuw gebruikt...\n")
  vectorstore = Chroma(persist_directory="persist", embedding_function=OpenAIEmbeddings())
  from langchain.indexes.vectorstore import VectorStoreIndexWrapper
  index = VectorStoreIndexWrapper(vectorstore=vectorstore)
else:
  loader = TextLoader('data.txt')
  # Deze code kan ook mappen importeren, inclusief verschillende bestandstypen zoals PDF's, met behulp van de DirectoryLoader.
  # loader = DirectoryLoader(".", glob="*.txt")
  if PERSIST:
    index = VectorstoreIndexCreator(vectorstore_kwargs={"persist_directory":"persist"}).from_loaders([loader])
  else:
    index = VectorstoreIndexCreator().from_loaders([loader])

chain = RetrievalQA.from_chain_type(
  llm=ChatOpenAI(model="gpt-3.5-turbo"),
  retriever=index.vectorstore.as_retriever(search_kwargs={"k": 1}),
)
print(chain.run(query))