Zbuduj własny interfejs czatu do swoich danych BEZ API OpenAI

May 04 2023
To, co możesz zrobić z modelami OpenAI, jest fascynujące. Ponadto narzędzia takie jak LangChain i llama-index bardzo ułatwiają uruchomienie podstawowego systemu podobnego do ChatGPT w kilku liniach kodu.

To, co możesz zrobić z modelami OpenAI, jest fascynujące. Ponadto narzędzia takie jak LangChain i llama-index bardzo ułatwiają uruchomienie podstawowego systemu podobnego do ChatGPT w kilku liniach kodu. Jednak większość przykładów opiera się na interfejsach API OpenAI, co nie we wszystkich przypadkach jest praktyczne, np. ponieważ nie można wysłać danych do chmury lub nie można wydać pieniędzy .

Zapytaj swój system w sposób podobny do ChatGPT na własnych danych i bez OpenAI.

Ponieważ ostatnio próbowałem uruchomić podstawowy system przy użyciu databrick's Dolly i wymagało to trochę prób i błędów, oto mój szybki samouczek dotyczący używania niestandardowego , otwartego LLM do budowania interfejsu czatu do własnych danych!

Krok 1: Zbierz swoje dane i zainstaluj zależności

W tym kroku po prostu zbierz wszystkie dane, których chcesz użyć, i umieść je w katalogu na komputerze lokalnym. W moim przypadku była to grupa plików przeceny, które wyciągnąłem z dokumentów naszego narzędzia do przechowywania danych Spotlight (sprawdź to też ;-)).

Następnie zainstaluj wszystko, czego potrzebujesz:

pip install torch transformers langchain llama-index====0.6.0.alpha3

Skopiuj poniższy kod i dostosuj ścieżkę do folderu wejściowego. Wykorzystuje bibliotekę transformatorów Huggingface do generowania osadzeń do wyszukiwania oraz dolly databrick do generowania końcowego wyniku.

from pathlib import Path
import torch
from transformers import pipeline
from langchain.llms.base import LLM
from llama_index import SimpleDirectoryReader, LangchainEmbedding, GPTVectorStoreIndex, PromptHelper, LLMPredictor, ServiceContext
from llama_index.langchain_helpers.text_splitter import TokenTextSplitter
from llama_index.node_parser.simple import SimpleNodeParser
from langchain.embeddings.huggingface import HuggingFaceEmbeddings

INPUT_FOLDER = "path/to/your/data/folder"

index_files = list(Path(INPUT_FOLDER).glob("*"))

max_input_size = 2048
num_output = 256
max_chunk_overlap = 20
prompt_helper = PromptHelper(max_input_size, num_output, max_chunk_overlap)


pipe = pipeline("text-generation", model="databricks/dolly-v2-3b", trust_remote_code=True, torch_dtype=torch.bfloat16, device_map="auto")
embed_model = LangchainEmbedding(HuggingFaceEmbeddings())

class CustomLLM(LLM):
    model_name = "databricks/dolly-v2-3b"

    def _call(self, prompt, stop = None):
        response = pipe(prompt, max_new_tokens=num_output)[0]["generated_text"]
        return response

    @property
    def _identifying_params(self):
        return {"name_of_model": self.model_name}

    @property
    def _llm_type(self):
        return "custom"

# define our LLM
llm_predictor = LLMPredictor(llm=CustomLLM())

node_parser = SimpleNodeParser(text_splitter=TokenTextSplitter(chunk_size=512, chunk_overlap=max_chunk_overlap))
prompt_helper = PromptHelper(max_input_size, num_output, max_chunk_overlap)
service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor, embed_model=embed_model, prompt_helper=prompt_helper, node_parser=node_parser, chunk_size_limit=512)
# Load your data
documents = SimpleDirectoryReader(input_files=index_files).load_data()

index = GPTVectorStoreIndex.from_documents(documents, service_context=service_context)

query_engine = index.as_query_engine()

Krok 3: Użyj swojego systemu

już skończyliśmy! Możesz teraz używać obiektu mechanizmu zapytań do zadawania pytań dotyczących Twoich danych!

Przykładowy monit , który wypróbowałem w naszych dokumentach, wygląda mniej więcej tak:

print(query_engine.query("Summarize typical use cases of the similarity map in few sentences."))

The Similarity Map helps to explore simulation similarities and find explanations for observable phenomens.
It can be used to group designs by similarity, find outliers and detect correlations between features and target values.