สร้างส่วนต่อประสานการแชทของคุณเองกับข้อมูลของคุณโดยไม่ต้องใช้ OpenAI API

May 04 2023
สิ่งที่คุณสามารถทำได้กับโมเดลของ OpenAI นั้นน่าทึ่งมาก นอกจากนี้ เครื่องมือต่างๆ เช่น LangChain และ llama-index ยังช่วยให้ระบบพื้นฐานที่คล้ายกับ ChatGPT ใช้งานได้จริงโดยใช้โค้ดเพียงไม่กี่บรรทัด

สิ่งที่คุณสามารถทำได้กับโมเดลของ OpenAI นั้นน่าทึ่งมาก นอกจากนี้ เครื่องมือต่างๆ เช่นLangChainและllama-indexยังช่วยให้ระบบพื้นฐานที่คล้ายกับ ChatGPT ใช้งานได้จริงโดยใช้โค้ดเพียงไม่กี่บรรทัด อย่างไรก็ตาม ตัวอย่างส่วนใหญ่สร้าง บนAPI ของ OpenAI ซึ่งใช้ไม่ได้ในทุกกรณี เช่น เนื่องจากคุณไม่สามารถส่งข้อมูลของคุณไปยังคลาวด์ หรือคุณไม่สามารถใช้เงินได้

ค้นหาระบบของคุณด้วยวิธี ChatGPT บนข้อมูลของคุณเองและไม่ต้องใช้ OpenAI

เมื่อเร็ว ๆ นี้ฉันพยายามทำให้ระบบพื้นฐานทำงานโดยใช้ดอลลี่ของ databrickและต้องมีการลองผิดลองถูกเล็กน้อย ที่นี่ บทแนะนำสั้น ๆ ของฉันเกี่ยวกับวิธีใช้LLM แบบเปิดที่กำหนดเองเพื่อสร้างส่วนต่อประสานการแชทกับข้อมูลของคุณเอง!

ขั้นตอนที่ 1: รวบรวมข้อมูลของคุณและติดตั้งการอ้างอิง

สำหรับขั้นตอนนี้ เพียงรวบรวมข้อมูลทั้งหมดที่คุณต้องการใช้และวางลงในไดเร็กทอรีบนเครื่องของคุณ ในกรณีของฉัน ไฟล์เหล่านี้เป็นไฟล์มาร์กดาวน์จำนวนมากที่ฉันดึงมาจากเอกสารของเครื่องมือจัดการข้อมูลของเราอย่างSpotlight (ลองดูด้วย ;-))

ถัดไป ติดตั้งทุกสิ่งที่คุณต้องการ:

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

คัดลอกโค้ดต่อไปนี้และปรับพาธไปยังโฟลเดอร์อินพุตของคุณ มันใช้ ห้องสมุด Huggingface Transformersเพื่อสร้างการฝังสำหรับการดึงข้อมูลและดอลลี่ของ databrickเพื่อสร้างเอาต์พุตสุดท้าย

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.