с API на Streamlit, Langchain, HuggingFace и VertexAI Palm

Данъкът върху стоките и услугите (GST) е сложна данъчна система и може да е трудно да се намерят отговори на конкретни въпроси. Тази средна история ще ви покаже как да създадете просто приложение с често задавани въпроси с API на Streamlit, Langchain, HuggingFace и VertexAI Palm.

Демонстрация

Ето един кратък връх на моя GST Query Bot, предназначен да се справи с всички ваши въпроси, свързани с GST, без усилие.

Кодът за приложението е достъпен на



Обяснение на кода

Приложението използва streamlit, a рамка на Python, използвана за изграждане на интерактивни уеб приложения с минимален код. Позволява на разработчиците да създават потребителски интерфейси и да обработват лесно въвеждането от потребителя. В този код Streamlit се използва за създаване на интерфейса на уеб приложението с често задавани въпроси за GST, включително формата за задаване на въпроси и показване на отговорите.

import streamlit as st

Импортира класовете VertexAI, PromptTemplate и LLMChain от библиотеката langchain. Тези класове се използват за изграждане на системи за отговори на въпроси.

VertexAI е библиотека в LangChain, която предоставя услуги за езикови модели. В този код той се използва за създаване на екземпляр на езиковия модел VertexAI, който се използва в модела RetrievalQA за отговаряне на въпроси.

LLMChain е клас в LangChain, който представлява верига от езикови модели. Използва се за създаване на екземпляр на модела RetrievalQA, който комбинира езиков модел с модел за извличане за отговаряне на въпроси.

FAISS е библиотека в рамките на LangChain, която осигурява ефективно търсене по сходство и групиране на вграждания. В този код той се използва за изграждане на модел за извличане, като се използват вгражданията, генерирани от заредените документи.

HuggingFaceHubEmbeddings е клас в рамките на LangChain, който се използва за генериране на вграждания с помощта на предварително обучени модели от центъра за модели на Hugging Face. В този код той се използва за генериране на вграждания за заредените документи.

RetrievalQA е клас в LangChain, който представлява базиран на извличане модел за отговаряне на въпроси. Той комбинира езиков модел с модел за извличане, за да намери най-подходящия отговор на даден въпрос. В този код той се използва за създаване на екземпляр на модела RetrievalQA, използвайки езиковия модел от VertexAI и модела за извличане, изграден с FAISS.

Също така импортира класовете CSVLoader, UnstructuredHTMLLoader и PyPDFLoader от библиотеката langchain. Тези класове се използват за зареждане на данни от CSV файлове, HTML файлове и PDF файлове.

from langchain.llms import VertexAI
from langchain import PromptTemplate, LLMChain
from langchain.document_loaders.csv_loader import CSVLoader
from langchain.document_loaders import UnstructuredHTMLLoader
from langchain.document_loaders import PyPDFLoader

Дефинира шаблон, който се използва за генериране на отговори на въпроси. Шаблонът включва подкана, която казва на езиковия модел, че отговорът трябва да бъде относно GST.

template = """
        You are a Goods and Services Tax (GST) Expert.  Give accurate answer to the following question.
        Under no circumstances do you give any answer outside of GST.
        
        ### QUESTION
        {question}
        ### END OF QUESTION
        
        Answer:
        """

Задава заглавието на приложението на „Често задавани въпроси за GST“.

st.title('GST FAQs')

Следната функция зарежда данните за често задаваните въпроси за GST от CSV файл, PDF файл и HTML файл. След това данните се индексират с помощта на FAISS и се създава верига RetrievalQA.

def build_QnA_db():
    loader = CSVLoader(file_path='./data/nlp_faq_engine_faqs.csv')
    docs = loader.load()

    # loader = PyPDFLoader("./data/Final-GST-FAQ-edition.pdf")
    # docs = loader.load_and_split()

    loader = UnstructuredHTMLLoader("data/cbic-gst_gov_in_fgaq.html")
    docs += loader.load()

    embeddings = HuggingFaceHubEmbeddings()
    db = FAISS.from_documents(docs, embeddings)
    retriver = db.as_retriever()
    llm = VertexAI()
    chain = RetrievalQA.from_chain_type(llm=llm, retriever=retriver, verbose=False, chain_type="stuff")
    return chain

Функцията build_QnA_db() отговаря за изграждането на базата данни с въпроси и отговори (QnA), използвана в уеб приложението GST FAQs. Ето стъпка по стъпка обяснение на функционирането му:

  1. Зареждане на данни от CSV файл: Функцията започва с използване на класа CSVLoader от библиотеката LangChain за зареждане на данни от CSV файл. Пътят на файла е посочен като ./data/nlp_faq_engine_faqs.csv. Този CSV файл съдържа често задавани въпроси (ЧЗВ), свързани с GST.
  2. Зареждане на данни от HTML файл: След това функцията използва класа UnstructuredHTMLLoader от LangChain, за да зареди допълнителни ЧЗВ, свързани с GST от HTML файл. Пътят на HTML файла е посочен като "data/cbic-gst_gov_in_fgaq.html".
  3. Генериране на вграждания: След зареждане на данните, функцията използва класа HuggingFaceHubEmbeddings от LangChain, за да генерира вграждания за заредените документи. Тези вграждания улавят семантичното значение на текста и се използват за търсене по сходство в модела за извличане.
  4. Изграждане на модела за извличане: След това функцията използва класа FAISS от LangChain, за да изгради модел за извличане. Моделът за извличане се създава с помощта на вгражданията, генерирани в предишната стъпка. FAISS осигурява ефикасно търсене по сходство и възможности за групиране, които са от съществено значение за извличане на най-подходящите отговори на потребителски въпроси.
  5. Създаване на модела RetrievalQA: И накрая, функцията създава екземпляр на класа RetrievalQA от LangChain. Моделът RetrievalQA комбинира езиков модел с модела за извличане, изграден с помощта на FAISS. В този случай езиковият модел се предоставя от класа VertexAI от LangChain. Моделът RetrievalQA е отговорен за изпълнението на процеса на отговаряне на въпроси чрез намиране на най-подходящия отговор от базата данни QnA въз основа на въпроса, въведен от потребителя.
  6. Връщане на QnA веригата: Функцията връща създадения RetrievalQA модел, който представлява QnA веригата. След това тази верига се съхранява в състояние на сесия Streamlit за бъдеща употреба.

Функцията build_QnA_db() играе решаваща роля при настройването на базата данни QnA и модела за извличане, използван в уеб приложението с често задавани въпроси за GST. Той зарежда ЧЗВ от различни източници, генерира вграждания и изгражда модела за извличане, за да даде възможност за точен и уместен отговор на въпроси.

След като веригата е изградена, можем да я използваме многократно, без да я заселваме отново. Така следващата функция приема въпрос като вход и връща отговор от базата данни с ЧЗВ. Отговорът се генерира чрез пускане на въпроса през веригата RetrievalQA.

def generate_response_from_db(question):
    chain = st.session_state["chain"]
    response = chain.run(question)
    st.info(response)

Формулярът my_form позволява на потребителите да въведат въпрос относно GST. Когато потребителят изпрати формуляра, функцията generate_response_from_db() се извиква, за да генерира отговор.

with st.form('my_form'):
    text = st.text_area('Ask Question:', '... about GST')
    submitted = st.form_submit_button('Submit')
    if submitted:
        generate_response_from_db(text)

За да стартирате приложението, можете да запишете горния код като Python файл и след това да го стартирате от командния ред. Например, ако сте запазили кода като gst_faqs.py, ще го стартирате по следния начин:

python gst_faqs.py

След това приложението ще се отвори във вашия браузър. След това можете да задавате въпроси относно GST и приложението ще генерира отговори от базата данни с често задавани въпроси.

Препратки