Membangun antarmuka obrolan Anda sendiri ke data Anda TANPA OpenAI API

May 04 2023
Apa yang dapat Anda lakukan dengan model OpenAI sangat menarik. Juga, alat-alat seperti LangChain dan llama-index membuatnya sangat mudah untuk mengaktifkan dan menjalankan sistem dasar seperti ChatGPT dalam beberapa baris kode.

Apa yang dapat Anda lakukan dengan model OpenAI sangat menarik. Juga, alat-alat seperti LangChain dan llama-index membuatnya sangat mudah untuk mengaktifkan dan menjalankan sistem dasar seperti ChatGPT dalam beberapa baris kode. Namun, sebagian besar contoh dibangun di atas API OpenAI yang tidak praktis dalam semua kasus, misalnya karena Anda tidak dapat mengirim data ke awan atau Anda tidak dapat membelanjakan uangnya .

Kueri sistem Anda dengan cara seperti ChatGPT pada data Anda sendiri dan tanpa OpenAI.

Karena saya baru-baru ini mencoba menjalankan sistem dasar menggunakan dolly databrick dan diperlukan sedikit trial and error di sini tutorial singkat saya tentang cara menggunakan LLM kustom dan terbuka untuk membangun antarmuka obrolan ke data Anda sendiri!

Langkah 1: Kumpulkan data Anda dan instal dependensi

Untuk langkah ini, cukup kumpulkan semua data yang ingin Anda gunakan dan letakkan di direktori di mesin lokal Anda. Dalam kasus saya, ini adalah sekumpulan file penurunan harga yang saya ambil dari dokumen alat kurasi data Spotlight kami (lihat juga ;-)).

Selanjutnya, instal semua yang Anda butuhkan:

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

Salin kode berikut dan sesuaikan jalur ke folder input Anda. Ini menggunakan perpustakaan transformer Huggingface untuk menghasilkan embeddings untuk pengambilan dan dolly databrick untuk menghasilkan hasil akhir.

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()

Langkah 3: Gunakan sistem Anda

Kita sudah selesai! Anda sekarang dapat menggunakan objek mesin kueri untuk mengajukan pertanyaan tentang data Anda!

Contoh prompt yang saya coba pada dokumen kami adalah seperti ini:

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.