Создание собственного интерфейса чата для ваших данных БЕЗ OpenAI API
То, что вы можете делать с моделями OpenAI, завораживает. Кроме того, такие инструменты, как LangChain и llama-index, позволяют очень легко настроить и запустить базовую систему, подобную ChatGPT, с помощью нескольких строк кода. Однако большинство примеров основаны на API-интерфейсах OpenAI, что не всегда практично, например, потому что вы не можете отправить свои данные в облако или не можете потратить деньги .

Поскольку я недавно пытался запустить базовую систему, используя тележку databrick, и мне потребовалось немного проб и ошибок, вот мой краткий учебник о том, как использовать пользовательский открытый LLM для создания интерфейса чата для ваших собственных данных!
Шаг 1. Соберите данные и установите зависимости
Для этого шага просто соберите все данные, которые вы хотите использовать, и поместите их в каталог на вашем локальном компьютере. В моем случае это была куча файлов уценки, которые я вытащил из документации нашего инструмента для обработки данных Spotlight (проверьте его тоже ;-)).
Далее устанавливаем все необходимое:
pip install torch transformers langchain llama-index====0.6.0.alpha3
Скопируйте следующий код и измените путь к входной папке. Он использует библиотеку преобразователей Huggingface для создания вложений для извлечения и тележку блока данных для создания окончательного вывода.
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()
Шаг 3. Используйте свою систему
Мы уже закончили! Теперь вы можете использовать объект механизма запросов , чтобы задавать вопросы о ваших данных!
Пример подсказки, которую я пробовал в наших документах, выглядит примерно так:
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.