Construindo sua própria interface de chat para seus dados SEM a API OpenAI
O que você pode fazer com os modelos da OpenAI é fascinante. Além disso, ferramentas como LangChain e llama-index facilitam muito a instalação e execução de um sistema básico do tipo ChatGPT em poucas linhas de código. No entanto, a maioria dos exemplos baseia-se nas APIs da OpenAI, o que não é prático em todos os casos, por exemplo, porque você não pode enviar seus dados para a nuvem ou não pode gastar o dinheiro .

Como recentemente tentei obter um sistema básico em execução usando o dolly do databrick e precisava de um pouco de tentativa e erro, aqui está meu rápido tutorial sobre como usar um LLM aberto personalizado para criar uma interface de bate-papo para seus próprios dados!
Etapa 1: coletar seus dados e instalar dependências
Para esta etapa, basta coletar todos os dados que deseja usar e colocá-los em um diretório em sua máquina local. No meu caso, foram vários arquivos de remarcação que extraí dos documentos de nossa ferramenta de curadoria de dados Spotlight (confira também ;-)).
Em seguida, instale tudo o que você precisa:
pip install torch transformers langchain llama-index====0.6.0.alpha3
Copie o código a seguir e ajuste o caminho para sua pasta de entrada. Ele usa a biblioteca de transformadores Huggingface para gerar incorporações para recuperação e dolly do databrick para gerar a saída final.
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()
Passo 3: Use seu sistema
Já terminamos! Agora você pode usar o objeto do mecanismo de consulta para fazer perguntas sobre seus dados!
Um prompt de exemplo que tentei em nossos documentos é algo como isto:
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.