Byg din egen Chatbot med vidensbase

Har du en hjemmeside hvor folk ofte stille spørgsmål, kunne en chatbot måske være løsningen, det kan du nemt lave i Python.

Det kræver at du har en vidensbase i en eller anden form, i dette eksempel bruger vi nogle PDF filer.

Du kan prøve min version online her: Speakerbot

Jeg bruger LLM Longchain, som har en masse loaders udover PDF, Bla CSV mm Læs mere her Loaders.

Først skal vi indlæse alle modulerne:

import os

import glob

from PyPDF2 import PdfReader

from dotenv import load_dotenv

from langchain.embeddings.openai import OpenAIEmbeddings

from langchain.text_splitter import CharacterTextSplitter

from langchain.vectorstores import FAISS

from langchain.chains.question_answering import load_qa_chain

from langchain.llms import OpenAI

Vi have en API til CHATGPT / OPENAI, den kan du lave her: API KEY OPENAI

Den læser vi i vores Python program her:

load_dotenv()

os.environ[‘OPENAI_API_KEY’] = ‘DIN_API_KEY_SKRIVES HER’

llm = OpenAI()

chain = load_qa_chain(llm)

Vi skal have delt teksten op i chunken der kan søges i :

raw_text = ”

for pdf_file in glob.glob(os.path.join(pdf_folder, ‘*.pdf’)):

    reader = PdfReader(pdf_file)

    for i, page in enumerate(reader.pages):

        text = page.extract_text()

        if text:

            raw_text += text

text_splitter = CharacterTextSplitter(

    separator=”\n”,

    chunk_size=700,

    chunk_overlap=200,

    length_function=len,

)

texts = text_splitter.split_text(raw_text)

embeddings = OpenAIEmbeddings()

Vi bruger FAISS Modulet til at lave en Søgning.

docsearch = FAISS.from_texts(texts, embeddings)

Vi skal have OPEN AI til at lave et svar udfra vores Pdf’er

def query_index(prompt, template_prompt):

    modified_prompt = “Du er en hjælpsom chatrobot hos bekent.dk, der kan svare på spørgsmål. Du skal kun svare faktuelt og rigtigt . Du svarer på dansk og må gerne linke til videoer, artikler og produkter.” + prompt

    docs = docsearch.similarity_search(modified_prompt)

    response = chain.run(question=modified_prompt, input_documents=docs)

    return response

Dette er hele vores chatbot program. Men vi skal også have lavet en et online interface, det har jeg valgt at gøre i streamlit.

Program 2 Bruger interface.

Igen starter vi med at læse modulerne ind.

import streamlit as st

from googledoc1 import query_index

import time

import datetime

Jeg logger alle spørgsmål i en tekst fil

def log_question_and_answer(question, answer, log_file=”log.txt”):

    timestamp = datetime.datetime.now().strftime(“%Y-%m-%d %H:%M:%S”)

    with open(log_file, “a”, encoding=”utf-8″) as f:

        f.write(f”{timestamp}\n”)

        f.write(f”Spørgsmål: {question}\n”)

        f.write(f”Svar: {answer}\n\n”)

og tilsidst kommer spørgsmål – svar funktionen:

st.set_page_config(page_title=”Stil et spørgsmål til Bekent’s robot leksikon”, page_icon=”🔈”, layout=”centered”)

st.title(“SpeakerBOT”)

template_prompt = “””

    Du er en hjælpsom chatrobot hos bekent.dk som er en dansk webshop der sælger højttaler og lydudstyr, der kan svare på spørgsmål udfra denne viden.

    Du skal kun svare faktuelt og rigtigt . Du svarer på dansk og må gerne linke til videoer, artikler og produkter.

    Hvis du ikke synes du kan svare korrekt skal du svare at: Jeg har ikke informationer til at svarer på dit spørgsmål, du er velkommen til at skrive til vores Kundeservice på kontakt@bekent.dk”.

“””

user_input = st.text_area(

    “NY MEDARBEJDER ! Jeg er under oplæring, håber du vil prøve mig af og være forstående overfor jeg kan svare forkert. Jeg svarer bedst hvis du beskriver dit spørgsmål godt og grundigt. Skriv dit spørgsmål her:”,

    height=50  # Juster højden efter behov

)

if st.button(“Spørg SpeakerBOT”):

    if user_input:

        with st.spinner(“Vent et øjeblik…”):

            response = query_index(user_input, template_prompt)

            time.sleep(2)  # Tilpas ventetiden efter behov

        # Log spørgsmål og svar

        log_question_and_answer(user_input, response)

        st.write(f”**Svar:** {response}”)

    else:

        st.warning(“Indtast venligst et spørgsmål.”)

Dette var min version af en chatbot der kan svarer udfra PDF filer…

Nu kan du starte din Chatbot ved at skrive streamlit run ogditfilnavn.py – rigtig god fornøjelse med din nye medarbejder.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

Please reload

Please Wait