Creación de su propia interfaz de chat para sus datos SIN la API de OpenAI
Lo que puede hacer con los modelos de OpenAI es fascinante. Además, herramientas como LangChain y llama-index hacen que sea muy fácil poner en funcionamiento un sistema básico similar a ChatGPT en unas pocas líneas de código. Sin embargo, la mayoría de los ejemplos se basan en las API de OpenAI, lo que no es práctico en todos los casos, por ejemplo, porque no puede enviar sus datos a la nube o no puede gastar el dinero .

Como recientemente intenté hacer que un sistema básico se ejecutara usando la plataforma rodante de databrick y necesitaba un poco de prueba y error, aquí mi tutorial rápido sobre cómo usar un LLM abierto y personalizado para crear una interfaz de chat para sus propios datos.
Paso 1: recopile sus datos e instale las dependencias
Para este paso, solo recopile todos los datos que desea usar y colóquelos en un directorio en su máquina local. En mi caso, se trataba de un montón de archivos de rebajas que saqué de los documentos de nuestra herramienta de conservación de datos Spotlight (échale un vistazo también ;-)).
A continuación, instala todo lo que necesitas:
pip install torch transformers langchain llama-index====0.6.0.alpha3
Copie el siguiente código y ajuste la ruta a su carpeta de entrada. Utiliza la biblioteca de transformadores Huggingface para generar incrustaciones para la recuperación y la plataforma rodante del databrick para generar la salida 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()
Paso 3: Usa tu sistema
¡Ya hemos terminado! ¡ Ahora puede usar el objeto del motor de consulta para hacer preguntas sobre sus datos!
Un mensaje de ejemplo que probé en nuestros documentos es algo como esto:
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.